added hashCode implementation