diff --git a/Code/Projections/otbForwardSensorModel.txx b/Code/Projections/otbForwardSensorModel.txx
index c1102e42c0f4f7d3b6470dfb88a06bbf6115ea06..31c2113888a09abc85ddf87470d7359c72032f3c 100644
--- a/Code/Projections/otbForwardSensorModel.txx
+++ b/Code/Projections/otbForwardSensorModel.txx
@@ -109,7 +109,7 @@ ForwardSensorModel< TScalarType, NInputDimensions, NOutputDimensions>
     this->m_Model->lineSampleHeightToWorld(ossimPoint, point[2], ossimGPoint);
   }
   //Use of average elevation
-  else if (this->m_AverageElevation != -10000)
+  else if (this->m_AverageElevation != -32768.0)
   {
     this->m_Model->lineSampleHeightToWorld(ossimPoint, this->m_AverageElevation, ossimGPoint);
   }
diff --git a/Code/Projections/otbGenericRSTransform.h b/Code/Projections/otbGenericRSTransform.h
index e3f352837b391c717800b7bb855436d264c5c4ca..85f47ce8b13aae858f2d3dcae977d6383f103cae 100644
--- a/Code/Projections/otbGenericRSTransform.h
+++ b/Code/Projections/otbGenericRSTransform.h
@@ -96,6 +96,9 @@ namespace otb
       itkSetStringMacro(DEMDirectory);
       itkGetStringMacro(DEMDirectory);
 
