mega refactor
Merge branch 'feature_refactor'