Much better hashcode implemetnation