First commit

This is the first commit. The current version might include several
bugs.