diff --git a/Modules/Visualization/MonteverdiGui/include/mvdQtWidgetParameterInitializers.h b/Modules/Visualization/MonteverdiGui/include/mvdQtWidgetParameterInitializers.h
index 4d92b3749d465a2aaf4f2e3f300d66d30182529b..61d425e75d7597f248933b7c80b066f1bda3aaf8 100644
--- a/Modules/Visualization/MonteverdiGui/include/mvdQtWidgetParameterInitializers.h
+++ b/Modules/Visualization/MonteverdiGui/include/mvdQtWidgetParameterInitializers.h
@@ -59,6 +59,8 @@
 #include "otbWrapperQtWidgetOutputImageParameter.h"
 #include "otbWrapperQtWidgetOutputProcessXMLParameter.h"
 #include "otbWrapperQtWidgetOutputVectorDataParameter.h"
+#include "otbWrapperQtWidgetComplexInputImageParameter.h"
+#include "otbWrapperQtWidgetComplexOutputImageParameter.h"
 #include "otbWrapperQtWidgetParameterFactory.h"
 #endif //tag=QT4-boost-compatibility
 
@@ -175,6 +177,23 @@ private:
   QWidget * m_View;
 };
 
+/**
+ * \class ComplexInputImageInitializer
+ *
+ * \ingroup OTBMonteverdiGUI
+ *
+ * \brief WIP.
+ */
+class ComplexInputImageInitializer : public std::unary_function<
+  otb::Wrapper::QtWidgetComplexInputImageParameter*,
+  void
+  >
+{
+public:
+  inline ComplexInputImageInitializer();
+  inline result_type operator () ( argument_type widget ) const;
+};
+
 /**
  * \class InputVectorDataInitializer
  *
@@ -281,6 +300,26 @@ private:
   QString m_Prefix;
 };
 
+/**
+ * \class ComplexOutputImageInitializer
+ *
+ * \ingroup OTBMonteverdiGUI
+ *
+ * \brief WIP.
+ */
+class ComplexOutputImageInitializer : public std::unary_function<
+  otb::Wrapper::QtWidgetComplexOutputImageParameter*,
+  void
+  >
+{
+public:
+  inline ComplexOutputImageInitializer( const QString & prefix );
+  inline result_type operator () ( argument_type widget ) const;
+
+private:
+  QString m_Prefix;
+};
+
 /**
  * \class OutputVectorDataInitializer
  *
@@ -441,6 +480,24 @@ InputImageListInitializer
   SetupWidget( widget, FileSelectionInitializer() );
 }
 
+/*****************************************************************************/
+inline
+ComplexInputImageInitializer
+::ComplexInputImageInitializer()
+{
+}
+
+/*****************************************************************************/
+inline
+ComplexInputImageInitializer::result_type
+ComplexInputImageInitializer
+::operator () ( argument_type widget ) const
+{
+  assert( widget!=NULL );
+
+  SetupForFilenameDrop( widget, "You can drop filename here." );
+}
+
 /*****************************************************************************/
 inline
 InputFilenameInitializer::result_type
@@ -576,6 +633,41 @@ OutputImageInitializer
     );
 }
 
+/*****************************************************************************/
+inline
+ComplexOutputImageInitializer
+::ComplexOutputImageInitializer( const QString& prefix) :
+  m_Prefix( prefix )
+{
+}
+
+/*****************************************************************************/
+inline
+ComplexOutputImageInitializer::result_type
+ComplexOutputImageInitializer
+::operator () ( argument_type widget ) const
+{
+  assert( widget!=NULL );
+  assert( I18nCoreApplication::ConstInstance()!=NULL );
+
+  if( m_Prefix.isEmpty() )
+    {
+    SetupForFilenameDrop( widget, "You can drop filename here." );
+
+    assert( qApp!=NULL );
+    assert( !qApp->arguments().empty() );
+
+    SetupOutputFilename( widget );
+    }
+  else
+    SetupOutputFilename(
+      widget,
+      I18nCoreApplication::ConstInstance()->GetResultsDir(),
+      m_Prefix,
+      ".tif"
+    );
+}
+
 /*****************************************************************************/
 inline
 OutputVectorDataInitializer::result_type
@@ -671,13 +763,29 @@ SetupForFilenameDrop( W* widget, const char* text )
 
   lineEdit->installEventFilter( eventFilter );
 
-  QObject::connect(
-    eventFilter,
-    SIGNAL( FilenameDropped( const QString& ) ),
-    // to:
-    lineEdit,
-    SLOT( setText( const QString& ) )
-  );
+  // BUG : temporary fix for drag & drop in InputImageParameter
+  // in the future, all "filename" parameters should have the same behaviour
+  if (dynamic_cast<otb::Wrapper::QtWidgetInputImageParameter*>(widget) ||
+      dynamic_cast<otb::Wrapper::QtFileSelectionWidget*>(widget))
+    {
+    QObject::connect(
+      eventFilter,
+      SIGNAL( FilenameDropped( const QString& ) ),
+      // to:
+      widget,
+      SLOT( SetFileName( const QString& ) )
+    );
+    }
+  else
+    {
+    QObject::connect(
+      eventFilter,
+      SIGNAL( FilenameDropped( const QString& ) ),
+      // to:
+      lineEdit,
+      SLOT( setText( const QString& ) )
+    );
+    }
 }
 
 /*****************************************************************************/
