more work on design refactor