initial commit, contains rather a lot