First commit. (some comments are missing in the code)