Index: /trunk/src/org/openstreetmap/josm/actions/DialogsToggleAction.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/actions/DialogsToggleAction.java	(revision 6018)
+++ /trunk/src/org/openstreetmap/josm/actions/DialogsToggleAction.java	(revision 6019)
@@ -82,4 +82,5 @@
                 Main.pref.put("sidetoolbar.visible", selected);
             }
+            Main.map.mapView.rememberLastPositionOnScreen();
         }
     }
Index: /trunk/src/org/openstreetmap/josm/gui/MapView.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/MapView.java	(revision 6018)
+++ /trunk/src/org/openstreetmap/josm/gui/MapView.java	(revision 6019)
@@ -6,4 +6,5 @@
 import java.awt.AlphaComposite;
 import java.awt.Color;
+import java.awt.Dimension;
 import java.awt.Graphics;
 import java.awt.Graphics2D;
@@ -41,4 +42,5 @@
 import org.openstreetmap.josm.data.Preferences.PreferenceChangedListener;
 import org.openstreetmap.josm.data.SelectionChangedListener;
+import org.openstreetmap.josm.data.coor.EastNorth;
 import org.openstreetmap.josm.data.coor.LatLon;
 import org.openstreetmap.josm.data.osm.DataSet;
@@ -281,4 +283,16 @@
     }
 
+    // remebered geometry of the component
+    private Dimension oldSize = null;
+    private Point oldLoc = null;
+    
+    /*
+     * Call this method to keep map position on screen during next repaint
+     */
+    public void rememberLastPositionOnScreen() {
+        oldSize = getSize();
+        oldLoc  = getLocationOnScreen();
+    }
+    
     /**
      * Adds a GPX layer. A GPX layer is added below the lowest data layer.
@@ -526,4 +540,15 @@
             return; // no data loaded yet.
 
+        // if the position was remembered, we need to adjust center once before repainting
+        if (oldLoc != null && oldSize != null) {
+            Point l1  = getLocationOnScreen();
+            final EastNorth newCenter = new EastNorth(
+                    center.getX()+ (l1.x-oldLoc.x - (oldSize.width-getWidth())/2.0)*getScale(),
+                    center.getY()+ (oldLoc.y-l1.y + (oldSize.height-getHeight())/2.0)*getScale()
+                    );
+            oldLoc = null; oldSize = null;
+            zoomTo(newCenter);
+        }
+        
         List<Layer> visibleLayers = getVisibleLayersInZOrder();
 
