Index: trunk/src/org/openstreetmap/josm/gui/JosmUserIdentityManager.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/JosmUserIdentityManager.java	(revision 5438)
+++ trunk/src/org/openstreetmap/josm/gui/JosmUserIdentityManager.java	(revision 5439)
@@ -59,5 +59,15 @@
         if (instance == null) {
             instance = new JosmUserIdentityManager();
-            instance.initFromPreferences();
+            if (Main.pref.get("osm-server.auth-method").equals("oauth")) {
+                try {
+                    instance.initFromOAuth(Main.parent);
+                } catch (Throwable t) {
+                    t.printStackTrace();
+                    // Fall back to preferences if OAuth identification fails for any reason
+                    instance.initFromPreferences();
+                }
+            } else {
+                instance.initFromPreferences();
+            }
             Main.pref.addPreferenceChangeListener(instance);
         }
@@ -67,4 +77,6 @@
     private String userName;
     private UserInfo userInfo;
+    private boolean accessTokenKeyChanged;
+    private boolean accessTokenSecretChanged;
 
     private JosmUserIdentityManager() {
@@ -183,5 +195,5 @@
             }
         } else {
-            if (!userName.equals(this.userName)) {
+            if (userName != null && !userName.equals(this.userName)) {
                 setPartiallyIdentified(userName);
             } else {
@@ -238,7 +250,6 @@
             }
             return;
-        }
-
-        if (evt.getKey().equals("osm-server.url")) {
+            
+        } else if (evt.getKey().equals("osm-server.url")) {
             if (!(evt.getNewValue() instanceof StringSetting)) return;
             String newValue = ((StringSetting) evt.getNewValue()).getValue();
@@ -248,4 +259,22 @@
                 setPartiallyIdentified(getUserName());
             }
+            
+        } else if (evt.getKey().equals("oauth.access-token.key")) {
+            accessTokenKeyChanged = true;
+            
+        } else if (evt.getKey().equals("oauth.access-token.secret")) {
+            accessTokenSecretChanged = true;
+        }
+        
+        if (accessTokenKeyChanged && accessTokenSecretChanged) {
+            accessTokenKeyChanged = false;
+            accessTokenSecretChanged = false;
+            if (Main.pref.get("osm-server.auth-method").equals("oauth")) {
+                try {
+                    instance.initFromOAuth(Main.parent);
+                } catch (Throwable t) {
+                    t.printStackTrace();
+                }
+            }
         }
     }
Index: trunk/src/org/openstreetmap/josm/gui/dialogs/changeset/ChangesetCacheManager.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/dialogs/changeset/ChangesetCacheManager.java	(revision 5438)
+++ trunk/src/org/openstreetmap/josm/gui/dialogs/changeset/ChangesetCacheManager.java	(revision 5439)
@@ -532,12 +532,7 @@
         public void actionPerformed(ActionEvent arg0) {
             JosmUserIdentityManager im = JosmUserIdentityManager.getInstance();
-            if (Main.pref.get("osm-server.auth-method").equals("oauth")) {
-                im.initFromOAuth(ChangesetCacheManager.this);
-            } else {
-                im.initFromPreferences();
-                if (im.isAnonymous()) {
-                    alertAnonymousUser();
-                    return;
-                }
+            if (im.isAnonymous()) {
+                alertAnonymousUser();
+                return;
             }
             ChangesetQuery query = new ChangesetQuery();
