Index: /trunk/src/org/openstreetmap/josm/data/UserIdentityManager.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/data/UserIdentityManager.java	(revision 15724)
+++ /trunk/src/org/openstreetmap/josm/data/UserIdentityManager.java	(revision 15725)
@@ -22,4 +22,5 @@
 import org.openstreetmap.josm.tools.CheckParameterUtil;
 import org.openstreetmap.josm.tools.JosmRuntimeException;
+import org.openstreetmap.josm.tools.ListenerList;
 import org.openstreetmap.josm.tools.Logging;
 
@@ -57,4 +58,5 @@
 
     private static UserIdentityManager instance;
+    private final ListenerList<UserIdentityListener> listeners = ListenerList.create();
 
     /**
@@ -97,4 +99,5 @@
         userName = null;
         userInfo = null;
+        fireUserIdentityChanged();
     }
 
@@ -115,4 +118,5 @@
         this.userName = trimmedUserName;
         userInfo = null;
+        fireUserIdentityChanged();
     }
 
@@ -135,4 +139,5 @@
         this.userName = trimmedUserName;
         this.userInfo = userInfo;
+        fireUserIdentityChanged();
     }
 
@@ -209,12 +214,12 @@
      */
     public void initFromPreferences() {
-        String userName = CredentialsManager.getInstance().getUsername();
+        String credentialsUserName = CredentialsManager.getInstance().getUsername();
         if (isAnonymous()) {
-            if (userName != null && !userName.trim().isEmpty()) {
-                setPartiallyIdentified(userName);
+            if (credentialsUserName != null && !credentialsUserName.trim().isEmpty()) {
+                setPartiallyIdentified(credentialsUserName);
             }
         } else {
-            if (userName != null && !userName.equals(this.userName)) {
-                setPartiallyIdentified(userName);
+            if (credentialsUserName != null && !credentialsUserName.equals(this.userName)) {
+                setPartiallyIdentified(credentialsUserName);
             }
             // else: same name in the preferences as JOSM already knows about.
@@ -312,3 +317,26 @@
         }
     }
+
+    /**
+     * This listener is notified whenever the osm user is changed.
+     */
+    @FunctionalInterface
+    public interface UserIdentityListener {
+        /**
+         * The current user was changed.
+         */
+        void userIdentityChanged();
+    }
+
+    /**
+     * Add a listener that listens to changes of the current user.
+     * @param listener The listener
+     */
+    public void addListener(UserIdentityListener listener) {
+        listeners.addListener(listener);
+    }
+
+    private void fireUserIdentityChanged() {
+        listeners.fireEvent(UserIdentityListener::userIdentityChanged);
+    }
 }
Index: /trunk/src/org/openstreetmap/josm/gui/MainFrame.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/MainFrame.java	(revision 15724)
+++ /trunk/src/org/openstreetmap/josm/gui/MainFrame.java	(revision 15725)
@@ -21,4 +21,5 @@
 import javax.swing.JPanel;
 
+import org.openstreetmap.josm.data.UserIdentityManager;
 import org.openstreetmap.josm.gui.layer.LayerManager.LayerAddEvent;
 import org.openstreetmap.josm.gui.layer.LayerManager.LayerChangeListener;
@@ -103,5 +104,6 @@
         MainApplication.getLayerManager().addActiveLayerChangeListener(e -> refreshTitle());
         MainApplication.getLayerManager().addAndFireLayerChangeListener(new ManageLayerListeners());
-
+        UserIdentityManager.getInstance().addListener(this::refreshTitle);
+        Config.getPref().addKeyPreferenceChangeListener("draw.show-user", e -> refreshTitle());
         refreshTitle();
 
@@ -166,5 +168,10 @@
         boolean dirty = editLayer != null && (editLayer.requiresSaveToFile()
                 || (editLayer.requiresUploadToServer() && !editLayer.isUploadDiscouraged()));
-        setTitle((dirty ? "* " : "") + tr("Java OpenStreetMap Editor"));
+        String userInfo = UserIdentityManager.getInstance().getUserName();
+        if (userInfo != null && Config.getPref().getBoolean("draw.show-user", false))
+            userInfo = tr(" ({0})", "@" + userInfo);
+        else
+            userInfo = "";
+        setTitle((dirty ? "* " : "") + tr("Java OpenStreetMap Editor") + userInfo);
         getRootPane().putClientProperty("Window.documentModified", dirty);
     }
Index: /trunk/src/org/openstreetmap/josm/gui/preferences/display/LafPreference.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/preferences/display/LafPreference.java	(revision 15724)
+++ /trunk/src/org/openstreetmap/josm/gui/preferences/display/LafPreference.java	(revision 15725)
@@ -81,4 +81,5 @@
     VerticallyScrollablePanel panel;
     private final JCheckBox showSplashScreen = new JCheckBox(tr("Show splash screen at startup"));
+    private final JCheckBox showUser = new JCheckBox(tr("Show user name in title"));
     private final JCheckBox showID = new JCheckBox(tr("Show object ID in selection lists"));
     private final JCheckBox showVersion = new JCheckBox(tr("Show object version in selection lists"));
@@ -130,4 +131,8 @@
         panel.add(showSplashScreen, GBC.eop().insets(20, 0, 0, 0));
 
+        // Show user name in title
+        showUser.setToolTipText(tr("Show user name in title"));
+        showUser.setSelected(Config.getPref().getBoolean("draw.show-user", false));
+
         // Show ID in selection
         showID.setToolTipText(tr("Show object ID in selection lists"));
@@ -151,4 +156,5 @@
         ExpertToggleAction.addVisibilitySwitcher(modeless);
 
+        panel.add(showUser, GBC.eop().insets(20, 0, 0, 0));
         panel.add(showID, GBC.eop().insets(20, 0, 0, 0));
         panel.add(showVersion, GBC.eop().insets(20, 0, 0, 0));
@@ -216,4 +222,5 @@
         boolean mod = false;
         Config.getPref().putBoolean("draw.splashscreen", showSplashScreen.isSelected());
+        Config.getPref().putBoolean("draw.show-user", showUser.isSelected());
         Config.getPref().putBoolean("osm-primitives.showid", showID.isSelected());
         Config.getPref().putBoolean("osm-primitives.showversion", showVersion.isSelected());
