Commit before hardcore refactration
Re-organizing for compilability and Object-orientedness