First commit, add the basic functionality