diff --git a/Testing/Code/FeatureExtraction/otbImageFunctionAdaptor.cxx b/Testing/Code/FeatureExtraction/otbImageFunctionAdaptor.cxx
index 2f7fc61774aaa657d4f2f5a7d969a92d3ffb8d3d..c55e6a1cabf49f894652419e50d32c5bb038c02b 100644
--- a/Testing/Code/FeatureExtraction/otbImageFunctionAdaptor.cxx
+++ b/Testing/Code/FeatureExtraction/otbImageFunctionAdaptor.cxx
@@ -136,159 +136,214 @@ int otbImageFunctionAdaptor(int argc, char * argv[])
   // Content testing 
   double error = 0.0;
 
-  FMDFunction->SetInputImage(reader->GetOutput());
-  FMDFunction->SetNeighborhoodRadius(5);
-  FMDFunction->SetPmax(5);
-  FMDFunction->SetQmax(5);
-  FMDFunctionType::OutputType resultFMD = FMDFunction->EvaluateAtIndex(index);
-
-  FMDadaptedFunction->SetInputImage(reader->GetOutput());
-  FMDadaptedFunction->GetInternalImageFunction()->SetNeighborhoodRadius(5);
-  FMDadaptedFunction->GetInternalImageFunction()->SetPmax(5);
-  FMDadaptedFunction->GetInternalImageFunction()->SetQmax(5);
-  FMDImageFunctionAdaptorType::OutputType resultAdaptedFMD = FMDadaptedFunction->EvaluateAtIndex(index);
   
-  rsltIdx = 0;
-  for (unsigned int i=0; i<=5; i++)
+  try
     {
-    for (unsigned int j=0; j<=5; j++)
+    FMDFunction->SetInputImage(reader->GetOutput());
+    FMDFunction->SetNeighborhoodRadius(5);
+    FMDFunction->SetPmax(5);
+    FMDFunction->SetQmax(5);
+    FMDFunctionType::OutputType resultFMD = FMDFunction->EvaluateAtIndex(index);
+
+    FMDadaptedFunction->SetInputImage(reader->GetOutput());
+    FMDadaptedFunction->GetInternalImageFunction()->SetNeighborhoodRadius(5);
+    FMDadaptedFunction->GetInternalImageFunction()->SetPmax(5);
+    FMDadaptedFunction->GetInternalImageFunction()->SetQmax(5);
+    FMDImageFunctionAdaptorType::OutputType resultAdaptedFMD = FMDadaptedFunction->EvaluateAtIndex(index);
+
+    rsltIdx = 0;
+    for (unsigned int i = 0; i <= 5; i++)
       {
-      error += vcl_pow(vcl_abs(resultAdaptedFMD[rsltIdx] - resultFMD.at(i).at(j)), 2);
-    
-      std::cout << "resultAdaptedFMD : " << resultAdaptedFMD[rsltIdx] 
-                << "\t - resultFMD : " << resultFMD.at(i).at(j) << std::endl;
-      rsltIdx ++;
+      for (unsigned int j = 0; j <= 5; j++)
+        {
+        error += vcl_pow(vcl_abs(resultAdaptedFMD[rsltIdx] - resultFMD.at(i).at(j)), 2);
+
+        std::cout << "resultAdaptedFMD : " << resultAdaptedFMD[rsltIdx]
+            << "\t - resultFMD : " << resultFMD.at(i).at(j) << std::endl;
+        rsltIdx++;
+        }
       }
     }
+  catch (itk::ExceptionObject& err)
+    {
+    std::cout << "ExceptionObject caught for FMDadaptedFunction() !" << std::endl;
+    std::cout << err << std::endl;
+    }
 
