Reorganizes and abstracts out into sep. classes.