diff --git a/design/direct-location-class-diagram.puml b/design/direct-location-class-diagram.puml
index 945487f25a8868a3ad4c28d056b9728be2b13be6..7cdaf5ae339f260361c781204d775a355c451246 100644
--- a/design/direct-location-class-diagram.puml
+++ b/design/direct-location-class-diagram.puml
@@ -58,19 +58,22 @@
       class Rugged {
         +directLocation(sensorName, line)
       }
-      class LineSensor
       IntersectionAlgorithm "1" <--o Rugged : delegate DEM intersection
       ExtendedEllipsoid <-- Rugged : convert geodetic points
+      SpacecraftToObservedBody <-- Rugged : convert positions/directions
+    }
+
+    package linesensor #DDEBD8 {
+      class LineSensor
       Rugged --> LineSensor : getLOS(date, pixel)
       Rugged --> LineSensor : getDate(line)
-      SpacecraftToObservedBody <-- Rugged : convert positions/directions
     }
 
   }
 
   package mission.specific #C4D2C5 {
     class UserMain #D5E0D5/E2EBE2
-    Rugged              <-- UserMain
+    UserMain -->  Rugged 
   }
 
 @enduml
diff --git a/design/initialization-class-diagram.puml b/design/initialization-class-diagram.puml
index 8c81c1a0511b3a983b5b0ac67e280554e08e3617..97760af90a6baac5c0baee7217963d27a163a5c9 100644
--- a/design/initialization-class-diagram.puml
+++ b/design/initialization-class-diagram.puml
@@ -92,21 +92,24 @@
         +TOD
         +VEIS1950
       }
-      class LineSensor
-      ExtendedEllipsoid        "1" <--o Rugged
+       ExtendedEllipsoid        "1" <--o Rugged
       SpacecraftToObservedBody "1" <--o Rugged
-      Rugged o--> "*" LineSensor 
       Rugged --> AlgorithmId
       Rugged --> EllipsoidId
       Rugged --> BodyRotatingFrameId
       Rugged --> InertialFrameId
 
-      UserMain    -->  LineSensor  : creates
       MissionSpecificDEM --|> TileUpdater
       UserMain    -->  Rugged      : configures
 
     }
 
+    package linesensor #DDEBD8 {
+      class LineSensor
+      Rugged   o--> "*" LineSensor 
+      UserMain  -->  LineSensor  : creates
+    }
+
   }
 
 @enduml
diff --git a/src/main/java/org/orekit/rugged/api/Rugged.java b/src/main/java/org/orekit/rugged/api/Rugged.java
index 949f56ba06d3e1fd8db4579acf769c76c30a59fa..b90859af951fb9e0cd44fec0d2cdb699041820fe 100644
--- a/src/main/java/org/orekit/rugged/api/Rugged.java
+++ b/src/main/java/org/orekit/rugged/api/Rugged.java
@@ -26,7 +26,13 @@ import org.apache.commons.math3.geometry.euclidean.threed.Vector3D;
 import org.apache.commons.math3.util.FastMath;
 import org.orekit.bodies.GeodeticPoint;
 import org.orekit.frames.Transform;
+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.SensorMeanPlaneCrossing;
+import org.orekit.rugged.linesensor.SensorPixel;
+import org.orekit.rugged.linesensor.SensorPixelCrossing;
 import org.orekit.rugged.utils.ExtendedEllipsoid;
 import org.orekit.rugged.utils.NormalizedGeodeticPoint;
 import org.orekit.rugged.utils.SpacecraftToObservedBody;
diff --git a/src/main/java/org/orekit/rugged/api/RuggedBuilder.java b/src/main/java/org/orekit/rugged/api/RuggedBuilder.java
index b96960c8aa0afb79f74c97bd7e7ee40337aebdae..1518690581e5f14316597e62468efc769942060c 100644
--- a/src/main/java/org/orekit/rugged/api/RuggedBuilder.java
+++ b/src/main/java/org/orekit/rugged/api/RuggedBuilder.java
@@ -36,10 +36,13 @@ import org.orekit.frames.FramesFactory;
 import org.orekit.propagation.Propagator;
 import org.orekit.propagation.SpacecraftState;
 import org.orekit.propagation.sampling.OrekitFixedStepHandler;
+import org.orekit.rugged.errors.RuggedException;
+import org.orekit.rugged.errors.RuggedMessages;
 import org.orekit.rugged.intersection.BasicScanAlgorithm;
 import org.orekit.rugged.intersection.IgnoreDEMAlgorithm;
 import org.orekit.rugged.intersection.IntersectionAlgorithm;
 import org.orekit.rugged.intersection.duvenhage.DuvenhageAlgorithm;
+import org.orekit.rugged.linesensor.LineSensor;
 import org.orekit.rugged.raster.TileUpdater;
 import org.orekit.rugged.utils.ExtendedEllipsoid;
 import org.orekit.rugged.utils.SpacecraftToObservedBody;
diff --git a/src/main/java/org/orekit/rugged/api/RuggedException.java b/src/main/java/org/orekit/rugged/errors/RuggedException.java
similarity index 99%
rename from src/main/java/org/orekit/rugged/api/RuggedException.java
rename to src/main/java/org/orekit/rugged/errors/RuggedException.java
index 13e0ea9fd1ee87d9abe371fea31a77e3eb2d0331..a74d10f85aad236aa33edb8c9e90589e6cba55e0 100644
--- a/src/main/java/org/orekit/rugged/api/RuggedException.java
+++ b/src/main/java/org/orekit/rugged/errors/RuggedException.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.orekit.rugged.api;
+package org.orekit.rugged.errors;
 
 import java.text.MessageFormat;
 import java.util.Locale;
