Added new classes to abstract out some of the more complex operations