NICKNAME = auto()
     NONE = auto()
     SERVER = auto()
-    USER_ADDRESS = auto()
+    NICK_USER_HOST = auto()
 
 
 _MsgTokGuide = str | _MsgTok | tuple[str | _MsgTok, str]
     _MsgParseExpectation(_MsgTok.SERVER,
                          '396',  # RPL_VISIBLEHOST
                          ((_MsgTok.NICKNAME, 'set_db_attr:nickname'),
-                          (_MsgTok.ANY, ':host_maybe_w_user'),
+                          (_MsgTok.SERVER, 'set_db_attr:client_host'),
                           _MsgTok.ANY)),
 ]
 
     _MsgParseExpectation(_MsgTok.SERVER,
                          '900',  # RPL_LOGGEDIN
                          ((_MsgTok.NICKNAME, 'set_db_attr:nickname'),
-                          (_MsgTok.USER_ADDRESS, ':full_address'),
+                          (_MsgTok.NICK_USER_HOST, ':full_address'),
                           (_MsgTok.ANY, 'set_db_attr:sasl_account'),
                           _MsgTok.ANY)),
     _MsgParseExpectation(_MsgTok.SERVER,
                          (_MsgTok.NICKNAME,
                           (_MsgTok.NICKNAME, ':used'),
                           _MsgTok.ANY)),
-    _MsgParseExpectation((_MsgTok.USER_ADDRESS, ':named'),
+    _MsgParseExpectation((_MsgTok.NICK_USER_HOST, ':named'),
                          'NICK',
                          ((_MsgTok.NICKNAME, ':nickname'),)),
 ]
                          ((_MsgTok.NICKNAME, 'set_db_attr:nickname'),
                           (_MsgTok.CHANNEL, ':channel'),
                           _MsgTok.ANY)),
-    _MsgParseExpectation((_MsgTok.USER_ADDRESS, ':joiner'),
+    _MsgParseExpectation((_MsgTok.NICK_USER_HOST, ':joiner'),
                          'JOIN',
                          ((_MsgTok.CHANNEL, ':channel'),)),
-    _MsgParseExpectation((_MsgTok.USER_ADDRESS, ':parter'),
+    _MsgParseExpectation((_MsgTok.NICK_USER_HOST, ':parter'),
                          'PART',
                          ((_MsgTok.CHANNEL, ':channel'),)),
-    _MsgParseExpectation((_MsgTok.USER_ADDRESS, ':parter'),
+    _MsgParseExpectation((_MsgTok.NICK_USER_HOST, ':parter'),
                          'PART',
                          ((_MsgTok.CHANNEL, ':channel'),
                           (_MsgTok.ANY, ':reason'))),
                          'NOTICE',
                          ((_MsgTok.NICKNAME, 'set_db_attr:nickname'),
                           (_MsgTok.ANY, ':message'))),
-    _MsgParseExpectation((_MsgTok.USER_ADDRESS, ':sender'),
+    _MsgParseExpectation((_MsgTok.NICK_USER_HOST, ':sender'),
                          'NOTICE',
                          ((_MsgTok.NICKNAME, 'set_db_attr:nickname'),
                           (_MsgTok.ANY, ':message'))),
-    _MsgParseExpectation((_MsgTok.USER_ADDRESS, ':sender'),
+    _MsgParseExpectation((_MsgTok.NICK_USER_HOST, ':sender'),
                          'NOTICE',
                          ((_MsgTok.CHANNEL, ':channel'),
                           (_MsgTok.ANY, ':message'))),
-    _MsgParseExpectation((_MsgTok.USER_ADDRESS, ':sender'),
+    _MsgParseExpectation((_MsgTok.NICK_USER_HOST, ':sender'),
                          'PRIVMSG',
                          ((_MsgTok.NICKNAME, 'set_db_attr:nickname'),
                           (_MsgTok.ANY, ':message'))),
-    _MsgParseExpectation((_MsgTok.USER_ADDRESS, ':sender'),
+    _MsgParseExpectation((_MsgTok.NICK_USER_HOST, ':sender'),
                          'PRIVMSG',
                          ((_MsgTok.CHANNEL, ':channel'),
                           (_MsgTok.ANY, ':message'))),
                          'MODE',
                          ((_MsgTok.NICKNAME, 'set_db_attr:nickname'),
                           (_MsgTok.ANY, 'set_db_attr:user_modes'))),
-    _MsgParseExpectation(_MsgTok.USER_ADDRESS,
+    _MsgParseExpectation(_MsgTok.NICK_USER_HOST,
                          'MODE',
                          ((_MsgTok.NICKNAME, 'set_db_attr:nickname'),
                           (_MsgTok.ANY, 'set_db_attr:user_modes'))),
     _MsgParseExpectation(_MsgTok.NONE,
                          'PING',
                          ((_MsgTok.ANY, ':reply'),)),
-    _MsgParseExpectation((_MsgTok.USER_ADDRESS, ':quitter'),
+    _MsgParseExpectation((_MsgTok.NICK_USER_HOST, ':quitter'),
                          'QUIT',
                          ((_MsgTok.ANY, ':message'),)),
 ]
                         } if msg_tok[0] == '#' else None
             if ex_tok is _MsgTok.NICKNAME:
                 return msg_tok if msg_tok[0] not in '~&@%+# ' else None
-            if ex_tok is _MsgTok.USER_ADDRESS:
+            if ex_tok is _MsgTok.NICK_USER_HOST:
                 toks = msg_tok.split('!')
                 if len(toks) != 2:
                     return None
             self._db.append_completable('motd', ret['line'])
         elif ret['verb'] == '376':  # RPL_ENDOFMOTD
             self._db.declare_complete('motd')
-        elif ret['verb'] == '396':  # RPL_VISIBLEHOST
-            # '@'-split because <https://defs.ircdocs.horse/defs/numerics>
-            # claims: "<hostname> can also be in the form <user@hostname>"
-            self._db.client_host = ret['host_maybe_w_user'].split('@')[-1]
         elif ret['verb'] == '401':  # ERR_NOSUCHNICK
             self._log(f'{ret["target"]} not online', scope=LogScope.CHAT,
                       target=ret['target'], alert=True)