-  RMFunction->SetInputImage(reader->GetOutput());
-  RMFunction->SetNeighborhoodRadius(5);
-  RMFunction->SetPmax(5);
-  RMFunction->SetQmax(5);
-  RMFunctionType::OutputType resultRM = RMFunction->EvaluateAtIndex(index);
-
-  RMadaptedFunction->SetInputImage(reader->GetOutput());
-  RMadaptedFunction->GetInternalImageFunction()->SetNeighborhoodRadius(5);
-  RMadaptedFunction->GetInternalImageFunction()->SetPmax(5);
-  RMadaptedFunction->GetInternalImageFunction()->SetQmax(5);
-  RMImageFunctionAdaptorType::OutputType resultAdaptedRM = RMadaptedFunction->EvaluateAtIndex(index);
-  
-  rsltIdx = 0;
-  for (unsigned int i=0; i<=5; i++)
+
+  try
     {
-    for (unsigned int j=0; j<=5; j++)
+    RMFunction->SetInputImage(reader->GetOutput());
+    RMFunction->SetNeighborhoodRadius(5);
+    RMFunction->SetPmax(5);
+    RMFunction->SetQmax(5);
+    RMFunctionType::OutputType resultRM = RMFunction->EvaluateAtIndex(index);
+
+    RMadaptedFunction->SetInputImage(reader->GetOutput());
+    RMadaptedFunction->GetInternalImageFunction()->SetNeighborhoodRadius(5);
+    RMadaptedFunction->GetInternalImageFunction()->SetPmax(5);
+    RMadaptedFunction->GetInternalImageFunction()->SetQmax(5);
+    RMImageFunctionAdaptorType::OutputType resultAdaptedRM = RMadaptedFunction->EvaluateAtIndex(index);
+
+    rsltIdx = 0;
+    for (unsigned int i = 0; i <= 5; i++)
       {
-      error += vcl_pow(vcl_abs(resultAdaptedRM[rsltIdx] - resultRM.at(i).at(j)), 2);
+      for (unsigned int j = 0; j <= 5; j++)
+        {
+        error += vcl_pow(vcl_abs(resultAdaptedRM[rsltIdx] - resultRM.at(i).at(j)), 2);
 
-      std::cout << "resultAdaptedRM : " << resultAdaptedRM[rsltIdx] 
-                << "\t - resultRM : " << resultRM.at(i).at(j) << std::endl;
-      rsltIdx ++;
+        std::cout << "resultAdaptedRM : " << resultAdaptedRM[rsltIdx] << "\t - resultRM : " << resultRM.at(i).at(j)
+            << std::endl;
+        rsltIdx++;
+        }
       }
     }
+  catch (itk::ExceptionObject& err)
+    {
+    std::cout << "ExceptionObject caught for RMFunction() !" << std::endl;
+    std::cout << err << std::endl;
+    }
 
-  CMFunction->SetInputImage(reader->GetOutput());
-  CMFunction->SetNeighborhoodRadius(5);
-  CMFunction->SetPmax(5);
-  CMFunction->SetQmax(5);
-  CMFunctionType::OutputType resultCM = CMFunction->EvaluateAtIndex(index);
-
-  CMadaptedFunction->SetInputImage(reader->GetOutput());
-  CMadaptedFunction->GetInternalImageFunction()->SetNeighborhoodRadius(5);
-  CMadaptedFunction->GetInternalImageFunction()->SetPmax(5);
-  CMadaptedFunction->GetInternalImageFunction()->SetQmax(5);
-  CMImageFunctionAdaptorType::OutputType resultAdaptedCM = CMadaptedFunction->EvaluateAtIndex(index);
-  
-  rsltIdx = 0;
-  for (unsigned int i=0; i<=5; i++)
+  try
     {
-    for (unsigned int j=0; j<=5; j++)
+    CMFunction->SetInputImage(reader->GetOutput());
+    CMFunction->SetNeighborhoodRadius(5);
+    CMFunction->SetPmax(5);
+    CMFunction->SetQmax(5);
+    CMFunctionType::OutputType resultCM = CMFunction->EvaluateAtIndex(index);
+
+    CMadaptedFunction->SetInputImage(reader->GetOutput());
+    CMadaptedFunction->GetInternalImageFunction()->SetNeighborhoodRadius(5);
+    CMadaptedFunction->GetInternalImageFunction()->SetPmax(5);
+    CMadaptedFunction->GetInternalImageFunction()->SetQmax(5);
+    CMImageFunctionAdaptorType::OutputType resultAdaptedCM = CMadaptedFunction->EvaluateAtIndex(index);
+
+    rsltIdx = 0;
+    for (unsigned int i = 0; i <= 5; i++)
       {
-      error += vcl_pow(vcl_abs(resultAdaptedCM[rsltIdx] - resultCM.at(i).at(j).real()), 2);
-      std::cout << "resultAdaptedCM : (" << resultAdaptedCM[rsltIdx]
-                << "," << resultAdaptedCM[rsltIdx+1] << ")"
-                << "\t - resultCM : " << resultCM.at(i).at(j) << std::endl;
-      rsltIdx ++;
-      error += vcl_pow(vcl_abs(resultAdaptedCM[rsltIdx] - resultCM.at(i).at(j).imag()), 2);
-      rsltIdx ++;
+      for (unsigned int j = 0; j <= 5; j++)
+        {
+        error += vcl_pow(vcl_abs(resultAdaptedCM[rsltIdx] - resultCM.at(i).at(j).real()), 2);
+        std::cout << "resultAdaptedCM : (" << resultAdaptedCM[rsltIdx] << "," << resultAdaptedCM[rsltIdx + 1] << ")"
+            << "\t - resultCM : " << resultCM.at(i).at(j) << std::endl;
+        rsltIdx++;
+        error += vcl_pow(vcl_abs(resultAdaptedCM[rsltIdx] - resultCM.at(i).at(j).imag()), 2);
+        rsltIdx++;
+        }
       }
     }
