CHANGE: lots of code cleanup with regards to who handles state changes and where it occurs