added equals & hashCode