Index: trunk/src/org/openstreetmap/josm/data/projection/CustomProjection.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/projection/CustomProjection.java	(revision 9627)
+++ trunk/src/org/openstreetmap/josm/data/projection/CustomProjection.java	(revision 9628)
@@ -55,5 +55,6 @@
     protected String cacheDir;
     protected Bounds bounds;
-    private double metersPerUnit = 1;
+    private double metersPerUnit;
+    private double metersPerUnitNoDegrees;
     private String axis = "enu"; // default axis orientation is East, North, Up
 
@@ -286,4 +287,5 @@
                 this.code = s;
             }
+            boolean defaultUnits = true;
             s = parameters.get(Param.units.key);
             if (s != null) {
@@ -291,4 +293,6 @@
                 if (UNITS_TO_METERS.containsKey(s)) {
                     this.metersPerUnit = UNITS_TO_METERS.get(s);
+                    this.metersPerUnitNoDegrees = this.metersPerUnit;
+                    defaultUnits = false;
                 } else {
                     Main.warn("No metersPerUnit found for: " + s);
@@ -298,4 +302,10 @@
             if (s != null) {
                 this.metersPerUnit = parseDouble(s, Param.to_meter.key);
+                this.metersPerUnitNoDegrees = this.metersPerUnit;
+                defaultUnits = false;
+            }
+            if (defaultUnits) {
+                this.metersPerUnit = proj.isGeographic() ? METER_PER_UNIT_DEGREE : 1;
+                this.metersPerUnitNoDegrees = 1;
             }
             s = parameters.get(Param.axis.key);
@@ -700,4 +710,14 @@
         return metersPerUnit;
     }
+    
+    /**
+     * Like {@link #getMetersPerUnit()}, but has default value 1 for a
+     * geographic CRS. I.e. by default, degrees are not converted to meters,
+     * but left alone (similar to proj.4 behavior).
+     * @return 
+     */
+    public double getMetersPerUnitProj() {
+        return metersPerUnitNoDegrees;
+    }
 
     @Override
Index: trunk/src/org/openstreetmap/josm/data/projection/Projection.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/projection/Projection.java	(revision 9627)
+++ trunk/src/org/openstreetmap/josm/data/projection/Projection.java	(revision 9628)
@@ -96,9 +96,8 @@
      * Get the number of meters per unit of this projection. This more
      * defines the scale of the map, than real conversion of unit to meters
-     * as this value is more less correct only along great circles.
+     * as this value is more less correct only along certain lines of true scale.
      *
      * Used by WMTS to properly scale tiles
      * @return meters per unit of projection
-     *
      */
     double getMetersPerUnit();
Index: trunk/src/org/openstreetmap/josm/data/projection/proj/AbstractProj.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/projection/proj/AbstractProj.java	(revision 9627)
+++ trunk/src/org/openstreetmap/josm/data/projection/proj/AbstractProj.java	(revision 9628)
@@ -99,4 +99,9 @@
     }
 
+    @Override
+    public boolean isGeographic() {
+        return false;
+    }
+
     /**
      * Calculates the meridian distance. This is the distance along the central
Index: trunk/src/org/openstreetmap/josm/data/projection/proj/DoubleStereographic.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/projection/proj/DoubleStereographic.java	(revision 9627)
+++ trunk/src/org/openstreetmap/josm/data/projection/proj/DoubleStereographic.java	(revision 9628)
@@ -29,8 +29,7 @@
  * Sec. 1.3.7.1 Oblique and Equatorial Stereographic, http://www.epsg.org/GuidanceNotes
  */
-public class DoubleStereographic implements Proj {
+public class DoubleStereographic extends AbstractProj {
 
     private Ellipsoid ellps;
-    private double e;
     private double n;
     private double c;
@@ -52,8 +51,8 @@
     @Override
     public void initialize(ProjParameters params) throws ProjectionConfigurationException {
+        super.initialize(params);
         if (params.lat0 == null)
             throw new ProjectionConfigurationException(tr("Parameter ''{0}'' required.", "lat_0"));
         ellps = params.ellps;
-        e = ellps.e;
         initialize(params.lat0);
     }
Index: trunk/src/org/openstreetmap/josm/data/projection/proj/LonLat.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/projection/proj/LonLat.java	(revision 9627)
+++ trunk/src/org/openstreetmap/josm/data/projection/proj/LonLat.java	(revision 9628)
@@ -43,3 +43,8 @@
         return new Bounds(-90, -180, 90, 180, false);
     }
+
+    @Override
+    public boolean isGeographic() {
+        return true;
+    }
 }
Index: trunk/src/org/openstreetmap/josm/data/projection/proj/Proj.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/projection/proj/Proj.java	(revision 9627)
+++ trunk/src/org/openstreetmap/josm/data/projection/proj/Proj.java	(revision 9628)
@@ -82,3 +82,12 @@
      */
     Bounds getAlgorithmBounds();
+
+    /**
+     * Return true, if a geographic coordinate reference system is represented.
+     *
+     * I.e. if it returns latitude/longitude values rather than Cartesian
+     * east/north coordinates on a flat surface.
+     * @return true, if it is geographic
+     */
+    boolean isGeographic();
 }
Index: trunk/src/org/openstreetmap/josm/data/projection/proj/SwissObliqueMercator.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/projection/proj/SwissObliqueMercator.java	(revision 9627)
+++ trunk/src/org/openstreetmap/josm/data/projection/proj/SwissObliqueMercator.java	(revision 9628)
@@ -34,5 +34,5 @@
  * this formula (rigorous formulas)</a>.
  */
-public class SwissObliqueMercator implements Proj {
+public class SwissObliqueMercator extends AbstractProj {
 
     // CHECKSTYLE.ON: LineLength
@@ -49,4 +49,5 @@
     @Override
     public void initialize(ProjParameters params) throws ProjectionConfigurationException {
+        super.initialize(params);
         if (params.lat0 == null)
             throw new ProjectionConfigurationException(tr("Parameter ''{0}'' required.", "lat_0"));
