add a lot of javadoc