initial commit, needs more comments and scaladocs