Index: trunk/src/org/openstreetmap/josm/data/osm/visitor/paint/StyledMapRenderer.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/osm/visitor/paint/StyledMapRenderer.java	(revision 10853)
+++ trunk/src/org/openstreetmap/josm/data/osm/visitor/paint/StyledMapRenderer.java	(revision 10856)
@@ -703,6 +703,6 @@
         g.setFont(text.font);
 
-        int x = (int) (p.getInViewX() + text.xOffset);
-        int y = (int) (p.getInViewY() + text.yOffset);
+        int x = (int) (Math.round(p.getInViewX()) + text.xOffset);
+        int y = (int) (Math.round(p.getInViewY()) + text.yOffset);
         /**
          *
@@ -890,6 +890,6 @@
         }
 
-        double x = p.getInViewX();
-        double y = p.getInViewY();
+        double x = Math.round(p.getInViewX());
+        double y = Math.round(p.getInViewY());
         temporaryGraphics.translate(x, y);
         temporaryGraphics.rotate(theta);
Index: trunk/src/org/openstreetmap/josm/gui/MapViewState.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/MapViewState.java	(revision 10853)
+++ trunk/src/org/openstreetmap/josm/gui/MapViewState.java	(revision 10856)
@@ -216,4 +216,13 @@
     public MapViewPoint getCenter() {
         return getForView(viewWidth / 2.0, viewHeight / 2.0);
+    }
+
+    /**
+     * Gets the center of the view, rounded to a pixel coordinate
+     * @return The center position.
+     * @since 10856
+     */
+    public MapViewPoint getCenterAtPixel() {
+        return getForView(viewWidth / 2, viewHeight / 2);
     }
 
Index: trunk/src/org/openstreetmap/josm/gui/NavigatableComponent.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/NavigatableComponent.java	(revision 10853)
+++ trunk/src/org/openstreetmap/josm/gui/NavigatableComponent.java	(revision 10856)
@@ -294,5 +294,5 @@
      */
     public void zoomIn() {
-        zoomTo(getCenter(), scaleZoomIn());
+        zoomTo(state.getCenterAtPixel().getEastNorth(), scaleZoomIn());
     }
 
@@ -301,5 +301,5 @@
      */
     public void zoomOut() {
-        zoomTo(getCenter(), scaleZoomOut());
+        zoomTo(state.getCenterAtPixel().getEastNorth(), scaleZoomOut());
     }
 
@@ -408,5 +408,5 @@
      */
     public EastNorth getCenter() {
-        return state.getCenter().getEastNorth();
+        return state.getCenterAtPixel().getEastNorth();
     }
 
@@ -608,5 +608,5 @@
         if (!newCenter.equals(getCenter())) {
             EastNorth oldCenter = getCenter();
-            state = state.usingCenter(newCenter);
+            state = state.movedTo(state.getCenterAtPixel(), newCenter);
             if (!initial) {
                 firePropertyChange(PROPNAME_CENTER, oldCenter, newCenter);
@@ -617,5 +617,5 @@
             state = state.usingScale(newScale);
             // temporary. Zoom logic needs to be moved.
-            state = state.movedTo(state.getCenter(), newCenter);
+            state = state.movedTo(state.getCenterAtPixel(), newCenter);
             if (!initial) {
                 firePropertyChange(PROPNAME_SCALE, oldScale, newScale);
