Index: /trunk/data_nodist/projection/projection-regression-test-data
===================================================================
--- /trunk/data_nodist/projection/projection-regression-test-data	(revision 9548)
+++ /trunk/data_nodist/projection/projection-regression-test-data	(revision 9549)
@@ -473,4 +473,8 @@
   en  6926462.06342142 -165024.540649525
   ll2 14.701654738347592 54.01458641292709
+EPSG:2066
+  ll  13.975131874937176 -60.37243636427039
+  en  71599.70480882854 337447.4793639815
+  ll2 13.975131874938855 -60.37243636426834
 EPSG:2067
   ll  55.60864303624845 -70.280895468024
@@ -617,4 +621,8 @@
   en  884166.2899764784 -5221481.485035512
   ll2 -13.614115983454221 131.31175399585865
+EPSG:2099
+  ll  72.65644527894739 49.92631486699122
+  en  72204.2993182416 5357217.657226288
+  ll2 72.65644527910784 49.92631486710464
 EPSG:2100
   ll  -3.5543672699074875 31.071285564907065
@@ -1681,4 +1689,8 @@
   en  1088177.7637519222 -6016377.833098785
   ll2 -53.96207417199988 23.97580785140248
+EPSG:2314
+  ll  87.36558574017153 -60.530745646272344
+  en  90539.48876331425 8618218.887626683
+  ll2 87.3655856161975 -60.5307464998997
 EPSG:2315
   ll  22.50455506286906 -77.5357477446401
@@ -2545,4 +2557,8 @@
   en  -229765.64571125267 -7786505.5208910545
   ll2 -34.31784317732501 136.0036534564606
+EPSG:24500
+  ll  -31.12891929964168 103.17335368777829
+  en  -34627.59126877593 -3557826.2698627305
+  ll2 -31.12891927090384 103.17335366483435
 EPSG:2451
   ll  15.2580235481866 134.41033672570933
@@ -4933,8 +4949,16 @@
   en  565297.1789718424 3506111.539885106
   ll2 69.8839059478399 -98.55087041633419
+EPSG:28191
+  ll  -21.570203053454662 34.57767652812345
+  en  104754.31384402225 -5771883.990347592
+  ll2 -21.570203018689934 34.57767659579005
 EPSG:28192
   ll  59.18873382786856 44.28333525949895
   en  687450.2776484762 4213542.311647201
   ll2 59.188733819143955 44.283334982018026
+EPSG:28193
+  ll  20.971632491522698 36.158968029613234
+  en  268724.25591304107 -65320.37615292007
+  ll2 20.97163233889922 36.158968021027356
 EPSG:2820
   ll  67.94752804358941 -117.02701082508148
@@ -6065,4 +6089,8 @@
   en  926913.8607939163 4324318.619755185
   ll2 38.871020901539424 6.955212120989621
+EPSG:30200
+  ll  -6.532368683324151 -60.9305157095611
+  en  130970.1455293707 -1812068.8477065342
+  ll2 -6.5323685558295725 -60.93051568833247
 EPSG:3021
   ll  7.152495328204623 12.543861613397564
@@ -6249,4 +6277,8 @@
   en  -120264.82768384414 5165372.018931383
   ll2 46.35672994146026 18.936315448581677
+EPSG:3068
+  ll  55.703667858672645 14.46073843172399
+  en  92519.82659949941 376112.61856716697
+  ll2 55.703667863702385 14.460738443502686
 EPSG:3070
   ll  -32.08389450114475 -90.27989821155268
@@ -6629,4 +6661,8 @@
   en  -173220.16400133923 4207666.132652629
   ll2 37.753296206694735 23.36636688451302
+EPSG:3140
+  ll  56.97355664712137 177.4736509714258
+  en  77818.80726976835 8449604.293963326
+  ll2 56.97355659253866 177.47365084528712
 EPSG:3141
   ll  -32.602880332544395 174.15109494326066
@@ -9453,4 +9489,40 @@
   en  1016594.5161534745 528097.7829511302
   ll2 4.747304314605455 118.84323425598721
