better design; more detailed