Index: trunk/src/org/openstreetmap/josm/Main.java
===================================================================
--- trunk/src/org/openstreetmap/josm/Main.java	(revision 5141)
+++ trunk/src/org/openstreetmap/josm/Main.java	(revision 5142)
@@ -514,5 +514,5 @@
         geometry = WindowGeometry.mainWindow("gui.geometry",
             (args.containsKey("geometry") ? args.get("geometry").iterator().next() : null),
-            !args.containsKey("no-maximize"));
+            !args.containsKey("no-maximize") && Main.pref.getBoolean("gui.maximized", false));
     }
 
Index: trunk/src/org/openstreetmap/josm/tools/WindowGeometry.java
===================================================================
--- trunk/src/org/openstreetmap/josm/tools/WindowGeometry.java	(revision 5141)
+++ trunk/src/org/openstreetmap/josm/tools/WindowGeometry.java	(revision 5142)
@@ -182,12 +182,16 @@
                 return new WindowGeometry(new Point(x,y), new Dimension(w,h));
             } else {
-                System.out.println(tr("Ignoring malformed geometry: {0}", arg));
+                Main.warn(tr("Ignoring malformed geometry: {0}", arg));
             }
         }
         WindowGeometry def;
-        if(maximize)
+        if(maximize) {
             def = new WindowGeometry(screenDimension);
-        else
-            def = new WindowGeometry(screenDimension.getLocation(), new Dimension(1000, 740));
+        } else {
+            Point p = screenDimension.getLocation();
+            p.x += (screenDimension.width-1000)/2;
+            p.y += (screenDimension.height-740)/2;
+            def = new WindowGeometry(p, new Dimension(1000, 740));
+        }
         return new WindowGeometry(preferenceKey, def);
     }
@@ -315,9 +319,30 @@
             for (int i = 0; i < gc.length; i++) {
                 Rectangle b = gc[i].getBounds();
-                Rectangle is = b.intersection(g);
-                int s = is.width*is.height;
-                if(bounds == null || intersect < s) {
-                    intersect = s;
-                    bounds = b;
+                if(b.width/b.height >= 3) /* multiscreen with wrong definition */
+                {
+                    b.width /= 2;
+                    Rectangle is = b.intersection(g);
+                    int s = is.width*is.height;
+                    if(bounds == null || intersect < s) {
+                        intersect = s;
+                        bounds = b;
+                    }
+                    b = new Rectangle(b);
+                    b.x += b.width;
+                    is = b.intersection(g);
+                    s = is.width*is.height;
+                    if(bounds == null || intersect < s) {
+                        intersect = s;
+                        bounds = b;
+                    }
+                }
+                else
+                {
+                    Rectangle is = b.intersection(g);
+                    int s = is.width*is.height;
+                    if(bounds == null || intersect < s) {
+                        intersect = s;
+                        bounds = b;
+                    }
                 }
             }
