Index: /trunk/src/org/openstreetmap/josm/gui/preferences/server/OAuthAuthenticationPreferencesPanel.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/preferences/server/OAuthAuthenticationPreferencesPanel.java	(revision 16421)
+++ /trunk/src/org/openstreetmap/josm/gui/preferences/server/OAuthAuthenticationPreferencesPanel.java	(revision 16422)
@@ -34,4 +34,5 @@
 import org.openstreetmap.josm.io.OsmApi;
 import org.openstreetmap.josm.io.auth.CredentialsManager;
+import org.openstreetmap.josm.tools.GBC;
 import org.openstreetmap.josm.tools.ImageProvider;
 import org.openstreetmap.josm.tools.Logging;
@@ -47,5 +48,6 @@
  */
 public class OAuthAuthenticationPreferencesPanel extends JPanel implements PropertyChangeListener {
-    private final JCheckBox cbShowAdvancedParameters = new JCheckBox();
+    private final JCheckBox cbUseForAllRequests = new JCheckBox();
+    private final JCheckBox cbShowAdvancedParameters = new JCheckBox(tr("Display Advanced OAuth Parameters"));
     private final JCheckBox cbSaveToPreferences = new JCheckBox(tr("Save to preferences"));
     private final JPanel pnlAuthorisationMessage = new JPanel(new BorderLayout());
@@ -70,11 +72,10 @@
     protected JPanel buildAdvancedPropertiesPanel() {
         JPanel pnl = new JPanel(new GridBagLayout());
-        GridBagConstraints gc = new GridBagConstraints();
-
-        gc.anchor = GridBagConstraints.NORTHWEST;
-        gc.fill = GridBagConstraints.HORIZONTAL;
-        gc.weightx = 0.0;
-        gc.insets = new Insets(0, 0, 0, 3);
-        pnl.add(cbShowAdvancedParameters, gc);
+
+        cbUseForAllRequests.setText(tr("Use OAuth for all requests to {0}", OsmApi.getOsmApi().getServerUrl()));
+        cbUseForAllRequests.setToolTipText(tr("For user-based bandwith limit instead of IP-based one"));
+        pnl.add(cbUseForAllRequests, GBC.eol().fill(GBC.HORIZONTAL));
+
+        pnl.add(cbShowAdvancedParameters, GBC.eol().fill(GBC.HORIZONTAL));
         cbShowAdvancedParameters.setSelected(false);
         cbShowAdvancedParameters.addItemListener(
@@ -82,17 +83,5 @@
         );
 
-        gc.gridx = 1;
-        gc.weightx = 1.0;
-        JMultilineLabel lbl = new JMultilineLabel(tr("Display Advanced OAuth Parameters"));
-        lbl.setFont(lbl.getFont().deriveFont(Font.PLAIN));
-        pnl.add(lbl, gc);
-
-        gc.gridy = 1;
-        gc.gridx = 1;
-        gc.insets = new Insets(3, 0, 3, 0);
-        gc.fill = GridBagConstraints.BOTH;
-        gc.weightx = 1.0;
-        gc.weighty = 1.0;
-        pnl.add(pnlAdvancedProperties, gc);
+        pnl.add(pnlAdvancedProperties, GBC.eol().fill(GBC.HORIZONTAL).insets(0, 3, 0, 0));
         pnlAdvancedProperties.initialize(OsmApi.getOsmApi().getServerUrl());
         pnlAdvancedProperties.setBorder(
@@ -153,4 +142,5 @@
     public void initFromPreferences() {
         setApiUrl(OsmApi.getOsmApi().getServerUrl().trim());
+        cbUseForAllRequests.setSelected(OsmApi.USE_OAUTH_FOR_ALL_REQUESTS.get());
         refreshView();
     }
@@ -162,4 +152,5 @@
         OAuthAccessTokenHolder.getInstance().setSaveToPreferences(cbSaveToPreferences.isSelected());
         OAuthAccessTokenHolder.getInstance().save(CredentialsManager.getInstance());
+        OsmApi.USE_OAUTH_FOR_ALL_REQUESTS.put(cbUseForAllRequests.isSelected());
         pnlAdvancedProperties.rememberPreferences();
     }
Index: /trunk/src/org/openstreetmap/josm/io/OsmApi.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/io/OsmApi.java	(revision 16421)
+++ /trunk/src/org/openstreetmap/josm/io/OsmApi.java	(revision 16422)
@@ -31,4 +31,5 @@
 import org.openstreetmap.josm.data.osm.OsmPrimitive;
 import org.openstreetmap.josm.data.osm.OsmPrimitiveType;
+import org.openstreetmap.josm.data.preferences.BooleanProperty;
 import org.openstreetmap.josm.gui.progress.NullProgressMonitor;
 import org.openstreetmap.josm.gui.progress.ProgressMonitor;
@@ -69,4 +70,9 @@
      */
     public static final int MAX_DOWNLOAD_THREADS = 2;
+
+    /**
+     * Defines whether all OSM API requests should be signed with an OAuth token (user-based bandwith limit instead of IP-based one)
+     */
+    public static final BooleanProperty USE_OAUTH_FOR_ALL_REQUESTS = new BooleanProperty("oauth.use-for-all-requests", true);
 
     // The collection of instantiated OSM APIs
Index: /trunk/src/org/openstreetmap/josm/io/OsmServerReader.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/io/OsmServerReader.java	(revision 16421)
+++ /trunk/src/org/openstreetmap/josm/io/OsmServerReader.java	(revision 16422)
@@ -50,5 +50,7 @@
     public OsmServerReader() {
         try {
-            doAuthenticate = OsmApi.isUsingOAuth() && CredentialsManager.getInstance().lookupOAuthAccessToken() != null;
+            doAuthenticate = OsmApi.isUsingOAuth()
+                    && CredentialsManager.getInstance().lookupOAuthAccessToken() != null
+                    && OsmApi.USE_OAUTH_FOR_ALL_REQUESTS.get();
         } catch (CredentialsAgentException e) {
             Logging.warn(e);