+      itkSetMacro(AverageElevation, double);
+      itkGetMacro(AverageElevation, double);
+
       /** Set/Get Dictionary*/
       const itk::MetaDataDictionary& GetInputDictionary() const
       {
@@ -207,6 +210,7 @@ namespace otb
       std::string m_InputProjectionRef;
       std::string m_OutputProjectionRef;
       std::string m_DEMDirectory;
+      double m_AverageElevation;
 
       SpacingType         m_InputSpacing;
       OriginType          m_InputOrigin;
diff --git a/Code/Projections/otbGenericRSTransform.txx b/Code/Projections/otbGenericRSTransform.txx
index 7ec3532d15ff564bb4e96d635a835d76d34a3e37..f77749f6d23104513e6542421efeebd602c4cac7 100644
--- a/Code/Projections/otbGenericRSTransform.txx
+++ b/Code/Projections/otbGenericRSTransform.txx
@@ -32,7 +32,7 @@ namespace otb
 
 template<class TScalarType, unsigned int NInputDimensions, unsigned int NOutputDimensions>
 GenericRSTransform<TScalarType, NInputDimensions, NOutputDimensions>
-::GenericRSTransform() : Superclass(SpaceDimension,ParametersDimension)
+::GenericRSTransform() : Superclass(SpaceDimension,ParametersDimension), m_DEMDirectory(""),  m_AverageElevation(-32768.0)
 {
   m_InputProjectionRef.clear();
   m_OutputProjectionRef.clear();
@@ -110,25 +110,29 @@ GenericRSTransform<TScalarType, NInputDimensions, NOutputDimensions>
   //Set the input transformation
   //*****************************
   try
-    {
+  {
     if (m_InputKeywordList.GetSize()  > 0)
-      {
+    {
       typedef otb::ForwardSensorModel<double, InputSpaceDimension, InputSpaceDimension> ForwardSensorModelType;
       typename ForwardSensorModelType::Pointer sensorModel = ForwardSensorModelType::New();
       sensorModel->SetImageGeometry(m_InputKeywordList);
       if ( !m_DEMDirectory.empty())
-        {
+      {
         sensorModel->SetDEMDirectory(m_DEMDirectory);
-        }
+      }
+      else if (m_AverageElevation != -32768.0)
+      {
+        sensorModel->SetAverageElevation(m_AverageElevation);
+      }
       m_InputTransform = sensorModel.GetPointer();
       inputTransformIsSensor = true;
       otbMsgDevMacro(<< "Input projection set to sensor model.");
-      }
     }
+  }
   catch(itk::ExceptionObject &)
-    {
+  {
     otbMsgDevMacro(<<" Input keyword list does not describe a sensor model.");
-    }
+  }
 
 
   if ((m_InputTransform.IsNull()) && ( !m_InputProjectionRef.empty() ))//map projection
@@ -177,25 +181,29 @@ GenericRSTransform<TScalarType, NInputDimensions, NOutputDimensions>
   //Set the output transformation
   //*****************************
   try
-    {
+  {
     if (m_OutputKeywordList.GetSize()  > 0)
-      {
+    {
       typedef otb::InverseSensorModel<double, InputSpaceDimension, OutputSpaceDimension> InverseSensorModelType;
       typename InverseSensorModelType::Pointer sensorModel = InverseSensorModelType::New();
       sensorModel->SetImageGeometry(m_OutputKeywordList);
       if ( !m_DEMDirectory.empty())
-        {
+      {
         sensorModel->SetDEMDirectory(m_DEMDirectory);
-        }
+      }
+      else if (m_AverageElevation != -32768.0)
+      {
+        sensorModel->SetAverageElevation(m_AverageElevation);
+      }
       m_OutputTransform = sensorModel.GetPointer();
       outputTransformIsSensor = true;
       otbMsgDevMacro(<< "Output projection set to sensor model");
-      }
     }
+  }
   catch(itk::ExceptionObject &)
-    {
+  {
     otbMsgDevMacro(<<" Output keyword list does not describe a sensor model.");
-    }
+  }
 
 
   if ((m_OutputTransform.IsNull()) && ( !m_OutputProjectionRef.empty() ))//map projection
@@ -239,7 +247,6 @@ GenericRSTransform<TScalarType, NInputDimensions, NOutputDimensions>
   }
   else
   {
-
     m_TransformAccuracy = Projection::PRECISE;
   }
 
diff --git a/Code/Projections/otbInverseSensorModel.txx b/Code/Projections/otbInverseSensorModel.txx
index 6dbcaf21461ec075b670fee5ef434b78085181b0..43bf9ce92874c24c84da6bb0908fb1c4f20d8393 100644
--- a/Code/Projections/otbInverseSensorModel.txx
+++ b/Code/Projections/otbInverseSensorModel.txx
@@ -65,7 +65,7 @@ InverseSensorModel< TScalarType, NInputDimensions, NOutputDimensions>
   {
     ossimGPoint.height(point[2]);
   }
-  else if (this->m_AverageElevation != -10000)
+  else if (this->m_AverageElevation != -32768.0)
   {
     ossimGPoint.height(this->m_AverageElevation);
   }
diff --git a/Code/Projections/otbSensorModelBase.txx b/Code/Projections/otbSensorModelBase.txx
index 03fccd16992052396426186bc9c115edca67474b..a6460def06c26c185b7521b7cc9717b5fbef3fd0 100644
--- a/Code/Projections/otbSensorModelBase.txx
+++ b/Code/Projections/otbSensorModelBase.txx
@@ -43,7 +43,7 @@ SensorModelBase< TScalarType,NInputDimensions,NOutputDimensions>
   m_DEMHandler = DEMHandlerType::New();
   m_UseDEM = false;
   m_DEMIsLoaded = false;
-  m_AverageElevation = -10000;
+  m_AverageElevation = -32768.0;
 
 }
 
diff --git a/Code/Projections/otbVectorDataProjectionFilter.h b/Code/Projections/otbVectorDataProjectionFilter.h
index 1ae4d789ba36da45a8600e8b5c8975f14f6f8d58..80d6cce2ba23ebf142bc9da0335bd9850b065b49 100644
--- a/Code/Projections/otbVectorDataProjectionFilter.h
+++ b/Code/Projections/otbVectorDataProjectionFilter.h
@@ -131,6 +131,9 @@ public:
   itkSetStringMacro(DEMDirectory);
   itkGetStringMacro(DEMDirectory);
 
+  itkSetMacro(AverageElevation, double);
+  itkGetMacro(AverageElevation, double);
+
 
   itkGetMacro(InputKeywordList,ImageKeywordlist);
   void SetInputKeywordList(ImageKeywordlist kwl)
@@ -209,7 +212,9 @@ private:
   std::string m_OutputProjectionRef;
   ImageKeywordlist m_InputKeywordList;
   ImageKeywordlist m_OutputKeywordList;
+
   std::string m_DEMDirectory;
+  double m_AverageElevation;
 
   SpacingType         m_InputSpacing;
   OriginType          m_InputOrigin;
diff --git a/Code/Projections/otbVectorDataProjectionFilter.txx b/Code/Projections/otbVectorDataProjectionFilter.txx
index 3820e7ac6db07c6247d4aef27467b94ec5fd3739..800f3d586052935b081ca6cfc4e654eb3c3b59f8 100644
--- a/Code/Projections/otbVectorDataProjectionFilter.txx
+++ b/Code/Projections/otbVectorDataProjectionFilter.txx
@@ -37,7 +37,7 @@ namespace otb
  */
 template <class TInputVectorData, class TOutputVectorData >
 VectorDataProjectionFilter<TInputVectorData,TOutputVectorData>
-::VectorDataProjectionFilter()
+::VectorDataProjectionFilter(): m_DEMDirectory(""), m_AverageElevation(-32768.0)
 {
   m_InputProjectionRef.clear();
   m_OutputProjectionRef.clear();
@@ -321,6 +321,7 @@ VectorDataProjectionFilter<TInputVectorData,TOutputVectorData>
   m_Transform->SetInputKeywordList(m_InputKeywordList);
   m_Transform->SetOutputKeywordList(m_OutputKeywordList);
   m_Transform->SetDEMDirectory(m_DEMDirectory);
+  m_Transform->SetAverageElevation(m_AverageElevation);
   m_Transform->SetInputSpacing(m_InputSpacing);
   m_Transform->SetInputOrigin(m_InputOrigin);
   m_Transform->SetOutputSpacing(m_OutputSpacing);