WIP: try using reducers framework. currently results in slowdowns.