please add javadoc to explain the purpose of this class