a lot more javadoc