self._dict: dict[str, DictItem] = {}
         super().__init__(**kwargs)
 
-    def items(self) -> tuple[tuple[str, DictItem], ...]:
-        'Key-value pairs of item registrations.'
-        return tuple((k, v) for k, v in self._dict.items())
-
     def __getitem__(self, key: str) -> DictItem:
         return self._dict[key]
 
 
     def remove_user(self, user: '_User') -> None:
         'From .user_ids remove .nickname and declare .user_ids complete.'
-        user_id = self._userid_for_nickuserhost(user)
-        self.user_ids.remove(user_id, complete=True)
+        self.user_ids.remove(user.id_, complete=True)
         self.purge_users()
 
 
         'Create with nuh fields set.'
         return cls(nuh.nick, nuh.user, nuh.host)
 
+    @property
+    def id_(self) -> str:
+        'To be set to key inside dictionary if placed into one.'
+        return self._id_
+
+    @id_.setter
+    def id_(self, value: str) -> None:
+        self._id_ = value
+
 
 class _UpdatingServerCapability(_UpdatingMixin, ServerCapability):
     pass
 
 class _UpdatingUsersDict(_UpdatingDict[_UpdatingUser]):
 
+    def __getitem__(self, key: str) -> _UpdatingUser:
+        user = super().__getitem__(key)
+        user.id_ = key
+        return user
+
     def id_for_nickuserhost(self,
                             nickuserhost: NickUserHost,
                             create_if_none=False,
 
     def purge_users(self) -> None:
         'Remove from .users all not linked to by existing channels, except us.'
-        for id_, user in self.users.items():
-            if id_ != 'me' and not self.chans_of_user(user):
+        for id_ in self.users.keys():
+            if id_ != 'me' and not self.chans_of_user(id_):
                 del self.users[id_]
 
     def is_nick(self, nick: str) -> bool:
         assert toks[0][0] == '('
         return toks[1]
 
-    def chans_of_user(self, user: _User) -> dict[str, _UpdatingChannel]:
+    def chans_of_user(self, user_id: str) -> dict[str, _UpdatingChannel]:
         'Return dictionary of channels user is in.'
-        id_ = self.users.id_for_nickuserhost(user)
         return {k: self.channels[k] for k in self.channels.keys()
-                if id_ in self.channels[k].user_ids.completed}
+                if user_id in self.channels[k].user_ids.completed}
 
 
 class _CapsManager:
         elif ret['_verb'] == 'PING':
             self.send(IrcMessage(verb='PONG', params=(ret['reply'],)))
         elif ret['_verb'] == 'QUIT':
-            for ch_name, ch in self.db.chans_of_user(ret['quitter']).items():
+            for ch_name, ch in self.db.chans_of_user(ret['quitter'].id_
+                                                     ).items():
                 ch.remove_user(ret['quitter'])
                 self._log(f'{ret["quitter"]} quits: {ret["message"]}',
                           LogScope.CHAT, target=ch_name)