clean up/optimize equals() and hashCode() methods