added hashcode and equals