added a lot of class-implementation