(Useful for subclass extension.)
         '''
-        first_run = not hasattr(self.conn_setup, 'nickname')
-        prefix = 'nickname'
-        if first_run or (nickname and nickname != self.conn_setup.nickname):
-            verb = ('set' if first_run
-                    else f'changed from "{self.conn_setup.nickname}"')
+        if nickname:
             self.conn_setup.nickname = nickname
-            self._log(f'{prefix} {verb} to "{nickname}"', stream=STREAM_ALL)
-        if first_run or nick_confirmed != self.nick_confirmed:
-            self.nick_confirmed = nick_confirmed
-            if not first_run:
-                self._log(
-                    f'{prefix} {"" if nick_confirmed else "un"}confirmed')
+        self.nick_confirmed = nick_confirmed
 
     def close(self) -> None:
         'Close both recv Loop and socket.'
 
         return self._new_window(stream)
 
     def update(self, **kwargs) -> bool:
-        'Apply settings in kwargs, follow represntation update triggres.'
-        for k, v in kwargs.items():
-            setattr(self, k, v)
+        'Apply settings in kwargs, follow representation update triggers.'
+        to_change = {}
+        for key, new_value in kwargs.items():
+            old_value = getattr(self, key)
+            if new_value != old_value:
+                to_change[key] = (old_value, new_value)
+        for key, vals in to_change.items():
+            self.log(msg=f'changing {key}: [{vals[0]}] -> [{vals[1]}]',
+                     stream=STREAM_SERVER)
+            setattr(self, key, vals[1])
         tainteds = False
-        if _PrivmsgPromptWidget.prefix_update_keys() & set(kwargs.keys()):
+        if _PrivmsgPromptWidget.prefix_update_keys() | set(to_change):
             for win in [w for w in self.windows
                         if isinstance(w, _PrivmsgWindow)]:
                 self._prompt_update(win)