please add javadoc and explain the purpose of this class