diff --git a/Examples/Learning/SVMImageEstimatorClassificationMultiExample.cxx b/Examples/Learning/SVMImageEstimatorClassificationMultiExample.cxx
index ad59e3afbfafac15f9635906fe14d90e25b3ac23..fec55cbf7de04326495f5ef8d18f4a9b825726e4 100644
--- a/Examples/Learning/SVMImageEstimatorClassificationMultiExample.cxx
+++ b/Examples/Learning/SVMImageEstimatorClassificationMultiExample.cxx
@@ -52,15 +52,16 @@
 #include <iostream>
 
 //  Software Guide : BeginCodeSnippet
-#include "otbSVMImageModelEstimator.h"
-#include "itkImageToListSampleAdaptor.h"
-#include "otbSVMClassifier.h"
+#include "otbLibSVMMachineLearningModel.h"
+#include "itkImageToListSampleFilter.h"
+#include "otbImageClassificationFilter.h"
 //  Software Guide : EndCodeSnippet
 
 #include "otbImageFileWriter.h"
 
 #include "itkUnaryFunctorImageFilter.h"
 #include "itkScalarToRGBPixelFunctor.h"
+#include "itkBinaryThresholdImageFilter.h"
 
 #include "otbImageFileReader.h"
 
@@ -92,13 +93,13 @@ int main(int itkNotUsed(argc), char *argv[])
 
 //  Software Guide : BeginLatex
 //
-//  The \doxygen{otb}{SVMImageModelEstimator} class is templated over
-//  the input (features) and the training (labels) images.
+//  The \doxygen{otb}{LibSVMMachineLearningModel} class is templated over
+//  the input (features) and the training (labels) values.
 //
 // Software Guide : EndLatex
 //  Software Guide : BeginCodeSnippet
-  typedef otb::SVMImageModelEstimator<InputImageType,
-      TrainingImageType>   EstimatorType;
+  typedef otb::LibSVMMachineLearningModel<InputPixelType,
+      InputPixelType>   ModelType;
 
 //  Software Guide : EndCodeSnippet
 
@@ -128,107 +129,67 @@ int main(int itkNotUsed(argc), char *argv[])
   inputReader->SetFileName(inputImageFileName);
   trainingReader->SetFileName(trainingImageFileName);
 
-  inputReader->Update();
-  trainingReader->Update();
+  //~ inputReader->Update();
+  //~ trainingReader->Update();
 
 //  Software Guide : EndCodeSnippet
 
 //  Software Guide : BeginLatex
 //
-//  We can now instantiate the model estimator and set its parameters.
+//  The input data is contained in images. Only label values greater than 0
+//  shall be used, so we create two iterators to fill the input and target
+//  ListSamples.
 //
 // Software Guide : EndLatex
-//  Software Guide : BeginCodeSnippet
-  EstimatorType::Pointer svmEstimator = EstimatorType::New();
-
-  svmEstimator->SetInputImage(inputReader->GetOutput());
-  svmEstimator->SetTrainingImage(trainingReader->GetOutput());
-
-//  Software Guide : EndCodeSnippet
 
-//  Software Guide : BeginLatex
-//
-//  The model estimation procedure is triggered by calling the
-//  estimator's \code{Update} method.
-//
-// Software Guide : EndLatex
 //  Software Guide : BeginCodeSnippet
-  svmEstimator->Update();
-
-//  Software Guide : EndCodeSnippet
-
-// Software Guide : BeginLatex
-//
-//  We can now proceed to the image classification. We start by
-//  declaring the type of the image to be classified. ITK's
-//  classification framework needs the type of the pixel to be of
-//  fixed type, so we declare the following types.
-//
-// Software Guide : EndLatex
 
-// Software Guide : BeginCodeSnippet
-  typedef otb::Image<itk::FixedArray<InputPixelType, 3>,
-      Dimension>          ClassifyImageType;
+  typedef itk::BinaryThresholdImageFilter<TrainingImageType,TrainingImageType> ThresholdFilterType;
+  ThresholdFilterType::Pointer thresholder = ThresholdFilterType::New();
+  thresholder->SetInput(trainingReader->GetOutput());
+  thresholder->SetLowerThreshold(1);
+  thresholder->SetOutsideValue(0);
+  thresholder->SetInsideValue(1);
 
