refactored a bit. removed two classes for now until they are actually needed. if