fixed hashcode and equals