-  typedef otb::ImageFileReader<ClassifyImageType> ClassifyReaderType;
-// Software Guide : EndCodeSnippet
+  typedef itk::Statistics::ImageToListSampleFilter<InputImageType,TrainingImageType> ImageToListSample;
+  typedef itk::Statistics::ImageToListSampleFilter<TrainingImageType,TrainingImageType> ImageToTargetListSample;
 
-// Software Guide : BeginLatex
-//
-// We can now read the image by calling the \code{Update} method of the reader.
-//
-// Software Guide : EndLatex
-
-// Software Guide : BeginCodeSnippet
-  ClassifyReaderType::Pointer cReader = ClassifyReaderType::New();
+  ImageToListSample::Pointer imToList = ImageToListSample::New();
+  imToList->SetInput(inputReader->GetOutput());
+  imToList->SetMaskImage(thresholder->GetOutput());
+  imToList->SetMaskValue(1);
+  imToList->Update();
 
-  cReader->SetFileName(inputImageFileName);
+  ImageToTargetListSample::Pointer imToTargetList = ImageToTargetListSample::New();
+  imToTargetList->SetInput(trainingReader->GetOutput());
+  imToTargetList->SetMaskImage(thresholder->GetOutput());
+  imToTargetList->SetMaskValue(1);
+  imToTargetList->Update();
 
-  cReader->Update();
-// Software Guide : EndCodeSnippet
-// Software Guide : BeginLatex
-//
-// The image has now to be transformed to a sample which
-// is compatible with the classification framework. We will use a
-// \doxygen{itk}{Statistics::ImageToListSampleAdaptor} for this
-// task. This class is templated over the image type used for
-// storing the measures.
-//
-// Software Guide : EndLatex
-
-// Software Guide : BeginCodeSnippet
-  typedef itk::Statistics::ImageToListSampleAdaptor<ClassifyImageType> SampleType;
-  SampleType::Pointer sample = SampleType::New();
-// Software Guide : EndCodeSnippet
+//  Software Guide : EndCodeSnippet
 
-// Software Guide : BeginLatex
+//  Software Guide : BeginLatex
 //
-// After instantiation, we can set the image as an imput of our
-// sample adaptor.
+//  We can now instantiate the model and set its parameters.
 //
 // Software Guide : EndLatex
+//  Software Guide : BeginCodeSnippet
+  ModelType::Pointer svmModel = ModelType::New();
+  svmModel->SetInputListSample(const_cast<ModelType::InputListSampleType*>(imToList->GetOutput()));
+  svmModel->SetTargetListSample(const_cast<ModelType::TargetListSampleType*>(imToTargetList->GetOutput()));
 
-// Software Guide : BeginCodeSnippet
-  sample->SetImage(cReader->GetOutput());
-// Software Guide : EndCodeSnippet
+//  Software Guide : EndCodeSnippet
 
-// Software Guide : BeginLatex
+//  Software Guide : BeginLatex
 //
-// Now, we need to declare the SVM model which is to be used by the
-// classifier. The SVM model is templated over the type of value used
-// for the measures and the type of pixel used for the labels. The
-// model is obtained from the model estimator by calling the
-// \code{GetModel} method.
+//  The model training procedure is triggered by calling the
+//  model's \code{Train} method.
 //
 // Software Guide : EndLatex
+//  Software Guide : BeginCodeSnippet
+  svmModel->Train();
 
-// Software Guide : BeginCodeSnippet
-  typedef InputPixelType LabelPixelType;
-
-  typedef otb::SVMModel<InputPixelType, LabelPixelType> ModelType;
-
-  ModelType::Pointer model = svmEstimator->GetModel();
-// Software Guide : EndCodeSnippet
+//  Software Guide : EndCodeSnippet
 
 // Software Guide : BeginLatex
 //
@@ -239,7 +200,7 @@ int main(int itkNotUsed(argc), char *argv[])
 // Software Guide : EndLatex
 
 // Software Guide : BeginCodeSnippet
-  typedef otb::SVMClassifier<SampleType, LabelPixelType> ClassifierType;
+  typedef otb::ImageClassificationFilter<InputImageType, TrainingImageType> ClassifierType;
 
   ClassifierType::Pointer classifier = ClassifierType::New();
 // Software Guide : EndCodeSnippet
@@ -253,11 +214,8 @@ int main(int itkNotUsed(argc), char *argv[])
 // Software Guide : EndLatex
 
 // Software Guide : BeginCodeSnippet
