semi-final commit (just need to finish comments)