diff --git a/Modules/Applications/AppFusion/app/otbBundleToPerfectSensor.cxx b/Modules/Applications/AppFusion/app/otbBundleToPerfectSensor.cxx
index 51b77af1428dbeeedb344806a190d797bb9db7ab..8fe879ccf4efc16b3658e07ab5330833f326cf14 100644
--- a/Modules/Applications/AppFusion/app/otbBundleToPerfectSensor.cxx
+++ b/Modules/Applications/AppFusion/app/otbBundleToPerfectSensor.cxx
@@ -19,6 +19,7 @@
 
 #include "otbMultiToMonoChannelExtractROI.h"
 #include "otbGenericRSResampleImageFilter.h"
+#include "otbGridResampleImageFilter.h"
 #include "otbImportGeoInformationImageFilter.h"
 #include "otbBCOInterpolateImageFunction.h"
 #include "otbSimpleRcsPanSharpeningFusionImageFilter.h"
@@ -133,7 +134,7 @@ private:
 
     typedef otb::BCOInterpolateImageFunction<FloatVectorImageType> InterpolatorType;
     typedef otb::GenericRSResampleImageFilter<FloatVectorImageType, FloatVectorImageType>  ResamplerType;
-    typedef otb::StreamingResampleImageFilter<FloatVectorImageType, FloatVectorImageType>  BasicResamplerType;
+    typedef otb::GridResampleImageFilter<FloatVectorImageType, FloatVectorImageType>  BasicResamplerType;
     typedef otb::ImportGeoInformationImageFilter<FloatVectorImageType,InternalImageType> ImportGeoInformationFilterType;
     typedef otb::SimpleRcsPanSharpeningFusionImageFilter<InternalImageType, FloatVectorImageType, FloatVectorImageType> FusionFilterType;
 
@@ -204,13 +205,22 @@ private:
       {
       otbAppLogINFO("Using the PHR mode");
       
-      otb::PleiadesPToXSAffineTransformCalculator::TransformType::Pointer transform
-        = otb::PleiadesPToXSAffineTransformCalculator::Compute(panchro, xs);
+      otb::PleiadesPToXSAffineTransformCalculator::TransformType::OffsetType offset
+        = otb::PleiadesPToXSAffineTransformCalculator::ComputeOffset(GetParameterImage("inp"),
+                                                                     GetParameterImage("inxs"));
 
+      origin+=offset;
+      origin[0]=origin[0]/4;
+      origin[1]=origin[1]/4;
+      
+      basicResampler->SetOutputOrigin(origin);
       basicResampler->SetInput(xs);
-      basicResampler->SetTransform(transform);
       basicResampler->SetOutputOrigin(origin);
-      basicResampler->SetOutputSpacing(spacing);
+
+      FloatVectorImageType::SpacingType xsSpacing = GetParameterImage("inxs")->GetSpacing();
+      xsSpacing*=0.25;
+      
+      basicResampler->SetOutputSpacing(xsSpacing);
       basicResampler->SetOutputSize(size);
       basicResampler->SetOutputStartIndex(start);
       basicResampler->SetEdgePaddingValue(defaultValue);
diff --git a/Modules/Applications/AppProjection/app/otbSuperimpose.cxx b/Modules/Applications/AppProjection/app/otbSuperimpose.cxx
index 8063257976315560454934c47448e29372f8bece..dc8661fd039630f48cee4aa10a9884d3833ff631 100644
--- a/Modules/Applications/AppProjection/app/otbSuperimpose.cxx
+++ b/Modules/Applications/AppProjection/app/otbSuperimpose.cxx
@@ -18,6 +18,7 @@
 #include "otbWrapperApplicationFactory.h"
 
 #include "otbGenericRSResampleImageFilter.h"
+#include "otbGridResampleImageFilter.h"
 #include "otbImportGeoInformationImageFilter.h"
 
 #include "otbBCOInterpolateImageFunction.h"
@@ -72,7 +73,7 @@ public:
 
   typedef itk::ScalableAffineTransform<double, 2>                 TransformType;
   
-  typedef otb::StreamingResampleImageFilter
+  typedef otb::GridResampleImageFilter
     <FloatVectorImageType,
      FloatVectorImageType>                                        BasicResamplerType;
   
@@ -251,19 +252,23 @@ private:
       {
       otbAppLogINFO("Using the PHR mode");
       
-      otb::PleiadesPToXSAffineTransformCalculator::TransformType::Pointer transform
-        = otb::PleiadesPToXSAffineTransformCalculator::Compute(GetParameterImage("inr"),
-                                                               GetParameterImage("inm"));
-
-      m_BasicResampler->SetTransform(transform);
+      otb::PleiadesPToXSAffineTransformCalculator::TransformType::OffsetType offset
+        = otb::PleiadesPToXSAffineTransformCalculator::ComputeOffset(GetParameterImage("inr"),
+                                                                     GetParameterImage("inm"));
       
       m_BasicResampler->SetInput(movingImage);
+      origin+=offset;
+      origin[0]=origin[0]/4;
+      origin[1]=origin[1]/4;
       
       m_BasicResampler->SetOutputOrigin(origin);
-      m_BasicResampler->SetOutputSpacing(spacing);
-      m_BasicResampler->SetOutputSize(size);
-      m_BasicResampler->SetOutputStartIndex(start);
+
+      FloatVectorImageType::SpacingType xsSpacing = GetParameterImage("inm")->GetSpacing();
+      xsSpacing*=0.25;
       
+      m_BasicResampler->SetOutputSpacing(xsSpacing);
+      m_BasicResampler->SetOutputSize(size);
+      m_Resampler->SetOutputStartIndex(start);
       m_BasicResampler->SetEdgePaddingValue(defaultValue);
 
       m_GeoImport->SetInput(m_BasicResampler->GetOutput());