diff --git a/Code/Projections/otbGenericRSTransform.txx b/Code/Projections/otbGenericRSTransform.txx
index 2224a5ce3a27d746c5d2e140e4ba3476796c7304..a57f8e2e59a68cc09d9e28816d29f0dbbd2fdb19 100644
--- a/Code/Projections/otbGenericRSTransform.txx
+++ b/Code/Projections/otbGenericRSTransform.txx
@@ -250,18 +250,26 @@ GenericRSTransform<TScalarType, NInputDimensions, NOutputDimensions>
   //*****************************
   //Set the input transformation
   //*****************************
-  if (m_InputKeywordList.GetSize()  > 0)
-  {
-    typedef otb::ForwardSensorModel<double> ForwardSensorModelType;
-    ForwardSensorModelType::Pointer sensorModel = ForwardSensorModelType::New();
-    sensorModel->SetImageGeometry(m_InputKeywordList);
-    if ( !m_DEMDirectory.empty())
+
+  try
     {
-      sensorModel->SetDEMDirectory(m_DEMDirectory);
+    if (m_InputKeywordList.GetSize()  > 0)
+      {
+      typedef otb::ForwardSensorModel<double> ForwardSensorModelType;
+      ForwardSensorModelType::Pointer sensorModel = ForwardSensorModelType::New();
+      sensorModel->SetImageGeometry(m_InputKeywordList);
+      if ( !m_DEMDirectory.empty())
+	{
+	sensorModel->SetDEMDirectory(m_DEMDirectory);
+	}
+      m_InputTransform = sensorModel.GetPointer();
+      otbMsgDevMacro(<< "Input projection set to sensor model.");
+      }
+    }
+  catch(itk::ExceptionObject &err)
+    {
+    otbMsgDevMacro(<<" Input keyword list does not describe a sensor model.");
     }
-    m_InputTransform = sensorModel.GetPointer();
-    otbMsgDevMacro(<< "Input projection set to sensor model");
-  }
 
 
   if ((m_InputTransform.IsNull()) && ( !m_InputProjectionRef.empty() ))//map projection
@@ -287,18 +295,25 @@ GenericRSTransform<TScalarType, NInputDimensions, NOutputDimensions>
   //*****************************
   //Set the output transformation
   //*****************************
-  if (m_OutputKeywordList.GetSize()  > 0)
-  {
-    typedef otb::InverseSensorModel<double> InverseSensorModelType;
-    InverseSensorModelType::Pointer sensorModel = InverseSensorModelType::New();
-    sensorModel->SetImageGeometry(m_OutputKeywordList);
-    if ( !m_DEMDirectory.empty())
+  try
     {
-      sensorModel->SetDEMDirectory(m_DEMDirectory);
+    if (m_OutputKeywordList.GetSize()  > 0)
+      {
+      typedef otb::InverseSensorModel<double> InverseSensorModelType;
+      InverseSensorModelType::Pointer sensorModel = InverseSensorModelType::New();
+      sensorModel->SetImageGeometry(m_OutputKeywordList);
+      if ( !m_DEMDirectory.empty())
+	{
+	sensorModel->SetDEMDirectory(m_DEMDirectory);
+	}
+      m_OutputTransform = sensorModel.GetPointer();
+      otbMsgDevMacro(<< "Output projection set to sensor model");
+      }
+    }
+  catch(itk::ExceptionObject &err)
+    {
+    otbMsgDevMacro(<<" Output keyword list does not describe a sensor model.");
     }
-    m_OutputTransform = sensorModel.GetPointer();
-    otbMsgDevMacro(<< "Output projection set to sensor model");
-  }
 
 
   if ((m_OutputTransform.IsNull()) && ( !m_OutputProjectionRef.empty() ))//map projection
@@ -355,11 +370,19 @@ typename GenericRSTransform<TScalarType, NInputDimensions, NOutputDimensions>::O
 GenericRSTransform<TScalarType, NInputDimensions, NOutputDimensions>
 ::TransformPoint(const InputPointType & point) const
 {
-  OutputPointType outputPoint;
-
+  InputPointType inputPoint = point;
 
-  outputPoint = this->GetTransform()->TransformPoint(point);
+  // Apply input origin/spacing
+  inputPoint[0] = inputPoint[0] * m_InputSpacing[0] + m_InputOrigin[0];
+  inputPoint[1] = inputPoint[1] * m_InputSpacing[1] + m_InputOrigin[1];
+  
+  // Transform point
+  OutputPointType outputPoint;
+  outputPoint = this->GetTransform()->TransformPoint(inputPoint);
 
+  // Apply output origin/spacing
+  outputPoint[0] = (outputPoint[0] - m_OutputOrigin[0]) / m_OutputSpacing[0];
+  outputPoint[1] = (outputPoint[1] - m_OutputOrigin[1]) / m_OutputSpacing[1];
 
   return outputPoint;
 }