Index: trunk/src/org/openstreetmap/josm/data/projection/AbstractProjection.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/projection/AbstractProjection.java	(revision 12012)
+++ trunk/src/org/openstreetmap/josm/data/projection/AbstractProjection.java	(revision 12013)
@@ -116,5 +116,5 @@
     public EastNorth latlon2eastNorth(LatLon ll) {
         ll = datum.fromWGS84(ll);
-        double[] en = proj.project(Math.toRadians(ll.lat()), Math.toRadians(LatLon.normalizeLon(ll.lon() - lon0 - pm)));
+        double[] en = proj.project(Utils.toRadians(ll.lat()), Utils.toRadians(LatLon.normalizeLon(ll.lon() - lon0 - pm)));
         return new EastNorth((ellps.a * k0 * en[0] + x0) / toMeter, (ellps.a * k0 * en[1] + y0) / toMeter);
     }
@@ -135,6 +135,6 @@
     private LatLon eastNorth2latlon(EastNorth en, DoubleUnaryOperator normalizeLon) {
         double[] latlonRad = proj.invproject((en.east() * toMeter - x0) / ellps.a / k0, (en.north() * toMeter - y0) / ellps.a / k0);
-        double lon = Math.toDegrees(latlonRad[1]) + lon0 + pm;
-        LatLon ll = new LatLon(Math.toDegrees(latlonRad[0]), normalizeLon.applyAsDouble(lon));
+        double lon = Utils.toDegrees(latlonRad[1]) + lon0 + pm;
+        LatLon ll = new LatLon(Utils.toDegrees(latlonRad[0]), normalizeLon.applyAsDouble(lon));
         return datum.toWGS84(ll);
     }
Index: trunk/src/org/openstreetmap/josm/data/projection/Ellipsoid.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/projection/Ellipsoid.java	(revision 12012)
+++ trunk/src/org/openstreetmap/josm/data/projection/Ellipsoid.java	(revision 12013)
@@ -8,4 +8,5 @@
 
 import org.openstreetmap.josm.data.coor.LatLon;
