diff --git a/Modules/Applications/AppFiltering/app/otbFastNLMeans.cxx b/Modules/Applications/AppFiltering/app/otbFastNLMeans.cxx
index 3ed27ed028bfe43d0e1c27e626c9ab6d155125a3..47dbc3bc3037cf31d55035b2a60a4468051885f4 100644
--- a/Modules/Applications/AppFiltering/app/otbFastNLMeans.cxx
+++ b/Modules/Applications/AppFiltering/app/otbFastNLMeans.cxx
@@ -110,25 +110,25 @@ private:
 
   void DoExecute() override
   {
-    // Get the input image
-    ImageType::Pointer         imIn           = this->GetParameterFloatImage("in");
-    float                      sigma          = this->GetParameterFloat("sig");
-    float                      cutoffDistance = this->GetParameterFloat("thresh");
-    int                        halfPatchSize  = this->GetParameterInt("patchradius");
-    int                        halfSearchSize = this->GetParameterInt("searchradius");
-    NLMeansFilterType::Pointer nlMeansFilter  = NLMeansFilterType::New();
+    // Get the input parameters
+    const auto imIn = this->GetParameterFloatImage("in");
+    const auto sigma = this->GetParameterFloat("sig");
+    const auto cutoffDistance = this->GetParameterFloat("thresh");
+    const auto halfPatchSize  = this->GetParameterInt("patchradius");
+    const auto halfSearchSize = this->GetParameterInt("searchradius");
+    
+    auto nlMeansFilter = NLMeansFilterType::New();
+    
     nlMeansFilter->SetInput(imIn);
     nlMeansFilter->SetSigma(sigma);
     nlMeansFilter->SetHalfWindowSize(halfPatchSize);
     nlMeansFilter->SetHalfSearchSize(halfSearchSize);
     nlMeansFilter->SetCutOffDistance(cutoffDistance);
 
-    m_FilterRef = nlMeansFilter;
     SetParameterOutputImage("out", nlMeansFilter->GetOutput());
     RegisterPipeline();
   }
 
-  itk::LightObject::Pointer m_FilterRef;
 }; // end class
 
 } // namespace Wrapper
diff --git a/Modules/Applications/AppFiltering/app/otbSmoothing.cxx b/Modules/Applications/AppFiltering/app/otbSmoothing.cxx
index c221db68f20d7869e15f70290450d058ac269ba6..7bab30684a298d49128a797adb6af7ca3f14b6e0 100644
--- a/Modules/Applications/AppFiltering/app/otbSmoothing.cxx
+++ b/Modules/Applications/AppFiltering/app/otbSmoothing.cxx
@@ -147,83 +147,79 @@ private:
 
   void DoExecute() override
   {
-    GetLogger()->Debug("Entering DoExecute\n");
-
-
-    FloatVectorImageType::Pointer inImage = GetParameterImage("in");
+    const auto inImage = GetParameterImage("in");
 
     switch (GetParameterInt("type"))
     {
     case Smoothing_Mean:
     {
-      GetLogger()->Debug("Using mean");
+      otbAppLogINFO("Using mean smoothing");
 
       typedef itk::MeanImageFilter<ImageType, ImageType> MeanFilterType;
       typedef otb::PerBandVectorImageFilter<FloatVectorImageType, FloatVectorImageType, MeanFilterType> PerBandMeanFilterType;
 
-      PerBandMeanFilterType::Pointer perBand = PerBandMeanFilterType::New();
+      auto perBand = PerBandMeanFilterType::New();
       perBand->SetInput(inImage);
 
       MeanFilterType::InputSizeType radius;
       radius.Fill(GetParameterInt("type.mean.radius"));
       perBand->GetFilter()->SetRadius(radius);
-      perBand->UpdateOutputInformation();
-      m_FilterRef = perBand;
+
       SetParameterOutputImage("out", perBand->GetOutput());
+      
+      RegisterPipeline();
     }
     break;
     case Smoothing_Gaussian:
     {
-      GetLogger()->Debug("Using gaussian");
+      otbAppLogINFO("Using gaussian smoothing");
 
       typedef itk::DiscreteGaussianImageFilter<ImageType, ImageType> DiscreteGaussianFilterType;
       typedef otb::PerBandVectorImageFilter<FloatVectorImageType, FloatVectorImageType, DiscreteGaussianFilterType> PerBandDiscreteGaussianFilterType;
 
-      PerBandDiscreteGaussianFilterType::Pointer perBand = PerBandDiscreteGaussianFilterType::New();
+      auto perBand = PerBandDiscreteGaussianFilterType::New();
       perBand->SetInput(inImage);
 
-      const double stdev = GetParameterFloat("type.gaussian.stdev");
-      double variance = stdev * stdev;
+      const auto stdev = GetParameterFloat("type.gaussian.stdev");
+      const auto variance = stdev * stdev;
       
       perBand->GetFilter()->SetVariance(variance);
       perBand->GetFilter()->SetUseImageSpacing(false);
       perBand->GetFilter()->SetMaximumError(GetParameterFloat("type.gaussian.maxerror"));
       perBand->GetFilter()->SetMaximumKernelWidth(GetParameterInt("type.gaussian.maxwidth"));
       
-      perBand->UpdateOutputInformation();
-      m_FilterRef = perBand;
       SetParameterOutputImage("out", perBand->GetOutput());
+      
+      RegisterPipeline();
     }
     break;
     case Smoothing_Anisotropic:
     {
-      GetLogger()->Debug("Using anisotropic diffusion");
+      otbAppLogINFO("Using anisotropic diffusion smoothing");
 
       typedef itk::GradientAnisotropicDiffusionImageFilter<ImageType, ImageType> GradientAnisotropicDiffusionFilterType;
       typedef otb::PerBandVectorImageFilter<FloatVectorImageType, FloatVectorImageType, GradientAnisotropicDiffusionFilterType>
           PerBandGradientAnisotropicDiffusionFilterType;
 
-      PerBandGradientAnisotropicDiffusionFilterType::Pointer perBand = PerBandGradientAnisotropicDiffusionFilterType::New();
+      auto perBand = PerBandGradientAnisotropicDiffusionFilterType::New();
       perBand->SetInput(inImage);
 
-      const int aniDifNbIter = GetParameterInt("type.anidif.nbiter");
+      const auto aniDifNbIter = GetParameterInt("type.anidif.nbiter");
       perBand->GetFilter()->SetNumberOfIterations(static_cast<unsigned int>(aniDifNbIter));
 
-      const float aniDifTimeStep = GetParameterFloat("type.anidif.timestep");
+      const auto aniDifTimeStep = GetParameterFloat("type.anidif.timestep");
       perBand->GetFilter()->SetTimeStep(static_cast<double>(aniDifTimeStep));
 
       perBand->GetFilter()->SetConductanceParameter(GetParameterFloat("type.anidif.conductance"));
       perBand->GetFilter()->SetUseImageSpacing(false);
-      perBand->UpdateOutputInformation();
 
-      m_FilterRef = perBand;
       SetParameterOutputImage("out", perBand->GetOutput());
+      
+      RegisterPipeline();
     }
     break;
     }
   }
-
-  itk::LightObject::Pointer m_FilterRef;
 };
 }
 }