add javadocs
add unit tests