Index: src/XMPPJID.m ================================================================== --- src/XMPPJID.m +++ src/XMPPJID.m @@ -239,17 +239,30 @@ if (![object isKindOfClass: [XMPPJID class]]) return NO; JID = object; - if ([_node isEqual: JID->_node] && [_domain isEqual: JID->_domain] && - [_resource isEqual: JID->_resource]) + // Node and resource may be nil + if ((_node == JID->_node || [_node isEqual: JID->_node]) && + [_domain isEqual: JID->_domain] && + (_resource == JID->_resource || [_resource isEqual: JID->_resource]) + ) return YES; return NO; } - (uint32_t) hash { - return [[self fullJID] hash]; + uint32_t hash; + + OF_HASH_INIT(hash); + + OF_HASH_ADD_HASH(hash, [_node hash]); + OF_HASH_ADD_HASH(hash, [_domain hash]); + OF_HASH_ADD_HASH(hash, [_resource hash]); + + OF_HASH_FINALIZE(hash); + + return hash; } @end