break things up to try to keep each class small and simple