diff --git a/Testing/Code/Learning/CMakeLists.txt b/Testing/Code/Learning/CMakeLists.txt
index a154528a210ca1ff78f99377a9eb0864e31ad86d..a2855de3aabc9fd201cae7b3951600d8c7e9c258 100644
--- a/Testing/Code/Learning/CMakeLists.txt
+++ b/Testing/Code/Learning/CMakeLists.txt
@@ -532,7 +532,7 @@ otbConfusionMatrixCalculatorWrongSize 1000 4)
 SET_TESTS_PROPERTIES(leTvConfusionMatrixCalculatorWrongSize PROPERTIES WILL_FAIL true)
 
 ADD_TEST(leTvConfusionMatrixCalculatorUpdate ${LEARNING_TESTS4}
-otbConfusionMatrixCalculatorUpdate 1000 4)
+otbConfusionMatrixCalculatorUpdate 4 3)
 
 # ShiftScaleSampleListFilter tests ----------
 ADD_TEST(leTuShiftScaleSampleListFilterNew ${LEARNING_TESTS4}
diff --git a/Testing/Code/Learning/otbConfusionMatrixCalculatorTest.cxx b/Testing/Code/Learning/otbConfusionMatrixCalculatorTest.cxx
index 64602a2020a5688b8babf4cb6f771ddb89f9d5a4..98ee85daff587ae182a7b047c3f03be2fbafda8c 100644
--- a/Testing/Code/Learning/otbConfusionMatrixCalculatorTest.cxx
+++ b/Testing/Code/Learning/otbConfusionMatrixCalculatorTest.cxx
@@ -78,6 +78,11 @@ int otbConfusionMatrixCalculatorSetListSamples(int argc, char* argv[])
   return EXIT_SUCCESS;
 }
 
+
+/*
+compare to results obtained with source code available here
+http://en.wikibooks.org/wiki/Algorithm_Implementation/Statistics/Fleiss%27_kappa
+*/
 int otbConfusionMatrixCalculatorWrongSize(int argc, char* argv[])
 {
 
@@ -203,8 +208,6 @@ int otbConfusionMatrixCalculatorUpdate(int argc, char* argv[])
 
   CalculatorType::ConfusionMatrixType confmat = calculator->GetConfusionMatrix();
 
-  std::cout << "confusion matrix" << std::endl  << confmat << std::endl;
-
   // double totalError = 0.0;
 
   // for (int i = 0; i < nbClasses; ++i)
@@ -235,6 +238,8 @@ int otbConfusionMatrixCalculatorUpdate(int argc, char* argv[])
   //   return EXIT_FAILURE;
   //   }
 
+  std::cout << "confusion matrix" << std::endl  << confmat << std::endl;
+
   for (int itClasses = 0; itClasses < nbClasses; itClasses++)
       {
       std::cout << "Precision of class [" << itClasses << "] vs all: " << calculator->GetPrecisions()[itClasses] << std::endl;
@@ -244,9 +249,18 @@ int otbConfusionMatrixCalculatorUpdate(int argc, char* argv[])
   std::cout << "Precision of the different class: " << calculator->GetPrecisions() << std::endl;
   std::cout << "Recall of the different class: " << calculator->GetRecalls() << std::endl;
   std::cout << "F-score of the different class: " << calculator->GetFScores() << std::endl;
-  std::cout << "Kappa index: " << calculator->GetKappaIndex() << std::endl;
 
   std::cout << "Kappa = " << calculator->GetKappaIndex() << std::endl;
   std::cout << "OA = " << calculator->GetOverallAccuracy() << std::endl;
-  return EXIT_SUCCESS;
+
+  const double oa = 3 / static_cast<double>(nbSamples);
+
+  if (vcl_abs (calculator->GetOverallAccuracy() - oa) > 0.000001)
+    {
+    return EXIT_FAILURE;
+    }
+  else
+    {
+    return EXIT_SUCCESS;
+    }
 }