design
Huge redesigning and refactoring