lots of javadoc