diff --git a/Modules/Visualization/MonteverdiGui/src/mvdQtWidgetView.cxx b/Modules/Visualization/MonteverdiGui/src/mvdQtWidgetView.cxx
index 12640d6bec8182f2046b933b8568683f8717266b..ff6d14ecc26aa84d14d8f6418160b2d80adb9595 100644
--- a/Modules/Visualization/MonteverdiGui/src/mvdQtWidgetView.cxx
+++ b/Modules/Visualization/MonteverdiGui/src/mvdQtWidgetView.cxx
@@ -348,6 +348,7 @@ QtWidgetView
   SetupWidget( widget, InputFilenameListInitializer( this ) );
   SetupWidget( widget, InputImageInitializer() );
   SetupWidget( widget, InputImageListInitializer( this ) );
+  SetupWidget( widget, ComplexInputImageInitializer() );
   SetupWidget( widget, InputProcessXMLInitializer() );
   SetupWidget( widget, InputVectorDataInitializer() );
   SetupWidget( widget, InputVectorDataListInitializer( this ) );
@@ -362,6 +363,10 @@ QtWidgetView
     widget,
     OutputImageInitializer( m_Application->GetName() )
   );
+  SetupWidget(
+    widget,
+    ComplexOutputImageInitializer( m_Application->GetName() )
+  );
 
   SetupWidget( widget, OutputVectorDataInitializer() );
 }
diff --git a/Modules/Wrappers/QtWidget/include/otbQtFileSelectionWidget.h b/Modules/Wrappers/QtWidget/include/otbQtFileSelectionWidget.h
index d7b42e3083116faed0e1d51627f39c48206114d6..ec1977b33a45fb3cfaf3c5f6f77bd80e135a3545 100644
--- a/Modules/Wrappers/QtWidget/include/otbQtFileSelectionWidget.h
+++ b/Modules/Wrappers/QtWidget/include/otbQtFileSelectionWidget.h
@@ -87,6 +87,7 @@ signals:
 protected slots:
   void SelectFile();
   void CallFilenameChanged();
+  void SetFileName(const QString &);
 
 private:
   QtFileSelectionWidget(const QtFileSelectionWidget&); //purposely not implemented
diff --git a/Modules/Wrappers/QtWidget/include/otbWrapperQtWidgetComplexInputImageParameter.h b/Modules/Wrappers/QtWidget/include/otbWrapperQtWidgetComplexInputImageParameter.h
index da397a519e74687e19513ef9e67c513c8fb34c66..249283011ea5b85fbe7f85aeb32ac1ece4c19691 100644
--- a/Modules/Wrappers/QtWidget/include/otbWrapperQtWidgetComplexInputImageParameter.h
+++ b/Modules/Wrappers/QtWidget/include/otbWrapperQtWidgetComplexInputImageParameter.h
@@ -45,6 +45,9 @@ public:
   QtWidgetComplexInputImageParameter(ComplexInputImageParameter*, QtWidgetModel*);
   ~QtWidgetComplexInputImageParameter() ITK_OVERRIDE;
 
+  inline const QLineEdit* GetInput() const;
+  inline QLineEdit* GetInput();
+
 protected slots:
   bool SetFileName( const QString& value );
   void SelectFile();
@@ -65,6 +68,21 @@ private:
   QPushButton * m_Button;
 };
 
+inline
+const QLineEdit*
+QtWidgetComplexInputImageParameter
+::GetInput() const
+{
+  return m_Input;
+}
+
+inline
+QLineEdit*
+QtWidgetComplexInputImageParameter
+::GetInput()
+{
+  return m_Input;
+}
 
 }
 }
diff --git a/Modules/Wrappers/QtWidget/include/otbWrapperQtWidgetComplexOutputImageParameter.h b/Modules/Wrappers/QtWidget/include/otbWrapperQtWidgetComplexOutputImageParameter.h
index af01fc7f5143665eff8cfd97882c0ab941c17ad1..1ec7b3f3250570a5dcb66887de841a40606cd039 100644
--- a/Modules/Wrappers/QtWidget/include/otbWrapperQtWidgetComplexOutputImageParameter.h
+++ b/Modules/Wrappers/QtWidget/include/otbWrapperQtWidgetComplexOutputImageParameter.h
@@ -45,11 +45,16 @@ public:
   QtWidgetComplexOutputImageParameter(ComplexOutputImageParameter*, QtWidgetModel*);
   ~QtWidgetComplexOutputImageParameter() ITK_OVERRIDE;
 
+  inline const QLineEdit* GetInput() const;
+  inline QLineEdit* GetInput();
+
   /** Get the PixelType*/
   //itkGetMacro(PixelType, int);
 