+import org.openstreetmap.josm.tools.Utils;
 
 /**
@@ -339,5 +340,5 @@
             lt = l;
         }
-        return new LatLon(Math.toDegrees(lt), Math.toDegrees(lg));
+        return new LatLon(Utils.toDegrees(lt), Utils.toDegrees(lg));
     }
 
@@ -349,6 +350,6 @@
      */
     public double[] latLon2Cart(LatLon coord) {
-        double phi = Math.toRadians(coord.lat());
-        double lambda = Math.toRadians(coord.lon());
+        double phi = Utils.toRadians(coord.lat());
+        double lambda = Utils.toRadians(coord.lon());
 
         double rn = a / Math.sqrt(1 - e2 * Math.pow(Math.sin(phi), 2));
Index: trunk/src/org/openstreetmap/josm/data/projection/datum/SevenParameterDatum.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/projection/datum/SevenParameterDatum.java	(revision 12012)
+++ trunk/src/org/openstreetmap/josm/data/projection/datum/SevenParameterDatum.java	(revision 12013)
@@ -4,4 +4,5 @@
 import org.openstreetmap.josm.data.coor.LatLon;
 import org.openstreetmap.josm.data.projection.Ellipsoid;
+import org.openstreetmap.josm.tools.Utils;
 
 /**
@@ -39,7 +40,7 @@
         this.dy = dy;
         this.dz = dz;
-        this.rx = Math.toRadians(rx / 3600);
-        this.ry = Math.toRadians(ry / 3600);
-        this.rz = Math.toRadians(rz / 3600);
+        this.rx = Utils.toRadians(rx / 3600);
+        this.ry = Utils.toRadians(ry / 3600);
+        this.rz = Utils.toRadians(rz / 3600);
         this.s = s / 1e6;
     }
Index: trunk/src/org/openstreetmap/josm/data/projection/proj/AlbersEqualArea.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/projection/proj/AlbersEqualArea.java	(revision 12012)
+++ trunk/src/org/openstreetmap/josm/data/projection/proj/AlbersEqualArea.java	(revision 12013)
@@ -6,4 +6,5 @@
 import org.openstreetmap.josm.data.Bounds;
 import org.openstreetmap.josm.data.projection.ProjectionConfigurationException;
+import org.openstreetmap.josm.tools.Utils;
 
 /**
@@ -89,8 +90,8 @@
             throw new ProjectionConfigurationException(tr("Parameter ''{0}'' required.", "lat_1"));
 
-        double lat0 = Math.toRadians(params.lat0);
+        double lat0 = Utils.toRadians(params.lat0);
         // Standards parallels in radians.
-        double phi1 = Math.toRadians(params.lat1);
-        double phi2 = params.lat2 == null ? phi1 : Math.toRadians(params.lat2);
+        double phi1 = Utils.toRadians(params.lat1);
+        double phi2 = params.lat2 == null ? phi1 : Utils.toRadians(params.lat2);
 
         // Compute Constants
Index: trunk/src/org/openstreetmap/josm/data/projection/proj/CassiniSoldner.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/projection/proj/CassiniSoldner.java	(revision 12012)
+++ trunk/src/org/openstreetmap/josm/data/projection/proj/CassiniSoldner.java	(revision 12013)
@@ -6,4 +6,5 @@
 import org.openstreetmap.josm.data.Bounds;
 import org.openstreetmap.josm.data.projection.ProjectionConfigurationException;
+import org.openstreetmap.josm.tools.Utils;
 
 /**
@@ -56,5 +57,5 @@
         if (params.lat0 == null)
             throw new ProjectionConfigurationException(tr("Parameter ''{0}'' required.", "lat_0"));
-        double latitudeOfOrigin = Math.toRadians(params.lat0);
+        double latitudeOfOrigin = Utils.toRadians(params.lat0);
         ml0 = mlfn(latitudeOfOrigin, Math.sin(latitudeOfOrigin), Math.cos(latitudeOfOrigin));
     }
Index: trunk/src/org/openstreetmap/josm/data/projection/proj/DoubleStereographic.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/projection/proj/DoubleStereographic.java	(revision 12012)
+++ trunk/src/org/openstreetmap/josm/data/projection/proj/DoubleStereographic.java	(revision 12013)
@@ -13,5 +13,4 @@
 import static java.lang.Math.sqrt;
 import static java.lang.Math.tan;
-import static java.lang.Math.toRadians;
 import static org.openstreetmap.josm.tools.I18n.tr;
 
@@ -19,4 +18,5 @@
 import org.openstreetmap.josm.data.projection.Ellipsoid;
 import org.openstreetmap.josm.data.projection.ProjectionConfigurationException;
+import org.openstreetmap.josm.tools.Utils;
 
 /**
@@ -59,5 +59,5 @@
 
     private void initialize(double lat0) {
-        double phi0 = toRadians(lat0);
+        double phi0 = Utils.toRadians(lat0);
         double e2 = ellps.e2;
         r = sqrt(1-e2) / (1 - e2*pow(sin(phi0), 2));
Index: trunk/src/org/openstreetmap/josm/data/projection/proj/LambertAzimuthalEqualArea.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/projection/proj/LambertAzimuthalEqualArea.java	(revision 12012)
+++ trunk/src/org/openstreetmap/josm/data/projection/proj/LambertAzimuthalEqualArea.java	(revision 12013)
@@ -6,4 +6,5 @@
 import org.openstreetmap.josm.data.Bounds;
 import org.openstreetmap.josm.data.projection.ProjectionConfigurationException;
+import org.openstreetmap.josm.tools.Utils;
 
 /**
@@ -78,5 +79,5 @@
             throw new ProjectionConfigurationException(tr("Parameter ''{0}'' required.", "lat_0"));
 
-        latitudeOfOrigin = Math.toRadians(params.lat0);
+        latitudeOfOrigin = Utils.toRadians(params.lat0);
         /*
          * Detects the mode (oblique, etc.).
Index: trunk/src/org/openstreetmap/josm/data/projection/proj/LambertConformalConic.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/projection/proj/LambertConformalConic.java	(revision 12012)
+++ trunk/src/org/openstreetmap/josm/data/projection/proj/LambertConformalConic.java	(revision 12013)
@@ -12,5 +12,4 @@
 import static java.lang.Math.sqrt;
 import static java.lang.Math.tan;
-import static java.lang.Math.toRadians;
 import static org.openstreetmap.josm.tools.I18n.tr;
 
@@ -19,4 +18,5 @@
 import org.openstreetmap.josm.data.projection.Ellipsoid;
 import org.openstreetmap.josm.data.projection.ProjectionConfigurationException;
+import org.openstreetmap.josm.tools.Utils;
 
 /**
@@ -125,10 +125,10 @@
         this.params = new Parameters2SP(lat0, lat1, lat2);
 
-        final double m1 = m(toRadians(lat1));
-        final double m2 = m(toRadians(lat2));
-
-        final double t1 = t(toRadians(lat1));
-        final double t2 = t(toRadians(lat2));
-        final double tf = t(toRadians(lat0));
+        final double m1 = m(Utils.toRadians(lat1));
+        final double m2 = m(Utils.toRadians(lat2));
+
+        final double t1 = t(Utils.toRadians(lat1));
+        final double t2 = t(Utils.toRadians(lat2));
+        final double tf = t(Utils.toRadians(lat0));
 
         n = (log(m1) - log(m2)) / (log(t1) - log(t2));
@@ -144,5 +144,5 @@
     private void initialize1SP(double lat0) {
         this.params = new Parameters1SP(lat0);
-        final double lat0rad = toRadians(lat0);
+        final double lat0rad = Utils.toRadians(lat0);
 
         final double m0 = m(lat0rad);
Index: trunk/src/org/openstreetmap/josm/data/projection/proj/LonLat.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/projection/proj/LonLat.java	(revision 12012)
+++ trunk/src/org/openstreetmap/josm/data/projection/proj/LonLat.java	(revision 12013)
@@ -7,4 +7,5 @@
 import org.openstreetmap.josm.data.projection.ProjectionConfigurationException;
 import org.openstreetmap.josm.tools.CheckParameterUtil;
+import org.openstreetmap.josm.tools.Utils;
 
 /**
@@ -34,10 +35,10 @@
     @Override
     public double[] project(double latRad, double lonRad) {
-        return new double[] {Math.toDegrees(lonRad) / a, Math.toDegrees(latRad) / a};
+        return new double[] {Utils.toDegrees(lonRad) / a, Utils.toDegrees(latRad) / a};
     }
 
     @Override
     public double[] invproject(double east, double north) {
-        return new double[] {Math.toRadians(north * a), Math.toRadians(east * a)};
+        return new double[] {Utils.toRadians(north * a), Utils.toRadians(east * a)};
     }
 
Index: trunk/src/org/openstreetmap/josm/data/projection/proj/Mercator.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/projection/proj/Mercator.java	(revision 12012)
+++ trunk/src/org/openstreetmap/josm/data/projection/proj/Mercator.java	(revision 12013)
@@ -6,4 +6,5 @@
 import org.openstreetmap.josm.data.Bounds;
 import org.openstreetmap.josm.data.projection.ProjectionConfigurationException;
+import org.openstreetmap.josm.tools.Utils;
 
 /**
@@ -69,5 +70,5 @@
              * the standard parallel.
              */
-            double standardParallel = Math.toRadians(params.lat_ts);
+            double standardParallel = Utils.toRadians(params.lat_ts);
             if (spherical) {
                 scaleFactor *= Math.cos(standardParallel);
@@ -81,5 +82,5 @@
          */
         if (params.lat0 != null) {
-            final double lat0 = Math.toRadians(params.lat0);
+            final double lat0 = Utils.toRadians(params.lat0);
             final double sinPhi = Math.sin(lat0);
             scaleFactor *= (Math.cos(lat0) / (Math.sqrt(1 - e2 * sinPhi * sinPhi)));
Index: trunk/src/org/openstreetmap/josm/data/projection/proj/ObliqueMercator.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/projection/proj/ObliqueMercator.java	(revision 12012)
+++ trunk/src/org/openstreetmap/josm/data/projection/proj/ObliqueMercator.java	(revision 12013)
@@ -7,4 +7,5 @@
 import org.openstreetmap.josm.data.coor.LatLon;
 import org.openstreetmap.josm.data.projection.ProjectionConfigurationException;
+import org.openstreetmap.josm.tools.Utils;
 
 /**
@@ -228,5 +229,5 @@
         double latCenter = 0;
         if (params.lat0 != null) {
-            latCenter = Math.toRadians(params.lat0);
+            latCenter = Utils.toRadians(params.lat0);
         }
 
@@ -269,8 +270,8 @@
                 throw new ProjectionConfigurationException(tr("Parameter ''{0}'' required.", "lat_2"));
             referencePoint = new LatLon(params.lat1, params.lat2);
-            double lon1 = Math.toRadians(params.lon1);
-            double lat1 = Math.toRadians(params.lat1);
-            double lon2 = Math.toRadians(params.lon2);
-            double lat2 = Math.toRadians(params.lat2);
+            double lon1 = Utils.toRadians(params.lon1);
+            double lat1 = Utils.toRadians(params.lat1);
+            double lon2 = Utils.toRadians(params.lon2);
+            double lat2 = Utils.toRadians(params.lat2);
 
             if (Math.abs(lat1 - lat2) <= EPSILON ||
@@ -312,6 +313,6 @@
             referencePoint = new LatLon(params.lat0, params.lonc);
 
-            lonCenter = Math.toRadians(params.lonc);
-            azimuth = Math.toRadians(params.alpha);
+            lonCenter = Utils.toRadians(params.lonc);
+            azimuth = Utils.toRadians(params.alpha);
             // CHECKSTYLE.OFF: SingleSpaceSeparator
             if ((azimuth > -1.5*Math.PI && azimuth < -0.5*Math.PI) ||
@@ -322,5 +323,5 @@
             // CHECKSTYLE.ON: SingleSpaceSeparator
             if (params.gamma != null) {
-                rectifiedGridAngle = Math.toRadians(params.gamma);
+                rectifiedGridAngle = Utils.toRadians(params.gamma);
             } else {
                 rectifiedGridAngle = azimuth;
@@ -371,5 +372,5 @@
 
     private static double normalizeLonRad(double a) {
-        return Math.toRadians(LatLon.normalizeLon(Math.toDegrees(a)));
+        return Utils.toRadians(LatLon.normalizeLon(Utils.toDegrees(a)));
     }
 
@@ -435,5 +436,5 @@
         double lat = referencePoint.lat();
         double dLat = 3.0;
-        double lon = referencePoint.lon() - Math.toDegrees(centralMeridian);
+        double lon = referencePoint.lon() - Utils.toDegrees(centralMeridian);
         double dLon = 3.0;
         return new Bounds(lat - dLat, lon - dLon, lat + dLat, lon + dLon, false);
@@ -442,5 +443,5 @@
     @Override
     public double getCentralMeridian() {
-        return Math.toDegrees(centralMeridian);
+        return Utils.toDegrees(centralMeridian);
     }
 }
Index: trunk/src/org/openstreetmap/josm/data/projection/proj/PolarStereographic.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/projection/proj/PolarStereographic.java	(revision 12012)
+++ trunk/src/org/openstreetmap/josm/data/projection/proj/PolarStereographic.java	(revision 12013)
@@ -6,4 +6,5 @@
 import org.openstreetmap.josm.data.Bounds;
 import org.openstreetmap.josm.data.projection.ProjectionConfigurationException;
+import org.openstreetmap.josm.tools.Utils;
 
 /**
@@ -107,5 +108,5 @@
             latitudeTrueScale = (params.lat0 < 0) ? -Math.PI/2 : Math.PI/2;
         } else {
-            latitudeTrueScale = Math.toRadians(params.lat_ts);
+            latitudeTrueScale = Utils.toRadians(params.lat_ts);
         }
         southPole = latitudeTrueScale < 0;
Index: trunk/src/org/openstreetmap/josm/data/projection/proj/SwissObliqueMercator.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/projection/proj/SwissObliqueMercator.java	(revision 12012)
+++ trunk/src/org/openstreetmap/josm/data/projection/proj/SwissObliqueMercator.java	(revision 12013)
@@ -14,5 +14,4 @@
 import static java.lang.Math.sqrt;
 import static java.lang.Math.tan;
-import static java.lang.Math.toRadians;
 import static org.openstreetmap.josm.tools.I18n.tr;
 
@@ -21,4 +20,5 @@
 import org.openstreetmap.josm.data.projection.ProjectionConfigurationException;
 import org.openstreetmap.josm.tools.JosmRuntimeException;
+import org.openstreetmap.josm.tools.Utils;
 
 // CHECKSTYLE.OFF: LineLength
@@ -58,5 +58,5 @@
 
     private void initialize(double lat0) {
-        phi0 = toRadians(lat0);
+        phi0 = Utils.toRadians(lat0);
         kR = sqrt(1 - ellps.e2) / (1 - (ellps.e2 * pow(sin(phi0), 2)));
         alpha = sqrt(1 + (ellps.eb2 * pow(cos(phi0), 4)));
Index: trunk/src/org/openstreetmap/josm/data/projection/proj/TransverseMercator.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/projection/proj/TransverseMercator.java	(revision 12012)
+++ trunk/src/org/openstreetmap/josm/data/projection/proj/TransverseMercator.java	(revision 12013)
@@ -7,4 +7,5 @@
 import org.openstreetmap.josm.data.projection.ProjectionConfigurationException;
 import org.openstreetmap.josm.tools.CheckParameterUtil;
+import org.openstreetmap.josm.tools.Utils;
 
 /**
@@ -136,9 +137,9 @@
         CheckParameterUtil.ensureParameterNotNull(params.ellps, "params.ellps");
         eb2 = params.ellps.eb2;
-        latitudeOfOrigin = params.lat0 == null ? 0 : Math.toRadians(params.lat0);
+        latitudeOfOrigin = params.lat0 == null ? 0 : Utils.toRadians(params.lat0);
         ml0 = mlfn(latitudeOfOrigin, Math.sin(latitudeOfOrigin), Math.cos(latitudeOfOrigin));
 
         if (params.gamma != null) {
-                rectifiedGridAngle = Math.toRadians(params.gamma);
+                rectifiedGridAngle = Utils.toRadians(params.gamma);
         } else {
                 rectifiedGridAngle = 0.0;
Index: trunk/src/org/openstreetmap/josm/tools/Utils.java
===================================================================
--- trunk/src/org/openstreetmap/josm/tools/Utils.java	(revision 12012)
+++ trunk/src/org/openstreetmap/josm/tools/Utils.java	(revision 12013)
@@ -93,4 +93,7 @@
     private static final String[] SIZE_UNITS = {"B", "kB", "MB", "GB", "TB", "PB", "EB", "ZB", "YB"};
 
+    private static final double TO_DEGREES = 180.0 / Math.PI;
+    private static final double TO_RADIANS = Math.PI / 180.0;
+
     private Utils() {
         // Hide default constructor for utils classes
@@ -1285,5 +1288,4 @@
      * Returns a new secure DOM builder, supporting XML namespaces.
      * @return a new secure DOM builder, supporting XML namespaces
-     * @throws ParserConfigurationException if a parser cannot be created which satisfies the requested configuration.
      * @throws ParserConfigurationException if a parser cannot be created which satisfies the requested configuration.
      * @since 10404
@@ -1553,3 +1555,31 @@
         }
     }
+
+    /**
+     * Convert angle from radians to degrees.
+     *
+     * Replacement for {@link Math#toDegrees(double)} to match the Java 9
+     * version of that method. (Can be removed when JOSM support for Java 8 ends.)
+     * Only relevant in relation to ProjectionRegressionTest.
+     * @see https://josm.openstreetmap.de/ticket/11889
+     * @param angleRad an angle in radians
+     * @return the same angle in degrees
+     */
+    public static double toDegrees(double angleRad) {
+        return angleRad * TO_DEGREES;
+    }
+
+    /**
+     * Convert angle from degrees to radians.
+     *
+     * Replacement for {@link Math#toRadians(double)} to match the Java 9
+     * version of that method. (Can be removed when JOSM support for Java 8 ends.)
+     * Only relevant in relation to ProjectionRegressionTest.
+     * @see https://josm.openstreetmap.de/ticket/11889
+     * @param angleDeg an angle in degrees
+     * @return the same angle in radians
+     */
+    public static double toRadians(double angleDeg) {
+        return angleDeg * TO_RADIANS;
+    }
 }
