Created a sensible class hierarchy