diff --git a/Testing/Utilities/CMakeLists.txt b/Testing/Utilities/CMakeLists.txt
index 0e887ab93dc25362269ca6b0d344d77972127581..c8400c3763cb42df97b7b83c8ad5b99ebfef4673 100644
--- a/Testing/Utilities/CMakeLists.txt
+++ b/Testing/Utilities/CMakeLists.txt
@@ -333,25 +333,31 @@ ADD_TEST(utOssimRadarSatSupport ${UTILITIES_TESTS}
 
 # -------            SIFT   -------------------------------------
 ADD_TEST(ut2DSiftImageSquareSyntheticRotate10 ${UTILITIES_TESTS}
-	 itk2DScaleInvariantFeatureImageFilter
-	 --synthetic
-	 --rotate-mid --rotate 10
-	 ${INPUTDATA}/carre.png 
-	 ${TEMP} )
+	 itk2DScaleInvariantFeatureImageFilterTest
+	 ${INPUTDATA}/carre.png
+         ${TEMP}/itk2DScaleInvariantFeatureImageFilter_carre1.png
+	 ${TEMP}/itk2DScaleInvariantFeatureImageFilter_carre2.png
+	 ${TEMP}/itk2DScaleInvariantFeatureImageFilter_carre_keys1.png
+	 ${TEMP}/itk2DScaleInvariantFeatureImageFilter_carre_keys2.png
+	 1 10 0.5 0  )
 
 ADD_TEST(ut2DSiftImageGridSyntheticRotate10 ${UTILITIES_TESTS}
-	 itk2DScaleInvariantFeatureImageFilter
-	 --synthetic
-	 --rotate-mid --rotate 10
+	 itk2DScaleInvariantFeatureImageFilterTest
 	 ${INPUTDATA}/damier.png 
-	 ${TEMP} )
+	 ${TEMP}/itk2DScaleInvariantFeatureImageFilter_damier1.png
+	 ${TEMP}/itk2DScaleInvariantFeatureImageFilter_damier2.png
+	 ${TEMP}/itk2DScaleInvariantFeatureImageFilter_damier_keys1.png
+	 ${TEMP}/itk2DScaleInvariantFeatureImageFilter_damier_keys2.png
+	 1 10 0.5 0 )
 
 ADD_TEST(ut2DSiftImageSceneSyntheticRotate10 ${UTILITIES_TESTS}
-	 itk2DScaleInvariantFeatureImageFilter
-	 --synthetic
-	 --rotate-mid --rotate 10
-	 ${INPUTDATA}/scene.png 
-	 ${TEMP} )
+	 itk2DScaleInvariantFeatureImageFilterTest
+	 ${INPUTDATA}/scene.png
+	 ${TEMP}/itk2DScaleInvariantFeatureImageFilter_scene1.png
+	 ${TEMP}/itk2DScaleInvariantFeatureImageFilter_scene2.png
+	 ${TEMP}/itk2DScaleInvariantFeatureImageFilter_scene_keys1.png
+	 ${TEMP}/itk2DScaleInvariantFeatureImageFilter_scene_keys2.png
+	 1 10 0.5 0 )
 
 # -------            lib Kml   ------------------------------
 #FOREACH(id_test createkml helloattrs helloenum hellofolder hellogeometry helloregion helloserializer helloworld parsekml      )
