Added javadoc to explain the weird decisions I made