moving some more stuff around as the design changes in response to feedback from the implementation