diff --git a/Testing/Utilities/itkScaleInvariantFeatureImageFilterTest.cxx b/Testing/Utilities/itkScaleInvariantFeatureImageFilterTest.cxx
index f27af71500148092253a4d81c5bf477998dc8721..ecb619f0eb57c2dda0f39bb4574b991f8ce00b40 100644
--- a/Testing/Utilities/itkScaleInvariantFeatureImageFilterTest.cxx
+++ b/Testing/Utilities/itkScaleInvariantFeatureImageFilterTest.cxx
@@ -1,10 +1,11 @@
 /*=========================================================================
-Program: ITK nSIFT Implemention - Command Line Wrapper
-Module: $RCSfile: testnD.cxx,v $
-Language: C++
-Date: $Date: 2007/11/25 15:51:48 $
-Version: $Revision: 1.0 $
+
+Program:   ITK nSIFT Implemention - Command Line Wrapper
+Language:  C++
+Date:      $Date$
+Version:   $Revision$
 Copyright (c) 2005,2006,2007 Warren Cheung
+
 All rights reserved.
 Redistribution and use in source and binary forms, with or without
 modification, are permitted provided that the following conditions are met:
@@ -30,224 +31,66 @@ OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 =========================================================================*/
 
+#define GENERATE_KEYS
 #define VERBOSE
-#define DEBUG
-//#define DEBUG_VERBOSE
-
-#define SIFT_FEATURE
-//#define REORIENT
-
-#define GENERATE_KEYS 
-//#define SUBSAMPLE
 #define CROP
-//#define DO_DOUBLE
 
 #include "itkScaleInvariantFeatureImageFilter.h"
 #include "itkImageSeriesReader.h"
 #include "itkNumericSeriesFileNames.h"
 #include "itkPointSetToImageFilter.h"
 #include "itkImageFileWriter.h"
-#include <getopt.h>
 
