Split functionality out into multiple classes.
Implemented new control method based on simulations.