diff --git a/Modules/Wrappers/ApplicationEngine/src/otbWrapperApplication.cxx b/Modules/Wrappers/ApplicationEngine/src/otbWrapperApplication.cxx
index 2580e59de5ddaf2f75e2fcc6c852aa360ef943c2..3d469f239bca60696be13e10350282bc3b682670 100644
--- a/Modules/Wrappers/ApplicationEngine/src/otbWrapperApplication.cxx
+++ b/Modules/Wrappers/ApplicationEngine/src/otbWrapperApplication.cxx
@@ -504,6 +504,7 @@ Application::RegisterPipeline()
 
 void Application::FreeRessources()
 {
+  std::set< itk::DataObject * > dataSetToRelease; // do not release output
   std::set< itk::DataObject * > dataSet;
   std::vector<std::string> paramList = GetParametersKeys(true);
   // Get the end of the pipeline
@@ -563,6 +564,7 @@ void Application::FreeRessources()
           if ( !newData || dataSet.count( newData ) )
             continue;
           dataSet.insert( newData );
+          dataSetToRelease.insert( newData );
           itk::ProcessObject * process = newData->GetSource().GetPointer();
           if ( process )
             processStack.push( process );
@@ -571,6 +573,7 @@ void Application::FreeRessources()
       else
         {
         dataSet.insert( data.GetPointer() );
+        dataSetToRelease.insert( data.GetPointer() );
         itk::ProcessObject * process = data->GetSource().GetPointer();
         if ( process )
           processStack.push( process );
@@ -578,11 +581,11 @@ void Application::FreeRessources()
       }
     }
   // Release data
-  for ( auto data : dataSet )
+  for ( auto data : dataSetToRelease )
   {
     data->ReleaseData();
   }
-  // Call overrode method
+  // Call override method
   DoFreeRessources();
 }