-int itk2DScaleInvariantFeatureImageFilter( int argc, char *argv[] )
+int itk2DScaleInvariantFeatureImageFilterTest( int argc, char **argv)
 {
-
-  // Command Line Arguments
-  unsigned int ARG_IMG1=2;
-  unsigned int ARG_IMG2=3;
-  unsigned int ARG_TMP=4;
-  
-  const unsigned int    Dimension = 2;
-  
-  // Default scale is 1.0
-  double test_scale = 1.0;
-  float test_rotate = 0.0;  // 0 degrees
-  double test_crop = 0.5;
-  //  float test_rotate = 0.0874;  // 5 degrees
-  //float test_rotate = 0.1748;  // 10 degrees
-  int series_start = 1;
-  int series_end = 9;
-  int series_inc = 1;
-
-  int mode = 'i';  /* defaults to comparing 2 images */;
-  int rotate_middle=0; /* defaults to rotating around the origin */
-  
-#define OPT_SCALE 'x'
-#define OPT_ROTATE 'r'
-#define OPT_DIM 'd'
-#define OPT_CROP 'c'
-#define OPT_SERIES_START 's'
-#define OPT_SERIES_END 'e'
-#define OPT_SERIES_INC 'i'
-
-  /* new Getopt code */
-  while(1) {
-    static struct option long_options[] =
-      {
-	/* These options set a flag.   */
-	{"synthetic", 0, &mode, 's'},
-	{"image", 0, &mode, 'i'},
-	{"rotate-mid", 0, &rotate_middle, 1},
-	/* These options don't set a flag.
-	   We distinguish them by their indices.  */
-	{"scale", required_argument, 0, OPT_SCALE},
-	{"rotate", required_argument, 0, OPT_ROTATE},
-	{"crop", required_argument, 0, OPT_CROP},
-	{"series-start", required_argument, 0, OPT_SERIES_START},
-	{"series-end", required_argument, 0, OPT_SERIES_END},
-	{"series-inc", required_argument, 0, OPT_SERIES_INC},
-	//	{"dimension", required_argument, 0, OPT_DIM},
-	{0, 0, 0, 0}
-      };    
-
-    int optindex;
-    int val = getopt_long(argc, argv, "", long_options, &optindex);
-
-    if (val == -1)
-      break;
-
-    switch(val) {
-    case OPT_SCALE:
-      test_scale = atof(optarg);
-      break;
-    case OPT_ROTATE:
-      if (atof(optarg) >= 0.0 && atof(optarg) <= 360.0)
-      test_rotate = atof(optarg) * PI * 2.0 / 360.0;
-      break;
-    case OPT_CROP:
-      if (atof(optarg) <= 1.0) {
-	test_crop = atof(optarg);
-      }
-      break;
-    case OPT_SERIES_START:
-      series_start = atoi(optarg);
-      break;
-    case OPT_SERIES_END:
-      series_end = atoi(optarg);
-      break;
-    case OPT_SERIES_INC:
-      series_inc = atoi(optarg);
-      break;
-      /*
-    case OPT_DIM:
-      Dimension = atoi(optarg);
-      break;
-      */
-    }
-  }
-
-  ARG_IMG1 = optind;
-  ARG_IMG2 = optind+1;
-  
-  if (mode == 'i')
-    {
-      ARG_TMP = optind+2;
-    }
-  else
-    {
-      ARG_TMP = optind+1;
-    }
-
-  typedef  float  PixelType;
-  typedef itk::Image< PixelType, Dimension >  FixedImageType;
+  const unsigned int Dimension = 2;
+
+  const char* inputImage1 = argv[1];
+  const char* outputImage1 = argv[2];
+  const char* outputImage2 = argv[3];
+  const char* outputImageKeys1 = argv[4];
+  const char* outputImageKeys2 = argv[5];
+  
+  // Default parametres
+  // scale is 1.0
+  // rotate is 0 degrees
+  // crop is 0.5
+  // rotate_middle is 0 (rotating around the origin
+  // mode is s (synthetic)
+  
+  double test_scale = atof(argv[6]);
+  float test_rotate = atof(argv[7])* M_PI * 2.0 / 360.0;
+  double test_crop = atof(argv[8]);
+  int rotate_middle= atoi(argv[9]);
+  int mode = 's';
+  
+  typedef float PixelType;
+  typedef itk::Image<PixelType, Dimension> FixedImageType;
   typedef itk::ScaleInvariantFeatureImageFilter<FixedImageType, Dimension> SiftFilterType;
   typedef itk::Image<unsigned char, Dimension> OutputImageType;
   
-  typedef itk::ImageSource< FixedImageType > ImageSourceType;
-
+  typedef itk::ImageSource<FixedImageType> ImageSourceType;
+  
   ImageSourceType::Pointer fixedImageReader, fixedImageReader2;
-
-  typedef itk::PointSetToImageFilter
-    <SiftFilterType::PointSetType, OutputImageType> PointSetFilterType;
   
-  if( static_cast<unsigned int>(argc) <= ARG_IMG1 || (mode == 'i' && static_cast<unsigned int>(argc) <= ARG_IMG2 ) )
-    {
-      std::cerr << "Incorrect number of parameters " << std::endl;
-      std::cerr << std::endl;
-      std::cerr << "siftkeys program ( ";
-      std::cerr << Dimension << "D ";      
-#ifdef SIFT_FEATURE
-      std::cerr << "sift-feature ";
-#else
-      std::cerr << "histogram-feature ";
-#endif
-#ifdef REORIENT
-      std::cerr << "reoriented ";
-#endif
-      std::cerr << ")" << std::endl;
-
-      std::cerr << "Usage: \n";
-      std::cerr  << argv[0] << " [options] ImageFile [ImageFile2] [Temporary]\n"; 
-      std::cerr << "This program takes an input image file(s) and generates scale invariant features." << std::endl;
-      std::cerr << std::endl;
-      std::cerr << "Image Processing Options (Choose ONE):" << std::endl;
-      std::cerr << "--image" << std::endl;
-      std::cerr << " compare ImageFile and ImageFile2" << std::endl;
-      std::cerr << "\nOR\n" << std::endl;
-      std::cerr << "--synthetic" << std::endl;
-      std::cerr << " compare ImageFile to synthetically generated version" << std::endl;
-      std::cerr << "Synthetic Image Options:" << std::endl;
-      std::cerr << "--rotate value" << std::endl;
-      std::cerr << "  rotate synthetic image on first axis by value degrees" << std::endl;
-      std::cerr << "--rotate-middle" << std::endl;
-      std::cerr << "  centre of rotation at the centre of image (defaults to origin)" << std::endl;
-      std::cerr << "--scale value" << std::endl;
-      std::cerr << "  scale all axes of synthetic image by value" << std::endl;
-      std::cerr << "--tmp directory" << std::endl;
-      std::cerr << "  temporary directory" << std::endl;
-      std::cerr << std::endl;
-      return 1;
-    }
-
+  typedef itk::PointSetToImageFilter<SiftFilterType::PointSetType, OutputImageType> PointSetFilterType;
+  
   std::cerr << "Dimension = " << Dimension << "\n";
   std::cerr << "Test Scale = " << test_scale << "\n";
   std::cerr << "Test Rotate = " << test_rotate << "\n";
   std::cerr << "Image Crop Ratio (first 3D) = " << test_crop << "\n";
   std::cerr << "Mode = " << (char) mode << "\n";
-  std::cerr << "ImageFile1 = " << argv[optind] << "\n";
-  std::cerr << "Temp directory = " << argv[ARG_TMP] << "\n";
-  if (Dimension == 4) {
-    std::cerr << "Image Series Start = " << series_start << "\n";
-    std::cerr << "Image Series End = " << series_end << "\n";
-    std::cerr << "Image Series Inc = " << series_inc << "\n";
-  }
-
-#ifdef SIFT_FEATURE
+  std::cerr << "ImageFile1 = " << inputImage1 << "\n";
   std::cerr << "SIFT Feature\n" << std::endl;
-#else
-  std::cerr << "Histogram Feature\n" << std::endl;
-#endif
-
-#ifdef REORIENT
-  std::cerr << "Reorientation enabled\n" << std::endl;  
-#endif
-
-  if (Dimension == 4) {
-    /* Assume fileseries reader */
-    typedef itk::ImageSeriesReader< FixedImageType  > FixedImageReaderType;
-    FixedImageReaderType::Pointer tmpImageReader  = FixedImageReaderType::New();
-
-    typedef itk::NumericSeriesFileNames NameGeneratorType;
-    NameGeneratorType::Pointer nameGenerator = NameGeneratorType::New();
-    
-    nameGenerator->SetSeriesFormat( argv[ARG_IMG1] );
-    nameGenerator->SetStartIndex( series_start );
-    nameGenerator->SetEndIndex( series_end );
-    nameGenerator->SetIncrementIndex( series_inc );
-        
-    tmpImageReader->SetFileNames( nameGenerator->GetFileNames() );
-
-    fixedImageReader = tmpImageReader;
-  } else {
-    typedef itk::ImageFileReader< FixedImageType  > FixedImageReaderType;
-    FixedImageReaderType::Pointer tmpImageReader  = FixedImageReaderType::New();
-    tmpImageReader  = FixedImageReaderType::New();
-
-    tmpImageReader->SetFileName(  argv[ARG_IMG1] );
-    fixedImageReader=tmpImageReader;
-  }
+  
+  typedef itk::ImageFileReader< FixedImageType  > FixedImageReaderType;
+  FixedImageReaderType::Pointer tmpImageReader  = FixedImageReaderType::New();
+  tmpImageReader  = FixedImageReaderType::New();
+  
+  tmpImageReader->SetFileName(  inputImage1 );
+  fixedImageReader=tmpImageReader;
   fixedImageReader->Update();
-
+  
   typedef itk::ScalableAffineTransform< double, Dimension > ScaleType;
 #ifdef CROP
   ScaleType::Pointer no_transform = ScaleType::New();
@@ -269,23 +112,15 @@ int itk2DScaleInvariantFeatureImageFilter( int argc, char *argv[] )
 #else
   FixedImageType::Pointer fixedImage = fixedImageReader->GetOutput();  
 #endif
-
+  
   SiftFilterType::PointSetTypePointer keypoints1, keypoints2;
   PointSetFilterType::Pointer pointSet1 = PointSetFilterType::New();
   PointSetFilterType::Pointer pointSet2 = PointSetFilterType::New();
-
+  
   SiftFilterType siftFilter1, siftFilter2;
   
-  if ( static_cast<unsigned int>(argc)-1 == ARG_TMP)
-    {
-      siftFilter1.SetTemporaryDir(argv[ARG_TMP]);
-    }
-
-#ifdef DEBUG
-  siftFilter1.writeImage(fixedImage, "utScaleInvariantFeatureImageFilter_0.png");
+  siftFilter1.writeImage(fixedImage, outputImage1);
   std::cout << std::endl << "Starting SIFT Feature Extraction...\n";
-#endif
-  
   keypoints1 = siftFilter1.getSiftFeatures(fixedImage);
   
   pointSet1->SetInput(keypoints1);
@@ -296,18 +131,9 @@ int itk2DScaleInvariantFeatureImageFilter( int argc, char *argv[] )
   typedef itk::ImageFileWriter<OutputImageType> WriterType;
   
   WriterType::Pointer writer = WriterType::New();
-  
-  std::string keys0_name = "";
-  if (static_cast<unsigned int>(argc)-1 == ARG_TMP)
-    {
-      keys0_name = argv[ARG_TMP];
-      keys0_name+="/";
-    }
-  keys0_name+="utScaleInvariantFeatureImageFilter_keys0.png";
-  writer->SetFileName(keys0_name.c_str());
+  writer->SetFileName(outputImageKeys1);
   writer->SetInput(pointSet1->GetOutput());
   writer->Update();
-  //siftFilter1.writeImage(pointSet1->GetOutput(), "utScaleInvariantFeatureImageFilter_keys0.png");
   
   typedef itk::ScalableAffineTransform< double, Dimension > TestTransformType;
   TestTransformType::Pointer inv_test_transform;
@@ -347,9 +173,8 @@ int itk2DScaleInvariantFeatureImageFilter( int argc, char *argv[] )
       std::cerr << "Rotation centred at origin." << std::endl;    
     }
 #endif 