-protected slots:
+public slots:
   void SetFileName( const QString& value );
+
+protected slots:
   void SelectFile();
   void SetPixelType(int pixelType);
 
@@ -72,6 +77,21 @@ private:
 
 };
 
+inline
+const QLineEdit*
+QtWidgetComplexOutputImageParameter
+::GetInput() const
+{
+  return m_Input;
+}
+
+inline
+QLineEdit*
+QtWidgetComplexOutputImageParameter
+::GetInput()
+{
+  return m_Input;
+}
 
 }
 }
diff --git a/Modules/Wrappers/QtWidget/include/otbWrapperQtWidgetInputImageParameter.h b/Modules/Wrappers/QtWidget/include/otbWrapperQtWidgetInputImageParameter.h
index 01684af9326ed3b20133ddedcce04d9f29f4c8ae..5c970fc5c7b6e41a5c57eed44931d5e3172e1f0d 100644
--- a/Modules/Wrappers/QtWidget/include/otbWrapperQtWidgetInputImageParameter.h
+++ b/Modules/Wrappers/QtWidget/include/otbWrapperQtWidgetInputImageParameter.h
@@ -52,9 +52,12 @@ signals:
   void FileNameIsSet();
 
 protected slots:
-  bool SetFileName();
+  bool SetFileName(const QString& value);
   void SelectFile();
 
+private slots:
+  void OnEditingFinished();
+
 private:
   QtWidgetInputImageParameter(const QtWidgetInputImageParameter&); //purposely not implemented
   void operator=(const QtWidgetInputImageParameter&); //purposely not implemented
diff --git a/Modules/Wrappers/QtWidget/src/otbQtFileSelectionWidget.cxx b/Modules/Wrappers/QtWidget/src/otbQtFileSelectionWidget.cxx
index 37e4f3eed3ee02c97da7956d506f55d3c82ab98c..44eb911061301a5c3373857794a037ac2059f088 100644
--- a/Modules/Wrappers/QtWidget/src/otbQtFileSelectionWidget.cxx
+++ b/Modules/Wrappers/QtWidget/src/otbQtFileSelectionWidget.cxx
@@ -116,15 +116,22 @@ QtFileSelectionWidget
   if( filename.isEmpty() )
     return;
 
-  m_Input->setText( filename  );
+  SetFileName(filename);
+}
 
+void
+QtFileSelectionWidget
+::CallFilenameChanged()
+{
   emit FilenameChanged();
 }
 
 void
 QtFileSelectionWidget
-::CallFilenameChanged()
+::SetFileName(const QString & filename)
 {
+  m_Input->setText( filename  );
+
   emit FilenameChanged();
 }
 
diff --git a/Modules/Wrappers/QtWidget/src/otbWrapperQtWidgetInputImageParameter.cxx b/Modules/Wrappers/QtWidget/src/otbWrapperQtWidgetInputImageParameter.cxx
index 2929d528a5515d1f4696b390e99e4ef46b0b0b20..e41c35dc01c1ede50efab19452972e0970abd9ce 100644
--- a/Modules/Wrappers/QtWidget/src/otbWrapperQtWidgetInputImageParameter.cxx
+++ b/Modules/Wrappers/QtWidget/src/otbWrapperQtWidgetInputImageParameter.cxx
@@ -69,7 +69,7 @@ void QtWidgetInputImageParameter::DoCreateWidget()
   m_HLayout->setContentsMargins(0, 0, 0, 0);
   m_Input = new QLineEdit;
   m_Input->setToolTip( m_InputImageParam->GetDescription() );
-  connect( m_Input, SIGNAL(editingFinished()), this, SLOT(SetFileName()) );
+  connect( m_Input, SIGNAL(editingFinished()), this, SLOT(OnEditingFinished()) );
   connect( this, SIGNAL(FileNameIsSet()), GetModel(), SLOT(NotifyUpdate()) );
 
   m_HLayout->addWidget(m_Input);
@@ -105,9 +105,7 @@ QtWidgetInputImageParameter
   if( filename.isEmpty() )
     return;
 
-  m_Input->setText( filename  );
-
-  if( !SetFileName() )
+  if( !SetFileName(filename) )
     {
     std::ostringstream oss;
 
@@ -123,13 +121,14 @@ QtWidgetInputImageParameter
     }
 }
 
-bool QtWidgetInputImageParameter::SetFileName()
+bool QtWidgetInputImageParameter::SetFileName(const QString& value)
 {
   bool res = true;
   // save value
   if( m_InputImageParam->SetFromFileName(
-	QFile::encodeName( m_Input->text() ).constData() ) == true )
+	QFile::encodeName( value ).constData() ) == true )
     {
+    m_Input->setText( value  );
     // notify of value change
     QString key( m_InputImageParam->GetKey() );
 
@@ -142,5 +141,10 @@ bool QtWidgetInputImageParameter::SetFileName()
   return res;
 }
 
+void QtWidgetInputImageParameter::OnEditingFinished()
+{
+  SetFileName( m_Input->text() );
+}
+
 }
 }