adding lots of JavaDoc