diff --git a/src/org/openstreetmap/josm/Main.java b/src/org/openstreetmap/josm/Main.java
index 004c3c5..2f47385 100644
--- a/src/org/openstreetmap/josm/Main.java
+++ b/src/org/openstreetmap/josm/Main.java
@@ -414,12 +414,21 @@ abstract public class Main {
 	// save the current window geometry
 	String curGeometryPref = pref.get("gui.geometry");
 	if(curGeometryPref.length() != 0) {
+	    Dimension screenDimension = Toolkit.getDefaultToolkit().getScreenSize();
 	    Rectangle bounds = parent.getBounds();
-	    pref.put("gui.geometry",
-		     (int)bounds.getWidth() +
-		     "x" + (int)bounds.getHeight() +
-		     "+" + (int)bounds.getX() +
-		     "+" + (int)bounds.getY());
+	    int width = (int)bounds.getWidth();
+	    int height = (int)bounds.getHeight();
+	    int x = (int)bounds.getX();
+	    int y = (int)bounds.getY();
+	    if(width > screenDimension.width)
+		width = screenDimension.width;
+	    if(height > screenDimension.height)
+		width = screenDimension.height;
+	    if(x < 0)
+		x = 0;
+	    if(y < 0)
+		y = 0;
+	    pref.put("gui.geometry", width + "x" + height + "+" + x + "+" + y);
 	}
     }
 }
diff --git a/src/org/openstreetmap/josm/gui/MainApplication.java b/src/org/openstreetmap/josm/gui/MainApplication.java
index 5f5a5b9..2616afe 100644
--- a/src/org/openstreetmap/josm/gui/MainApplication.java
+++ b/src/org/openstreetmap/josm/gui/MainApplication.java
@@ -177,7 +177,7 @@ public class MainApplication extends Main {
         mainFrame.setVisible(true);
         splash.closeSplash();
 
-        if (!args.containsKey("no-fullscreen") && !args.containsKey("geometry") && Main.pref.get("gui.geometry") == null && Toolkit.getDefaultToolkit().isFrameStateSupported(JFrame.MAXIMIZED_BOTH))
+        if (!args.containsKey("no-fullscreen") && !args.containsKey("geometry") && Main.pref.get("gui.geometry").length() == 0 && Toolkit.getDefaultToolkit().isFrameStateSupported(JFrame.MAXIMIZED_BOTH))
             mainFrame.setExtendedState(JFrame.MAXIMIZED_BOTH);
 
         EventQueue.invokeLater(new Runnable(){
