diff --git a/Modules/Wrappers/ApplicationEngine/include/otbWrapperApplication.h b/Modules/Wrappers/ApplicationEngine/include/otbWrapperApplication.h
index 76ccd9bb5f2b46439d6b1b42c857aca82bd8b33b..c6317be14289016f5a5f9636b1af864a1d0c969c 100644
--- a/Modules/Wrappers/ApplicationEngine/include/otbWrapperApplication.h
+++ b/Modules/Wrappers/ApplicationEngine/include/otbWrapperApplication.h
@@ -101,6 +101,7 @@ public:
     m_Name = name;
     GetDocExample()->SetApplicationName(name);
     this->Modified();
+    m_Logger->SetName(name);
   }
 
   itkGetStringMacro(Name);
@@ -708,6 +709,9 @@ public:
 
   otb::Logger* GetLogger() const;
 
+  /** Sets the logger instance of the application (use with caution) */
+  void SetLogger(otb::Logger *logger);
+
   itk::ProcessObject* GetProgressSource() const;
 
   std::string GetProgressDescription() const;
@@ -980,6 +984,7 @@ private:
   std::string                       m_Name;
   std::string                       m_Description;
   ParameterGroup::Pointer           m_ParameterList;
+  otb::Logger::Pointer              m_Logger;
 
   itk::ProcessObject::Pointer       m_ProgressSource;
   std::string                       m_ProgressSourceDescription;
diff --git a/Modules/Wrappers/ApplicationEngine/src/otbWrapperApplication.cxx b/Modules/Wrappers/ApplicationEngine/src/otbWrapperApplication.cxx
index cc0790f406f6ab91928a14516000ce8f7acff687..cca32d50d38ee1b3c8bb056854863e49179a493b 100644
--- a/Modules/Wrappers/ApplicationEngine/src/otbWrapperApplication.cxx
+++ b/Modules/Wrappers/ApplicationEngine/src/otbWrapperApplication.cxx
@@ -46,7 +46,6 @@
 #include <exception>
 #include "itkMacro.h"
 
-
 namespace otb
 {
 namespace Wrapper
@@ -55,6 +54,7 @@ namespace Wrapper
 Application::Application()
   : m_Name(""),
     m_Description(""),
+    m_Logger(otb::Logger::New()),
     m_ProgressSourceDescription(""),
     m_DocName(""),
     m_DocLongDescription(""),
@@ -66,7 +66,10 @@ Application::Application()
     m_HaveInXML(true),
     m_HaveOutXML(true),
     m_IsInXMLParsed(false)
-{}
+{
+  // Don't call Init from the constructor, since it calls a virtual method !
+  m_Logger->SetName("Application.logger");
+}
 
 Application::~Application()
 {
@@ -74,7 +77,15 @@ Application::~Application()
 
 otb::Logger* Application::GetLogger() const
 {
-  return otb::Logger::Instance();
+  return m_Logger;
+}
+
+void Application::SetLogger(otb::Logger *logger)
+{
+  if (m_Logger != logger)
+    {
+    m_Logger = logger;
+    }
 }
 
 std::vector<std::string>
@@ -1656,6 +1667,11 @@ Application::IsParameterMissing(const std::string &key) const
         }
       level++;
       }
+    if (ret)
+      {
+      // the missing parameter is on an active branch : we need it
+      otbDebugMacro("MISSING : "<< key << " (Level "<< split.size()<<")");
+      }
     }
   return ret;
 }
diff --git a/Modules/Wrappers/ApplicationEngine/src/otbWrapperCompositeApplication.cxx b/Modules/Wrappers/ApplicationEngine/src/otbWrapperCompositeApplication.cxx
index 7ebfa4d59ad00a6726b0fdabeab96b6e4fcb49fe..db216594f54992949895a4158aadc5e3137f15eb 100644
--- a/Modules/Wrappers/ApplicationEngine/src/otbWrapperCompositeApplication.cxx
+++ b/Modules/Wrappers/ApplicationEngine/src/otbWrapperCompositeApplication.cxx
@@ -62,6 +62,8 @@ CompositeApplication
   InternalApplication container;
   container.App = ApplicationRegistry::CreateApplication(appType);
   container.Desc = desc;
+  // Setup logger
+  container.App->SetLogger(this->GetLogger());
   container.App->AddObserver(AddProcessToWatchEvent(), m_AddProcessCommand.GetPointer());
   m_AppContainer[key] = container;
   return true;