-  int numberOfClasses = model->GetNumberOfClasses();
-  classifier->SetNumberOfClasses(numberOfClasses);
-  classifier->SetModel(model);
-  classifier->SetInput(sample.GetPointer());
-  classifier->Update();
+  classifier->SetModel(svmModel);
+  classifier->SetInput(inputReader->GetOutput());
 // Software Guide : EndCodeSnippet
 
 // Software Guide : BeginLatex
@@ -272,10 +230,7 @@ int main(int itkNotUsed(argc), char *argv[])
 // Software Guide : EndLatex
 
 // Software Guide : BeginCodeSnippet
-  typedef ClassifierType::ClassLabelType         OutputPixelType;
-  typedef otb::Image<OutputPixelType, Dimension> OutputImageType;
 
-  OutputImageType::Pointer outputImage = OutputImageType::New();
 // Software Guide : EndCodeSnippet
 
 // Software Guide : BeginLatex
@@ -286,25 +241,7 @@ int main(int itkNotUsed(argc), char *argv[])
 // Software Guide : EndLatex
 
 // Software Guide : BeginCodeSnippet
-  typedef itk::Index<Dimension>       myIndexType;
-  typedef itk::Size<Dimension>        mySizeType;
-  typedef itk::ImageRegion<Dimension> myRegionType;
-
-  mySizeType size;
-  size[0] = cReader->GetOutput()->GetRequestedRegion().GetSize()[0];
-  size[1] = cReader->GetOutput()->GetRequestedRegion().GetSize()[1];
-
-  myIndexType start;
-  start[0] = 0;
-  start[1] = 0;
 
-  myRegionType region;
-  region.SetIndex(start);
-  region.SetSize(size);
-
-  outputImage->SetRegions(region);
-  outputImage->Allocate();
-  std::cout << "---" << std::endl;
 // Software Guide : EndCodeSnippet
 
 // Software Guide : BeginLatex
@@ -315,18 +252,7 @@ int main(int itkNotUsed(argc), char *argv[])
 // Software Guide : EndLatex
 
 // Software Guide : BeginCodeSnippet
-  ClassifierType::OutputType* membershipSample =
-    classifier->GetOutput();
-  ClassifierType::OutputType::ConstIterator m_iter =
-    membershipSample->Begin();
-  ClassifierType::OutputType::ConstIterator m_last =
-    membershipSample->End();
-
-  typedef itk::ImageRegionIterator<OutputImageType> OutputIteratorType;
-  OutputIteratorType outIt(outputImage,
-                           outputImage->GetBufferedRegion());
-
-  outIt.GoToBegin();
+
 // Software Guide : EndCodeSnippet
 
 // Software Guide : BeginLatex
@@ -337,21 +263,15 @@ int main(int itkNotUsed(argc), char *argv[])
 // Software Guide : EndLatex
 
 // Software Guide : BeginCodeSnippet
-  while (m_iter != m_last && !outIt.IsAtEnd())
-    {
-    outIt.Set(m_iter.GetClassLabel());
-    ++m_iter;
-    ++outIt;
-    }
-  std::cout << "---" << std::endl;
+
 // Software Guide : EndCodeSnippet
 
-  typedef otb::ImageFileWriter<OutputImageType> WriterType;
+  typedef otb::ImageFileWriter<TrainingImageType> WriterType;
 
   WriterType::Pointer writer = WriterType::New();
 
   writer->SetFileName(outputImageFileName);
-  writer->SetInput(outputImage);
+  writer->SetInput(classifier->GetOutput());
 
   writer->Update();
 
@@ -372,12 +292,12 @@ int main(int itkNotUsed(argc), char *argv[])
   typedef otb::Image<RGBPixelType, 2>  RGBImageType;
   typedef itk::Functor::ScalarToRGBPixelFunctor<unsigned long>
   ColorMapFunctorType;
-  typedef itk::UnaryFunctorImageFilter<OutputImageType,
+  typedef itk::UnaryFunctorImageFilter<TrainingImageType,
       RGBImageType,
       ColorMapFunctorType> ColorMapFilterType;
   ColorMapFilterType::Pointer colormapper = ColorMapFilterType::New();
 
-  colormapper->SetInput(outputImage);
+  colormapper->SetInput(classifier->GetOutput());
 // Software Guide : EndCodeSnippet
 
 // Software Guide : BeginLatex