Index: /trunk/src/org/openstreetmap/josm/data/projection/AbstractProjection.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/data/projection/AbstractProjection.java	(revision 6134)
+++ /trunk/src/org/openstreetmap/josm/data/projection/AbstractProjection.java	(revision 6135)
@@ -39,4 +39,8 @@
     }
 
+    /**
+     * Replies the projection (in the narrow sense)
+     * @return The projection object
+     */
     public final Proj getProj() {
         return proj;
Index: /trunk/src/org/openstreetmap/josm/data/projection/Projections.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/data/projection/Projections.java	(revision 6134)
+++ /trunk/src/org/openstreetmap/josm/data/projection/Projections.java	(revision 6135)
@@ -24,4 +24,5 @@
 import org.openstreetmap.josm.data.projection.proj.LambertConformalConic;
 import org.openstreetmap.josm.data.projection.proj.LonLat;
+import org.openstreetmap.josm.data.projection.proj.Mercator;
 import org.openstreetmap.josm.data.projection.proj.Proj;
 import org.openstreetmap.josm.data.projection.proj.ProjFactory;
@@ -62,5 +63,5 @@
     static {
         registerBaseProjection("lonlat", LonLat.class, "core");
-        registerBaseProjection("josm:smerc", org.openstreetmap.josm.data.projection.proj.Mercator.class, "core");
+        registerBaseProjection("josm:smerc", Mercator.class, "core");
         registerBaseProjection("lcc", LambertConformalConic.class, "core");
         registerBaseProjection("somerc", SwissObliqueMercator.class, "core");
Index: /trunk/src/org/openstreetmap/josm/data/projection/datum/NTV2GridShiftFile.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/data/projection/datum/NTV2GridShiftFile.java	(revision 6134)
+++ /trunk/src/org/openstreetmap/josm/data/projection/datum/NTV2GridShiftFile.java	(revision 6135)
@@ -79,4 +79,7 @@
     private NTV2SubGrid lastSubGrid;
 
+    /**
+     * Constructs a new {@code NTV2GridShiftFile}.
+     */
     public NTV2GridShiftFile() {
     }
@@ -92,5 +95,5 @@
      * @param in Grid Shift File InputStream
      * @param loadAccuracy is Accuracy data to be loaded as well as shift data?
-     * @throws Exception
+     * @throws IOException
      */
     public void loadGridShiftFile(InputStream in, boolean loadAccuracy ) throws IOException {
Index: /trunk/src/org/openstreetmap/josm/data/projection/datum/NTV2GridShiftFileWrapper.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/data/projection/datum/NTV2GridShiftFileWrapper.java	(revision 6134)
+++ /trunk/src/org/openstreetmap/josm/data/projection/datum/NTV2GridShiftFileWrapper.java	(revision 6135)
@@ -1,6 +1,4 @@
 // License: GPL. For details, see LICENSE file.
 package org.openstreetmap.josm.data.projection.datum;
-
-import static org.openstreetmap.josm.tools.I18n.tr;
 
 import java.io.InputStream;
@@ -9,11 +7,25 @@
 
 /**
- * Wrapper for NTV2GridShiftFile.
+ * Wrapper for {@link NTV2GridShiftFile}.
  *
  * Loads the shift file from disk, when it is first accessed.
+ * @since 5226
  */
 public class NTV2GridShiftFileWrapper {
 
+    /**
+     * Used in Germany to convert coordinates between the DHDN (<i>Deutsches Hauptdreiecksnetz</i>) 
+     * and ETRS89 (<i>European Terrestrial Reference System 1989</i>) datums.
+     * @see <a href="http://crs.bkg.bund.de/crseu/crs/descrtrans/eu-descrtrans.php?crs_id=REVfREhETiAvIEdLXzM=&op_id=REVfREhETiAoQmVUQSwgMjAwNykgdG8gRVRSUzg5">
+     * Description of Transformation - DE_DHDN (BeTA, 2007) to ETRS89</a>
+     */
     public final static NTV2GridShiftFileWrapper BETA2007 = new NTV2GridShiftFileWrapper("resource://data/BETA2007.gsb");
+    
+    /**
+     * Used in France to convert coordinates between the NTF (<i>Nouvelle triangulation de la France</i>) 
+     * and RGF93 (<i>Réseau géodésique français 1993</i>) datums.
+     * @see <a href="http://geodesie.ign.fr/contenu/fichiers/documentation/algorithmes/notice/NT111_V1_HARMEL_TransfoNTF-RGF93_FormatGrilleNTV2.pdf">
+     * [French] Transformation de coordonnées NTF – RGF93 / Format de grille NTv2</a>
+     */
     public final static NTV2GridShiftFileWrapper ntf_rgf93 = new NTV2GridShiftFileWrapper("resource://data/ntf_r93_b.gsb");
 
@@ -22,14 +34,21 @@
     private String gridFileName;
 
+    /**
+     * Constructs a new {@code NTV2GridShiftFileWrapper}.
+     * @param filename Path to the grid file (GSB format)
+     */
     public NTV2GridShiftFileWrapper(String filename) {
         this.gridFileName = filename;
     }
 
+    /**
+     * Returns the actual {@link NTV2GridShiftFile} behind this wrapper.
+     * The grid file is only loaded once, when first accessed.
+     * @return The NTv2 grid file
+     */
     public NTV2GridShiftFile getShiftFile() {
         if (instance == null) {
             try {
                 InputStream is = new MirroredInputStream(gridFileName);
-                if (is == null)
-                    throw new RuntimeException(tr("Error: failed to open input stream for resource ''/data/{0}''.", gridFileName));
                 instance = new NTV2GridShiftFile();
                 instance.loadGridShiftFile(is, false);
Index: /trunk/src/org/openstreetmap/josm/data/projection/datum/NTV2SubGrid.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/data/projection/datum/NTV2SubGrid.java	(revision 6134)
+++ /trunk/src/org/openstreetmap/josm/data/projection/datum/NTV2SubGrid.java	(revision 6135)
@@ -28,5 +28,5 @@
  *
  * @author Peter Yuill
- * Modifified for JOSM :
+ * Modified for JOSM :
  * - removed the RandomAccessFile mode (Pieren)
  * - read grid file by single bytes. Workaround for a bug in some VM not supporting
@@ -64,5 +64,5 @@
      * @param bigEndian is the file bigEndian?
      * @param loadAccuracy is the node Accuracy data to be loaded?
-     * @throws Exception
+     * @throws IOException
      */
     public NTV2SubGrid(InputStream in, boolean bigEndian, boolean loadAccuracy) throws IOException {
@@ -289,4 +289,8 @@
     }
 
+    /**
+     * Returns textual details about the sub grid.
+     * @return textual details about the sub grid
+     */
     public String getDetails() {
         StringBuffer buf = new StringBuffer("Sub Grid : ");
@@ -323,12 +327,12 @@
         try {
             clone = (NTV2SubGrid)super.clone();
+            // Do a deep clone of the sub grids
+            if (subGrid != null) {
+                clone.subGrid = new NTV2SubGrid[subGrid.length];
+                for (int i = 0; i < subGrid.length; i++) {
+                    clone.subGrid[i] = (NTV2SubGrid)subGrid[i].clone();
+                }
+            }
         } catch (CloneNotSupportedException cnse) {
-        }
-        // Do a deep clone of the sub grids
-        if (subGrid != null) {
-            clone.subGrid = new NTV2SubGrid[subGrid.length];
-            for (int i = 0; i < subGrid.length; i++) {
-                clone.subGrid[i] = (NTV2SubGrid)subGrid[i].clone();
-            }
         }
         return clone;
Index: /trunk/src/org/openstreetmap/josm/data/projection/proj/Proj.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/data/projection/proj/Proj.java	(revision 6134)
+++ /trunk/src/org/openstreetmap/josm/data/projection/proj/Proj.java	(revision 6135)
@@ -23,14 +23,16 @@
  */
 public interface Proj {
+    
     /**
-     * A Human readable name of this projection.
+     * Replies a human readable name of this projection.
+     * @return The projection name. must not be null.
      */
     String getName();
 
     /**
-     * The Proj.4 identifier.
+     * Replies the Proj.4 identifier.
      *
-     * (as reported by cs2cs -lp)
-     * If no id exists, return null.
+     * @return The Proj.4 identifier (as reported by cs2cs -lp).
+     * If no id exists, return {@code null}.
      */
     String getProj4Id();
@@ -38,4 +40,5 @@
     /**
      * Initialize the projection using the provided parameters.
+     * @param params The projection parameters
      *
      * @throws ProjectionConfigurationException in case parameters are not suitable
Index: /trunk/src/org/openstreetmap/josm/data/projection/proj/SwissObliqueMercator.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/data/projection/proj/SwissObliqueMercator.java	(revision 6134)
+++ /trunk/src/org/openstreetmap/josm/data/projection/proj/SwissObliqueMercator.java	(revision 6135)
@@ -2,6 +2,17 @@
 package org.openstreetmap.josm.data.projection.proj;
 
-import static java.lang.Math.*;
-
+import static java.lang.Math.PI;
+import static java.lang.Math.abs;
+import static java.lang.Math.asin;
+import static java.lang.Math.atan;
+import static java.lang.Math.atan2;
+import static java.lang.Math.cos;
+import static java.lang.Math.exp;
+import static java.lang.Math.log;
+import static java.lang.Math.pow;
+import static java.lang.Math.sin;
+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;
 
@@ -10,7 +21,7 @@
 
 /**
- * Projection for the SwissGrid CH1903 / L03, see http://de.wikipedia.org/wiki/Swiss_Grid.
+ * Projection for the SwissGrid CH1903 / L03, see http://en.wikipedia.org/wiki/Swiss_coordinate_system.
  *
- * Calculations are based on formula from
+ * Calculations were originally based on simple formula from
  * http://www.swisstopo.admin.ch/internet/swisstopo/en/home/topics/survey/sys/refsys/switzerland.parsysrelated1.37696.downloadList.12749.DownloadFile.tmp/ch1903wgs84en.pdf
  *
