refactor, lets simplify, I am going to broad. Stick to the prototype requirements