Start delegating work out among subclasses

Start to break up the work into a smarter fashion, to allow for a
simpler flow