diff --git a/Modules/Applications/AppClassification/app/otbComputeConfusionMatrix.cxx b/Modules/Applications/AppClassification/app/otbComputeConfusionMatrix.cxx
index bfc3098307572a70f5024ecba61864422094c6cb..410fe23752ec0262837e8384e02c01b535d669db 100644
--- a/Modules/Applications/AppClassification/app/otbComputeConfusionMatrix.cxx
+++ b/Modules/Applications/AppClassification/app/otbComputeConfusionMatrix.cxx
@@ -217,7 +217,7 @@ private:
   {
     std::ofstream outFile;
     outFile.open( this->GetParameterString( "out" ).c_str() );
-    outFile << contingencyTable->to_csv();
+    outFile << contingencyTable->ToCsv();
     outFile.close();
   }
 
diff --git a/Modules/Applications/AppClassification/app/otbTrainVectorClassifier.cxx b/Modules/Applications/AppClassification/app/otbTrainVectorClassifier.cxx
index db1226b04ee267ad4a16ee3d96eaf987537e27b1..e65d49ae9e7e83bc805b02e647e20eb7ec3658d6 100644
--- a/Modules/Applications/AppClassification/app/otbTrainVectorClassifier.cxx
+++ b/Modules/Applications/AppClassification/app/otbTrainVectorClassifier.cxx
@@ -113,7 +113,7 @@ protected:
       // Write contingency table
       std::ofstream outFile;
       outFile.open( this->GetParameterString( "io.confmatout" ).c_str() );
-      outFile << table->to_csv();
+      outFile << table->ToCsv();
       }
   }
 
diff --git a/Modules/Learning/Unsupervised/include/otbContingencyTable.h b/Modules/Learning/Unsupervised/include/otbContingencyTable.h
index 5ea3665f06fc761f6184ac82ca9667059ec2f9f7..bb3414f754bb70550dcdfe02382a1831628075b8 100644
--- a/Modules/Learning/Unsupervised/include/otbContingencyTable.h
+++ b/Modules/Learning/Unsupervised/include/otbContingencyTable.h
@@ -66,23 +66,8 @@ public:
 
     // Retrieve the maximal width from the matrix and the labels
     size_t maxWidth = 6;
-    for( size_t i = 0; i << contingencyTable.m_ProdLabels.size(); ++i )
-      {
-      std::ostringstream oss;
-      oss << contingencyTable.m_ProdLabels[i];
-      size_t length = oss.str().length();
-      if( length > maxWidth )
-        maxWidth = length;
-      }
-
-    for( size_t i = 0; i << contingencyTable.m_RefLabels.size(); ++i )
-      {
-      std::ostringstream oss;
-      oss << contingencyTable.m_RefLabels[i];
-      size_t length = oss.str().length();
-      if( length > maxWidth )
-        maxWidth = length;
-      }
+    maxWidth = GetLabelsMaximumLength(contingencyTable.m_ProdLabels, maxWidth);
+    maxWidth = GetLabelsMaximumLength(contingencyTable.m_RefLabels, maxWidth);
 
     for( unsigned int i = 0; i < contingencyTable.matrix.Rows(); ++i )
       {
@@ -120,7 +105,7 @@ public:
     return o;
   }
 
-  std::string to_csv() const
+  std::string ToCsv() const
   {
     const char separator = ',';
 
@@ -162,6 +147,20 @@ private:
   ContingencyTable(const Self &); //purposely not implemented
   void operator=(const Self &); //purposely not implemented
 
+  static size_t GetLabelsMaximumLength(const LabelList& labels, size_t maxWidth)
+  {
+    size_t tmpMaxWidth = maxWidth;
+    for( size_t i = 0; i < labels.size(); ++i )
+      {
+      std::ostringstream oss;
+      oss << labels[i];
+      size_t length = oss.str().length();
+      if( length > tmpMaxWidth )
+        tmpMaxWidth = length;
+      }
+    return tmpMaxWidth;
+  }
+
   LabelList m_RefLabels;
   LabelList m_ProdLabels;