add hashcode support