Working version.
Implemented everything.
Commit messages are effort.