Initial commit, basic functionality and some tests