diff --git a/Code/Visu/otbGLVectorImageViewClick.h b/Code/Visu/otbGLVectorImageViewClick.h
index 0d04851a6858606e534910aaee139f437c6c1846..602c8b227bd57e9f9db14f0f6c88ff783cf2e10f 100755
--- a/Code/Visu/otbGLVectorImageViewClick.h
+++ b/Code/Visu/otbGLVectorImageViewClick.h
@@ -277,23 +277,23 @@ public:
   // Overlay
    bool cOverlay;
 
-   /*! Activate overlay on image */   
-   void ActivateOverlay(bool b);
+   /*! Activate overlays on image */   
+   void ActivateOverlayFirst(bool b);
+   void ActivateOverlaySecond(bool b);
   
    bool        cViewOverlayData;
   /*! Specify the 3D image to view as an overlay */
-  void SetInputOverlay( OverlayPointer newOverlayData,
-  			OverlayPointer newOverlayDataClassRed, 
-		   	OverlayPointer newOverlayDataClassBlue);
+  void SetInputOverlay(	OverlayPointer newOverlayDataClassFirst, 
+		   	OverlayPointer newOverlayDataClassSecond);
   
   /*! Return a pointer to the overlay data */
   const OverlayPointer & GetInputOverlay(void) const;
 
   /*! Return a pointer to the overlay data for the Red Class*/
-  const OverlayPointer & GetInputOverlayClassRed(void) const;
+  const OverlayPointer & GetInputOverlayClassFirst(void) const;
 
   /*! Return a pointer to the overlay data for the Blue Class*/
-  const OverlayPointer & GetInputOverlayClassBlue(void) const;
+  const OverlayPointer & GetInputOverlayClassSecond(void) const;
   
   /*! Turn on/off the viewing of the overlay */
   void  ViewOverlayData(bool newViewOverlayData);
@@ -335,18 +335,25 @@ protected:
 
   //M�thodes utilis�es pour l'overlay de l'image
   bool        cValidOverlayData;
+  //Booleens permettant l'affichage des overlays de la classification
+  bool	      cViewOverlayClassFirst;
+  bool	      cViewOverlayClassSecond;
+  
   float       cOverlayOpacity;
   // Overlay utilis� pour afficher le r�sultat de la classification
-  OverlayPointer cOverlayData;
-  // Overlay utilis� pour afficher le r�sultat de la classe #Rouge
-  OverlayPointer cOverlayDataClassRed;
-  // Overlay utilis� pour afficher le r�sultat de la classe #Bleu
-  OverlayPointer cOverlayDataClassBlue;
+  // OverlayPointer cOverlayData;
+  // Overlay utilis� pour afficher le r�sultat de la classe #C1
+  OverlayPointer cOverlayDataClassFirst;
+  // Overlay utilis� pour afficher le r�sultat de la classe #C2
+  OverlayPointer cOverlayDataClassSecond;
+  
   
   void     (* cViewOverlayCallBack)(void);
   
   ImageModeType cImageMode;
-  unsigned char * cWinOverlayData;
+  //unsigned char * cWinOverlayData;
+  unsigned char * cWinOverlayDataFirst;
+  unsigned char * cWinOverlayDataSecond;
   unsigned int    cOverlayColorIndex;
   ColorTablePointer      cColorTable;
   
diff --git a/Code/Visu/otbGLVectorImageViewClick.txx b/Code/Visu/otbGLVectorImageViewClick.txx
index e06124930352dc76fdbe75f94a6dbe3725da02e1..a9abbcafc9285b030fb3594ae164b44d99818043 100755
--- a/Code/Visu/otbGLVectorImageViewClick.txx
+++ b/Code/Visu/otbGLVectorImageViewClick.txx
@@ -42,9 +42,12 @@ GLVectorImageViewClick() : VectorImageView<TPixel>(), Fl_Gl_Window(0,0,0,0,0)
   cOverlay = false ;
   cValidOverlayData     = false;
   cViewOverlayData      = false;
+  cViewOverlayClassFirst = false;
+  cViewOverlayClassSecond = false;
   cViewOverlayCallBack  = NULL;
   cOverlayOpacity       = 0.0;
-  cWinOverlayData       = NULL;
+  cWinOverlayDataFirst       = NULL;
+  cWinOverlayDataSecond      = NULL;
   cOverlayColorIndex = 7;  //default white
 	
   cClickMode = CM_SELECT;
