add annotations and javadoc