diff --git a/src/main/java/org/orekit/rugged/api/RuggedMessages.java b/src/main/java/org/orekit/rugged/errors/RuggedMessages.java
similarity index 99%
rename from src/main/java/org/orekit/rugged/api/RuggedMessages.java
rename to src/main/java/org/orekit/rugged/errors/RuggedMessages.java
index 1e8f5dc2733044b32d0897a4a165737487216b85..031d104b6a28588b87e15b1dd6ab5997c15410b4 100644
--- a/src/main/java/org/orekit/rugged/api/RuggedMessages.java
+++ b/src/main/java/org/orekit/rugged/errors/RuggedMessages.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.orekit.rugged.api;
+package org.orekit.rugged.errors;
 
 import java.io.IOException;
 import java.io.InputStream;
diff --git a/src/main/java/org/orekit/rugged/intersection/BasicScanAlgorithm.java b/src/main/java/org/orekit/rugged/intersection/BasicScanAlgorithm.java
index 68313b438722f96fa73457db82d34531f65285c8..be54eeef6e269fa942ae03aee2f5e4fae8a1dcc4 100644
--- a/src/main/java/org/orekit/rugged/intersection/BasicScanAlgorithm.java
+++ b/src/main/java/org/orekit/rugged/intersection/BasicScanAlgorithm.java
@@ -23,7 +23,7 @@ import org.apache.commons.math3.geometry.euclidean.threed.Vector3D;
 import org.apache.commons.math3.util.FastMath;
 import org.orekit.bodies.GeodeticPoint;
 import org.orekit.errors.OrekitException;
-import org.orekit.rugged.api.RuggedException;
+import org.orekit.rugged.errors.RuggedException;
 import org.orekit.rugged.raster.SimpleTile;
 import org.orekit.rugged.raster.SimpleTileFactory;
 import org.orekit.rugged.raster.Tile;
diff --git a/src/main/java/org/orekit/rugged/intersection/IgnoreDEMAlgorithm.java b/src/main/java/org/orekit/rugged/intersection/IgnoreDEMAlgorithm.java
index 232fb2d92ee07704d0153293a06411d651e5f9ce..182204fc66c7cebabb7db2128a38986f8074f88e 100644
--- a/src/main/java/org/orekit/rugged/intersection/IgnoreDEMAlgorithm.java
+++ b/src/main/java/org/orekit/rugged/intersection/IgnoreDEMAlgorithm.java
@@ -17,7 +17,7 @@
 package org.orekit.rugged.intersection;
 
 import org.apache.commons.math3.geometry.euclidean.threed.Vector3D;
-import org.orekit.rugged.api.RuggedException;
+import org.orekit.rugged.errors.RuggedException;
 import org.orekit.rugged.utils.ExtendedEllipsoid;
 import org.orekit.rugged.utils.NormalizedGeodeticPoint;
 
diff --git a/src/main/java/org/orekit/rugged/intersection/IntersectionAlgorithm.java b/src/main/java/org/orekit/rugged/intersection/IntersectionAlgorithm.java
index 43795c8898b806275337da04fde7987b83c3d4ab..5fbbe858a225441aafc69c786e812d45808762f0 100644
--- a/src/main/java/org/orekit/rugged/intersection/IntersectionAlgorithm.java
+++ b/src/main/java/org/orekit/rugged/intersection/IntersectionAlgorithm.java
@@ -17,7 +17,7 @@
 package org.orekit.rugged.intersection;
 
 import org.apache.commons.math3.geometry.euclidean.threed.Vector3D;
-import org.orekit.rugged.api.RuggedException;
+import org.orekit.rugged.errors.RuggedException;
 import org.orekit.rugged.utils.ExtendedEllipsoid;
 import org.orekit.rugged.utils.NormalizedGeodeticPoint;
 
diff --git a/src/main/java/org/orekit/rugged/intersection/duvenhage/DuvenhageAlgorithm.java b/src/main/java/org/orekit/rugged/intersection/duvenhage/DuvenhageAlgorithm.java
index 7a7a39d168f438be9d347259e25b745b5b7460cb..b4ec8623f9851459c9c7e70ae7afea0914d0f889 100644
--- a/src/main/java/org/orekit/rugged/intersection/duvenhage/DuvenhageAlgorithm.java
+++ b/src/main/java/org/orekit/rugged/intersection/duvenhage/DuvenhageAlgorithm.java
@@ -20,8 +20,8 @@ import org.apache.commons.math3.geometry.euclidean.threed.Vector3D;
 import org.apache.commons.math3.util.FastMath;
 import org.orekit.bodies.GeodeticPoint;
 import org.orekit.errors.OrekitException;
-import org.orekit.rugged.api.RuggedException;
-import org.orekit.rugged.api.RuggedMessages;
+import org.orekit.rugged.errors.RuggedException;
+import org.orekit.rugged.errors.RuggedMessages;
 import org.orekit.rugged.intersection.IntersectionAlgorithm;
 import org.orekit.rugged.raster.Tile;
 import org.orekit.rugged.raster.TileUpdater;
diff --git a/src/main/java/org/orekit/rugged/api/LineDatation.java b/src/main/java/org/orekit/rugged/linesensor/LineDatation.java
similarity index 97%
rename from src/main/java/org/orekit/rugged/api/LineDatation.java
rename to src/main/java/org/orekit/rugged/linesensor/LineDatation.java
index 3686aabf7c26980ed25a81a09adafe007df79203..f02f6aba8ed3a9dde4e0401f979bef2f3fc8a99e 100644
--- a/src/main/java/org/orekit/rugged/api/LineDatation.java
+++ b/src/main/java/org/orekit/rugged/linesensor/LineDatation.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.orekit.rugged.api;
+package org.orekit.rugged.linesensor;
 
 import org.orekit.time.AbsoluteDate;
 
diff --git a/src/main/java/org/orekit/rugged/api/LineSensor.java b/src/main/java/org/orekit/rugged/linesensor/LineSensor.java
similarity index 97%
rename from src/main/java/org/orekit/rugged/api/LineSensor.java
rename to src/main/java/org/orekit/rugged/linesensor/LineSensor.java
index fdf48f43afd672455584239dfac09924c4a85717..bd1d9155afdee3fb55252c4a0442ed255644a5c6 100644
--- a/src/main/java/org/orekit/rugged/api/LineSensor.java
+++ b/src/main/java/org/orekit/rugged/linesensor/LineSensor.java
@@ -14,11 +14,12 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.orekit.rugged.api;
+package org.orekit.rugged.linesensor;
 
 import java.util.List;
 
 import org.apache.commons.math3.geometry.euclidean.threed.Vector3D;
