diff --git a/Code/Common/otbTestMain.h b/Code/Common/otbTestMain.h
index bb90094bf9fb9726c94091146961023d96b0aa9e..5869999d6c12be30db5c4a3135eb5aeb0a8a7b14 100644
--- a/Code/Common/otbTestMain.h
+++ b/Code/Common/otbTestMain.h
@@ -75,12 +75,14 @@ int main(int ac, char* av[] )
 {
   double lToleranceDiffPixelImage(0);
   double lEpsilon(0);
-  char *baselineFilenameImage = NULL;
-  char *testFilenameImage = NULL;
   char *baselineFilenameBinary = NULL;
   char *testFilenameBinary = NULL;
   char *baselineFilenameAscii = NULL;
   char *testFilenameAscii = NULL;
+  // vector if image filenames to compare
+  std::vector<char*> baseLineFilenamesImage;
+  std::vector<char*> testFilenamesImage;
+
 
 // On some sgi machines, threads and stl don't mix.
 #if defined(__sgi) && defined(_COMPILER_VERSION) && _COMPILER_VERSION <= 730
@@ -127,11 +129,25 @@ int main(int ac, char* av[] )
     if (strcmp(av[1], "--compare-image") == 0)
       {
       lToleranceDiffPixelImage = (double)(::atof(av[2]));
-      baselineFilenameImage = av[3];
-      testFilenameImage = av[4];
+      baseLineFilenamesImage.push_back(av[3]);
+      testFilenamesImage.push_back(av[4]);
       av += 4;
       ac -= 4;
       }
+    else if(strcmp(av[1], "--compare-n-images") == 0)
+      {
+	lToleranceDiffPixelImage = (double)(::atof(av[2]));
+	// Number of comparisons to do
+	unsigned int nbComparisons=(unsigned int)(::atoi(av[3]));
+	// Retrieve all the file names
+	for(int i = 0; i<nbComparisons;i++)
+	  {
+	    baseLineFilenamesImage.push_back(av[4+2*i]);
+	    testFilenamesImage.push_back(av[5+2*i]);
+	  }
+	av+=2+2*nbComparisons;
+	ac-=2+2*nbComparisons;
+      }
     else if (strcmp(av[1], "--compare-binary") == 0)
       {
       baselineFilenameBinary = av[2];
@@ -165,38 +181,50 @@ int main(int ac, char* av[] )
 otbMsgDebugMacro(<<"----------------     DEBUT Controle NON-REGRESION  ------------------- ");
       // Make a list of possible baselines
       // Test de non regression sur des images
-      if (baselineFilenameImage && testFilenameImage)
+      if ((baseLineFilenamesImage.size()>0) && (testFilenamesImage.size()>0))
         {
-        std::map<std::string,int> baselines = RegressionTestBaselines(baselineFilenameImage);
-        std::map<std::string,int>::iterator baseline = baselines.begin();
-        std::string bestBaseline;
-        int bestBaselineStatus = itk::NumericTraits<int>::max();
-        while (baseline != baselines.end())
-          {
-          baseline->second = RegressionTestImage(testFilenameImage,
-                                                 (baseline->first).c_str(),
-                                                 0,
-                                                 lToleranceDiffPixelImage);
-          if (baseline->second < bestBaselineStatus)
-            {
-            bestBaseline = baseline->first;
-            bestBaselineStatus = baseline->second;
-            }
-          if (baseline->second == 0)
-            {
-            break;
-            }
-          ++baseline;
-          }
-        // if the best we can do still has errors, generate the error images
-        if (bestBaselineStatus)
-          {
-          baseline->second = RegressionTestImage(testFilenameImage,
-                                                 bestBaseline.c_str(),
-                                                 1,
-                                                 lToleranceDiffPixelImage);
-          }
-        result += bestBaselineStatus;
+	  // Creates iterators on baseline filenames vector and test filenames vector
+	  std::vector<char*>::iterator itBaselineFilenames = baseLineFilenamesImage.begin();
+	  std::vector<char*>::iterator itTestFilenames = testFilenamesImage.begin();
+	  // For each couple of baseline and test file, do the comparison
+	  for(;(itBaselineFilenames != baseLineFilenamesImage.begin())
+		&&(itTestFilenames != testFilenamesImage.begin());
+	      ++itBaselineFilenames,++itTestFilenames)
+	    {
+	      char * baselineFilenameImage = (*itBaselineFilenames);
+	      char * testFilenameImage = (*itTestFilenames);
+
+	      std::map<std::string,int> baselines = RegressionTestBaselines(baselineFilenameImage);
+	      std::map<std::string,int>::iterator baseline = baselines.begin();
+	      std::string bestBaseline;
+	      int bestBaselineStatus = itk::NumericTraits<int>::max();
+	      while (baseline != baselines.end())
+		{
+		  baseline->second = RegressionTestImage(testFilenameImage,
+							 (baseline->first).c_str(),
+							 0,
+							 lToleranceDiffPixelImage);
+		  if (baseline->second < bestBaselineStatus)
+		    {
+		      bestBaseline = baseline->first;
+		      bestBaselineStatus = baseline->second;
+		    }
+		  if (baseline->second == 0)
+		    {
+		      break;
+		    }
+		  ++baseline;
+		}
+	      // if the best we can do still has errors, generate the error images
+	      if (bestBaselineStatus)
+		{
+		  baseline->second = RegressionTestImage(testFilenameImage,
+							 bestBaseline.c_str(),
+							 1,
+							 lToleranceDiffPixelImage);
+		}
+	      result += bestBaselineStatus;
+	    }
         }
       // Test de non regression sur des fichiers ascii
       if (baselineFilenameAscii && testFilenameAscii)