big refactor on subclass. Now only implements what it must.