restructure the solution some