formatted
Seems to be implemented all pieces
Refactoring and formatting
added superclass