diff --git a/pom.xml b/pom.xml
index 986acccc1bd2731accc37191f02ded37fdc1cbbb..3e180a5ea172f27099d08ba365b80b77e643af31 100644
--- a/pom.xml
+++ b/pom.xml
@@ -4,7 +4,7 @@
   <modelVersion>4.0.0</modelVersion>
   <groupId>org.orekit</groupId>
   <artifactId>rugged</artifactId>
-  <version>2.1-SNAPSHOT</version>
+  <version>2.2-SNAPSHOT</version>
   <packaging>jar</packaging>
   <name>Rugged</name>
   <url>https://www.orekit.org/rugged</url>
@@ -19,7 +19,7 @@
 
     
     <!-- COTS version -->
-    <rugged.orekit.version>9.3</rugged.orekit.version>
+    <rugged.orekit.version>9.3.1</rugged.orekit.version>
     <rugged.hipparchus.version>1.4</rugged.hipparchus.version>
     <rugged.junit.version>4.12</rugged.junit.version>
     
diff --git a/src/changes/changes.xml b/src/changes/changes.xml
index b7e3451fcbc4b74c6a0750b4aef18a01ef304c2a..47f72748b0928a4e73db0b7d82d8628517735c55 100644
--- a/src/changes/changes.xml
+++ b/src/changes/changes.xml
@@ -20,11 +20,15 @@
     <title>Rugged Changes</title>
   </properties>
   <body>
-     <release version="2.1-SNAPSHOT" date="TBD" description="TTBD">
+     <release version="2.2-SNAPSHOT" date="TBD" description="TBD">
+     </release>
+     <release version="2.1" date="2019-03-14" description="This is a minor release.
+     It adds refraction in inverse location and fixes a few bugs. This version depends
+     on Orekit 9.3 and Hipparchus 1.4.">
       <action dev="guylaine" type="update">
         Updated dependencies to Orekit 9.3 and Hipparchus 1.4.
       </action>
-      <action dev="guylaine" type="fix" issue="376">
+      <action dev="luc" type="fix" issue="376">
         Direct location may result to a null result in some very rugged region.
         In Duvenhage algorithm, in the refineIntersection method for the DEM, 
         some rare cases led to no intersection (as a result from SimpleTile.cellIntersection) 
