diff --git a/Code/ApplicationEngine/otbWrapperInputImageParameter.cxx b/Code/ApplicationEngine/otbWrapperInputImageParameter.cxx
index 05bc2010932c94921b8ec3d4584b72f443c2f2bd..c88d0443061ce7748bfba09ce05685c018cf36db 100644
--- a/Code/ApplicationEngine/otbWrapperInputImageParameter.cxx
+++ b/Code/ApplicationEngine/otbWrapperInputImageParameter.cxx
@@ -111,148 +111,6 @@ otbGetImageMacro(UInt8RGBImage);
 otbGetImageMacro(UInt8RGBAImage);
 
 
-template <class TOutputImage>
-TOutputImage *
-InputImageParameter::GetImage()
-{
-  otbMsgDevMacro(<< "GetImage()");
-
-  // Used m_PreviousFileName because if not, when the user call twice GetImage,
-  // it without changing the filename, it returns 2 different
-  // image pointers
-  // Only one image type can be used
-
-  // 2 cases : the user set a filename vs. the user set an image
-  if (m_UseFilename)
-    {
-    if( m_PreviousFileName!=m_FileName && !m_FileName.empty() )
-      {
-      //////////////////////// Filename case:
-      // A new valid filename has been given : a reader is created
-      m_PreviousFileName = m_FileName;
-      typedef otb::ImageFileReader<TOutputImage> ReaderType;
-      typename ReaderType::Pointer reader = ReaderType::New();
-      reader->SetFileName(m_FileName);
-
-      try
-        {
-        reader->UpdateOutputInformation();
-        }
-      catch (itk::ExceptionObject &)
-        {
-        this->ClearValue();
-        }
-
-      m_Image = reader->GetOutput();
-      m_Reader = reader;
-
-      // Pay attention, don't return m_Image because it is a ImageBase...
-      return reader->GetOutput();
-      }
-    else
-      {
-      // In this case, the reader and the image should already be there
-      if (m_Image.IsNull())
-        {
-        itkExceptionMacro("No input image or filename detected...");
-        }
-      else
-        {
-        // Check if the image type asked here is the same as the one used for the reader
-        if (dynamic_cast<TOutputImage*> (m_Image.GetPointer()))
-          {
-          return dynamic_cast<TOutputImage*> (m_Image.GetPointer());
-          }
-        else
-          {
-          itkExceptionMacro("Cannot ask a different image type");
-          }
-        }
-      }
-    }
-  else
-    {
-    //////////////////////// Image case:
-    if (m_Image.IsNull())
-      {
-      itkExceptionMacro("No input image or filename detected...");
-      }
-    else
-      {
-      if (dynamic_cast<UInt8ImageType*> (m_Image.GetPointer()))
-        {
-        return CastImage<UInt8ImageType, TOutputImage> ();
-        }
-      else if (dynamic_cast<Int16ImageType*> (m_Image.GetPointer()))
-        {
-        return CastImage<Int16ImageType, TOutputImage> ();
-        }
-      else if (dynamic_cast<UInt16ImageType*> (m_Image.GetPointer()))
-        {
-        return CastImage<UInt16ImageType, TOutputImage> ();
-        }
-      else if (dynamic_cast<Int32ImageType*> (m_Image.GetPointer()))
-        {
-        return CastImage<Int32ImageType, TOutputImage> ();
-        }
-      else if (dynamic_cast<UInt32ImageType*> (m_Image.GetPointer()))
-        {
-        return CastImage<UInt32ImageType, TOutputImage> ();
-        }
-      else if (dynamic_cast<FloatImageType*> (m_Image.GetPointer()))
-        {
-        return CastImage<FloatImageType, TOutputImage> ();
-        }
-      else if (dynamic_cast<DoubleImageType*> (m_Image.GetPointer()))
-        {
-        return CastImage<DoubleImageType, TOutputImage> ();
-        }
-      else if (dynamic_cast<UInt8VectorImageType*> (m_Image.GetPointer()))
-        {
-        return CastImage<UInt8VectorImageType, TOutputImage> ();
-        }
-      else if (dynamic_cast<Int16VectorImageType*> (m_Image.GetPointer()))
-        {
-        return CastImage<Int16VectorImageType, TOutputImage> ();
-        }
-      else if (dynamic_cast<UInt16VectorImageType*> (m_Image.GetPointer()))
-        {
-        return CastImage<UInt16VectorImageType, TOutputImage> ();
-        }
-      else if (dynamic_cast<Int32VectorImageType*> (m_Image.GetPointer()))
-        {
-        return CastImage<Int32VectorImageType, TOutputImage> ();
-        }
-      else if (dynamic_cast<UInt32VectorImageType*> (m_Image.GetPointer()))
-        {
-        return CastImage<UInt32VectorImageType, TOutputImage> ();
-        }
-      else if (dynamic_cast<FloatVectorImageType*> (m_Image.GetPointer()))
-        {
-        return CastImage<FloatVectorImageType, TOutputImage> ();
-        }
-      else if (dynamic_cast<DoubleVectorImageType*> (m_Image.GetPointer()))
-        {
-        return CastImage<DoubleVectorImageType, TOutputImage> ();
-        }
-      else if (dynamic_cast<UInt8RGBAImageType*> (m_Image.GetPointer()))
-        {
-        return CastImage<UInt8RGBAImageType, TOutputImage> ();
-        }
-      else if (dynamic_cast<UInt8RGBImageType*> (m_Image.GetPointer()))
-        {
-        return CastImage<UInt8RGBImageType, TOutputImage> ();
-        }
-      else
-        {
-        itkExceptionMacro("Unknown image type");
-        }
-      }
-    }
-
-}
-
-
 template <class TInputImage, class TOutputImage>
 TOutputImage*
 InputImageParameter::SimpleCastImage()
