initial commit, still needs scaladoc and comments