better controller structure