diff --git a/Code/FeatureExtraction/otbContrastTextureFunctor.h b/Code/FeatureExtraction/otbContrastTextureFunctor.h
index ca9003288c52438fbef8a6d9e8ee9a1c503407e4..91117edc258b396a1fd5384386e685d97bd18b61 100644
--- a/Code/FeatureExtraction/otbContrastTextureFunctor.h
+++ b/Code/FeatureExtraction/otbContrastTextureFunctor.h
@@ -121,7 +121,7 @@ public:
 	    double rVal = (static_cast<double>(r)+0.5)*binsLength[1];
 	    for (unsigned s = 0; s<histo[r].size(); s++)
 	      { 
-		if( vcl_abs( rVal - (static_cast<double>(s)+0.5)*binsLength[0]) < nCeil )
+		if( vcl_abs( rVal - (static_cast<double>(s)+0.5)*binsLength[0]) == nCeil )
 		  {
 		    double p =  static_cast<double>(histo[r][s])*areaInv;
 		    out += nCeilSquare * p;
diff --git a/Code/FeatureExtraction/otbSumAverageTextureFunctor.h b/Code/FeatureExtraction/otbSumAverageTextureFunctor.h
new file mode 100644
index 0000000000000000000000000000000000000000..6b5a46a4a72e6625abd7fdc964b79ce25ce6854e
--- /dev/null
+++ b/Code/FeatureExtraction/otbSumAverageTextureFunctor.h
@@ -0,0 +1,148 @@
+/*=========================================================================
+
+  Program:   ORFEO Toolbox
+  Language:  C++
+  Date:      $Date$
+  Version:   $Revision$
+
+
+  Copyright (c) Centre National d'Etudes Spatiales. All rights reserved.
+  See OTBCopyright.txt for details.
+
+
+     This software is distributed WITHOUT ANY WARRANTY; without even
+     the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
+     PURPOSE.  See the above copyright notices for more information.
+
+=========================================================================*/
+#ifndef __otbSumAverageTextureFunctor_h
+#define __otbSumAverageTextureFunctor_h
+
+#include "otbEntropyTextureFunctor.h"
+
+namespace otb
+{
+namespace Functor
+{
+/** \class SumAverageTextureFunctor
+ *  \brief This functor calculates the inverse difference moment of an image
+ *
+ *   Computes joint histogram (neighborhood and offset neighborhood) 
+ *   which bins are computing using Scott formula.
+ *   Computes the probabiltiy p for each pair of pixel.
+ *   InverseDifferenceMoment  is the sum 1/(1+(pi-poff)²)*p over the neighborhood.
+ *   TIterInput is an ietrator, TOutput is a PixelType.
+ *
+ *  \ingroup Functor
+ *  \ingroup 
+ *  \ingroup Statistics
+ */
+template <class TIterInput1, class TIterInput2, class TOutput>
+class ITK_EXPORT SumAverageTextureFunctor : 
+public EntropyTextureFunctor<TIterInput1, TIterInput2, TOutput>
+{
+public:
+  SumAverageTextureFunctor(){};
+  ~SumAverageTextureFunctor(){};
+
+  typedef TIterInput1                           IterType1;
+  typedef TIterInput2                           IterType2;
+  typedef TOutput                               OutputType;
+  typedef typename IterType1::OffsetType        OffsetType;
+  typedef typename IterType1::RadiusType        RadiusType;
+  typedef typename IterType1::InternalPixelType InternalPixelType;
+  typedef typename IterType1::ImageType         ImageType;
+  typedef itk::Neighborhood<InternalPixelType,::itk::GetImageDimension<ImageType>::ImageDimension>    NeighborhoodType;
+  typedef std::vector<double>                   DoubleVectorType;
+  typedef std::vector<int>                      IntVectorType;
+  typedef std::vector<IntVectorType>            IntVectorVectorType;
+  typedef EntropyTextureFunctor<TIterInput1, TIterInput2, TOutput> Superclass;
+
+
+  virtual double ComputeOverSingleChannel(const NeighborhoodType &neigh, const NeighborhoodType &neighOff)
+  {
+    DoubleVectorType binsLength = Superclass::StatComputation(neigh, neighOff);
+
+    RadiusType radius = neigh.GetRadius();
+    double area = static_cast<double>(neigh.GetSize()[0]*neigh.GetSize()[1]);
+    double areaInv = 1/area;
+    OffsetType offset;
+    offset.Fill(0);
+    OffsetType offsetOff;
+    OffsetType offsetOffInit;
+
+    offsetOffInit[0] = -radius[0]+this->GetOffset()[0]-1;
+    offsetOffInit[1] = -radius[1]+this->GetOffset()[1]-1;
+
+    int histoIdX = 0;
+    int histoIdY = 0;
+    double out = 0.;
+
+    IntVectorType histoTemp;
+    IntVectorVectorType histo;
+    if (binsLength[0] != 0)
+      histoTemp = IntVectorType( vcl_floor( static_cast<double>(this->GetMaxi()-this->GetMini())/binsLength[0])+1., 0);
+    else
+      histoTemp = IntVectorType( 1, 0 );
+
+    if (binsLength[1] != 0)
+        histo = IntVectorVectorType( vcl_floor(static_cast<double>(this->GetMaxiOff()-this->GetMiniOff())/binsLength[1])+1., histoTemp );
+    else
+      histo = IntVectorVectorType( 1, histoTemp );
+
+    offsetOff = offsetOffInit;
+    for ( int l = -static_cast<int>(radius[0]); l <= static_cast<int>(radius[0]); l++ )
+	{
+	  offsetOff[0]++;
+	  offsetOff[1] = offsetOffInit[1];
+	  offset[0] = l;
+	  for ( int k = -static_cast<int>(radius[1]); k <= static_cast<int>(radius[1]); k++)
+	    {
+	      offsetOff[1]++;
+	      offset[1] = k;
+	      histoIdX = 0;
+	      histoIdY = 0;
+	      if ( binsLength[1] != 0)
+		histoIdX = static_cast<int>(vcl_floor( (static_cast<double>(neighOff[offsetOff])-this->GetMiniOff()) / static_cast<double>(binsLength[1]) ));
+	      if ( binsLength[0] !=0 )
+		histoIdY = static_cast<int>(vcl_floor( (static_cast<double>(neigh[offset])-this->GetMini()) /static_cast<double>( binsLength[0]) ));
+	      
+	      histo[histoIdX][histoIdY]++;
+	      
+	    }
+	}
+    // loop over bin neighborhood values
+    for (unsigned sB = 0; sB<histo[0].size(); sB++)
+      { 
+	double nCeil = (static_cast<double>(sB)+0.5)*binsLength[0];
+	for (unsigned r = 0; r<histo.size(); r++)
+	  {
+	    double rVal = (static_cast<double>(r)+0.5)*binsLength[1];
+	    for (unsigned s = 0; s<histo[r].size(); s++)
+	      { 
+		double sVal = (static_cast<double>(s)+0.5)*binsLength[0];
+		// In theory don't have the abs but will deals with neighborhood and offset without the same histo
+		// thus loop over 2*Ng don't have sense
+		if( vcl_abs(rVal + sVal - nCeil)<binsLength[1] || vcl_abs(rVal + sVal - 2*nCeil)<binsLength[1] )
+		  {
+		    double p =  static_cast<double>(histo[r][s])*areaInv;
+		    out += sVal * p;
+		  }
+	      }
+	  }
+      }
+    
+  
+    return out;  
+  }
+  
+};
+ 
+ 
+ 
+ 
+} // namespace Functor
+} // namespace otb
+
+#endif
+
diff --git a/Testing/Code/FeatureExtraction/CMakeLists.txt b/Testing/Code/FeatureExtraction/CMakeLists.txt
index f2153df55aa5db0de6927066e22aad78acccb813..842602fa25eba4bb3dc2fe43b23323491d42c7a8 100644
--- a/Testing/Code/FeatureExtraction/CMakeLists.txt
+++ b/Testing/Code/FeatureExtraction/CMakeLists.txt
@@ -28,6 +28,7 @@ SET(FEATUREEXTRACTION_TESTS9 ${CXX_TEST_PATH}/otbFeatureExtractionTests9)
 SET(FEATUREEXTRACTION_TESTS10 ${CXX_TEST_PATH}/otbFeatureExtractionTests10)
 SET(FEATUREEXTRACTION_TESTS11 ${CXX_TEST_PATH}/otbFeatureExtractionTests11)
 SET(FEATUREEXTRACTION_TESTS12 ${CXX_TEST_PATH}/otbFeatureExtractionTests12)
+SET(FEATUREEXTRACTION_TESTS13 ${CXX_TEST_PATH}/otbFeatureExtractionTests13)
 
 # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ otbFeatureExtractionTests1 ~~~~~~~~~~~~~~~~~~~~~
@@ -977,7 +978,7 @@ ADD_TEST(feTuLandmarkNew ${FEATUREEXTRACTION_TESTS10}
 
 
 # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ otbFeatureExtractionTests11 ~~~~~~~~~~~~~~~~~~~~~
+# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ otbFeatureExtractionTests11 ~~~~~~~~~~~~~~~~~~~~~
 # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
 
@@ -1040,8 +1041,13 @@ ADD_TEST(feTpSimplifyManyPathListFilter ${FEATUREEXTRACTION_TESTS11}
          1.0
         )
 
+
+# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ otbFeatureExtractionTests11 ~~~~~~~~~~~~~~~~~~~~~
+# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
 # -------        otb::TextureFunctorBase  -------------
-ADD_TEST(feTvTextureFunctorBase ${FEATUREEXTRACTION_TESTS11} 
+ADD_TEST(feTvTextureFunctorBase ${FEATUREEXTRACTION_TESTS12} 
 --compare-image ${EPS}
                 ${INPUTDATA}/poupees_sub.png
                 ${TEMP}/feTvTextureFunctorBase.tif
@@ -1055,7 +1061,7 @@ ADD_TEST(feTvTextureFunctorBase ${FEATUREEXTRACTION_TESTS11}
 
 
 # -------        otb::EnergyTextureFunctor   -------------
-ADD_TEST(feTvEnergyTextureFunctor ${FEATUREEXTRACTION_TESTS11} 
+ADD_TEST(feTvEnergyTextureFunctor ${FEATUREEXTRACTION_TESTS12} 
 --compare-image ${EPS}
                 ${BASELINE}/feTvEnergyTextureFunctor.tif
                 ${TEMP}/feTvEnergyTextureFunctor.tif
@@ -1069,7 +1075,7 @@ ADD_TEST(feTvEnergyTextureFunctor ${FEATUREEXTRACTION_TESTS11}
 )
 		
 # -------        otb::EntropyTextureFunctor   -------------
-ADD_TEST(feTvEntropyTextureFunctor ${FEATUREEXTRACTION_TESTS11} 
+ADD_TEST(feTvEntropyTextureFunctor ${FEATUREEXTRACTION_TESTS12} 
 --compare-image ${EPS}
                 ${BASELINE}/feTvEntropyTextureFunctor.tif
                 ${TEMP}/feTvEntropyTextureFunctor.tif
@@ -1083,7 +1089,7 @@ ADD_TEST(feTvEntropyTextureFunctor ${FEATUREEXTRACTION_TESTS11}
 )
 
 # -------   otb::InverseDifferenceMomentTextureFunctor  -------------
-ADD_TEST(feTvInverseDifferenceMomentTextureFunctor ${FEATUREEXTRACTION_TESTS11} 
+ADD_TEST(feTvInverseDifferenceMomentTextureFunctor ${FEATUREEXTRACTION_TESTS12} 
 --compare-image ${EPS}
                 ${BASELINE}/feTvInverseDifferenceMomentTextureFunctor.tif
                 ${TEMP}/feTvInverseDifferenceMomentTextureFunctor.tif
@@ -1097,7 +1103,7 @@ ADD_TEST(feTvInverseDifferenceMomentTextureFunctor ${FEATUREEXTRACTION_TESTS11}
 )
 
 # -------   otb::AngularSecondMomentumTextureFunctor  -------------
-ADD_TEST(feTvAngularSecondMomentumTextureFunctor ${FEATUREEXTRACTION_TESTS11} 
+ADD_TEST(feTvAngularSecondMomentumTextureFunctor ${FEATUREEXTRACTION_TESTS12} 
 --compare-image ${EPS}
                 ${BASELINE}/feTvAngularSecondMomentumTextureFunctor.tif
                 ${TEMP}/feTvAngularSecondMomentumTextureFunctor.tif
@@ -1111,7 +1117,7 @@ ADD_TEST(feTvAngularSecondMomentumTextureFunctor ${FEATUREEXTRACTION_TESTS11}
 )
 
 # -------   otb::VarianceTextureFunctor  -------------
-ADD_TEST(feTvVarianceTextureFunctor ${FEATUREEXTRACTION_TESTS11} 
+ADD_TEST(feTvVarianceTextureFunctor ${FEATUREEXTRACTION_TESTS12} 
 --compare-image ${EPS}
                 ${BASELINE}/feTvVarianceTextureFunctor.tif
                 ${TEMP}/feTvVarianceTextureFunctor.tif
@@ -1125,7 +1131,7 @@ ADD_TEST(feTvVarianceTextureFunctor ${FEATUREEXTRACTION_TESTS11}
 )
 
 # -------   otb::CorrelationTextureFunctor  -------------
-ADD_TEST(feTvCorrelationTextureFunctor ${FEATUREEXTRACTION_TESTS11} 
+ADD_TEST(feTvCorrelationTextureFunctor ${FEATUREEXTRACTION_TESTS12} 
 --compare-image ${EPS}
                 ${BASELINE}/feTvCorrelationTextureFunctor.tif
                 ${TEMP}/feTvCorrelationTextureFunctor.tif
@@ -1139,7 +1145,7 @@ ADD_TEST(feTvCorrelationTextureFunctor ${FEATUREEXTRACTION_TESTS11}
 )
 
 # -------   otb::ContrastTextureFunctor  -------------
-ADD_TEST(feTvContrastTextureFunctor ${FEATUREEXTRACTION_TESTS11} 
+ADD_TEST(feTvContrastTextureFunctor ${FEATUREEXTRACTION_TESTS12} 
 --compare-image ${EPS}
                 ${BASELINE}/feTvContrastTextureFunctor.tif
                 ${TEMP}/feTvContrastTextureFunctor.tif
@@ -1152,8 +1158,27 @@ ADD_TEST(feTvContrastTextureFunctor ${FEATUREEXTRACTION_TESTS11}
     2    # offset[1]	
 )
 
+
+# -------   otb::SumAverageTextureFunctor  -------------
+ADD_TEST(feTvSumAverageTextureFunctor ${FEATUREEXTRACTION_TESTS12} 
+--compare-image ${EPS}
+                ${BASELINE}/feTvSumAverageTexture.tif
+                ${TEMP}/feTvSumAverageTextureFunctor.tif
+  otbTextureFunctor
+    SAV #sum average
+    ${INPUTDATA}/poupees_sub.png
+    ${TEMP}/feTvSumAverageTextureFunctor.tif
+    5    # radius
+    -2   # offset[0]
+    2    # offset[1]	
+)
+
+# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ otbFeatureExtractionTests13 ~~~~~~~~~~~~~~~~~~~~~
+# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
 # -------        otb::EnergyTextureImageFunction   -------------
-ADD_TEST(feTvEnergyTextureImageFunction ${FEATUREEXTRACTION_TESTS12} 
+ADD_TEST(feTvEnergyTextureImageFunction ${FEATUREEXTRACTION_TESTS13} 
 --compare-image ${EPS}
                 ${BASELINE}/feTvEnergyTextureImageFunction.tif
                 ${TEMP}/feTvEnergyTextureImageFunction.tif
@@ -1169,7 +1194,7 @@ ADD_TEST(feTvEnergyTextureImageFunction ${FEATUREEXTRACTION_TESTS12}
 
 
 # -------        otb::EntropyTextureImageFunction   -------------
-ADD_TEST(feTvEntropyTextureImageFunction ${FEATUREEXTRACTION_TESTS12} 
+ADD_TEST(feTvEntropyTextureImageFunction ${FEATUREEXTRACTION_TESTS13} 
 --compare-image ${EPS}
                 ${BASELINE}/feTvEntropyTextureImageFunction.tif
                 ${TEMP}/feTvEntropyTextureImageFunction.tif
@@ -1185,7 +1210,7 @@ ADD_TEST(feTvEntropyTextureImageFunction ${FEATUREEXTRACTION_TESTS12}
 
 
 # -------        otb::InverseDifferenceMomentTextureImageFunction   -------------
-ADD_TEST(feTvInverseDifferenceMomentTextureImageFunction ${FEATUREEXTRACTION_TESTS12} 
+ADD_TEST(feTvInverseDifferenceMomentTextureImageFunction ${FEATUREEXTRACTION_TESTS13} 
 --compare-image ${EPS}
                 ${BASELINE}/feTvInverseDifferenceMomentTextureImageFunction.tif
                 ${TEMP}/feTvInverseDifferenceMomentTextureImageFunction.tif
@@ -1200,7 +1225,7 @@ ADD_TEST(feTvInverseDifferenceMomentTextureImageFunction ${FEATUREEXTRACTION_TES
 )
 
 # -------        otb::AngularSecondMomentumTextureImageFunction   -------------
-ADD_TEST(feTvAngularSecondMomentumTextureImageFunction ${FEATUREEXTRACTION_TESTS12} 
+ADD_TEST(feTvAngularSecondMomentumTextureImageFunction ${FEATUREEXTRACTION_TESTS13} 
 --compare-image ${EPS}
                 ${BASELINE}/feTvAngularSecondMomentumTextureImageFunction.tif
                 ${TEMP}/feTvAngularSecondMomentumTextureImageFunction.tif
@@ -1215,7 +1240,7 @@ ADD_TEST(feTvAngularSecondMomentumTextureImageFunction ${FEATUREEXTRACTION_TESTS
 )
 
 # -------        otb::VarianceTextureImageFunction   -------------
-ADD_TEST(feTvVarianceTextureImageFunction ${FEATUREEXTRACTION_TESTS12} 
+ADD_TEST(feTvVarianceTextureImageFunction ${FEATUREEXTRACTION_TESTS13} 
 --compare-image ${EPS}
                 ${BASELINE}/feTvVarianceTextureImageFunction.tif
                 ${TEMP}/feTvVarianceTextureImageFunction.tif
@@ -1230,7 +1255,7 @@ ADD_TEST(feTvVarianceTextureImageFunction ${FEATUREEXTRACTION_TESTS12}
 )
 
 # -------        otb::CorrelationTextureImageFunction   -------------
-ADD_TEST(feTvCorrelationTextureImageFunction ${FEATUREEXTRACTION_TESTS12} 
+ADD_TEST(feTvCorrelationTextureImageFunction ${FEATUREEXTRACTION_TESTS13} 
 --compare-image ${EPS}
                 ${BASELINE}/feTvCorrelationTextureImageFunction.tif
                 ${TEMP}/feTvCorrelationTextureImageFunction.tif
@@ -1245,7 +1270,7 @@ ADD_TEST(feTvCorrelationTextureImageFunction ${FEATUREEXTRACTION_TESTS12}
 )
 
 # -------        otb::ContrastTextureImageFunction   -------------
-ADD_TEST(feTvContrastTextureImageFunction ${FEATUREEXTRACTION_TESTS12} 
+ADD_TEST(feTvContrastTextureImageFunction ${FEATUREEXTRACTION_TESTS13} 
 --compare-image ${EPS}
                 ${BASELINE}/feTvContrastTextureImageFunction.tif
                 ${TEMP}/feTvContrastTextureImageFunction.tif
@@ -1259,6 +1284,20 @@ ADD_TEST(feTvContrastTextureImageFunction ${FEATUREEXTRACTION_TESTS12}
     2    # offset[1]	
 )
 
+# -------        otb::SumAverageTextureImageFunction   -------------
+ADD_TEST(feTvSumAverageTextureImageFunction ${FEATUREEXTRACTION_TESTS13} 
+--compare-image ${EPS}
+                ${BASELINE}/feTvSumAverageTextureImageFunction.tif
+                ${TEMP}/feTvSumAverageTextureImageFunction.tif
+   otbTextureImageFunction
+    SAV #sum average
+    ${INPUTDATA}/poupees_sub_c1.png
+    ${TEMP}/feTvSumAverageTextureImageFunction.tif
+    5    # radius[0]
+    5    # radius[1]
+    -2   # offset[0]
+    2    # offset[1]	
+)
 
 # A enrichir
 SET(BasicFeatureExtraction_SRCS1
@@ -1390,11 +1429,13 @@ otbCloudEstimatorFilter.cxx
 otbCloudDetectionFilterNew.cxx
 otbCloudDetectionFilter.cxx
 otbSimplifyManyPathListFilter.cxx
+)
+SET(BasicFeatureExtraction_SRCS12
 otbTextureFunctorBase.cxx
 otbTextureFunctor.cxx
 )
 
-SET(BasicFeatureExtraction_SRCS12
+SET(BasicFeatureExtraction_SRCS13
 otbTextureImageFunction.cxx
 )
 
@@ -1424,6 +1465,8 @@ ADD_EXECUTABLE(otbFeatureExtractionTests11 otbFeatureExtractionTests11.cxx ${Bas
 TARGET_LINK_LIBRARIES(otbFeatureExtractionTests11  OTBFeatureExtraction OTBIO)
 ADD_EXECUTABLE(otbFeatureExtractionTests12 otbFeatureExtractionTests12.cxx ${BasicFeatureExtraction_SRCS12})
 TARGET_LINK_LIBRARIES(otbFeatureExtractionTests12  OTBFeatureExtraction OTBIO)
+ADD_EXECUTABLE(otbFeatureExtractionTests13 otbFeatureExtractionTests13.cxx ${BasicFeatureExtraction_SRCS13})
+TARGET_LINK_LIBRARIES(otbFeatureExtractionTests13  OTBFeatureExtraction OTBIO)
 
 # ADD_EXECUTABLE(roadDetect roadDetect.cxx)
 # TARGET_LINK_LIBRARIES(roadDetect  OTBFeatureExtraction OTBIO)
diff --git a/Testing/Code/FeatureExtraction/otbFeatureExtractionTests11.cxx b/Testing/Code/FeatureExtraction/otbFeatureExtractionTests11.cxx
index edc5f7bd1235c97e31572d3bd3e094d798fbeb06..5f27e08348fdbb46b481d073c530e9200e4c7348 100644
--- a/Testing/Code/FeatureExtraction/otbFeatureExtractionTests11.cxx
+++ b/Testing/Code/FeatureExtraction/otbFeatureExtractionTests11.cxx
@@ -33,6 +33,4 @@ REGISTER_TEST(otbCloudEstimatorFilter);
 REGISTER_TEST(otbCloudDetectionFilterNew);
 REGISTER_TEST(otbCloudDetectionFilter);
 REGISTER_TEST(otbSimplifyManyPathListFilter);
-REGISTER_TEST(otbTextureFunctorBase);
-REGISTER_TEST(otbTextureFunctor);
 }
diff --git a/Testing/Code/FeatureExtraction/otbFeatureExtractionTests12.cxx b/Testing/Code/FeatureExtraction/otbFeatureExtractionTests12.cxx
index 3203b9172a9996bd74a3f85e3502785275610f93..d8fd6fd81868f7ecfb488b9964c516773ec5bc20 100644
--- a/Testing/Code/FeatureExtraction/otbFeatureExtractionTests12.cxx
+++ b/Testing/Code/FeatureExtraction/otbFeatureExtractionTests12.cxx
@@ -27,5 +27,6 @@
 
 void RegisterTests()
 {
-REGISTER_TEST(otbTextureImageFunction);
+REGISTER_TEST(otbTextureFunctorBase);
+REGISTER_TEST(otbTextureFunctor);
 }
diff --git a/Testing/Code/FeatureExtraction/otbFeatureExtractionTests13.cxx b/Testing/Code/FeatureExtraction/otbFeatureExtractionTests13.cxx
new file mode 100644
index 0000000000000000000000000000000000000000..3203b9172a9996bd74a3f85e3502785275610f93
--- /dev/null
+++ b/Testing/Code/FeatureExtraction/otbFeatureExtractionTests13.cxx
@@ -0,0 +1,31 @@
+/*=========================================================================
+
+  Program:   ORFEO Toolbox
+  Language:  C++
+  Date:      $Date$
+  Version:   $Revision$
+
+
+  Copyright (c) Centre National d'Etudes Spatiales. All rights reserved.
+  See OTBCopyright.txt for details.
+
+
+     This software is distributed WITHOUT ANY WARRANTY; without even
+     the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
+     PURPOSE.  See the above copyright notices for more information.
+
+=========================================================================*/
+
+// this file defines the otbCommonTest for the test driver
+// and all it expects is that you have a function called RegisterTests
+#if defined(_MSC_VER)
+#pragma warning ( disable : 4786 )
+#endif
+
+#include <iostream>
+#include "otbTestMain.h"
+
+void RegisterTests()
+{
+REGISTER_TEST(otbTextureImageFunction);
+}
diff --git a/Testing/Code/FeatureExtraction/otbTextureFunctor.cxx b/Testing/Code/FeatureExtraction/otbTextureFunctor.cxx
index 9c56c64a0bd4772788700832384725a65dfc7598..f2b44e6d430ea9ad670c5cd2e31c287e14ba1bc6 100644
--- a/Testing/Code/FeatureExtraction/otbTextureFunctor.cxx
+++ b/Testing/Code/FeatureExtraction/otbTextureFunctor.cxx
@@ -31,6 +31,7 @@
 #include "otbVarianceTextureFunctor.h"
 #include "otbCorrelationTextureFunctor.h"
 #include "otbContrastTextureFunctor.h"
+#include "otbSumAverageTextureFunctor.h"
 
 
 template<class TInputImage, class TOutputImage, class TFunctor>
@@ -114,6 +115,11 @@ int otbTextureFunctor(int argc, char * argv[])
       typedef otb::Functor::ContrastTextureFunctor<IteratorType, IteratorType, PixelType> FunctorType;
       return( generic_TextureFunctor<ImageType, ImageType, FunctorType>(argc,argv) );
     }
+  else if ( strArgv == "SAV" )
+    {
+      typedef otb::Functor::SumAverageTextureFunctor<IteratorType, IteratorType, PixelType> FunctorType;
+      return( generic_TextureFunctor<ImageType, ImageType, FunctorType>(argc,argv) );
+    }
   else
     {
       return EXIT_FAILURE;
diff --git a/Testing/Code/FeatureExtraction/otbTextureImageFunction.cxx b/Testing/Code/FeatureExtraction/otbTextureImageFunction.cxx
index 88e581770454c2f1ed648d465cb70c990c489114..b83c21258ae5a2e0246f78231f3a509778613c2e 100644
--- a/Testing/Code/FeatureExtraction/otbTextureImageFunction.cxx
+++ b/Testing/Code/FeatureExtraction/otbTextureImageFunction.cxx
@@ -34,6 +34,7 @@
 #include "otbVarianceTextureFunctor.h"
 #include "otbCorrelationTextureFunctor.h"
 #include "otbContrastTextureFunctor.h"
+#include "otbSumAverageTextureFunctor.h"
 
 
 template<class TInputImage, class TOutputImage, class TFunctor>
@@ -130,6 +131,11 @@ int otbTextureImageFunction(int argc, char * argv[])
       typedef otb::Functor::ContrastTextureFunctor<IteratorType, IteratorType, VectorType> FunctorType;
       return( generic_TextureImageFunction<ImageType, ImageType, FunctorType>(argc,argv) );
     }
+  else if ( strArgv == "SAV" )
+    {
+      typedef otb::Functor::SumAverageTextureFunctor<IteratorType, IteratorType, VectorType> FunctorType;
+      return( generic_TextureImageFunction<ImageType, ImageType, FunctorType>(argc,argv) );
+    }
   else
     {
       return EXIT_FAILURE;