diff --git a/Modules/Core/Functor/include/otbFunctorImageFilter.h b/Modules/Core/Functor/include/otbFunctorImageFilter.h
index a81353fb65b2cc7d2d3f7d5fcdb03f5e9b25d1b0..df9ac846ce6f67802a9127c8812490c4874f3844 100644
--- a/Modules/Core/Functor/include/otbFunctorImageFilter.h
+++ b/Modules/Core/Functor/include/otbFunctorImageFilter.h
@@ -209,7 +209,9 @@ public:
   // the functor
   using InputHasNeighborhood = typename FunctorFilterSuperclassHelper<TFunction>::InputHasNeighborhood;
   using InputTypesTupleType = typename Superclass::InputTypesTupleType;
- 
+  template<size_t I> using InputImageType = typename Superclass::template InputImageType<I>;
+
+  
   /** Run-time type information (and related methods). */
   itkTypeMacro(FunctorImageFilter, ImageToImageFilter);
   
diff --git a/Modules/Core/Functor/include/otbVariadicInputsImageFilter.h b/Modules/Core/Functor/include/otbVariadicInputsImageFilter.h
index 0011f8d04fb94d9989ac01b1d3ef33851a1d8cb5..d2c6930564187b17609a01eb142e1ea1abc1ae8f 100644
--- a/Modules/Core/Functor/include/otbVariadicInputsImageFilter.h
+++ b/Modules/Core/Functor/include/otbVariadicInputsImageFilter.h
@@ -33,16 +33,18 @@ public:
   using Pointer =  itk::SmartPointer<Self>;
   using ConstPointer = itk::SmartPointer<const Self>;
   using Superclass = itk::ImageSource<TOuptut>;
-
+  
   using InputTypesTupleType = std::tuple<TInputs...>;
-
+  
+  template <size_t I> using InputImageType = typename std::tuple_element<I,InputTypesTupleType>::type;
+  
   itkNewMacro(Self);
   
   template <std::size_t I> void SetVInput(const typename std::tuple_element<I,InputTypesTupleType>::type * inputPtr)
   {
     this->SetNthInput(I,const_cast<typename std::tuple_element<I,InputTypesTupleType>::type *>(inputPtr));
   }
-
+  
 #define DefineLegacySetInputMacro(n)                                                                               \
   template<typename Tuple = InputTypesTupleType, typename Check = typename std::enable_if<n<=std::tuple_size<Tuple>::value >::type> \
   void SetInput ## n(const typename std::tuple_element<n-1,Tuple>::type * img)                                           \
diff --git a/Modules/Core/Functor/test/otbFunctorImageFilter.cxx b/Modules/Core/Functor/test/otbFunctorImageFilter.cxx
index 39fcca0ef3f8cb2e31e562ecb33ee53eb452d102..abb7505006676544ecadebe2817118704c2d808c 100644
--- a/Modules/Core/Functor/test/otbFunctorImageFilter.cxx
+++ b/Modules/Core/Functor/test/otbFunctorImageFilter.cxx
@@ -101,7 +101,7 @@ template <typename T> struct TypesCheck
   auto filter = NewFunctorFilter(functor);
 
   using FilterType = typename decltype(filter)::ObjectType;
-  static_assert(std::is_same<typename std::tuple_element<0, typename FilterType::Superclass::InputTypesTupleType>::type, InputImageType>::value, "");
+  static_assert(std::is_same<typename FilterType::template InputImageType<0>, InputImageType>::value, "");
 
   filter->SetVInputs(in);
   filter->SetInput1(in);