+EPSG:3377
+  ll  48.89156010734848 103.99429688391157
+  en  26720.57019395572 5191876.879770025
+  ll2 48.89156010751724 103.9942968840599
+EPSG:3378
+  ll  12.004775351693155 102.31523646623803
+  en  40736.117439204885 1026794.2295150959
+  ll2 12.004775351694645 102.31523646624036
+EPSG:3379
+  ll  56.46771682287883 102.5244152937968
+  en  2254.329703671562 5850334.836913607
+  ll2 56.46771682287961 102.52441529379698
+EPSG:3380
+  ll  -70.56287855128488 101.5357320871954
+  en  -29388.376541149293 -8182754.146054061
+  ll2 -70.56287855128507 101.5357320871954
+EPSG:3381
+  ll  -44.32573731631593 102.57224457151007
+  en  -20131.49542507911 -5457028.561008427
+  ll2 -44.32573731641946 102.57224457142638
+EPSG:3382
+  ll  -5.8703840014789535 99.96881248250148
+  en  -41613.26705010444 -1248586.1903985934
+  ll2 -5.8703840014791995 99.96881248250051
+EPSG:3383
+  ll  22.962743966167466 100.42861065428318
+  en  -21305.96296384345 1880863.5359677796
+  ll2 22.962743966168627 100.42861065428256
+EPSG:3384
+  ll  45.85634027452056 100.53077601723719
+  en  -22107.447292642028 4676312.050189673
+  ll2 45.8563402745316 100.53077601723217
+EPSG:3385
+  ll  71.8618083553842 103.13867053860888
+  en  42544.56389698691 7325220.477060333
+  ll2 71.86180835557103 103.13867053853396
 EPSG:3386
   ll  -89.59009830030605 15.366898838425108
@@ -9529,4 +9601,8 @@
   en  1524538.5878959405 2066626.2181707374
   ll2 18.441000009971695 120.66715161207838
+EPSG:3407
+  ll  -30.985259804927132 113.97942223611656
+  en  21221.886057121756 -5878316.329362738
+  ll2 -30.985259804928983 113.97942223611584
 EPSG:3411
   ll  69.74806132169249 48.794738310977124
Index: /trunk/src/org/openstreetmap/josm/data/projection/Projections.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/data/projection/Projections.java	(revision 9548)
+++ /trunk/src/org/openstreetmap/josm/data/projection/Projections.java	(revision 9549)
@@ -30,4 +30,5 @@
 import org.openstreetmap.josm.data.projection.datum.WGS84Datum;
 import org.openstreetmap.josm.data.projection.proj.AlbersEqualArea;
+import org.openstreetmap.josm.data.projection.proj.CassiniSoldner;
 import org.openstreetmap.josm.data.projection.proj.ClassProjFactory;
 import org.openstreetmap.josm.data.projection.proj.DoubleStereographic;
