diff --git a/src/org/openstreetmap/josm/gui/MapViewState.java b/src/org/openstreetmap/josm/gui/MapViewState.java
index 9cc4701..97e6037 100644
--- a/src/org/openstreetmap/josm/gui/MapViewState.java
+++ b/src/org/openstreetmap/josm/gui/MapViewState.java
@@ -46,13 +46,13 @@ public final class MapViewState {
      * A flag indicating that the point is outside to the left of the map view.
      * @since 10827
      */
-    public static final int OUTSIDE_LEFT = 3;
+    public static final int OUTSIDE_LEFT = 4;
 
     /**
      * A flag indicating that the point is outside to the right of the map view.
      * @since 10827
      */
-    public static final int OUTSIDE_RIGHT = 4;
+    public static final int OUTSIDE_RIGHT = 8;
 
     private final Projecting projecting;
 
@@ -498,7 +498,7 @@ public final class MapViewState {
          * @since 10827
          */
         public double oneNormInView(MapViewPoint p2) {
-            return Math.abs(getInViewX() - p2.getInViewX()) + Math.abs(getInViewY()) - p2.getInViewY();
+            return Math.abs(getInViewX() - p2.getInViewX()) + Math.abs(getInViewY() - p2.getInViewY());
         }
 
         /**
diff --git a/test/unit/org/openstreetmap/josm/gui/MapViewStateTest.java b/test/unit/org/openstreetmap/josm/gui/MapViewStateTest.java
index b03d25f..9621595 100644
--- a/test/unit/org/openstreetmap/josm/gui/MapViewStateTest.java
+++ b/test/unit/org/openstreetmap/josm/gui/MapViewStateTest.java
@@ -16,6 +16,7 @@ import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.data.coor.EastNorth;
 import org.openstreetmap.josm.data.coor.LatLon;
 import org.openstreetmap.josm.gui.MapViewState.MapViewPoint;
+import org.openstreetmap.josm.gui.MapViewState.MapViewRectangle;
 
 /**
  * Test {@link MapViewState}
@@ -150,6 +151,65 @@ public class MapViewStateTest {
     }
 
     /**
+     * Test {@link MapViewState#OUTSIDE_BOTTOM} and similar constants.
+     * @since xxx
+     */
+    @Test
+    public void testOutsideFlags() {
+        assertEquals(1, Integer.bitCount(MapViewState.OUTSIDE_BOTTOM));
+        assertEquals(1, Integer.bitCount(MapViewState.OUTSIDE_TOP));
+        assertEquals(1, Integer.bitCount(MapViewState.OUTSIDE_LEFT));
+        assertEquals(1, Integer.bitCount(MapViewState.OUTSIDE_RIGHT));
+        assertEquals(4, Integer.bitCount(MapViewState.OUTSIDE_BOTTOM | MapViewState.OUTSIDE_TOP
+                | MapViewState.OUTSIDE_LEFT | MapViewState.OUTSIDE_RIGHT));
+    }
+
+    /**
+     * Test {@link MapViewPoint#getOutsideRectangleFlags(MapViewRectangle)}
+     * @since xxx
+     */
+    @Test
+    public void testPointGetOutsideRectangleFlags() {
+        MapViewRectangle rect = state.getForView(0, 0).rectTo(state.getForView(10, 10));
+        assertEquals(0, state.getForView(1, 1).getOutsideRectangleFlags(rect));
+        assertEquals(0, state.getForView(1, 5).getOutsideRectangleFlags(rect));
+        assertEquals(0, state.getForView(9, 1).getOutsideRectangleFlags(rect));
+        assertEquals(0, state.getForView(10 - 1e-10, 1e-10).getOutsideRectangleFlags(rect));
+        assertEquals(0, state.getForView(10 - 1e-10, 10 - 1e-10).getOutsideRectangleFlags(rect));
+
+
+        assertEquals(MapViewState.OUTSIDE_TOP, state.getForView(1, -11).getOutsideRectangleFlags(rect));
+        assertEquals(MapViewState.OUTSIDE_TOP, state.getForView(1, -1e20).getOutsideRectangleFlags(rect));
+
+        assertEquals(MapViewState.OUTSIDE_BOTTOM, state.getForView(1, 11).getOutsideRectangleFlags(rect));
+        assertEquals(MapViewState.OUTSIDE_BOTTOM, state.getForView(1, 1e20).getOutsideRectangleFlags(rect));
+
+        assertEquals(MapViewState.OUTSIDE_LEFT, state.getForView(-11, 1).getOutsideRectangleFlags(rect));
+        assertEquals(MapViewState.OUTSIDE_LEFT, state.getForView(-1e20, 1).getOutsideRectangleFlags(rect));
+        assertEquals(MapViewState.OUTSIDE_RIGHT, state.getForView(11, 1).getOutsideRectangleFlags(rect));
+        assertEquals(MapViewState.OUTSIDE_RIGHT, state.getForView(1e20, 1).getOutsideRectangleFlags(rect));
+
+        assertEquals(MapViewState.OUTSIDE_RIGHT | MapViewState.OUTSIDE_TOP, state.getForView(11, -11).getOutsideRectangleFlags(rect));
+        assertEquals(MapViewState.OUTSIDE_RIGHT | MapViewState.OUTSIDE_BOTTOM, state.getForView(11, 11).getOutsideRectangleFlags(rect));
+        assertEquals(MapViewState.OUTSIDE_LEFT | MapViewState.OUTSIDE_TOP, state.getForView(-11, -11).getOutsideRectangleFlags(rect));
+        assertEquals(MapViewState.OUTSIDE_LEFT | MapViewState.OUTSIDE_BOTTOM, state.getForView(-11, 11).getOutsideRectangleFlags(rect));
+    }
+
+    /**
+     * Test {@link MapViewPoint#oneNormInView(MapViewPoint)}
+     * @since xxx
+     */
+    @Test
+    public void testPointOneNormInView() {
+        MapViewPoint p = state.getForView(5, 15);
+        assertEquals(0, p.oneNormInView(p), 1e-10);
+        assertEquals(6, p.oneNormInView(state.getForView(-1, 15)), 1e-10);
+        assertEquals(5, p.oneNormInView(state.getForView(5, 20)), 1e-10);
+        assertEquals(22, p.oneNormInView(state.getForView(-1, -1)), 1e-10);
+        assertEquals(40, p.oneNormInView(state.getForView(30, 30)), 1e-10);
+    }
+
+    /**
      * Test {@link MapViewState.MapViewViewPoint#toString()} and {@link MapViewState.MapViewEastNorthPoint#toString()}
      */
     @Test
