Will add code comment and other stuff next weekend.