Further refactoring to simplify design - still not thrilled with it.