Index: src/org/openstreetmap/josm/gui/preferences/projection/ProjectionPreference.java
===================================================================
--- src/org/openstreetmap/josm/gui/preferences/projection/ProjectionPreference.java	(revision 12296)
+++ src/org/openstreetmap/josm/gui/preferences/projection/ProjectionPreference.java	(working copy)
@@ -15,6 +15,7 @@
 import java.util.Map;
 
 import javax.swing.BorderFactory;
+import javax.swing.JButton;
 import javax.swing.JLabel;
 import javax.swing.JOptionPane;
 import javax.swing.JPanel;
@@ -66,8 +67,8 @@
         }
     }
 
-    private static List<ProjectionChoice> projectionChoices = new ArrayList<>();
-    private static Map<String, ProjectionChoice> projectionChoicesById = new HashMap<>();
+    private static final List<ProjectionChoice> projectionChoices = new ArrayList<>();
+    private static final Map<String, ProjectionChoice> projectionChoicesById = new HashMap<>();
 
     /**
      * WGS84: Directly use latitude / longitude values as x/y.
@@ -268,9 +269,12 @@
         return Collections.unmodifiableList(projectionChoices);
     }
 
-    private static final StringProperty PROP_PROJECTION = new StringProperty("projection", mercator.getId());
+    private static String projectionChoice;
+    private static final Map<String, Collection<String>> projectionChoicesSub = new HashMap<>();
+    
+    private static final StringProperty PROP_PROJECTION_DEFAULT = new StringProperty("projection.default", mercator.getId());
     private static final StringProperty PROP_COORDINATES = new StringProperty("coordinates", null);
-    private static final CollectionProperty PROP_SUB_PROJECTION = new CollectionProperty("projection.sub", null);
+    private static final CollectionProperty PROP_SUB_PROJECTION_DEFAULT = new CollectionProperty("projection.default.sub", null);
     public static final StringProperty PROP_SYSTEM_OF_MEASUREMENT = new StringProperty("system_of_measurement", "Metric");
     private static final String[] unitsValues = ALL_SYSTEMS.keySet().toArray(new String[ALL_SYSTEMS.size()]);
     private static final String[] unitsValuesTr = new String[unitsValues.length];
@@ -323,7 +327,7 @@
 
     @Override
     public void addGui(PreferenceTabbedPane gui) {
-        ProjectionChoice pc = setupProjectionCombo();
+        final ProjectionChoice pc = setupProjectionCombo();
 
         for (int i = 0; i < coordinatesCombo.getItemCount(); ++i) {
             if (coordinatesCombo.getItemAt(i).name().equals(PROP_COORDINATES.get())) {
@@ -357,6 +361,14 @@
         projectionCodeLabel.setLabelFor(projectionCode);
         projectionNameLabel.setLabelFor(projectionName);
 
+        JButton btnSetAsDefault = new JButton(tr("Set as default"));
+        projPanel.add(btnSetAsDefault, GBC.eol().insets(5, 10, 5, 5));
+        btnSetAsDefault.addActionListener(e -> {
+            String id = pc.getId();
+            Collection<String> prefs = pc.getPreferences(projSubPrefPanel);
+            setProjection(id, prefs, true);
+        });
+
         projPanel.add(new JSeparator(), GBC.eol().fill(GBC.HORIZONTAL).insets(0, 5, 0, 10));
         projPanel.add(new JLabel(tr("Display coordinates as")), GBC.std().insets(5, 5, 0, 5));
         projPanel.add(GBC.glue(5, 0), GBC.std().fill(GBC.HORIZONTAL));
@@ -401,7 +413,7 @@
         String id = pc.getId();
         Collection<String> prefs = pc.getPreferences(projSubPrefPanel);
 
-        setProjection(id, prefs);
+        setProjection(id, prefs, false);
 
         if (PROP_COORDINATES.put(((CoordinateFormat) coordinatesCombo.getSelectedItem()).name())) {
             CoordinateFormat.setCoordinateFormat((CoordinateFormat) coordinatesCombo.getSelectedItem());
@@ -414,10 +426,10 @@
     }
 
     public static void setProjection() {
-        setProjection(PROP_PROJECTION.get(), PROP_SUB_PROJECTION.get());
+        setProjection(PROP_PROJECTION_DEFAULT.get(), PROP_SUB_PROJECTION_DEFAULT.get(), false);
     }
 
-    public static void setProjection(String id, Collection<String> pref) {
+    public static void setProjection(String id, Collection<String> pref, boolean makeDefault) {
         ProjectionChoice pc = projectionChoicesById.get(id);
 
         if (pc == null) {
@@ -431,9 +443,14 @@
             pc = mercator;
         }
         id = pc.getId();
-        PROP_PROJECTION.put(id);
-        PROP_SUB_PROJECTION.put(pref);
-        Main.pref.putCollection("projection.sub."+id, pref);
+        if (makeDefault) {
+            PROP_PROJECTION_DEFAULT.put(id);
+            PROP_SUB_PROJECTION_DEFAULT.put(pref);
+            Main.pref.putCollection("projection.default.sub."+id, pref);
+        } else {
+            projectionChoice = id;
+            projectionChoicesSub.put(id, pref);
+        }
         pc.setPreferences(pref);
         Projection proj = pc.getProjection();
         Main.setProjection(proj);
@@ -466,11 +483,12 @@
      * @return the choice class for user selection
      */
     private ProjectionChoice setupProjectionCombo() {
+        String pcId = projectionChoice != null ? projectionChoice : PROP_PROJECTION_DEFAULT.get();
         ProjectionChoice pc = null;
         for (int i = 0; i < projectionCombo.getItemCount(); ++i) {
             ProjectionChoice pc1 = projectionCombo.getItemAt(i);
             pc1.setPreferences(getSubprojectionPreference(pc1));
-            if (pc1.getId().equals(PROP_PROJECTION.get())) {
+            if (pc1.getId().equals(pcId)) {
                 projectionCombo.setSelectedIndex(i);
                 selectedProjectionChanged(pc1);
                 pc = pc1;
@@ -489,7 +507,10 @@
     }
 
     private static Collection<String> getSubprojectionPreference(ProjectionChoice pc) {
-        return Main.pref.getCollection("projection.sub."+pc.getId(), null);
+        Collection<String> sessionValue = projectionChoicesSub.get(pc.getId());
+        if (sessionValue != null)
+            return sessionValue;
+        return Main.pref.getCollection("projection.default.sub."+pc.getId(), null);
     }
 
     @Override
