Refactor for better design. Still implementing things