refactor again and again
Javadoc