added missing hashCode implementation