Initial commit. More tests needs to be written.