+  catch (itk::ExceptionObject& err)
+    {
+    std::cout << "ExceptionObject caught for CMadaptedFunction() !" << std::endl;
+    std::cout << err << std::endl;
+    }
 
-  FMFunction->SetInputImage(reader->GetOutput());
-  FMFunction->SetNeighborhoodRadius(5);
-  FMFunctionType::OutputType resultFM = FMFunction->EvaluateAtIndex(index);
-
-  FMadaptedFunction->SetInputImage(reader->GetOutput());
-  FMadaptedFunction->GetInternalImageFunction()->SetNeighborhoodRadius(5);
-  FMImageFunctionAdaptorType::OutputType resultAdaptedFM = FMadaptedFunction->EvaluateAtIndex(index);
-  
-  rsltIdx = 0;
-  for (unsigned int i=0; i<11; i++)
+  try
     {
+    FMFunction->SetInputImage(reader->GetOutput());
+    FMFunction->SetNeighborhoodRadius(5);
+    FMFunctionType::OutputType resultFM = FMFunction->EvaluateAtIndex(index);
+
+    FMadaptedFunction->SetInputImage(reader->GetOutput());
+    FMadaptedFunction->GetInternalImageFunction()->SetNeighborhoodRadius(5);
+    FMImageFunctionAdaptorType::OutputType resultAdaptedFM = FMadaptedFunction->EvaluateAtIndex(index);
+
+    rsltIdx = 0;
+    for (unsigned int i = 0; i < 11; i++)
+      {
       error += vcl_pow(vcl_abs(resultAdaptedFM[rsltIdx] - resultFM[i]), 2);
 
-      std::cout << "resultAdaptedFM : " << resultAdaptedFM[rsltIdx] 
-                << "\t - resultFM : " << resultFM[i] << std::endl;
-      rsltIdx ++;
+      std::cout << "resultAdaptedFM : " << resultAdaptedFM[rsltIdx] << "\t - resultFM : " << resultFM[i] << std::endl;
+      rsltIdx++;
+      }
+    }
+  catch (itk::ExceptionObject& err)
+    {
+    std::cout << "ExceptionObject caught for FMFunction() !" << std::endl;
+    std::cout << err << std::endl;
     }
 
-  HMFunction->SetInputImage(reader->GetOutput());
-  HMFunction->SetNeighborhoodRadius(5);
-  HMFunctionType::OutputType resultHM = HMFunction->EvaluateAtIndex(index);
-
-  HMadaptedFunction->SetInputImage(reader->GetOutput());
-  HMadaptedFunction->GetInternalImageFunction()->SetNeighborhoodRadius(5);
-  HMImageFunctionAdaptorType::OutputType resultAdaptedHM = HMadaptedFunction->EvaluateAtIndex(index);
-  
-  rsltIdx = 0;
-  for (unsigned int i=0; i<7; i++)
+  try
     {
-    error += vcl_pow(vcl_abs(resultAdaptedHM[rsltIdx] - resultHM[i]), 2);
+    HMFunction->SetInputImage(reader->GetOutput());
+    HMFunction->SetNeighborhoodRadius(5);
+    HMFunctionType::OutputType resultHM = HMFunction->EvaluateAtIndex(index);
+
+    HMadaptedFunction->SetInputImage(reader->GetOutput());
+    HMadaptedFunction->GetInternalImageFunction()->SetNeighborhoodRadius(5);
+    HMImageFunctionAdaptorType::OutputType resultAdaptedHM = HMadaptedFunction->EvaluateAtIndex(index);
+
+    rsltIdx = 0;
+    for (unsigned int i = 0; i < 7; i++)
+      {
+      error += vcl_pow(vcl_abs(resultAdaptedHM[rsltIdx] - resultHM[i]), 2);
 
-    std::cout << "resultAdaptedHM : " << resultAdaptedHM[rsltIdx] 
-              << "\t - resultHM : " << resultHM[i] << std::endl;
-    rsltIdx ++;
+      std::cout << "resultAdaptedHM : " << resultAdaptedHM[rsltIdx] << "\t - resultHM : " << resultHM[i] << std::endl;
+      rsltIdx++;
+      }
+    }
+  catch (itk::ExceptionObject& err)
+    {
+    std::cout << "ExceptionObject caught for HMFunction() !" << std::endl;
+    std::cout << err << std::endl;
     }
 
