Abstracted all classes for usability reasons