Index: trunk/src/org/openstreetmap/josm/Main.java
===================================================================
--- trunk/src/org/openstreetmap/josm/Main.java	(revision 1285)
+++ trunk/src/org/openstreetmap/josm/Main.java	(revision 1286)
@@ -420,6 +420,9 @@
 
         Dimension screenDimension = Toolkit.getDefaultToolkit().getScreenSize();
+	String geometry = Main.pref.get("gui.geometry");
         if (args.containsKey("geometry")) {
-            String geometry = args.get("geometry").iterator().next();
+            geometry = args.get("geometry").iterator().next();
+	}
+	if (geometry.length() != 0) {
             final Matcher m = Pattern.compile("(\\d+)x(\\d+)(([+-])(\\d+)([+-])(\\d+))?").matcher(geometry);
             if (m.matches()) {
@@ -436,4 +439,8 @@
                 }
                 bounds = new Rectangle(x,y,w,h);
+		if(!Main.pref.get("gui.geometry").equals(geometry)) {
+		    // remember this geometry
+		    Main.pref.put("gui.geometry", geometry);
+		}
             } else
                 System.out.println("Ignoring malformed geometry: "+geometry);
@@ -548,3 +555,17 @@
         return Locale.getDefault().getLanguage() + ":";
     }
+
+    static public void saveGuiGeometry() {
+	// if the gui.geometry preference is already set,
+	// save the current window geometry
+	String curGeometryPref = pref.get("gui.geometry");
+	if(curGeometryPref.length() != 0) {
+	    Rectangle bounds = parent.getBounds();
+	    pref.put("gui.geometry",
+		     (int)bounds.getWidth() +
+		     "x" + (int)bounds.getHeight() +
+		     "+" + (int)bounds.getX() +
+		     "+" + (int)bounds.getY());
+	}
+    }
 }
Index: trunk/src/org/openstreetmap/josm/actions/ExitAction.java
===================================================================
--- trunk/src/org/openstreetmap/josm/actions/ExitAction.java	(revision 1285)
+++ trunk/src/org/openstreetmap/josm/actions/ExitAction.java	(revision 1286)
@@ -25,6 +25,8 @@
 
     public void actionPerformed(ActionEvent e) {
-        if (!Main.breakBecauseUnsavedChanges())
+        if (!Main.breakBecauseUnsavedChanges()) {
+            Main.saveGuiGeometry();
             System.exit(0);
+	}
     }
 }
Index: trunk/src/org/openstreetmap/josm/gui/MainApplication.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/MainApplication.java	(revision 1285)
+++ trunk/src/org/openstreetmap/josm/gui/MainApplication.java	(revision 1286)
@@ -56,4 +56,5 @@
                 if (Main.breakBecauseUnsavedChanges())
                     return;
+                Main.saveGuiGeometry();
                 System.exit(0);
             }
@@ -215,5 +216,5 @@
         splash.closeSplash();
 
-        if (!args.containsKey("no-fullscreen") && !args.containsKey("geometry") && Toolkit.getDefaultToolkit().isFrameStateSupported(JFrame.MAXIMIZED_BOTH))
+        if (!args.containsKey("no-fullscreen") && !args.containsKey("geometry") && Main.pref.get("gui.geometry") == null && Toolkit.getDefaultToolkit().isFrameStateSupported(JFrame.MAXIMIZED_BOTH))
             mainFrame.setExtendedState(JFrame.MAXIMIZED_BOTH);
 
