- Moved some code around and changed some methods to its proper abstract
way.