diff --git a/Testing/Code/FeatureExtraction/otbImageToSIFTKeyPointSetFilter.cxx b/Testing/Code/FeatureExtraction/otbImageToSIFTKeyPointSetFilter.cxx
index 88d1fb667725667712a20020012caf8fef1dac3d..1fda293fb1675f017e993b992ad1b322e7d3ecff 100644
--- a/Testing/Code/FeatureExtraction/otbImageToSIFTKeyPointSetFilter.cxx
+++ b/Testing/Code/FeatureExtraction/otbImageToSIFTKeyPointSetFilter.cxx
@@ -28,6 +28,85 @@ PURPOSE.  See the above copyright notices for more information.
 #include <iostream>
 #include <fstream>
 
+int otbImageToSIFTKeyPointSetFilterValid(int argc, char * argv[])
+{
+  const char* inputImageFileName = argv[1];
+  const char* inputKeysFileName = argv[2];
+  const char* outputImageFileName = argv[3];
+  
+  typedef otb::Image<float,2> ImageType;
+  typedef otb::ImageFileReader<ImageType> ReaderType;
+  ReaderType::Pointer reader = ReaderType::New();
+  reader->SetFileName(inputImageFileName);
+  reader->Update();
+  
+  ImageType::OffsetType t = {{ 0, 1}};
+  ImageType::OffsetType b = {{ 0,-1}};
+  ImageType::OffsetType l = {{ 1, 0}};
+  ImageType::OffsetType r = {{-1, 0}};
+    
+  typedef itk::RGBPixel<unsigned char> RGBPixelType;
+  typedef otb::Image<RGBPixelType, 2> OutputImageType;
+  
+  OutputImageType::Pointer outputImage = OutputImageType::New();
+  outputImage->SetRegions(reader->GetOutput()->GetLargestPossibleRegion());
+  outputImage->Allocate();
+  
+  itk::ImageRegionIterator<OutputImageType> iterOutput(outputImage,
+						       outputImage->GetRequestedRegion());
+  
+  for (iterOutput.GoToBegin(); !iterOutput.IsAtEnd(); ++iterOutput)
+    {
+      ImageType::IndexType index = iterOutput.GetIndex();
+      ImageType::PixelType grayPix = reader->GetOutput()->GetPixel(index);
+      OutputImageType::PixelType rgbPixel;
+      rgbPixel.SetRed( static_cast<unsigned char>(grayPix) );
+      rgbPixel.SetGreen( static_cast<unsigned char>(grayPix) );
+      rgbPixel.SetBlue( static_cast<unsigned char>(grayPix) );
+      
+      iterOutput.Set(rgbPixel);
+    }
+  
+  OutputImageType::PixelType greenPixel;
+  OutputImageType::SizeType size = outputImage->GetLargestPossibleRegion().GetSize();
+  
+  greenPixel.SetGreen(255);
+  greenPixel.SetRed(0);
+  greenPixel.SetBlue(0);
+  
+  std::ifstream desc(inputKeysFileName);
+  while(!desc.eof())
+    {
+      OutputImageType::IndexType index;
+      OutputImageType::PointType point;
+      std::string line;
+      desc >> point[0] >> point[1];
+      std::getline(desc,line);
+      
+      outputImage->TransformPhysicalPointToIndex(point, index);
+
+      outputImage->SetPixel(index, greenPixel);
+      if (static_cast<unsigned int>(index[1]) < static_cast<unsigned int>(size[1]) )
+	outputImage->SetPixel(index+t,greenPixel);
+      if (index[1] > 0)
+	outputImage->SetPixel(index+b,greenPixel);
+      if (static_cast<unsigned int>(index[0]) < static_cast<unsigned int>(size[0]) )
+	outputImage->SetPixel(index+l,greenPixel);
+      if (index[0] > 0)
+	outputImage->SetPixel(index+r,greenPixel);
+      
+    }
+  desc.close();
+
+  typedef otb::ImageFileWriter<OutputImageType> WriterType;
+  WriterType::Pointer writer = WriterType::New();
+  writer->SetInput(outputImage);
+  writer->SetFileName(outputImageFileName);
+  writer->Update();
+  
+  return EXIT_SUCCESS;
+}
+
 int otbImageToSIFTKeyPointSetFilter(int argc, char * argv[])
 {
   const char * infname = argv[1];
@@ -36,6 +115,14 @@ int otbImageToSIFTKeyPointSetFilter(int argc, char * argv[])
 
   const unsigned int octaves = atoi(argv[4]);
   const unsigned int scales = atoi(argv[5]);
+  float threshold = .0;
+  float ratio = .0;
+  
+  if (argc > 6)
+    {
+      threshold = atof(argv[6]);
+      ratio = atof(argv[7]);
+    }
   
   typedef float RealType;
   const unsigned int Dimension =2;
@@ -60,6 +147,13 @@ int otbImageToSIFTKeyPointSetFilter(int argc, char * argv[])
   filter->SetInput(0,reader->GetOutput());
   filter->SetOctavesNumber(octaves);
   filter->SetScalesNumber(scales);
+  
+  if (argc>6)
+    {
+      filter->SetDoGThreshold(threshold);
+      filter->SetEdgeThreshold(ratio);
+    }
+  
   filter->Update();
   
   ImageType::OffsetType t = {{ 0, 1}};
@@ -78,10 +172,6 @@ int otbImageToSIFTKeyPointSetFilter(int argc, char * argv[])
   outputImage->SetRegions(reader->GetOutput()->GetLargestPossibleRegion());
   outputImage->Allocate();
   
-  OutputImageType::SizeType lRadius;
-  lRadius.Fill(1);
-  
-
   itk::ImageRegionIterator<OutputImageType> iterOutput(outputImage,
 						       outputImage->GetRequestedRegion());