Lots of improvement, commit before major modification