@@ -86,4 +87,5 @@
     static {
         registerBaseProjection("aea", AlbersEqualArea.class, "core");
+        registerBaseProjection("cass", CassiniSoldner.class, "core");
         registerBaseProjection("josm:smerc", Mercator.class, "core");
         registerBaseProjection("lcc", LambertConformalConic.class, "core");
Index: /trunk/src/org/openstreetmap/josm/data/projection/proj/AlbersEqualArea.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/data/projection/proj/AlbersEqualArea.java	(revision 9548)
+++ /trunk/src/org/openstreetmap/josm/data/projection/proj/AlbersEqualArea.java	(revision 9549)
@@ -20,9 +20,9 @@
  * package of the USGS survey. USGS work is acknowledged here.
  * <p>
-  * This class has been derived from the implementation of the Geotools project;
+ * This class has been derived from the implementation of the Geotools project;
  * git 8cbf52d, org.geotools.referencing.operation.projection.AlbersEqualArea
  * at the time of migration.
  * <p>
-* <b>References:</b>
+ * <b>References:</b>
  * <ul>
  *   <li> Proj-4.4.7 available at <A HREF="http://www.remotesensing.org/proj">www.remotesensing.org/proj</A><br>
Index: /trunk/src/org/openstreetmap/josm/data/projection/proj/CassiniSoldner.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/data/projection/proj/CassiniSoldner.java	(revision 9549)
+++ /trunk/src/org/openstreetmap/josm/data/projection/proj/CassiniSoldner.java	(revision 9549)
@@ -0,0 +1,99 @@
+// License: GPL. For details, see LICENSE file.
+package org.openstreetmap.josm.data.projection.proj;
+
+import static org.openstreetmap.josm.tools.I18n.tr;
+
+import org.openstreetmap.josm.data.Bounds;
+import org.openstreetmap.josm.data.projection.ProjectionConfigurationException;
+
+/**
+ * Cassini-Soldner Projection (EPSG code 9806).
+ * The Cassini-Soldner Projection is the ellipsoidal version of the Cassini
+ * projection for the sphere. It is not conformal but as it is relatively simple
+ * to construct it was extensively used in the last century and is still useful
+ * for mapping areas with limited longitudinal extent. It has now largely
+ * been replaced by the conformal Transverse Mercator which it resembles. Like this,
+ * it has a straight central meridian along which the scale is true, all other
+ * meridians and parallels are curved, and the scale distortion increases
+ * rapidly with increasing distance from the central meridian.
+ * <p>
+ * 
+ * This class has been derived from the implementation of the Geotools project;
+ * git 8cbf52d, org.geotools.referencing.operation.projection.CassiniSoldner
+ * at the time of migration.
+ */
+public class CassiniSoldner extends AbstractProj {
+
+    /**
+     * Meridian distance at the {@code latitudeOfOrigin}.
+     * Used for calculations for the ellipsoid.
+     */
+    private double ml0;
+
+    /**
+     * Contants used for the forward and inverse transform for the eliptical
+     * case of the Cassini-Soldner.
+     */
+    private static final double  C1= 0.16666666666666666666,
+                                 C2= 0.008333333333333333333,
+                                 C3= 0.041666666666666666666,
+                                 C4= 0.33333333333333333333,
+                                 C5= 0.066666666666666666666;
+
+    @Override
+    public String getName() {
+        return tr("Cassini-Soldner");
+    }
+
+    @Override
+    public String getProj4Id() {
+        return "cass";
+    }
+
+    @Override
+    public void initialize(ProjParameters params) throws ProjectionConfigurationException {
+        super.initialize(params);
+        if (params.lat0 == null)
+            throw new ProjectionConfigurationException(tr("Parameter ''{0}'' required.", "lat_0"));
+        double latitudeOfOrigin = Math.toRadians(params.lat0);
+        ml0 = mlfn(latitudeOfOrigin, Math.sin(latitudeOfOrigin), Math.cos(latitudeOfOrigin));
+    }
+
+    @Override
+    public double[] project(double phi, double lam) {
+        double sinphi = Math.sin(phi);
+        double cosphi = Math.cos(phi);
+
+        double n = 1.0 / (Math.sqrt(1.0 - e2 * sinphi * sinphi));
+        double tn = Math.tan(phi);
+        double t = tn * tn;
+        double a1 = lam * cosphi;
+        double c = cosphi * cosphi * e2 / (1 - e2);
+        double a2 = a1 * a1;
+
+        double x = n * a1 * (1.0 - a2 * t * (C1 - (8.0 - t + 8.0 * c) * a2 * C2));
+        double y = mlfn(phi, sinphi, cosphi) - ml0 + n * tn * a2 * (0.5 + (5.0 - t + 6.0 * c) * a2 * C3);
+        return new double[] {x, y};
+    }
+
+    @Override
+    public double[] invproject(double x, double y) {
+        double ph1 = inv_mlfn(ml0 + y);
+        double tn = Math.tan(ph1);
+        double t = tn * tn;
+        double n = Math.sin(ph1);
+        double r = 1.0 / (1.0 - e2 * n * n);
+        n = Math.sqrt(r);
+        r *= (1.0 - e2) * n;
+        double dd = x / n;
+        double d2 = dd * dd;
+        double phi = ph1 - (n * tn / r) * d2 * (0.5 - (1.0 + 3.0 * t) * d2 * C3);
+        double lam = dd * (1.0 + t * d2 * (-C4 + (1.0 + 3.0 * t) * d2 * C5)) / Math.cos(ph1);
+        return new double[] {phi, lam};
+    }
+
+    @Override
+    public Bounds getAlgorithmBounds() {
+        return new Bounds(-89, -1.0, 89, 1.0, false);
+    }
+}
Index: /trunk/test/unit/org/openstreetmap/josm/data/projection/ProjectionTest.java
===================================================================
--- /trunk/test/unit/org/openstreetmap/josm/data/projection/ProjectionTest.java	(revision 9548)
+++ /trunk/test/unit/org/openstreetmap/josm/data/projection/ProjectionTest.java	(revision 9549)
@@ -123,4 +123,5 @@
         testProj("stere", 1e-5, "+lat_0=90 +lat_ts=90");
         testProj("omerc", EPS, "+lat_0=4 +lonc=115 +alpha=53 +no_uoff +gamma=53.130 +bounds=112,4,116,7");
+        testProj("cass", 1e-3, "+lat_0=11 +bounds=-1.0,-89,1.0,89");
 
         if (error2) {
