Included Guava preconditions and an explicit equals/hashCode.