Moved files around for a better hieracrchy and modified dependency injection to be more abstract