Beginnings of refactor for better design
Refactor for better design done

Same features as what is currently on master, but better design