diff --git a/Code/ApplicationEngine/otbWrapperInputImageParameter.h b/Code/ApplicationEngine/otbWrapperInputImageParameter.h
index fe912b70044f61c323a01daa8dbb74f713e1f41a..23fd78068ca44c9047d3bb04669b349027f8988d 100644
--- a/Code/ApplicationEngine/otbWrapperInputImageParameter.h
+++ b/Code/ApplicationEngine/otbWrapperInputImageParameter.h
@@ -78,7 +78,143 @@ public:
 
   /** Get the input image as templated image type. */
   template <class TImageType>
-    TImageType* GetImage();
+    TImageType* GetImage()
+  {
+  otbMsgDevMacro(<< "GetImage()");
+
+  // Used m_PreviousFileName because if not, when the user call twice GetImage,
+  // it without changing the filename, it returns 2 different
+  // image pointers
+  // Only one image type can be used
+
+  // 2 cases : the user set a filename vs. the user set an image
+  if (m_UseFilename)
+    {
+    if( m_PreviousFileName!=m_FileName && !m_FileName.empty() )
+      {
+      //////////////////////// Filename case:
+      // A new valid filename has been given : a reader is created
+      m_PreviousFileName = m_FileName;
+      typedef otb::ImageFileReader<TImageType> ReaderType;
+      typename ReaderType::Pointer reader = ReaderType::New();
+      reader->SetFileName(m_FileName);
+
+      try
+        {
+        reader->UpdateOutputInformation();
+        }
+      catch (itk::ExceptionObject &)
+        {
+        this->ClearValue();
+        }
+
+      m_Image = reader->GetOutput();
+      m_Reader = reader;
+
+      // Pay attention, don't return m_Image because it is a ImageBase...
+      return reader->GetOutput();
+      }
+    else
+      {
+      // In this case, the reader and the image should already be there
+      if (m_Image.IsNull())
+        {
+        itkExceptionMacro("No input image or filename detected...");
+        }
+      else
+        {
+        // Check if the image type asked here is the same as the one used for the reader
+        if (dynamic_cast<TImageType*> (m_Image.GetPointer()))
+          {
+          return dynamic_cast<TImageType*> (m_Image.GetPointer());
+          }
+        else
+          {
+          itkExceptionMacro("Cannot ask a different image type");
+          }
+        }
+      }
+    }
+  else
+    {
+    //////////////////////// Image case:
+    if (m_Image.IsNull())
+      {
+      itkExceptionMacro("No input image or filename detected...");
+      }
+    else
+      {
+      if (dynamic_cast<UInt8ImageType*> (m_Image.GetPointer()))
+        {
+        return CastImage<UInt8ImageType, TImageType> ();
+        }
+      else if (dynamic_cast<Int16ImageType*> (m_Image.GetPointer()))
+        {
+        return CastImage<Int16ImageType, TImageType> ();
+        }
+      else if (dynamic_cast<UInt16ImageType*> (m_Image.GetPointer()))
+        {
+        return CastImage<UInt16ImageType, TImageType> ();
+        }
+      else if (dynamic_cast<Int32ImageType*> (m_Image.GetPointer()))
+        {
+        return CastImage<Int32ImageType, TImageType> ();
+        }
+      else if (dynamic_cast<UInt32ImageType*> (m_Image.GetPointer()))
+        {
+        return CastImage<UInt32ImageType, TImageType> ();
+        }
+      else if (dynamic_cast<FloatImageType*> (m_Image.GetPointer()))
+        {
+        return CastImage<FloatImageType, TImageType> ();
+        }
+      else if (dynamic_cast<DoubleImageType*> (m_Image.GetPointer()))
+        {
+        return CastImage<DoubleImageType, TImageType> ();
+        }
+      else if (dynamic_cast<UInt8VectorImageType*> (m_Image.GetPointer()))
+        {
+        return CastImage<UInt8VectorImageType, TImageType> ();
+        }
+      else if (dynamic_cast<Int16VectorImageType*> (m_Image.GetPointer()))
+        {
+        return CastImage<Int16VectorImageType, TImageType> ();
+        }
+      else if (dynamic_cast<UInt16VectorImageType*> (m_Image.GetPointer()))
+        {
+        return CastImage<UInt16VectorImageType, TImageType> ();
+        }
+      else if (dynamic_cast<Int32VectorImageType*> (m_Image.GetPointer()))
+        {
+        return CastImage<Int32VectorImageType, TImageType> ();
+        }
+      else if (dynamic_cast<UInt32VectorImageType*> (m_Image.GetPointer()))
+        {
+        return CastImage<UInt32VectorImageType, TImageType> ();
+        }
+      else if (dynamic_cast<FloatVectorImageType*> (m_Image.GetPointer()))
+        {
+        return CastImage<FloatVectorImageType, TImageType> ();
+        }
+      else if (dynamic_cast<DoubleVectorImageType*> (m_Image.GetPointer()))
+        {
+        return CastImage<DoubleVectorImageType, TImageType> ();
+        }
+      else if (dynamic_cast<UInt8RGBAImageType*> (m_Image.GetPointer()))
+        {
+        return CastImage<UInt8RGBAImageType, TImageType> ();
+        }
+      else if (dynamic_cast<UInt8RGBImageType*> (m_Image.GetPointer()))
+        {
+        return CastImage<UInt8RGBImageType, TImageType> ();
+        }
+      else
+        {
+        itkExceptionMacro("Unknown image type");
+        }
+      }
+    }
+  }
 
 
   /** Set a FloatVectorImageType image.*/