-
+    
     test_transform->Rotate(0,1,test_rotate);
-
 #if 0
     if (rotate_middle) {
       /* Cycle through each dimension and shift back*/
@@ -375,72 +200,29 @@ int itk2DScaleInvariantFeatureImageFilter( int argc, char *argv[] )
       scaler->SetTransform(test_transform);
       scaler->Update();
       scaledImage = scaler->GetOutput();
-
-#ifdef DEBUG
-      siftFilter2.writeImage(scaledImage, "utScaleInvariantFeatureImageFilter_1.png");
+      
+      siftFilter2.writeImage(scaledImage, outputImage2);
       std::cout << std::endl;
-#endif
+      
       keypoints2 = siftFilter2.getSiftFeatures(scaledImage);
-    }
-    
-    std::cerr << "Test Image Scale: " << test_scale << std::endl;
-    // std::cerr << "Test Translate: " << test_translate << std::endl;
-    std::cerr << "Test Image Rotate: " << test_rotate << std::endl;    
-  } else if (mode == 'i') {
-    std::cerr << std::endl << "Image Comparison mode\n";  
-    inv_test_transform = NULL;
-
-    if (Dimension == 4) {
-      typedef itk::ImageSeriesReader< FixedImageType  > FixedImageReaderType;
-      FixedImageReaderType::Pointer tmpImageReader  = FixedImageReaderType::New();
-      tmpImageReader  = FixedImageReaderType::New();
 
-      typedef itk::NumericSeriesFileNames NameGeneratorType;
-      NameGeneratorType::Pointer nameGenerator = NameGeneratorType::New();
+      pointSet2->SetInput(keypoints2);
+      pointSet1->SetOutsideValue(0);
+      pointSet1->SetInsideValue(255);
+      pointSet1->SetSize(scaledImage->GetLargestPossibleRegion().GetSize());
       
-      nameGenerator->SetSeriesFormat( argv[ARG_IMG2] );
-      nameGenerator->SetStartIndex( series_start );
-      nameGenerator->SetEndIndex( series_end );
-      nameGenerator->SetIncrementIndex( series_inc );
-      
-      tmpImageReader->SetFileNames( nameGenerator->GetFileNames() );
-      fixedImageReader2 = tmpImageReader;
-    } else {      
-      typedef itk::ImageFileReader< FixedImageType  > FixedImageReaderType;
-      FixedImageReaderType::Pointer tmpImageReader  = FixedImageReaderType::New();
-      tmpImageReader  = FixedImageReaderType::New();
-
-      tmpImageReader->SetFileName(  argv[ARG_IMG2] );
-      fixedImageReader2 = tmpImageReader;
+      WriterType::Pointer writer2 = WriterType::New();
+      writer2->SetFileName(outputImageKeys2);
+      writer2->SetInput(pointSet2->GetOutput());
+      writer2->Update();
     }
-    fixedImageReader2->Update();
-
-#ifdef CROP
-    SiftFilterType::ResampleFilterType::Pointer cropper2 = SiftFilterType::ResampleFilterType::New();
-    cropper2->SetInput(fixedImageReader2->GetOutput());
-    FixedImageType::SizeType cropsize2 = 
-      fixedImageReader2->GetOutput()->GetLargestPossibleRegion().GetSize();
-    for (unsigned int k = 0; k < Dimension; ++k) {
-      if (k < 4)
-	cropsize2[k] /= 2;
-    }
-    cropper2->SetSize( cropsize2 );
-    cropper2->SetOutputSpacing(fixedImageReader2->GetOutput()->GetSpacing());
-    cropper2->SetTransform(no_transform);
-    cropper2->Update();
-    FixedImageType::Pointer fixedImage2 = cropper2->GetOutput();
-#else
-    FixedImageType::Pointer fixedImage2 = fixedImageReader2->GetOutput();  
-#endif
+    
+    std::cerr << "Test Image Scale: " << test_scale << std::endl;
+    std::cerr << "Test Image Rotate: " << test_rotate << std::endl; 
+    std::cerr << std::endl << "Matching Keypoints\n";  
 
-    keypoints2 = siftFilter2.getSiftFeatures(fixedImage2);
+    siftFilter2.MatchKeypointsPos(keypoints1, keypoints2, inv_test_transform);
+    siftFilter2.MatchKeypointsFeatures(keypoints1, keypoints2, inv_test_transform);
   }