diff --git a/src/main/java/org/orekit/rugged/refraction/AtmosphericRefraction.java b/src/main/java/org/orekit/rugged/refraction/AtmosphericRefraction.java
index b2bf1bc99b0305ff087095c1cdb8e5cecb97724c..16c3c9c42b4f9a903b00e9b02ce833d48dec9a6c 100644
--- a/src/main/java/org/orekit/rugged/refraction/AtmosphericRefraction.java
+++ b/src/main/java/org/orekit/rugged/refraction/AtmosphericRefraction.java
@@ -37,7 +37,7 @@ public abstract class AtmosphericRefraction {
      * By default: computation is set up.
      * @since 2.1
      */
-    private boolean mustBeComputed = true;
+    private boolean mustBeComputed;
 
     /** The current atmospheric parameters.
      * @since 2.1
@@ -47,12 +47,12 @@ public abstract class AtmosphericRefraction {
     /** Bilinear interpolating function for pixel (used by inverse location).
      * @since 2.1
     */
-    private BilinearInterpolatingFunction bifPixel = null;
+    private BilinearInterpolatingFunction bifPixel;
 
     /** Bilinear interpolating function of line (used by inverse location).
      * @since 2.1
     */
-    private BilinearInterpolatingFunction bifLine = null;
+    private BilinearInterpolatingFunction bifLine;
 
     /**
      * Default constructor.
@@ -60,6 +60,9 @@ public abstract class AtmosphericRefraction {
     protected AtmosphericRefraction() {
         // Set up the atmospheric parameters ... with lazy evaluation of the grid (done only if necessary)
         this.atmosphericParams = new AtmosphericComputationParameters();
+        this.mustBeComputed    = true;
+        this.bifPixel          = null;
+        this.bifLine           = null;
     }
 
     /** Apply correction to the intersected point with an atmospheric refraction model.
@@ -74,23 +77,6 @@ public abstract class AtmosphericRefraction {
     public abstract NormalizedGeodeticPoint applyCorrection(Vector3D satPos, Vector3D satLos, NormalizedGeodeticPoint rawIntersection,
                                             IntersectionAlgorithm algorithm);
 
-    /** Apply correction to the intersected point with an atmospheric refraction model,
-     * using a time optimized algorithm.
-     * @param lineSensor the line sensor
-     * @param sensorPixel the sensor pixel (must be defined)
-     * @param satPos satellite position, in <em>body frame</em>
-     * @param satLos sensor pixel line of sight, in <em>body frame</em>
-     * @param rawIntersection intersection point before refraction correction
-     * @param algorithm intersection algorithm
-     * @return corrected point with the effect of atmospheric refraction
-     * {@link org.orekit.rugged.utils.ExtendedEllipsoid#pointAtAltitude(Vector3D, Vector3D, double)} or see
-     * {@link org.orekit.rugged.intersection.IntersectionAlgorithm#refineIntersection(org.orekit.rugged.utils.ExtendedEllipsoid, Vector3D, Vector3D, NormalizedGeodeticPoint)}
-     * @since 2.1
-     */
-    public abstract NormalizedGeodeticPoint applyCorrection(LineSensor lineSensor, SensorPixel sensorPixel,
-                                            Vector3D satPos, Vector3D satLos, NormalizedGeodeticPoint rawIntersection,
-                                            IntersectionAlgorithm algorithm);
-
     /** Deactivate computation (needed for the inverse location computation).
      * @since 2.1
      */
diff --git a/src/main/java/org/orekit/rugged/refraction/MultiLayerModel.java b/src/main/java/org/orekit/rugged/refraction/MultiLayerModel.java
index 547c8ec03d744defdb7144689bfc9e086b0ab88a..2c1f1918896c3c2e8f545848727254d3cb7d80bc 100644
--- a/src/main/java/org/orekit/rugged/refraction/MultiLayerModel.java
+++ b/src/main/java/org/orekit/rugged/refraction/MultiLayerModel.java
@@ -26,8 +26,6 @@ import org.orekit.bodies.GeodeticPoint;
 import org.orekit.rugged.errors.RuggedException;
 import org.orekit.rugged.errors.RuggedMessages;
 import org.orekit.rugged.intersection.IntersectionAlgorithm;
-import org.orekit.rugged.linesensor.LineSensor;
-import org.orekit.rugged.linesensor.SensorPixel;
 import org.orekit.rugged.utils.ExtendedEllipsoid;
 import org.orekit.rugged.utils.NormalizedGeodeticPoint;
 
@@ -248,17 +246,6 @@ public class MultiLayerModel extends AtmosphericRefraction {
         return algorithm.refineIntersection(ellipsoid, pos, los, rawIntersection);
     }
 
-    /** {@inheritDoc} */
-    @Override
-    public NormalizedGeodeticPoint applyCorrection(final LineSensor lineSensor, final SensorPixel sensorPixel,
-                                                   final Vector3D satPos, final Vector3D satLos,
-                                                   final NormalizedGeodeticPoint rawIntersection,
-                                                   final IntersectionAlgorithm algorithm) {
-
-        // TODO to be done
-        throw new RuggedException(RuggedMessages.UNINITIALIZED_CONTEXT, "Atmospheric optimization for direct loc");
-    }
-
 } // end of class MultiLayerModel
 
 /** Container for the (position, LOS) of the intersection with the lowest atmospheric layer.
diff --git a/src/site/markdown/downloads.md b/src/site/markdown/downloads.md
index 448dd956f826ba54fd028e860ff8b54621207032..d955d8430634d4a80134f6f1ae7f707d78bdaacc 100644
--- a/src/site/markdown/downloads.md
+++ b/src/site/markdown/downloads.md
@@ -44,6 +44,12 @@ internal mechanism will download automatically all artifacts and dependencies
 as required.
 
 
+|  package |                                              link                                                         |
+|----------|-----------------------------------------------------------------------------------------------------------|
+|  source  | [`rugged-2.1-sources.zip`](https://gitlab.orekit.org/orekit/rugged/uploads/a8ed096b6e9b5d1088ad135ac29fce9d/rugged-2.1-sources.zip)    |
+|  binary  | [`rugged-2.1.jar`](https://gitlab.orekit.org/orekit/rugged/uploads/4b9041f962ed8cd3b55164873bb5c861/rugged-2.1.jar)                    |
+version 2.1 downloads (release date: 2019-03-14)
+
 |  package |                                              link                                                         |
 |----------|-----------------------------------------------------------------------------------------------------------|
 |  source  | [`rugged-2.0-sources.zip`](https://gitlab.orekit.org/orekit/rugged/uploads/f7f30111d4d3cef19636cb7c504530dd/rugged-2.0-sources.zip)    |
diff --git a/src/test/java/org/orekit/rugged/intersection/AbstractAlgorithmTest.java b/src/test/java/org/orekit/rugged/intersection/AbstractAlgorithmTest.java
index 67eef7ba0960bc48d41b070fecd8eb13ce1c9dea..b7741d2e56195829ff2ecaada0fc60d155f7c846 100644
--- a/src/test/java/org/orekit/rugged/intersection/AbstractAlgorithmTest.java
+++ b/src/test/java/org/orekit/rugged/intersection/AbstractAlgorithmTest.java
@@ -130,6 +130,8 @@ public abstract class AbstractAlgorithmTest {
         Vector3D groundP = earth.transform(groundGP);
 
         final IntersectionAlgorithm algorithm = createAlgorithm(updater, 8);
+        Assert.assertEquals(  0.0, algorithm.getElevation(latitude, longitude - 2.0e-5), 1.0e-6);
+        Assert.assertEquals(120.0, algorithm.getElevation(latitude, longitude + 2.0e-5), 1.0e-6);
 
         // preliminary check: the point has been chosen in the spacecraft (YZ) plane
         Transform earthToSpacecraft = new Transform(state.getDate(),