diff --git a/Code/DisparityMap/otbPixelWiseBlockMatchingImageFilter.h b/Code/DisparityMap/otbPixelWiseBlockMatchingImageFilter.h
index c81b69efd5a7f275bd423fa51f13328151a98969..4fc9c9d115af553237d7b2521af50c5d6629a9e2 100644
--- a/Code/DisparityMap/otbPixelWiseBlockMatchingImageFilter.h
+++ b/Code/DisparityMap/otbPixelWiseBlockMatchingImageFilter.h
@@ -247,7 +247,6 @@ public:
   itkSetMacro(MaximumVerticalDisparity,int);
   itkGetConstReferenceMacro(MaximumVerticalDisparity,int);
 
-
   itkSetMacro(Minimize, bool);
   itkGetConstReferenceMacro(Minimize,bool);
   itkBooleanMacro(Minimize);
@@ -264,6 +263,18 @@ public:
   itkSetMacro(InitVerticalDisparity,int);
   itkGetConstReferenceMacro(InitVerticalDisparity,int);
   
+  /** Get the functor for parameters setting */
+  BlockMatchingFunctorType &  GetFunctor()
+  {
+    return m_Functor;
+  }
+
+  /** Get the functor (const version) */
+  const BlockMatchingFunctorType &  GetFunctor() const
+  {
+    return m_Functor;
+  }
+
   /** Set initial horizontal disparity field (optional, override m_InitHorizontalDisparity) */
   void SetHorizontalDisparityInput( const TOutputDisparityImage * hfield);
 
@@ -314,6 +325,9 @@ private:
   
   /** The exploration radius for disparities (used if non null) */
   SizeType                      m_ExplorationRadius;
+
+  /** Block-matching functor */
+  BlockMatchingFunctorType      m_Functor;  
   
   /** Initial horizontal disparity (0 by default, used if an exploration radius is set) */
   int                           m_InitHorizontalDisparity;
diff --git a/Code/DisparityMap/otbPixelWiseBlockMatchingImageFilter.txx b/Code/DisparityMap/otbPixelWiseBlockMatchingImageFilter.txx
index a988ec94aa6773a1aec25656c6dd8541bee93fb5..2a496139fe49df85fd5c96b69fbb811b869d739a 100644
--- a/Code/DisparityMap/otbPixelWiseBlockMatchingImageFilter.txx
+++ b/Code/DisparityMap/otbPixelWiseBlockMatchingImageFilter.txx
@@ -471,8 +471,6 @@ TOutputDisparityImage,TMaskImage,TBlockMatchingFunctor>
   // account for pixels that are out of range for a given disparity
   itk::ProgressReporter progress(this, threadId, (m_MaximumHorizontalDisparity - m_MinimumHorizontalDisparity + 1)*(m_MaximumVerticalDisparity - m_MinimumVerticalDisparity + 1));
 
-  // Define the block matching functor
-  TBlockMatchingFunctor bmFunctor;
   
   // Check if we use initial disparities and exploration radius
   bool useExplorationRadius = false;
@@ -486,9 +484,6 @@ TOutputDisparityImage,TMaskImage,TBlockMatchingFunctor>
       }
     }
 
-    // std::cout<<"Output region: "<<outputRegionForThread<<std::endl;
-
-
   // We loop on disparities
   for(int vdisparity = m_MinimumVerticalDisparity; vdisparity <= m_MaximumVerticalDisparity; ++vdisparity)
     {