Updated imports and dependencies
Updated classes to be more abstract so they can be used more widely