First commit, adding source code and tests