Initial refactor
Initial refactor