update equals+hashcode