+import org.orekit.rugged.los.TimeDependentLOS;
 import org.orekit.time.AbsoluteDate;
 
 /** Line sensor model.
diff --git a/src/main/java/org/orekit/rugged/api/LinearLineDatation.java b/src/main/java/org/orekit/rugged/linesensor/LinearLineDatation.java
similarity index 98%
rename from src/main/java/org/orekit/rugged/api/LinearLineDatation.java
rename to src/main/java/org/orekit/rugged/linesensor/LinearLineDatation.java
index 067a5858d9b29cc36c9c31d2254dd202f9db308a..6418af48e1888c8a1fc3b8973bff3187f9cf9474 100644
--- a/src/main/java/org/orekit/rugged/api/LinearLineDatation.java
+++ b/src/main/java/org/orekit/rugged/linesensor/LinearLineDatation.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.orekit.rugged.api;
+package org.orekit.rugged.linesensor;
 
 import org.orekit.time.AbsoluteDate;
 
diff --git a/src/main/java/org/orekit/rugged/api/SensorMeanPlaneCrossing.java b/src/main/java/org/orekit/rugged/linesensor/SensorMeanPlaneCrossing.java
similarity index 99%
rename from src/main/java/org/orekit/rugged/api/SensorMeanPlaneCrossing.java
rename to src/main/java/org/orekit/rugged/linesensor/SensorMeanPlaneCrossing.java
index 389bc2abd2fde1c95e1f5b07d379e124292cbd37..ccaccf8749cebb59fd62d3a5a0896057d2f38610 100644
--- a/src/main/java/org/orekit/rugged/api/SensorMeanPlaneCrossing.java
+++ b/src/main/java/org/orekit/rugged/linesensor/SensorMeanPlaneCrossing.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.orekit.rugged.api;
+package org.orekit.rugged.linesensor;
 
 import org.apache.commons.math3.analysis.differentiation.DerivativeStructure;
 import org.apache.commons.math3.geometry.euclidean.threed.FieldVector3D;
@@ -24,6 +24,7 @@ import org.apache.commons.math3.linear.RealMatrix;
 import org.apache.commons.math3.linear.SingularValueDecomposition;
 import org.apache.commons.math3.util.FastMath;
 import org.orekit.frames.Transform;
+import org.orekit.rugged.errors.RuggedException;
 import org.orekit.rugged.utils.SpacecraftToObservedBody;
 import org.orekit.time.AbsoluteDate;
 import org.orekit.utils.Constants;
@@ -35,7 +36,7 @@ import org.orekit.utils.PVCoordinates;
  * </p>
  * @author Luc Maisonobe
  */
