Stage one refactor
Stage 1 refactor v2