These classes look very similar to the classes defined above. Any way to DRY this up?