@@ -396,7 +399,8 @@ update()
  	//memset( this->cWinImData, 0, this->cWinDataSizeX*this->cWinDataSizeY );
   	if( this->cValidOverlayData ) 
     {
-    	memset(this->cWinOverlayData, 0, this->cWinDataSizeX*this->cWinDataSizeY*4);
+    	memset(this->cWinOverlayDataFirst, 0, this->cWinDataSizeX*this->cWinDataSizeY*4);
+    	memset(this->cWinOverlayDataSecond, 0, this->cWinDataSizeX*this->cWinDataSizeY*4);
     }
 
   	IndexType ind;
@@ -425,18 +429,32 @@ update()
       	{
       		ind[0] = j;
       
-	  		m = (int)*((unsigned char *)&(cOverlayData->GetPixel(ind)));
-			cWinOverlayData[l+0] = 
-               		((unsigned char *)&(cOverlayData->GetPixel(ind)))[0];
-            cWinOverlayData[l+1] = 
-              		((unsigned char *)&(cOverlayData->GetPixel(ind)))[1];
-            cWinOverlayData[l+2] = 
-              	    ((unsigned char *)&(cOverlayData->GetPixel(ind)))[2];
-	  		if (cWinOverlayData[l+0]==255)
-				cWinOverlayData[l+3] = (unsigned char)(0);
+	  		//m = (int)*((unsigned char *)&(cOverlayDataFirst->GetPixel(ind)));
+			
+			//Donnees pour l'overlay de la classe #C1
+			cWinOverlayDataFirst[l+0] = 
+               			((unsigned char *)&(cOverlayDataClassFirst->GetPixel(ind)))[0];
+            		cWinOverlayDataFirst[l+1] = 
+              			((unsigned char *)&(cOverlayDataClassFirst->GetPixel(ind)))[1];
+            		cWinOverlayDataFirst[l+2] = 
+              	    		((unsigned char *)&(cOverlayDataClassFirst->GetPixel(ind)))[2];
+	  		if (cWinOverlayDataFirst[l+0]==255)
+				cWinOverlayDataFirst[l+3] = (unsigned char)(0);
 			else
-				cWinOverlayData[l+3] = (unsigned char)(255);
+				cWinOverlayDataFirst[l+3] = (unsigned char)(255);
 				
+			//Donnees pour l'overlay de la classe #C2
+			cWinOverlayDataSecond[l+0] = 
+               			((unsigned char *)&(cOverlayDataClassSecond->GetPixel(ind)))[0];
+            		cWinOverlayDataSecond[l+1] = 
+              			((unsigned char *)&(cOverlayDataClassSecond->GetPixel(ind)))[1];
+            		cWinOverlayDataSecond[l+2] = 
+              	    		((unsigned char *)&(cOverlayDataClassSecond->GetPixel(ind)))[2];
+	  		if (cWinOverlayDataSecond[l+0]==255)
+				cWinOverlayDataSecond[l+3] = (unsigned char)(0);
+			else
+				cWinOverlayDataSecond[l+3] = (unsigned char)(255);	
+								
 	  		l+=4;
       		//if(j-this->cWinMinX >= (int)this->cWinDataSizeX)
          	//	continue;
@@ -537,17 +555,27 @@ void GLVectorImageViewClick<TPixel,TPixelOverlay>::draw(void)
  	     	glDrawPixels(this->cWinDataSizeX,this->cWinDataSizeY, 
                          GL_RGB,GL_UNSIGNED_BYTE,this->cWinImData );
          }
-      }
+    }
 
-      // Affichage de l'overlay
-      if(cOverlay && cValidOverlayData && cViewOverlayData) 
-      {
+   // Affichage de l'overlay de la classe #C1
+   if(cOverlay && cValidOverlayData && cViewOverlayData && cViewOverlayClassFirst) 
+   {
 	  glEnable(GL_BLEND);
-      glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
-      glDrawPixels(this->cWinDataSizeX, this->cWinDataSizeY, GL_RGBA, 
-        GL_UNSIGNED_BYTE, this->cWinOverlayData);
-      glDisable(GL_BLEND);
-      }
+   	  glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
+      	  glDrawPixels(this->cWinDataSizeX, this->cWinDataSizeY, GL_RGBA, 
+          GL_UNSIGNED_BYTE, this->cWinOverlayDataFirst);
+      	  glDisable(GL_BLEND);
+   }
+   
+   // Affichage de l'overlay de la classe #C2
+   if(cOverlay && cValidOverlayData && cViewOverlayData && cViewOverlayClassSecond) 
+   {
+	  glEnable(GL_BLEND);
+   	  glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
+      	  glDrawPixels(this->cWinDataSizeX, this->cWinDataSizeY, GL_RGBA, 
+          GL_UNSIGNED_BYTE, this->cWinOverlayDataSecond);
+      	  glDisable(GL_BLEND);
+   }
 
   // Selection Box display
   if (this->cSelectRectangle)
