seperated the controller and factory from the module