whoops, last commit would not even compile
Is this a good use of an abstract class? Time will tell.