@@ -775,12 +803,11 @@ ViewClickedPoints()
 template <class TPixel, class TPixelOverlay>
 void 
 GLVectorImageViewClick<TPixel, TPixelOverlay>
-::SetInputOverlay( OverlayPointer newOverlayData,
-		   OverlayPointer newOverlayDataClassRed, 
-		   OverlayPointer newOverlayDataClassBlue)
+::SetInputOverlay( OverlayPointer newOverlayDataClassFirst, 
+		   OverlayPointer newOverlayDataClassSecond)
   {
   RegionType newoverlay_region = 
-    newOverlayData->GetLargestPossibleRegion();
+    newOverlayDataClassFirst->GetLargestPossibleRegion();
 
   SizeType   newoverlay_size   = newoverlay_region.GetSize();
 
@@ -789,22 +816,28 @@ GLVectorImageViewClick<TPixel, TPixelOverlay>
       &&  (newoverlay_size[1] == this->cDimSize[1])
     )
     {
-    this->cOverlayData          = newOverlayData;
-    this->cOverlayDataClassRed  = newOverlayDataClassRed;
-    this->cOverlayDataClassBlue = newOverlayDataClassBlue;
+   // this->cOverlayData          = newOverlayData;
+    this->cOverlayDataClassFirst  = newOverlayDataClassFirst;
+    this->cOverlayDataClassSecond = newOverlayDataClassSecond;
     
-    //this->cViewOverlayData  = true;
+    this->cOverlay=true;
+    this->cViewOverlayData  = true;
     this->cValidOverlayData = true;
     this->cOverlayOpacity   = (float)0.0;
     
-    if(this->cWinOverlayData != NULL) 
+    if(this->cWinOverlayDataFirst != NULL) 
       {
-      delete [] this->cWinOverlayData;
+      delete [] this->cWinOverlayDataFirst;
+      }
+    if(this->cWinOverlayDataSecond != NULL) 
+      {
+      delete [] this->cWinOverlayDataSecond;
       }
     
 
     const unsigned long bufferSize = this->cWinDataSizeX * this->cWinDataSizeY * 4;
-    this->cWinOverlayData = new unsigned char[ bufferSize ];
+    this->cWinOverlayDataFirst = new unsigned char[ bufferSize ];
+    this->cWinOverlayDataSecond = new unsigned char[ bufferSize ];
     }
   else // return a warning
     {
@@ -844,19 +877,20 @@ GLVectorImageViewClick<TPixel, TPixelOverlay>
   template <class TPixel, class TPixelOverlay>
   const typename GLVectorImageViewClick<TPixel, 
   TPixelOverlay>::OverlayPointer &
-  GLVectorImageViewClick<TPixel, TPixelOverlay>::GetInputOverlayClassRed( void ) 
+  GLVectorImageViewClick<TPixel, TPixelOverlay>::GetInputOverlayClassFirst( void ) 
   const
   {
-  	return this->cOverlayDataClassRed;
+  	return this->cOverlayDataClassFirst;
   }
+  
 
   template <class TPixel, class TPixelOverlay>
   const typename GLVectorImageViewClick<TPixel, 
   TPixelOverlay>::OverlayPointer &
-  GLVectorImageViewClick<TPixel, TPixelOverlay>::GetInputOverlayClassBlue( void ) 
+  GLVectorImageViewClick<TPixel, TPixelOverlay>::GetInputOverlayClassSecond( void ) 
   const
   {
-  	return this->cOverlayDataClassBlue;
+  	return this->cOverlayDataClassSecond;
   }
   
   template <class TPixel, class TPixelOverlay>
@@ -1194,11 +1228,18 @@ void GLVectorImageViewClick<TPixel,TPixelOverlay>::boxMax(float x, float y, floa
 template <class TPixel, class TPixelOverlay>
 void
 GLVectorImageViewClick<TPixel, TPixelOverlay>::
-ActivateOverlay(bool b)
+ActivateOverlayFirst(bool b)
 {
-	cOverlay = b ;
+	cViewOverlayClassFirst = b ;
+}
+
+template <class TPixel, class TPixelOverlay>
+void
+GLVectorImageViewClick<TPixel, TPixelOverlay>::
+ActivateOverlaySecond(bool b)
+{
+	cViewOverlayClassSecond = b ;
 }
-  
 
 
 
diff --git a/Code/Visu/otbImageViewerAS.h b/Code/Visu/otbImageViewerAS.h
index 97d755600c850a6e2147dfc09f56cdd09fa9c9e4..71c1eabebd0c26137778820bff2cf16cbfcfb6a2 100755
--- a/Code/Visu/otbImageViewerAS.h
+++ b/Code/Visu/otbImageViewerAS.h
@@ -103,8 +103,8 @@ public:
   /** Gestion des �v�nements associ�s aux bouttons */
   void EraseLastClickedPoint();
   void EraseAllClickedPoints();
-  void LearnAlgorythm();
-  void ClassificationAlgorythm();
+  void LearnAlgorithm();
+  void ClassificationAlgorithm();
   void DisplayFirstClass();
   void DisplaySecondClass();
   void LoadLeftImage();
diff --git a/Code/Visu/otbImageViewerAS.txx b/Code/Visu/otbImageViewerAS.txx
index f8a6566f00d4a62d909fa5a260718ad444d0174e..50fa04e470d4cd9fc34e6b30532c5dc11d600bfc 100755
--- a/Code/Visu/otbImageViewerAS.txx
+++ b/Code/Visu/otbImageViewerAS.txx
@@ -442,31 +442,36 @@ ImageViewerAS<TPixel>::EraseAllClickedPoints()
 
 template <class TPixel>
 void 
-ImageViewerAS<TPixel>::LearnAlgorythm()
+ImageViewerAS<TPixel>::LearnAlgorithm()
 {
 	m_PrincipalViewBeforeClassif->LearnStep();
 }
 
 template <class TPixel>
 void 
-ImageViewerAS<TPixel>::ClassificationAlgorythm()
+ImageViewerAS<TPixel>::ClassificationAlgorithm()
 {
 	m_PrincipalViewBeforeClassif->ClassificationStep();
+	m_PrincipalViewAfterClassif->SetInputOverlay(m_PrincipalViewBeforeClassif->GetInputOverlayClassFirst(),
+						     m_PrincipalViewBeforeClassif->GetInputOverlayClassSecond());
 }
 
 template <class TPixel>
 void 
 ImageViewerAS<TPixel>::DisplayFirstClass()
 {
-	m_PrincipalViewAfterClassif->ActivateOverlay(true);
+	m_PrincipalViewAfterClassif->ActivateOverlayFirst(true);
+	m_PrincipalViewAfterClassif->ActivateOverlaySecond(false);
 	this->Update();  
 }
 
+
 template <class TPixel>
 void 
 ImageViewerAS<TPixel>::DisplaySecondClass()
 {
-	m_PrincipalViewAfterClassif->ActivateOverlay(false);
+	m_PrincipalViewAfterClassif->ActivateOverlayFirst(false);
+	m_PrincipalViewAfterClassif->ActivateOverlaySecond(true);
 	this->Update();  
 }
 
diff --git a/Code/Visu/otbImageViewerASGUI.fl b/Code/Visu/otbImageViewerASGUI.fl
index 476c5a7601faef5d018ab1e7b7c1e37f9d9352b7..9325b7dc2a75c9fb06e1d7206f9c2d9312e57d32 100755
--- a/Code/Visu/otbImageViewerASGUI.fl
+++ b/Code/Visu/otbImageViewerASGUI.fl
@@ -13,7 +13,7 @@ class otbImageViewerASGUI {open
       label {Principal Window} open
       xywh {469 33 710 575} type Double box PLASTIC_DOWN_BOX color 196 labelsize 12 align 33 visible
     } {
-      Fl_Group glWindowGroupPrincipal {open selected
+      Fl_Group glWindowGroupPrincipal {open
         xywh {-5 -5 715 580} color 40
       } {
         Fl_Button bUndo {
@@ -23,12 +23,12 @@ class otbImageViewerASGUI {open
         }
         Fl_Button bLearn {
           label Learn
-          callback {LearnAlgorythm();}
+          callback {LearnAlgorithm();}
           xywh {215 420 64 25} box SHADOW_BOX color 55 labelfont 1 labelcolor 176
         }
         Fl_Button bClassif {
           label Classif
-          callback {ClassificationAlgorythm();}
+          callback {ClassificationAlgorithm();} selected
           xywh {215 450 64 25} box SHADOW_BOX color 55 labelfont 1 labelcolor 176
         }
         Fl_Button bReset {
@@ -109,9 +109,9 @@ class otbImageViewerASGUI {open
   } {}
   Function {EraseAllClickedPoints()} {return_type {virtual void}
   } {}
-  Function {LearnAlgorythm()} {return_type {virtual void}
+  Function {LearnAlgorithm()} {return_type {virtual void}
   } {}
-  Function {ClassificationAlgorythm()} {return_type {virtual void}
+  Function {ClassificationAlgorithm()} {return_type {virtual void}
   } {}
   Function {DisplaySecondClass()} {return_type {virtual void}
   } {}
diff --git a/Code/Visu/otbPrincipalImageViewAS.txx b/Code/Visu/otbPrincipalImageViewAS.txx
index 455a3d4a8340c6235bd4f92dde2f2650e6cbd673..7d5e16808a68b8b1af781b5f3f0d1f75b4c5a5fd 100755
--- a/Code/Visu/otbPrincipalImageViewAS.txx
+++ b/Code/Visu/otbPrincipalImageViewAS.txx
@@ -474,8 +474,8 @@ PrincipalImageViewAS<TPixel, TPixelOverlay>::ClassificationStep()
     typedef otb::Image< TPixelOverlay, Dimension >        OutputImageType;
 
     typename OutputImageType::Pointer outputImage = OutputImageType::New();
-    typename OutputImageType::Pointer ImageClassBlue = OutputImageType::New();
-    typename OutputImageType::Pointer ImageClassRed  = OutputImageType::New();
+    typename OutputImageType::Pointer ImageClassFirst = OutputImageType::New();
+    typename OutputImageType::Pointer ImageClassSecond  = OutputImageType::New();
 
     typedef itk::Index<Dimension>         myIndexType;
     typedef itk::Size<Dimension>          mySizeType;
@@ -496,23 +496,23 @@ PrincipalImageViewAS<TPixel, TPixelOverlay>::ClassificationStep()
     outputImage->SetRegions( region );
     outputImage->Allocate();
 
-    ImageClassBlue->SetRegions( region );
-    ImageClassBlue->Allocate();
+    ImageClassFirst->SetRegions( region );
+    ImageClassFirst->Allocate();
 
-    ImageClassRed->SetRegions( region );
-    ImageClassRed->Allocate();
+    ImageClassSecond->SetRegions( region );
+    ImageClassSecond->Allocate();
 
 
 
     std::cout << "Image iterator" << std::endl;  
     typedef itk::ImageRegionIterator< OutputImageType>  OutputIteratorType;
     OutputIteratorType  outIt(       outputImage,   outputImage->GetBufferedRegion() );
-    OutputIteratorType  classRedIt(  ImageClassRed, outputImage->GetBufferedRegion() );
-    OutputIteratorType  classBlueIt( ImageClassBlue,outputImage->GetBufferedRegion() );
+    OutputIteratorType  classSecondIt(  ImageClassSecond, outputImage->GetBufferedRegion() );
+    OutputIteratorType  classFirstIt( ImageClassFirst,outputImage->GetBufferedRegion() );
 
     outIt.GoToBegin();
-    classRedIt.GoToBegin();
-    classBlueIt.GoToBegin();
+    classSecondIt.GoToBegin();
+    classFirstIt.GoToBegin();
 
     TPixelOverlay MaxValue = static_cast<TPixelOverlay>(255);
     TPixelOverlay MinValue = static_cast<TPixelOverlay>(0);
@@ -523,25 +523,25 @@ PrincipalImageViewAS<TPixel, TPixelOverlay>::ClassificationStep()
       ClassifierType::ClassLabelType label = m_iter.GetClassLabel();
       if( label == -1 ) 
       {
-      classBlueIt.Set(MaxValue);
-      classRedIt.Set(MinValue);
+      classFirstIt.Set(MaxValue);
+      classSecondIt.Set(MinValue);
       }	
       if( label == 1 ) 
       {
-      classBlueIt.Set(MinValue);
-      classRedIt.Set(MaxValue);
+      classFirstIt.Set(MinValue);
+      classSecondIt.Set(MaxValue);
       }	
       
       outIt.Set(m_iter.GetClassLabel());
       
       ++m_iter ;
       ++outIt;
-      ++classRedIt;
-      ++classBlueIt;
+      ++classSecondIt;
+      ++classFirstIt;
     }
 
 //  cOverlayData ....
-  this->SetInputOverlay(outputImage,ImageClassRed, ImageClassBlue );
+    this->SetInputOverlay(ImageClassFirst, ImageClassSecond );
 //ViewOverlayData(true);
 	
 std::cout << "End Classif" << std::endl;
@@ -549,6 +549,7 @@ std::cout << "End Classif" << std::endl;
 }	
 
 
+
 template <class TPixel, class TPixelOverlay>
 void
 PrincipalImageViewAS<TPixel, TPixelOverlay>::SetClickable(bool b)