added equals and hashCode