diff --git a/src/org/openstreetmap/josm/gui/MapViewState.java b/src/org/openstreetmap/josm/gui/MapViewState.java
index a975608..fc74e39 100644
--- a/src/org/openstreetmap/josm/gui/MapViewState.java
+++ b/src/org/openstreetmap/josm/gui/MapViewState.java
@@ -171,7 +171,7 @@ public final class MapViewState {
      * @since xxx
      */
     public AffineTransform getAffineTransform() {
-        return new AffineTransform(1.0 / scale, 0.0, 0.0, -1.0 / scale, topLeft.east() / scale,
+        return new AffineTransform(1.0 / scale, 0.0, 0.0, -1.0 / scale, -topLeft.east() / scale,
                 topLeft.north() / scale);
     }
 
diff --git a/test/unit/org/openstreetmap/josm/gui/MapViewStateTest.java b/test/unit/org/openstreetmap/josm/gui/MapViewStateTest.java
index 334a020..8bf9591 100644
--- a/test/unit/org/openstreetmap/josm/gui/MapViewStateTest.java
+++ b/test/unit/org/openstreetmap/josm/gui/MapViewStateTest.java
@@ -3,6 +3,10 @@ package org.openstreetmap.josm.gui;
 
 import static org.junit.Assert.assertEquals;
 
+import java.awt.geom.AffineTransform;
+import java.awt.geom.Point2D;
+import java.util.Arrays;
+
 import org.junit.Before;
 import org.junit.BeforeClass;
 import org.junit.Test;
@@ -99,7 +103,6 @@ public class MapViewStateTest {
         MapViewPoint p = state.getForView(WIDTH / 2, HEIGHT / 2);
         assertHasViewCoords(WIDTH / 2, HEIGHT / 2, p);
 
-
         EastNorth eastnorth = p.getEastNorth();
         LatLon shouldLatLon = Main.getProjection().getWorldBoundsLatLon().getCenter();
         EastNorth shouldEastNorth = Main.getProjection().latlon2eastNorth(shouldLatLon);
@@ -116,4 +119,20 @@ public class MapViewStateTest {
         assertEquals("east", 2, p2.getEastNorth().east(), 0.01);
         assertEquals("north", 3, p2.getEastNorth().north(), 0.01);
     }
+
+    /**
+     * Test {@link MapViewState#getAffineTransform()}
+     */
+    @Test
+    public void testGetAffineTransform() {
+        for (EastNorth en : Arrays.asList(new EastNorth(100, 100), new EastNorth(0, 0), new EastNorth(300, 200),
+                new EastNorth(-1, -2.5))) {
+            MapViewPoint should = state.getPointFor(en);
+            AffineTransform transform = state.getAffineTransform();
+            Point2D result = transform.transform(new Point2D.Double(en.getX(), en.getY()), null);
+
+            assertEquals("x", should.getInViewX(), result.getX(), 0.01);
+            assertEquals("y", should.getInViewY(), result.getY(), 0.01);
+        }
+    }
 }