-  
-  std::cerr << std::endl << "Matching Keypoints\n";  
-  siftFilter2.MatchKeypointsPos(keypoints1, keypoints2, inv_test_transform);
-#ifdef GENERATE_KEYS
-  siftFilter2.MatchKeypointsFeatures(keypoints1, keypoints2, inv_test_transform);
-#endif
   return 0;
-
 }
diff --git a/Testing/Utilities/otbUtilitiesTests.cxx b/Testing/Utilities/otbUtilitiesTests.cxx
index 4a6e03ea9c789c797670845d944a73fe2e8d4c58..a79b283709647894a1cfffa89eeab2802befb67f 100644
--- a/Testing/Utilities/otbUtilitiesTests.cxx
+++ b/Testing/Utilities/otbUtilitiesTests.cxx
@@ -38,7 +38,7 @@ REGISTER_TEST(tinyXMLlibTest);
 REGISTER_TEST(svmGenericKernelBasicOperationsTest);
 REGISTER_TEST(otbSVMComposedKernelFunctorTest);
 REGISTER_TEST(ossimRadarSatSupport);
-REGISTER_TEST(itk2DScaleInvariantFeatureImageFilter);
+REGISTER_TEST(itk2DScaleInvariantFeatureImageFilterTest);
 //REGISTER_TEST(openJpegEncoder);
 //REGISTER_TEST(openJpegDecoder);
 }