diff --git a/Examples/Tutorials/ScalingPipeline.cxx b/Examples/Tutorials/ScalingPipeline.cxx
new file mode 100644
index 0000000000000000000000000000000000000000..ea461ce7ba75ccea6869e952fd92af07b65b03e3
--- /dev/null
+++ b/Examples/Tutorials/ScalingPipeline.cxx
@@ -0,0 +1,147 @@
+/*=========================================================================
+
+  Program:   ORFEO Toolbox
+  Language:  C++
+  Date:      $Date$
+  Version:   $Revision$
+
+
+  Copyright (c) Centre National d'Etudes Spatiales. All rights reserved.
+  See OTBCopyright.txt for details.
+
+
+     This software is distributed WITHOUT ANY WARRANTY; without even 
+     the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR 
+     PURPOSE.  See the above copyright notices for more information.
+
+=========================================================================*/
+
+//  Software Guide : BeginLatex
+//
+//  This example illustrates the use of the 
+// \doxygen{itk}{RescaleIntensityImageFilter} to convert
+// the result for proper display.
+//
+// We include the required header including the header 
+// for the \doxygen{itk}{CannyEdgeImageFilter} and the 
+// \doxygen{itk}{RescaleIntensityImageFilter}.
+//
+//  Software Guide : EndLatex 
+
+// Software Guide : BeginCodeSnippet
+#include "otbImage.h"
+#include "otbImageFileReader.h"
+#include "otbStreamingImageFileWriter.h"
+#include "itkCannyEdgeDetectionImageFilter.h"
+#include "itkRescaleIntensityImageFilter.h"
+
+int main(int argc, char ** argv)
+{
+// Software Guide : EndCodeSnippet
+  
+  //  Software Guide : BeginLatex
+  //
+  //  We need to declare two different image types, one for the internal 
+  // processing and one to output the results:
+  //
+  //  Software Guide : EndLatex 
+  
+  // Software Guide : BeginCodeSnippet
+  typedef double PixelType;
+  typedef otb::Image<PixelType, 2> ImageType;
+
+  typedef unsigned char OutputPixelType;
+  typedef otb::Image<OutputPixelType, 2> OutputImageType;
+  // Software Guide : EndCodeSnippet
+  
+  //  Software Guide : BeginLatex
+  //
+  //  We declare the reader with the image template using the pixel type
+  // double. It is worth noticing that this instanciation does not imply
+  // anything about the type of the input image. The original image can be
+  // anything, the reader will just convert the result to double.
+  //
+  //  The writer is templated with the unsigned char image to be able to save
+  // the result on one byte images (like png for example).
+  //
+  //  Software Guide : EndLatex 
+  
+  
+  // Software Guide : BeginCodeSnippet
+  typedef otb::ImageFileReader<ImageType> ReaderType;
+  ReaderType::Pointer reader=ReaderType::New();
+
+  typedef otb::StreamingImageFileWriter<OutputImageType> WriterType;
+  WriterType::Pointer writer=WriterType::New();
+
+  reader->SetFileName(argv[1]);
+  writer->SetFileName(argv[2]);
+  // Software Guide : EndCodeSnippet
+  
+  //  Software Guide : BeginLatex
+  //
+  // Now we are declaring the edge detection filter which is going to work with 
+  // double input and output.
+  //
+  //  Software Guide : EndLatex 
+  
+   // Software Guide : BeginCodeSnippet
+  typedef itk::CannyEdgeDetectionImageFilter
+      <ImageType,ImageType> FilterType;
+  FilterType::Pointer filter = FilterType::New();
+  // Software Guide : EndCodeSnippet
+  
+  //  Software Guide : BeginLatex
+  //
+  // Here comes the interesting part: we declare the 
+  // \doxygen{itk}{RescaleIntensityImageFilter}. The input
+  // image type is the output type of the edge detection 
+  // filter. The output type is the same as the input type 
+  // of the writer. 
+  //
+  // Desired minimum and maximum values for the output are
+  // specified by the methods \code{SetOutputMinimum()} and 
+  // \code{SetOutputMaximum()}.
+  //
+  // This filter will actually rescale all the pixels of 
+  // the image but also cast the type of these pixels.
+  //
+  //  Software Guide : EndLatex 
+  
+  // Software Guide : BeginCodeSnippet
+  typedef itk::RescaleIntensityImageFilter
+      <ImageType,OutputImageType> RescalerType;
+  RescalerType::Pointer rescaler = RescalerType::New();
+  
+  rescaler->SetOutputMinimum(0);
+  rescaler->SetOutputMaximum(255);
+   // Software Guide : EndCodeSnippet
+  
+  
+  //  Software Guide : BeginLatex
+  //
+  // Let's plug the pipeline:
+  //
+  //  Software Guide : EndLatex 
+  
+  // Software Guide : BeginCodeSnippet
+  filter->SetInput(reader->GetOutput());
+  rescaler->SetInput(filter->GetOutput());
+  writer->SetInput(rescaler->GetOutput());
+  // Software Guide : EndCodeSnippet
+  
+  //  Software Guide : BeginLatex
+  //
+  // And finally, we trigger the pipeline execution calling the Update()
+  // method on the writer
+  //
+  //  Software Guide : EndLatex 
+  
+  // Software Guide : BeginCodeSnippet
+  writer->Update();
+
+  return 0; 
+}
+// Software Guide : EndCodeSnippet
+
+
diff --git a/Examples/Tutorials/SimpleViewer.cxx b/Examples/Tutorials/SimpleViewer.cxx
new file mode 100644
index 0000000000000000000000000000000000000000..5f648ca19911187042db57d476124debd154fec1
--- /dev/null
+++ b/Examples/Tutorials/SimpleViewer.cxx
@@ -0,0 +1,120 @@
+/*=========================================================================
+
+  Program:   ORFEO Toolbox
+  Language:  C++
+  Date:      $Date$
+  Version:   $Revision$
+
+
+  Copyright (c) Centre National d'Etudes Spatiales. All rights reserved.
+  See OTBCopyright.txt for details.
+
+
+     This software is distributed WITHOUT ANY WARRANTY; without even 
+     the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR 
+     PURPOSE.  See the above copyright notices for more information.
+
+=========================================================================*/
+
+//  Software Guide : BeginLatex
+//
+//  Now, we are going to illustrate the use of the \doxygen{otb}{ImageViewer}
+// to display an image or the result of an algorithm without saving the image.
+//
+// We include the required header including the header 
+// for the \doxygen{itk}{GradientMagnitudeImageFilter} and the 
+// \doxygen{otb}{ImageViewer}.
+//
+//  Software Guide : EndLatex 
+
+// Software Guide : BeginCodeSnippet
+#include "otbImage.h"
+#include "otbImageFileReader.h"
+#include "itkGradientMagnitudeImageFilter.h"
+#include "otbImageViewer.h"
+
+int main(int argc, char ** argv)
+{
+// Software Guide : EndCodeSnippet
+  
+  //  Software Guide : BeginLatex
+  //
+  //  We need to declare two different image types, one for the internal 
+  // processing and one to output the results:
+  //
+  //  Software Guide : EndLatex 
+  
+  // Software Guide : BeginCodeSnippet
+  typedef double PixelType;
+  typedef otb::Image<PixelType, 2> ImageType;
+    
+  typedef otb::ImageFileReader<ImageType> ReaderType;
+  ReaderType::Pointer reader=ReaderType::New();
+
+  reader->SetFileName(argv[1]);
+  // Software Guide : EndCodeSnippet
+  
+  //  Software Guide : BeginLatex
+  //
+  // Now we are declaring the edge detection filter which is going to work with 
+  // double input and output.
+  //
+  //  Software Guide : EndLatex 
+  
+    // Software Guide : BeginCodeSnippet
+  typedef itk::GradientMagnitudeImageFilter
+      <ImageType,ImageType> FilterType;
+  FilterType::Pointer filter = FilterType::New();
+    // Software Guide : EndCodeSnippet
+  
+  //  Software Guide : BeginLatex
+  //
+  // Unkike most OTB filters,  the  \doxygen{otb}{ImageViewer} is 
+  // templated over the input pixel type
+  //
+  //  Software Guide : EndLatex 
+  
+    // Software Guide : BeginCodeSnippet
+  typedef otb::ImageViewer<PixelType> ViewerType;
+  ViewerType::Pointer viewer = ViewerType::New();
+    // Software Guide : EndCodeSnippet
+  
+  
+  //  Software Guide : BeginLatex
+  //
+  // Let's plug the pipeline: for the viewer the method is
+  // \code{SetImage()}.
+  //
+  //  Software Guide : EndLatex 
+  
+  // Software Guide : BeginCodeSnippet
+  filter->SetInput(reader->GetOutput());
+  viewer->SetImage(filter->GetOutput());
+  // Software Guide : EndCodeSnippet
+  
+  //  Software Guide : BeginLatex
+  //
+  // We trigger the pipeline execution and the image display
+  // with the \code{Show()} method of the viewer.
+  //
+  //  Software Guide : EndLatex 
+  
+  // Software Guide : BeginCodeSnippet
+  viewer->Show();
+  // Software Guide : EndCodeSnippet
+  
+  //  Software Guide : BeginLatex
+  //
+  // A call to \code{Fl::run()} is mandatory to hang the program 
+  // execution until the viewer is closed.
+  //
+  //  Software Guide : EndLatex 
+  
+  // Software Guide : BeginCodeSnippet
+  Fl::run();
+
+  return 0; 
+}
+// Software Guide : EndCodeSnippet
+
+
diff --git a/Examples/Tutorials/SmarterFilteringPipeline.cxx b/Examples/Tutorials/SmarterFilteringPipeline.cxx
new file mode 100644
index 0000000000000000000000000000000000000000..8bbaf7a714f70924701a8fc8189698c21c9a6259
--- /dev/null
+++ b/Examples/Tutorials/SmarterFilteringPipeline.cxx
@@ -0,0 +1,303 @@
+/*=========================================================================
+
+  Program:   ORFEO Toolbox
+  Language:  C++
+  Date:      $Date$
+  Version:   $Revision$
+
+
+  Copyright (c) Centre National d'Etudes Spatiales. All rights reserved.
+  See OTBCopyright.txt for details.
+
+
+     This software is distributed WITHOUT ANY WARRANTY; without even 
+     the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR 
+     PURPOSE.  See the above copyright notices for more information.
+
+=========================================================================*/
+
+//  Software Guide : BeginLatex
+//
+//  
+//  We are going to use the \doxygen{otb}{HarrisImageFilter} 
+// to find the points of interest in one image. 
+//
+// The derivative computation is performed by a
+// convolution with the derivative of a Gaussian kernel of
+// variance $\sigma_D$ (derivation scale) and
+// 		the smoothing of the image is performed by convolving with a
+// 		Gaussian kernel of variance $\sigma_I$ (integration
+// scale). This allows the computation of the following matrix:
+//
+// 	\[
+// 	\mu(\mathbf{x},\sigma_I,\sigma_D) = \sigma_D^2 g(\sigma_I)\star 
+// 	\left[\begin{array}{cc} L_x^2(\mathbf{x},\sigma_D) & 
+// 	L_xL_y^2(\mathbf{x},\sigma_D)\\ L_xL_y^2(\mathbf{x},\sigma_D)& 
+// 	L_y^2(\mathbf{x},\sigma_D) \end{array}\right]		
+// 	\]
+//
+// 		The output of the detector is $[det(\mu) - \alpha
+// trace^2(\mu)$.
+//
+// We want to set 3 parameters of this filter through the command line:
+// $\sigma_D$ (SigmaD), $\sigma_I$ (SigmaI) and $\alpha$ (Alpha).
+//
+// We are also going to do the things properly and catch the exceptions.
+//
+// Let first add the two following headers:
+//
+//  Software Guide : EndLatex 
+
+// Software Guide : BeginCodeSnippet
+#include "itkExceptionObject.h"
+#include "otbCommandLineArgumentParser.h"
+// Software Guide : EndCodeSnippet
+
+//  Software Guide : BeginLatex
+//
+// The first one is to handle the exceptions, the second one to help us
+// parse the command line.
+//
+// We include the other required headers, without forgetting to add the header 
+// for the \doxygen{otb}{HarrisImageFilter}. Then we start the usual main 
+// function.
+//
+//  Software Guide : EndLatex 
+
+// Software Guide : BeginCodeSnippet
+#include "otbImage.h"
+#include "otbImageFileReader.h"
+#include "otbStreamingImageFileWriter.h"
+#include "itkRescaleIntensityImageFilter.h"
+#include "otbHarrisImageFilter.h"
+
+int main(int argc, char ** argv)
+{
+// Software Guide : EndCodeSnippet
+  
+  //  Software Guide : BeginLatex
+  //
+  // To handle the exceptions properly, we need to put all the instructions 
+  // inside a \code{try}.
+  //
+  //  Software Guide : EndLatex 
+  
+  // Software Guide : BeginCodeSnippet
+  try
+  {
+  // Software Guide : EndCodeSnippet
+    
+  //  Software Guide : BeginLatex
+  //
+  // Now, we can declare the \doxygen{otb}{CommandLineArgumentParser} which is
+  // going to parse the command line, select the proper variables, handle the
+  // missing compulsory arguments and print an error message if necessary.
+  //
+  // Let's declare the parser:
+  //
+  //  Software Guide : EndLatex 
+    
+    // Software Guide : BeginCodeSnippet
+    typedef otb::CommandLineArgumentParser ParserType;	
+    ParserType::Pointer parser = ParserType::New();
+    // Software Guide : EndCodeSnippet
+    
+    //  Software Guide : BeginLatex 
+    //
+    //  It's now time to tell the parser what are the options we want. Specials
+    //options are available for input and output images with the
+    // \code{AddInputImage()} and \code{AddOutputImage()} methods.
+    //
+    //  For the other options, we need to use the \code{AddOption()} method. 
+    //  This method allows us to specify 
+    //  \begin{itemize}
+    //  \item the name of the option
+    //  \item a message to explain the meaning of this option
+    //  \item a shortcut for this option
+    //  \item the number of expected parameters for this option
+    //  \item whether or not this option is compulsory
+    //  \end{itemize}
+    //
+    //  Software Guide : EndLatex 
+    
+    // Software Guide : BeginCodeSnippet
+    parser->AddInputImage(); 
+    parser->AddOutputImage();
+    parser->AddOption("--SigmaD", 
+                      "Set the sigmaD parameter. Default is 1.0.","-d",1,false);
+    parser->AddOption("--SigmaI",
+                      "Set the sigmaI parameter. Default is 1.0.","-i",1,false);
+    parser->AddOption("--Alpha",
+                      "Set the alpha parameter. Default is 1.0.","-a",1,false);
+    // Software Guide : EndCodeSnippet
+    
+    //  Software Guide : BeginLatex 
+    //
+    //  Now that the parser has all this information, it can actually look at 
+    // the command line to parse it. We have to do this within a \code{try} -
+    // \code{catch} loop to handle exceptions nicely.
+    //
+    //  Software Guide : EndLatex 
+    
+    // Software Guide : BeginCodeSnippet
+    typedef otb::CommandLineArgumentParseResult ParserResultType;
+    ParserResultType::Pointer  parseResult = ParserResultType::New();
+    
+    try
+    {
+      parser->ParseCommandLine(argc,argv,parseResult);
+    }
+    
+    catch( itk::ExceptionObject & err ) 
+    { 
+      std::string descriptionException = err.GetDescription();   
+      if(descriptionException.find("ParseCommandLine(): Help Parser") 
+         != std::string::npos) 
+        {
+          return EXIT_SUCCESS;
+        }
+      if(descriptionException.find("ParseCommandLine(): Version Parser") 
+         != std::string::npos) 
+        {
+          return EXIT_SUCCESS;
+        }
+      return EXIT_FAILURE;
+    } 
+    // Software Guide : EndCodeSnippet
+    
+    
+    //  Software Guide : BeginLatex
+    //
+    //  Now, we can declare the image type, the reader and the writer as
+    //  before:
+    //
+    //  Software Guide : EndLatex 
+    
+    // Software Guide : BeginCodeSnippet
+    typedef double PixelType;
+    typedef otb::Image<PixelType, 2> ImageType;
+
+    typedef unsigned char OutputPixelType;
+    typedef otb::Image<OutputPixelType, 2> OutputImageType;
+  
+    typedef otb::ImageFileReader<ImageType> ReaderType;
+    ReaderType::Pointer reader=ReaderType::New();
+  
+    typedef otb::StreamingImageFileWriter<OutputImageType> WriterType;
+    WriterType::Pointer writer=WriterType::New();
+    // Software Guide : EndCodeSnippet
+    
+    //  Software Guide : BeginLatex
+    //
+    //  We are getting the filenames for the input and the output
+    //  images directly from the parser:
+    //
+    //  Software Guide : BeginLatex
+    
+    // Software Guide : BeginCodeSnippet
+    reader->SetFileName(parseResult->GetInputImage().c_str());
+    writer->SetFileName(parseResult->GetOutputImage().c_str());
+    // Software Guide : EndCodeSnippet
+    
+    //  Software Guide : BeginLatex
+    //
+    // Now we have to declare the filter. It is templated with the 
+    // input image type and the output image type like many filters
+    // in OTB. Here we are using the same type for the input and the
+    // output images:
+    //
+    //  Software Guide : EndLatex 
+    
+    // Software Guide : BeginCodeSnippet
+    typedef otb::HarrisImageFilter
+        <ImageType,ImageType> FilterType;
+    FilterType::Pointer filter = FilterType::New();
+    // Software Guide : EndCodeSnippet
+    
+    //  Software Guide : BeginLatex 
+    //
+    //  We set the filter parameters from the parser. The method
+    //  \code{IsOptionPresent()} let us know if an optional option
+    //  was provided in the command line.
+    //
+    //  Software Guide : EndLatex 
+    
+    // Software Guide : BeginCodeSnippet
+    if(parseResult->IsOptionPresent("--SigmaD"))
+      filter->SetSigmaD(parseResult->GetParameterDouble("--SigmaD"));
+    
+    if(parseResult->IsOptionPresent("--SigmaI"))
+      filter->SetSigmaI(parseResult->GetParameterDouble("--SigmaI"));
+    
+    if(parseResult->IsOptionPresent("--Alpha"))
+      filter->SetAlpha(parseResult->GetParameterDouble("--Alpha"));
+     // Software Guide : EndCodeSnippet
+    
+    //  Software Guide : BeginLatex
+    //
+    // We add the rescaler filter as before
+    //
+    //  Software Guide : EndLatex 
+    
+    // Software Guide : BeginCodeSnippet
+    typedef itk::RescaleIntensityImageFilter
+      <ImageType,OutputImageType> RescalerType;
+    RescalerType::Pointer rescaler = RescalerType::New();
+  
+    rescaler->SetOutputMinimum(0);
+    rescaler->SetOutputMaximum(255);
+    // Software Guide : EndCodeSnippet
+    
+    //  Software Guide : BeginLatex
+    //
+    // Let's plug the pipeline:
+    //
+    //  Software Guide : EndLatex 
+    
+    // Software Guide : BeginCodeSnippet
+    filter->SetInput(reader->GetOutput());
+    rescaler->SetInput(filter->GetOutput());
+    writer->SetInput(rescaler->GetOutput());
+    // Software Guide : EndCodeSnippet
+    
+    //  Software Guide : BeginLatex
+    //
+    // We trigger the pipeline execution calling the \code{Update()}
+    // method on the writer
+    //
+    //  Software Guide : EndLatex 
+    
+    // Software Guide : BeginCodeSnippet
+    writer->Update();
+  
+  }
+  // Software Guide : EndCodeSnippet
+  
+  //  Software Guide : BeginLatex
+  //
+  //  Finally, we have to handle exceptions we may have raised before
+  //
+  //  Software Guide : EndLatex
+  
+  // Software Guide : BeginCodeSnippet
+  catch( itk::ExceptionObject & err ) 
+    { 
+    std::cout << "Following otbException catch :" << std::endl; 
+    std::cout << err << std::endl; 
+    return EXIT_FAILURE;
+    } 
+  catch( std::bad_alloc & err ) 
+    { 
+    std::cout << "Exception bad_alloc : "<<(char*)err.what()<< std::endl; 
+    return EXIT_FAILURE;
+    } 
+  catch( ... ) 
+    { 
+    std::cout << "Unknown Exception found !" << std::endl; 
+    return EXIT_FAILURE;
+    } 
+  return EXIT_SUCCESS;
+}
+// Software Guide : EndCodeSnippet
+
+