-  RaMFunction->SetInputImage(reader->GetOutput());
-  RaMFunction->SetNeighborhoodRadius(5);
-  RaMFunctionType::OutputType resultRaM = RaMFunction->EvaluateAtIndex(index);
-  
-  RaMadaptedFunction->SetInputImage(reader->GetOutput());
-  RaMadaptedFunction->GetInternalImageFunction()->SetNeighborhoodRadius(5);
-  RaMImageFunctionAdaptorType::OutputType resultAdaptedRaM = RaMadaptedFunction->EvaluateAtIndex(index);
-  
-  rsltIdx = 0;
-  for (unsigned int i=0; i<4; i++)
-    { 
-    error += vcl_pow(vcl_abs(resultAdaptedRaM[rsltIdx] - resultRaM[i]), 2);
-
-    std::cout << "resultAdaptedRaM : " << resultAdaptedRaM[rsltIdx] 
-              << "\t - resultRaM : " << resultRaM[i] << std::endl;
-    rsltIdx ++;
+  try
+    {
+    RaMFunction->SetInputImage(reader->GetOutput());
+    RaMFunction->SetNeighborhoodRadius(5);
+    RaMFunctionType::OutputType resultRaM = RaMFunction->EvaluateAtIndex(index);
+
+    RaMadaptedFunction->SetInputImage(reader->GetOutput());
+    RaMadaptedFunction->GetInternalImageFunction()->SetNeighborhoodRadius(5);
+    RaMImageFunctionAdaptorType::OutputType resultAdaptedRaM = RaMadaptedFunction->EvaluateAtIndex(index);
+
+    rsltIdx = 0;
+    for (unsigned int i = 0; i < 4; i++)
+      {
+      error += vcl_pow(vcl_abs(resultAdaptedRaM[rsltIdx] - resultRaM[i]), 2);
+
+      std::cout << "resultAdaptedRaM : " << resultAdaptedRaM[rsltIdx] << "\t - resultRaM : " << resultRaM[i]
+          << std::endl;
+      rsltIdx++;
+      }
+    }
+  catch (itk::ExceptionObject& err)
+    {
+    std::cout << "ExceptionObject caught for RaMFunction() !" << std::endl;
+    std::cout << err << std::endl;
     }
 
-  LHFunction->SetInputImage(reader->GetOutput());
-  LHFunction->SetNeighborhoodRadius(5);
-  LHFunction->SetNumberOfHistogramBins(64);
-  LHFunction->SetHistogramMin(filter->GetMinimum());
-  LHFunction->SetHistogramMax(filter->GetMaximum());
-  LHFunctionType::OutputType resultLH = LHFunction->EvaluateAtIndex(index);
-
-  LHadaptedFunction->SetInputImage(reader->GetOutput());
-  LHadaptedFunction->GetInternalImageFunction()->SetNeighborhoodRadius(5);
-  LHadaptedFunction->GetInternalImageFunction()->SetNumberOfHistogramBins(64);
-  LHadaptedFunction->GetInternalImageFunction()->SetHistogramMin(filter->GetMinimum());
-  LHadaptedFunction->GetInternalImageFunction()->SetHistogramMax(filter->GetMaximum());
-  LHImageFunctionAdaptorType::OutputType resultAdaptedLH = LHadaptedFunction->EvaluateAtIndex(index);
-  
-  rsltIdx = 0;
-  for (unsigned int i=0; i<64; i++)
+  try
     {
-    error += vcl_pow(vcl_abs( resultAdaptedLH[rsltIdx] - resultLH->GetFrequency(i)), 2);
+    LHFunction->SetInputImage(reader->GetOutput());
+    LHFunction->SetNeighborhoodRadius(5);
+    LHFunction->SetNumberOfHistogramBins(64);
+    LHFunction->SetHistogramMin(filter->GetMinimum());
+    LHFunction->SetHistogramMax(filter->GetMaximum());
+    LHFunctionType::OutputType resultLH = LHFunction->EvaluateAtIndex(index);
+
+    LHadaptedFunction->SetInputImage(reader->GetOutput());
+    LHadaptedFunction->GetInternalImageFunction()->SetNeighborhoodRadius(5);
+    LHadaptedFunction->GetInternalImageFunction()->SetNumberOfHistogramBins(64);
+    LHadaptedFunction->GetInternalImageFunction()->SetHistogramMin(filter->GetMinimum());
+    LHadaptedFunction->GetInternalImageFunction()->SetHistogramMax(filter->GetMaximum());
+    LHImageFunctionAdaptorType::OutputType resultAdaptedLH = LHadaptedFunction->EvaluateAtIndex(index);
+
+    rsltIdx = 0;
+    for (unsigned int i = 0; i < 64; i++)
+      {
+      error += vcl_pow(vcl_abs(resultAdaptedLH[rsltIdx] - resultLH->GetFrequency(i)), 2);
 
-    std::cout << "resultAdaptedLH : " << resultAdaptedLH[rsltIdx]
-              << "\t - resultLH : " << resultLH->GetFrequency(i) << std::endl;
-    rsltIdx ++;
+      std::cout << "resultAdaptedLH : " << resultAdaptedLH[rsltIdx] << "\t - resultLH : " << resultLH->GetFrequency(i)
+          << std::endl;
+      rsltIdx++;
+      }
+    }
+  catch (itk::ExceptionObject& err)
+    {
+    std::cout << "ExceptionObject caught for LHFunction() !" << std::endl;
+    std::cout << err << std::endl;
     }
 
   error = vcl_sqrt(error);
@@ -303,29 +358,36 @@ int otbImageFunctionAdaptor(int argc, char * argv[])
   
   // Testing the use of a user defined InternalImageFunction instead
   // of the build-in InternalImageFunction
-  FMDFunctionType::Pointer myFunction = FMDFunctionType::New();
-  FMDImageFunctionAdaptorType::Pointer myAdaptedFunction = FMDImageFunctionAdaptorType::New();
-  
-  myFunction->SetNeighborhoodRadius(8);
-  myFunction->SetPmax(2);
-  myFunction->SetQmax(2);
-
-  myAdaptedFunction->SetInputImage(reader->GetOutput());
-  myAdaptedFunction->SetInternalImageFunction(myFunction);
-  FMDImageFunctionAdaptorType::OutputType myResult = myAdaptedFunction->EvaluateAtIndex(index);
-  
-  rsltIdx = 0;
-  for (unsigned int i=0; i<=2; i++)
+  try
     {
-    for (unsigned int j=0; j<=2; j++)
+    FMDFunctionType::Pointer myFunction = FMDFunctionType::New();
+    FMDImageFunctionAdaptorType::Pointer myAdaptedFunction = FMDImageFunctionAdaptorType::New();
+
+    myFunction->SetNeighborhoodRadius(8);
+    myFunction->SetPmax(2);
+    myFunction->SetQmax(2);
+
+    myAdaptedFunction->SetInputImage(reader->GetOutput());
+    myAdaptedFunction->SetInternalImageFunction(myFunction);
+    FMDImageFunctionAdaptorType::OutputType myResult = myAdaptedFunction->EvaluateAtIndex(index);
+
+    rsltIdx = 0;
+    for (unsigned int i = 0; i <= 2; i++)
       {
-      std::cout << "myResult: " << myResult[rsltIdx] << std::endl;
-      rsltIdx ++;
+      for (unsigned int j = 0; j <= 2; j++)
+        {
+        std::cout << "myResult: " << myResult[rsltIdx] << std::endl;
+        rsltIdx++;
+        }
       }
+    std::cout << myAdaptedFunction << std::endl;
+    }
+  catch (itk::ExceptionObject& err)
+    {
+    std::cout << "ExceptionObject caught for FMDFunctionType() !" << std::endl;
+    std::cout << err << std::endl;
     }
-  std::cout << myAdaptedFunction << std::endl;
 
-  
 
   return EXIT_SUCCESS;
 }