more documentation; also renamed some classes for clarity (I hope); have not tested