Need to redo to make it more oop