added toString, equals and hashCode