for verb in ('setattr', 'do', 'doafter'):
             for task, tok_names in [t for t in ret['_tasks'].items()
                                     if t[0].verb == verb]:
-                node = self
+                node: Any = self
                 for step in task.path:
                     key = ret[step] if step.isupper() else step
                     node = (node[key] if isinstance(node, Dict)
                 for tok_name in tok_names:
                     if task.verb == 'setattr':
                         setattr(node, tok_name, ret[tok_name])
+                    elif tok_name:
+                        node(ret[tok_name])
                     else:
-                        getattr(node, tok_name)()
+                        node()
         if ret['_verb'] == '001':   # RPL_WELCOME
             for name in self._autojoins:
                 self.send('JOIN', name)
                 else:
                     key, data = _Dict.key_val_from_eq_str(item)
                     self.db.isupport[key] = data
-        elif ret['_verb'] == '353':  # RPL_NAMREPLY
-            self.db.channels[ret['channel']].add_from_namreply(ret['names'])
-        elif ret['_verb'] == '372':  # RPL_MOTD
-            self.db.motd.append(ret['line'])
         elif ret['_verb'] == '401':  # ERR_NOSUCHNICK
             raise TargetUserOffline(ret['missing'])
         elif ret['_verb'] == '432':  # ERR_ERRONEOUSNICKNAME
 
         '372',  # RPL_MOTD
         _MsgTok.SERVER,
         ((_MsgTok.NICKNAME, 'setattr_db.users.me:nick'),
-         (_MsgTok.ANY, ':line'))),
+         (_MsgTok.ANY, 'do_db.motd.append:line'))),
 
     _MsgParseExpectation(
         '376',  # RPL_ENDOFMOTD
         _MsgTok.SERVER,
         ((_MsgTok.NICKNAME, 'setattr_db.users.me:nick'),
          _MsgTok.ANY),  # comment
-        bonus_tasks=('do_db.motd:complete',)),
+        bonus_tasks=('do_db.motd.complete:',)),
 
     _MsgParseExpectation(
         '396',  # RPL_VISIBLEHOST
         _MsgTok.SERVER,
         ((_MsgTok.NICKNAME, 'setattr_db.users.me:nick'),
          (_MsgTok.ANY, 'setattr_db:sasl_auth_state')),
-        bonus_tasks=('do_caps:end_negotiation',)),
+        bonus_tasks=('do_caps.end_negotiation:',)),
 
     _MsgParseExpectation(
         '904',  # ERR_SASLFAIL
         _MsgTok.SERVER,
         ((_MsgTok.NICKNAME, 'setattr_db.users.me:nick'),
          (_MsgTok.ANY, 'setattr_db:sasl_auth_state')),
-        bonus_tasks=('do_caps:end_negotiation',)),
+        bonus_tasks=('do_caps.end_negotiation:',)),
 
     _MsgParseExpectation(
         'AUTHENTICATE',
          (_MsgTok.NICK_USER_HOST,
           'skipnuh_,setattr_db.channels.CHAN.topic:who'),
          (_MsgTok.ANY, ':timestamp')),
-        bonus_tasks=('doafter_db.channels.CHAN.topic:complete',)),
+        bonus_tasks=('doafter_db.channels.CHAN.topic.complete:',)),
 
     _MsgParseExpectation(
         '353',  # RPL_NAMREPLY
         _MsgTok.SERVER,
         ((_MsgTok.NICKNAME, 'setattr_db.users.me:nick'),
          '@',
-         (_MsgTok.CHANNEL, ':channel'),
-         (_MsgTok.LIST, ':names'))),
+         (_MsgTok.CHANNEL, ':CHANNEL'),
+         (_MsgTok.LIST, 'do_db.channels.CHANNEL.add_from_namreply:names'))),
     _MsgParseExpectation(
         '353',  # RPL_NAMREPLY
         _MsgTok.SERVER,
         ((_MsgTok.NICKNAME, 'setattr_db.users.me:nick'),
          '=',
-         (_MsgTok.CHANNEL, ':channel'),
-         (_MsgTok.LIST, ':names'))),
+         (_MsgTok.CHANNEL, ':CHANNEL'),
+         (_MsgTok.LIST, 'do_db.channels.CHANNEL.add_from_namreply:names'))),
 
     _MsgParseExpectation(
         '366',  # RPL_ENDOFNAMES
         ((_MsgTok.NICKNAME, 'setattr_db.users.me:nick'),
          (_MsgTok.CHANNEL, ':CHAN'),
          _MsgTok.ANY),  # comment
-        bonus_tasks=('doafter_db.channels.CHAN.user_ids:complete',)),
+        bonus_tasks=('doafter_db.channels.CHAN.user_ids.complete:',)),
 
     _MsgParseExpectation(
         'JOIN',
         'ERROR',
         _MsgTok.NONE,
         ((_MsgTok.ANY, 'setattr_db:connection_state'),),
-        bonus_tasks=('doafter_:close',)),
+        bonus_tasks=('doafter_close:',)),
 
     _MsgParseExpectation(
         'PING',
         (_MsgTok.NICK_USER_HOST, 'setattr_db.channels.CHAN.topic:who'),
         ((_MsgTok.CHANNEL, ':CHAN'),
          (_MsgTok.ANY, 'setattr_db.channels.CHAN.topic:what')),
-        bonus_tasks=('doafter_db.channels.CHAN.topic:complete',)),
+        bonus_tasks=('doafter_db.channels.CHAN.topic.complete:',)),
 
     _MsgParseExpectation(
         'QUIT',