start factoring out and testing the reactive model