-class SensorMeanPlaneCrossing {
+public class SensorMeanPlaneCrossing {
 
     /** Converter between spacecraft and body. */
     private final SpacecraftToObservedBody scToBody;
diff --git a/src/main/java/org/orekit/rugged/api/SensorPixel.java b/src/main/java/org/orekit/rugged/linesensor/SensorPixel.java
similarity index 97%
rename from src/main/java/org/orekit/rugged/api/SensorPixel.java
rename to src/main/java/org/orekit/rugged/linesensor/SensorPixel.java
index 1c8ddb5d8d3a12aba26282cb04330f8ce3fc0428..026737d86b5c6313176878959a0b84510fe6f462 100644
--- a/src/main/java/org/orekit/rugged/api/SensorPixel.java
+++ b/src/main/java/org/orekit/rugged/linesensor/SensorPixel.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.orekit.rugged.api;
+package org.orekit.rugged.linesensor;
 
 import java.io.Serializable;
 
diff --git a/src/main/java/org/orekit/rugged/api/SensorPixelCrossing.java b/src/main/java/org/orekit/rugged/linesensor/SensorPixelCrossing.java
similarity index 97%
rename from src/main/java/org/orekit/rugged/api/SensorPixelCrossing.java
rename to src/main/java/org/orekit/rugged/linesensor/SensorPixelCrossing.java
index 1c3f85c28dd5b07c99e161284e48e01a35eb971c..db3cdaeea5aacfe69fee2c05e88374cad15d3369 100644
--- a/src/main/java/org/orekit/rugged/api/SensorPixelCrossing.java
+++ b/src/main/java/org/orekit/rugged/linesensor/SensorPixelCrossing.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.orekit.rugged.api;
+package org.orekit.rugged.linesensor;
 
 import org.apache.commons.math3.analysis.UnivariateFunction;
 import org.apache.commons.math3.analysis.solvers.BracketingNthOrderBrentSolver;
@@ -24,6 +24,7 @@ import org.apache.commons.math3.exception.TooManyEvaluationsException;
 import org.apache.commons.math3.geometry.euclidean.threed.Vector3D;
 import org.apache.commons.math3.util.FastMath;
 import org.orekit.errors.OrekitExceptionWrapper;
+import org.orekit.rugged.errors.RuggedException;
 import org.orekit.time.AbsoluteDate;
 
 /** Class devoted to locate where ground point crosses a sensor line.
@@ -32,7 +33,7 @@ import org.orekit.time.AbsoluteDate;
  * </p>
  * @author Luc Maisonobe
  */
-class SensorPixelCrossing {
+public class SensorPixelCrossing {
 
     /** Margin before and after end pixels, in order to avoid search failures near boundaries. */
     private static final double MARGIN = 5.0;
diff --git a/src/main/java/org/orekit/rugged/api/FixedLOS.java b/src/main/java/org/orekit/rugged/los/FixedLOS.java
similarity index 94%
rename from src/main/java/org/orekit/rugged/api/FixedLOS.java
rename to src/main/java/org/orekit/rugged/los/FixedLOS.java
index 5e6cd7b95800c0e9120b38737062693d1b3f75c6..4ffc243526bee29846501f3a0de7b34ddb991cdb 100644
--- a/src/main/java/org/orekit/rugged/api/FixedLOS.java
+++ b/src/main/java/org/orekit/rugged/los/FixedLOS.java
@@ -14,9 +14,10 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.orekit.rugged.api;
+package org.orekit.rugged.los;
 
 import org.apache.commons.math3.geometry.euclidean.threed.Vector3D;
+import org.orekit.rugged.linesensor.LineSensor;
 import org.orekit.time.AbsoluteDate;
 
 /** Line-of-sight which does not depends on time.
diff --git a/src/main/java/org/orekit/rugged/api/TimeDependentLOS.java b/src/main/java/org/orekit/rugged/los/TimeDependentLOS.java
similarity index 94%
rename from src/main/java/org/orekit/rugged/api/TimeDependentLOS.java
rename to src/main/java/org/orekit/rugged/los/TimeDependentLOS.java
index d7f6014a141bba5a5d6c623e5275acaf2adb3e8a..6a7c7059b3b21ae8008b9203f2e3069a0774bfb5 100644
--- a/src/main/java/org/orekit/rugged/api/TimeDependentLOS.java
+++ b/src/main/java/org/orekit/rugged/los/TimeDependentLOS.java
@@ -14,9 +14,10 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.orekit.rugged.api;
+package org.orekit.rugged.los;
 
 import org.apache.commons.math3.geometry.euclidean.threed.Vector3D;
+import org.orekit.rugged.linesensor.LineSensor;
 import org.orekit.time.AbsoluteDate;
 
 /** Interface representing a line-of-sight which depends on time.
diff --git a/src/main/java/org/orekit/rugged/raster/SimpleTile.java b/src/main/java/org/orekit/rugged/raster/SimpleTile.java
index d1a08daaa3028b3c485c25bcba664dfc04a55e29..56b861c80ea9614ef4ef7d8d35e9950328fbb312 100644
--- a/src/main/java/org/orekit/rugged/raster/SimpleTile.java
+++ b/src/main/java/org/orekit/rugged/raster/SimpleTile.java
@@ -20,8 +20,8 @@ import org.apache.commons.math3.geometry.euclidean.threed.Vector3D;
 import org.apache.commons.math3.util.FastMath;
 import org.apache.commons.math3.util.Precision;
 import org.orekit.bodies.GeodeticPoint;
-import org.orekit.rugged.api.RuggedException;
-import org.orekit.rugged.api.RuggedMessages;
+import org.orekit.rugged.errors.RuggedException;
+import org.orekit.rugged.errors.RuggedMessages;
 import org.orekit.rugged.utils.NormalizedGeodeticPoint;
 
 
diff --git a/src/main/java/org/orekit/rugged/raster/Tile.java b/src/main/java/org/orekit/rugged/raster/Tile.java
index b0ce5bbf75171e4e9c4575ae7532bed1d72e9998..31f424f6f6a41a5006b34e62318d3c1444c60c8f 100644
--- a/src/main/java/org/orekit/rugged/raster/Tile.java
+++ b/src/main/java/org/orekit/rugged/raster/Tile.java
@@ -18,7 +18,7 @@ package org.orekit.rugged.raster;
 
 import org.apache.commons.math3.geometry.euclidean.threed.Vector3D;
 import org.orekit.bodies.GeodeticPoint;
-import org.orekit.rugged.api.RuggedException;
+import org.orekit.rugged.errors.RuggedException;
 import org.orekit.rugged.utils.NormalizedGeodeticPoint;
 
 /** Interface representing a raster tile.
diff --git a/src/main/java/org/orekit/rugged/raster/TileUpdater.java b/src/main/java/org/orekit/rugged/raster/TileUpdater.java
index 45fc62daf186416c5d3435da843a5cd834444d05..051c4bf25ddd41b911ab022ef4e9afbb3b627601 100644
--- a/src/main/java/org/orekit/rugged/raster/TileUpdater.java
+++ b/src/main/java/org/orekit/rugged/raster/TileUpdater.java
@@ -16,7 +16,7 @@
  */
 package org.orekit.rugged.raster;
 
-import org.orekit.rugged.api.RuggedException;
+import org.orekit.rugged.errors.RuggedException;
 
 /** Interface used to update Digital Elevation Model tiles.
  * <p>
diff --git a/src/main/java/org/orekit/rugged/raster/TilesCache.java b/src/main/java/org/orekit/rugged/raster/TilesCache.java
index 901233080f9ce0f1e13c09df953ee3c44ecf0766..6cfeffb41e5309601459f41b1dd6edc392404692 100644
--- a/src/main/java/org/orekit/rugged/raster/TilesCache.java
+++ b/src/main/java/org/orekit/rugged/raster/TilesCache.java
@@ -25,8 +25,8 @@ import java.util.Iterator;
 import java.util.List;
 
 import org.apache.commons.math3.util.FastMath;
-import org.orekit.rugged.api.RuggedException;
-import org.orekit.rugged.api.RuggedMessages;
+import org.orekit.rugged.errors.RuggedException;
+import org.orekit.rugged.errors.RuggedMessages;
 import org.orekit.rugged.raster.Tile.Location;
 
 /** Cache for Digital Elevation Model {@link Tile tiles}.
diff --git a/src/main/java/org/orekit/rugged/raster/UpdatableTile.java b/src/main/java/org/orekit/rugged/raster/UpdatableTile.java
index 51fb1141feffcc86fbc8d697ce7f98e9488888c2..c557155b6339bd2b31cc698c12817d40eac962cd 100644
--- a/src/main/java/org/orekit/rugged/raster/UpdatableTile.java
+++ b/src/main/java/org/orekit/rugged/raster/UpdatableTile.java
@@ -16,7 +16,7 @@
  */
 package org.orekit.rugged.raster;
 
-import org.orekit.rugged.api.RuggedException;
+import org.orekit.rugged.errors.RuggedException;
 
 /** Interface representing one tile of a raster Digital Elevation Model.
  * @author Luc Maisonobe
diff --git a/src/main/java/org/orekit/rugged/utils/ExtendedEllipsoid.java b/src/main/java/org/orekit/rugged/utils/ExtendedEllipsoid.java
index 0e624b38e2b6ad55abca1c11fd14c975e8fa3a9a..50136621e5917b8ab46d324b0c66a2c780ed301d 100644
--- a/src/main/java/org/orekit/rugged/utils/ExtendedEllipsoid.java
+++ b/src/main/java/org/orekit/rugged/utils/ExtendedEllipsoid.java
@@ -23,8 +23,8 @@ import org.orekit.bodies.GeodeticPoint;
 import org.orekit.bodies.OneAxisEllipsoid;
 import org.orekit.errors.OrekitException;
 import org.orekit.frames.Frame;
-import org.orekit.rugged.api.RuggedException;
-import org.orekit.rugged.api.RuggedMessages;
+import org.orekit.rugged.errors.RuggedException;
+import org.orekit.rugged.errors.RuggedMessages;
 import org.orekit.time.AbsoluteDate;
 
 /** Transform provider from Spacecraft frame to observed body frame.
diff --git a/src/main/java/org/orekit/rugged/utils/SpacecraftToObservedBody.java b/src/main/java/org/orekit/rugged/utils/SpacecraftToObservedBody.java
index 5ce80bad68b4f4cb060298d33dac579c34850e2c..f1950bd790cce4014e5ca85949b61b5e6977c56d 100644
--- a/src/main/java/org/orekit/rugged/utils/SpacecraftToObservedBody.java
+++ b/src/main/java/org/orekit/rugged/utils/SpacecraftToObservedBody.java
@@ -24,8 +24,8 @@ import org.apache.commons.math3.util.FastMath;
 import org.orekit.errors.OrekitException;
 import org.orekit.frames.Frame;
 import org.orekit.frames.Transform;
-import org.orekit.rugged.api.RuggedException;
-import org.orekit.rugged.api.RuggedMessages;
+import org.orekit.rugged.errors.RuggedException;
+import org.orekit.rugged.errors.RuggedMessages;
 import org.orekit.time.AbsoluteDate;
 import org.orekit.utils.AngularDerivativesFilter;
 import org.orekit.utils.CartesianDerivativesFilter;
diff --git a/src/site/markdown/tutorials/direct-location-with-DEM.md b/src/site/markdown/tutorials/direct-location-with-DEM.md
index 9a6809ec75fc55cae64e2a20a9f71b3144d25736..a962a9cdb204ececae39d1c9e2d5932dac009ba5 100644
--- a/src/site/markdown/tutorials/direct-location-with-DEM.md
+++ b/src/site/markdown/tutorials/direct-location-with-DEM.md
@@ -41,7 +41,7 @@ Here's the source code of the class `VolcanicConeElevationUpdater` :
 
     import org.apache.commons.math3.util.FastMath;
     import org.orekit.bodies.GeodeticPoint;
-    import org.orekit.rugged.api.RuggedException;
+    import org.orekit.rugged.errors.RuggedException;
     import org.orekit.utils.Constants;
     
     public class VolcanicConeElevationUpdater implements TileUpdater {
diff --git a/src/site/markdown/tutorials/direct-location.md b/src/site/markdown/tutorials/direct-location.md
index 6f0005c61f434d6cba2c9c744f9b736b19798641..9074301dca12bfef4465cee6fc6ce1f477e14593 100644
--- a/src/site/markdown/tutorials/direct-location.md
+++ b/src/site/markdown/tutorials/direct-location.md
@@ -46,8 +46,8 @@ For this we need the following packages
     import org.apache.commons.math3.geometry.euclidean.threed.Rotation;
     import org.apache.commons.math3.geometry.euclidean.threed.Vector3D;
     import org.apache.commons.math3.util.FastMath;
-    import org.orekit.rugged.api.TimeDependentLOS;
-    import org.orekit.rugged.api.FixedLOS;
+    import org.orekit.rugged.los.TimeDependentLOS;
+    import org.orekit.rugged.los.FixedLOS;
 
 
 The viewing direction of pixel i with respect to the instrument is defined by the vector:
@@ -81,7 +81,7 @@ We use Orekit for handling time and dates, and Rugged for defining the datation
 
     import org.orekit.time.AbsoluteDate;
     import org.orekit.time.TimeScalesFactory;
-    import org.orekit.rugged.api.LinearLineDatation;
+    import org.orekit.rugged.linesensor.LinearLineDatation;
     AbsoluteDate absDate = new AbsoluteDate("2009-12-11T10:49:55.899994", TimeScalesFactory.getGPS());
     LinearLineDatation lineDatation = new LinearLineDatation(absDate, 1d, 20); 
 
@@ -96,7 +96,7 @@ need to worry about conversion.
 
 With the LOS and the datation now defined , we can initialize a line sensor object in Rugged:
 
-    import org.orekit.rugged.api.LineSensor;
+    import org.orekit.rugged.linesensor.LineSensor;
     LineSensor lineSensor = new LineSensor("mySensor", lineDatation, Vector3D.ZERO, lineOfSight);
 
 The first parameter is the nickname of the sensor. It is necessary because we can define multiple
@@ -187,7 +187,7 @@ Finally we can initialize Rugged. It looks like this:
     import org.orekit.rugged.api.EllipsoidId;
     import org.orekit.rugged.api.InertialFrameId;
     import org.orekit.rugged.api.Rugged;
-    import org.orekit.rugged.api.RuggedException;
+    import org.orekit.rugged.errors.RuggedException;
     import org.orekit.utils.AngularDerivativesFilter;
     import org.orekit.utils.CartesianDerivativesFilter;
     import org.orekit.utils.IERSConventions;
diff --git a/src/site/markdown/tutorials/inverse-location.md b/src/site/markdown/tutorials/inverse-location.md
index 275e87d5204694ef165e5c0b918532ac98dbc980..daadeeda39907e79868ce9f17b1005a0eda31f91 100644
--- a/src/site/markdown/tutorials/inverse-location.md
+++ b/src/site/markdown/tutorials/inverse-location.md
@@ -25,7 +25,7 @@ The initialisation of Rugged is similar as in the [Direct location](direct-locat
 Once Rugged initialised, one can compute the line number and the pixel number of a point defined by its Geodetic coordinates:
 
     import org.orekit.bodies.GeodeticPoint;
-    import org.orekit.rugged.api.SensorPixel;
+    import org.orekit.rugged.linesensor.SensorPixel;
     GeodeticPoint gp = new GeodeticPoint(latitude, longitude, altitude);
     SensorPixel sensorPixel = rugged.inverseLocation(sensorName, gp, minLine, maxLine);
 where minLine (maxLine, respectively) is the minimum line number for the search interval (maximum line number, respectively). 
diff --git a/src/site/xdoc/changes.xml b/src/site/xdoc/changes.xml
index 39a461a1632fd329f9869e17d4c2c7e4dd0f7caf..9f0e9d2f8bb833662398680092b43a43fd4442f5 100644
--- a/src/site/xdoc/changes.xml
+++ b/src/site/xdoc/changes.xml
@@ -22,6 +22,9 @@
   <body>
     <release version="1.0" date="TBD"
              description="TBD">
+      <action dev="luc" type="add" >
+        Reorganized packages.
+      </action>
       <action dev="luc" type="add" >
         Added getters to the RuggedBuilder.
       </action>
diff --git a/src/test/java/org/orekit/rugged/api/RuggedBuilderTest.java b/src/test/java/org/orekit/rugged/api/RuggedBuilderTest.java
index 175cbc16480b868dd54cdd624adb8fe2ff89b591..781ddba028f4cd240609c8b14ff79e081bf37539 100644
--- a/src/test/java/org/orekit/rugged/api/RuggedBuilderTest.java
+++ b/src/test/java/org/orekit/rugged/api/RuggedBuilderTest.java
@@ -64,6 +64,13 @@ import org.orekit.propagation.SpacecraftState;
 import org.orekit.propagation.analytical.KeplerianPropagator;
 import org.orekit.propagation.numerical.NumericalPropagator;
 import org.orekit.propagation.sampling.OrekitFixedStepHandler;
+import org.orekit.rugged.errors.RuggedException;
+import org.orekit.rugged.errors.RuggedMessages;
+import org.orekit.rugged.linesensor.LineDatation;
+import org.orekit.rugged.linesensor.LineSensor;
+import org.orekit.rugged.linesensor.LinearLineDatation;
+import org.orekit.rugged.los.FixedLOS;
+import org.orekit.rugged.los.TimeDependentLOS;
 import org.orekit.rugged.raster.RandomLandscapeUpdater;
 import org.orekit.rugged.raster.TileUpdater;
 import org.orekit.rugged.raster.VolcanicConeElevationUpdater;
diff --git a/src/test/java/org/orekit/rugged/api/RuggedTest.java b/src/test/java/org/orekit/rugged/api/RuggedTest.java
index 8a9bbc14399f6aea503b763825320aeacc289ab6..fcbcfbe352245afbeb8f0af3ee7642e71ccc4d1f 100644
--- a/src/test/java/org/orekit/rugged/api/RuggedTest.java
+++ b/src/test/java/org/orekit/rugged/api/RuggedTest.java
@@ -65,6 +65,14 @@ import org.orekit.propagation.SpacecraftState;
 import org.orekit.propagation.analytical.KeplerianPropagator;
 import org.orekit.propagation.numerical.NumericalPropagator;
 import org.orekit.propagation.sampling.OrekitFixedStepHandler;
+import org.orekit.rugged.errors.RuggedException;
+import org.orekit.rugged.errors.RuggedMessages;
+import org.orekit.rugged.linesensor.LineDatation;
+import org.orekit.rugged.linesensor.LineSensor;
+import org.orekit.rugged.linesensor.LinearLineDatation;
+import org.orekit.rugged.linesensor.SensorPixel;
+import org.orekit.rugged.los.FixedLOS;
+import org.orekit.rugged.los.TimeDependentLOS;
 import org.orekit.rugged.raster.RandomLandscapeUpdater;
 import org.orekit.rugged.raster.TileUpdater;
 import org.orekit.rugged.raster.VolcanicConeElevationUpdater;
diff --git a/src/test/java/org/orekit/rugged/api/RuggedMessagesTest.java b/src/test/java/org/orekit/rugged/errors/RuggedMessagesTest.java
similarity index 98%
rename from src/test/java/org/orekit/rugged/api/RuggedMessagesTest.java
rename to src/test/java/org/orekit/rugged/errors/RuggedMessagesTest.java
index c31773138b6d50795bbc5acc868e2cbec14651fc..41f8cc7f9854aeb2fa9abfd3ba7153edd3ef7506 100644
--- a/src/test/java/org/orekit/rugged/api/RuggedMessagesTest.java
+++ b/src/test/java/org/orekit/rugged/errors/RuggedMessagesTest.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.orekit.rugged.api;
+package org.orekit.rugged.errors;
 
 
 import java.text.MessageFormat;
@@ -24,6 +24,7 @@ import java.util.ResourceBundle;
 
 import org.junit.Assert;
 import org.junit.Test;
+import org.orekit.rugged.errors.RuggedMessages;
 
 public class RuggedMessagesTest {
 
diff --git a/src/test/java/org/orekit/rugged/intersection/AbstractAlgorithmTest.java b/src/test/java/org/orekit/rugged/intersection/AbstractAlgorithmTest.java
index 09be6ac0b70c8b54b65fad73717dafc6b0cfd31a..6637963574eaddad2366a6859ba08d08c6340caa 100644
--- a/src/test/java/org/orekit/rugged/intersection/AbstractAlgorithmTest.java
+++ b/src/test/java/org/orekit/rugged/intersection/AbstractAlgorithmTest.java
@@ -37,7 +37,7 @@ import org.orekit.frames.FramesFactory;
 import org.orekit.frames.Transform;
 import org.orekit.orbits.CartesianOrbit;
 import org.orekit.propagation.SpacecraftState;
-import org.orekit.rugged.api.RuggedException;
+import org.orekit.rugged.errors.RuggedException;
 import org.orekit.rugged.intersection.IntersectionAlgorithm;
 import org.orekit.rugged.intersection.duvenhage.MinMaxTreeTile;
 import org.orekit.rugged.intersection.duvenhage.MinMaxTreeTileFactory;
diff --git a/src/test/java/org/orekit/rugged/intersection/duvenhage/DuvenhageAlgorithmTest.java b/src/test/java/org/orekit/rugged/intersection/duvenhage/DuvenhageAlgorithmTest.java
index 0ccac1f702b3b30515d2d16c233ba27db0169355..dd8e9da900f8a6ac856ee3644edec2dfe2f82893 100644
--- a/src/test/java/org/orekit/rugged/intersection/duvenhage/DuvenhageAlgorithmTest.java
+++ b/src/test/java/org/orekit/rugged/intersection/duvenhage/DuvenhageAlgorithmTest.java
@@ -27,8 +27,8 @@ import org.junit.Assert;
 import org.junit.Test;
 import org.orekit.bodies.GeodeticPoint;
 import org.orekit.errors.OrekitException;
-import org.orekit.rugged.api.RuggedException;
-import org.orekit.rugged.api.RuggedMessages;
+import org.orekit.rugged.errors.RuggedException;
+import org.orekit.rugged.errors.RuggedMessages;
 import org.orekit.rugged.intersection.AbstractAlgorithmTest;
 import org.orekit.rugged.intersection.IntersectionAlgorithm;
 import org.orekit.rugged.raster.CheckedPatternElevationUpdater;
diff --git a/src/test/java/org/orekit/rugged/intersection/duvenhage/MinMaxTreeTileTest.java b/src/test/java/org/orekit/rugged/intersection/duvenhage/MinMaxTreeTileTest.java
index e5f87e03c417a5baecab5558487a28bf542cacbe..789cf4c1b134caa13245a190fc36f0219c26be6c 100644
--- a/src/test/java/org/orekit/rugged/intersection/duvenhage/MinMaxTreeTileTest.java
+++ b/src/test/java/org/orekit/rugged/intersection/duvenhage/MinMaxTreeTileTest.java
@@ -21,7 +21,7 @@ import java.lang.reflect.Field;
 import org.apache.commons.math3.util.FastMath;
 import org.junit.Assert;
 import org.junit.Test;
-import org.orekit.rugged.api.RuggedException;
+import org.orekit.rugged.errors.RuggedException;
 import org.orekit.rugged.intersection.duvenhage.MinMaxTreeTile;
 import org.orekit.rugged.intersection.duvenhage.MinMaxTreeTileFactory;
 
diff --git a/src/test/java/org/orekit/rugged/api/SensorMeanPlaneCrossingTest.java b/src/test/java/org/orekit/rugged/linesensor/SensorMeanPlaneCrossingTest.java
similarity index 96%
rename from src/test/java/org/orekit/rugged/api/SensorMeanPlaneCrossingTest.java
rename to src/test/java/org/orekit/rugged/linesensor/SensorMeanPlaneCrossingTest.java
index fb9d5c2bac3852ffa634517bb465c36bc1101513..845d725e9dc019b68ef432888498000b18d59759 100644
--- a/src/test/java/org/orekit/rugged/api/SensorMeanPlaneCrossingTest.java
+++ b/src/test/java/org/orekit/rugged/linesensor/SensorMeanPlaneCrossingTest.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.orekit.rugged.api;
+package org.orekit.rugged.linesensor;
 
 import java.io.File;
 import java.net.URISyntaxException;
@@ -44,8 +44,12 @@ import org.orekit.propagation.Propagator;
 import org.orekit.propagation.SpacecraftState;
 import org.orekit.propagation.analytical.KeplerianPropagator;
 import org.orekit.propagation.sampling.OrekitFixedStepHandler;
-import org.orekit.rugged.api.LinearLineDatation;
-import org.orekit.rugged.api.LineSensor;
+import org.orekit.rugged.errors.RuggedException;
+import org.orekit.rugged.linesensor.LineSensor;
+import org.orekit.rugged.linesensor.LinearLineDatation;
+import org.orekit.rugged.linesensor.SensorMeanPlaneCrossing;
+import org.orekit.rugged.los.FixedLOS;
+import org.orekit.rugged.los.TimeDependentLOS;
 import org.orekit.rugged.utils.SpacecraftToObservedBody;
 import org.orekit.time.AbsoluteDate;
 import org.orekit.utils.AngularDerivativesFilter;
diff --git a/src/test/java/org/orekit/rugged/raster/CheckedPatternElevationUpdater.java b/src/test/java/org/orekit/rugged/raster/CheckedPatternElevationUpdater.java
index 440bb92dc8d44f58868eae857c7f0e809b090379..11336382964ea37491b7aebd4251e08765dccd87 100644
--- a/src/test/java/org/orekit/rugged/raster/CheckedPatternElevationUpdater.java
+++ b/src/test/java/org/orekit/rugged/raster/CheckedPatternElevationUpdater.java
@@ -17,7 +17,7 @@
 package org.orekit.rugged.raster;
 
 import org.apache.commons.math3.util.FastMath;
-import org.orekit.rugged.api.RuggedException;
+import org.orekit.rugged.errors.RuggedException;
 
 public class CheckedPatternElevationUpdater implements TileUpdater {
 
diff --git a/src/test/java/org/orekit/rugged/raster/CliffsElevationUpdater.java b/src/test/java/org/orekit/rugged/raster/CliffsElevationUpdater.java
index 09b71b0472d8561b4f54d94356bc4ac839384ff9..36712d4ad4f3e77927661ca57b05d06847d0daf3 100644
--- a/src/test/java/org/orekit/rugged/raster/CliffsElevationUpdater.java
+++ b/src/test/java/org/orekit/rugged/raster/CliffsElevationUpdater.java
@@ -18,7 +18,7 @@ package org.orekit.rugged.raster;
 
 import org.apache.commons.math3.util.FastMath;
 import org.orekit.bodies.GeodeticPoint;
-import org.orekit.rugged.api.RuggedException;
+import org.orekit.rugged.errors.RuggedException;
 
 public class CliffsElevationUpdater implements TileUpdater {
 
diff --git a/src/test/java/org/orekit/rugged/raster/RandomLandscapeUpdater.java b/src/test/java/org/orekit/rugged/raster/RandomLandscapeUpdater.java
index 40c43b859e8dc4bfc26c9932e42991a37d2a8d9b..b257ef750f0a044916e180c3cdeeed51e5bf2e75 100644
--- a/src/test/java/org/orekit/rugged/raster/RandomLandscapeUpdater.java
+++ b/src/test/java/org/orekit/rugged/raster/RandomLandscapeUpdater.java
@@ -22,7 +22,7 @@ import org.apache.commons.math3.random.RandomGenerator;
 import org.apache.commons.math3.random.Well19937a;
 import org.apache.commons.math3.util.ArithmeticUtils;
 import org.apache.commons.math3.util.FastMath;
-import org.orekit.rugged.api.RuggedException;
+import org.orekit.rugged.errors.RuggedException;
 
 public class RandomLandscapeUpdater implements TileUpdater {
 
diff --git a/src/test/java/org/orekit/rugged/raster/SimpleTileTest.java b/src/test/java/org/orekit/rugged/raster/SimpleTileTest.java
index 66950871682ef547a2d38d9ba2e2fecf5f7e2682..20d66e07a7345cacdd68ea8b421dd28b4375f90e 100644
--- a/src/test/java/org/orekit/rugged/raster/SimpleTileTest.java
+++ b/src/test/java/org/orekit/rugged/raster/SimpleTileTest.java
@@ -21,8 +21,8 @@ import org.apache.commons.math3.util.FastMath;
 import org.junit.Assert;
 import org.junit.Test;
 import org.orekit.bodies.GeodeticPoint;
-import org.orekit.rugged.api.RuggedException;
-import org.orekit.rugged.api.RuggedMessages;
+import org.orekit.rugged.errors.RuggedException;
+import org.orekit.rugged.errors.RuggedMessages;
 import org.orekit.rugged.raster.SimpleTile;
 import org.orekit.rugged.raster.SimpleTileFactory;
 import org.orekit.rugged.raster.Tile;
diff --git a/src/test/java/org/orekit/rugged/raster/TilesCacheTest.java b/src/test/java/org/orekit/rugged/raster/TilesCacheTest.java
index 0f0ca1a6c14811ba012c7536889123393ff3fbe7..801d2d296ac1e30cbf305f5d0470551518ebce90 100644
--- a/src/test/java/org/orekit/rugged/raster/TilesCacheTest.java
+++ b/src/test/java/org/orekit/rugged/raster/TilesCacheTest.java
@@ -21,7 +21,7 @@ import org.apache.commons.math3.random.Well19937a;
 import org.apache.commons.math3.util.FastMath;
 import org.junit.Assert;
 import org.junit.Test;
-import org.orekit.rugged.api.RuggedException;
+import org.orekit.rugged.errors.RuggedException;
 import org.orekit.rugged.raster.SimpleTile;
 import org.orekit.rugged.raster.TilesCache;
 
diff --git a/src/test/java/org/orekit/rugged/raster/VolcanicConeElevationUpdater.java b/src/test/java/org/orekit/rugged/raster/VolcanicConeElevationUpdater.java
index fae00fd3946d38b05d50f0e0b991d32ba08e5315..32a0d21ff642be4fc6623fc45d33d1dbfa0035c2 100644
--- a/src/test/java/org/orekit/rugged/raster/VolcanicConeElevationUpdater.java
+++ b/src/test/java/org/orekit/rugged/raster/VolcanicConeElevationUpdater.java
@@ -18,7 +18,7 @@ package org.orekit.rugged.raster;
 
 import org.apache.commons.math3.util.FastMath;
 import org.orekit.bodies.GeodeticPoint;
-import org.orekit.rugged.api.RuggedException;
+import org.orekit.rugged.errors.RuggedException;
 import org.orekit.utils.Constants;
 
 public class VolcanicConeElevationUpdater implements TileUpdater {
diff --git a/src/test/java/org/orekit/rugged/utils/ExtendedEllipsoidTest.java b/src/test/java/org/orekit/rugged/utils/ExtendedEllipsoidTest.java
index c098c4ca1fb1be56b8d1f0851f988d73417adfc5..117c85e66be5573ffff7546ee3c4e21c7f978313 100644
--- a/src/test/java/org/orekit/rugged/utils/ExtendedEllipsoidTest.java
+++ b/src/test/java/org/orekit/rugged/utils/ExtendedEllipsoidTest.java
@@ -32,8 +32,8 @@ import org.orekit.data.DirectoryCrawler;
 import org.orekit.errors.OrekitException;
 import org.orekit.frames.Frame;
 import org.orekit.frames.FramesFactory;
-import org.orekit.rugged.api.RuggedException;
-import org.orekit.rugged.api.RuggedMessages;
+import org.orekit.rugged.errors.RuggedException;
+import org.orekit.rugged.errors.RuggedMessages;
 import org.orekit.rugged.utils.ExtendedEllipsoid;
 import org.orekit.utils.Constants;
 import org.orekit.utils.IERSConventions;