added hashcode implementation everywhere with equals implementation