diff --git a/Code/BasicFilters/otbBinaryImageDensityFunction.h b/Code/BasicFilters/otbBinaryImageDensityFunction.h
index 16e34cde09932399a30ee12badf31c534290fc50..f111db714e7a36eefe4084d85f6364aa08f83cba 100644
--- a/Code/BasicFilters/otbBinaryImageDensityFunction.h
+++ b/Code/BasicFilters/otbBinaryImageDensityFunction.h
@@ -104,7 +104,7 @@ class ITK_EXPORT BinaryImageDensityFunction :
  
 protected:
   BinaryImageDensityFunction();
-  ~BinaryImageDensityFunction(){};
+  virtual ~BinaryImageDensityFunction(){};
   void PrintSelf(std::ostream& os, itk::Indent indent) const;
 
 private:
diff --git a/Code/BasicFilters/otbBinaryImageToDensityImageFilter.h b/Code/BasicFilters/otbBinaryImageToDensityImageFilter.h
index 3fc373f2b1020b828176d8c7258c7617f1eb3f78..018d779f3a65e9396ad861b50023aea699b4e5d7 100644
--- a/Code/BasicFilters/otbBinaryImageToDensityImageFilter.h
+++ b/Code/BasicFilters/otbBinaryImageToDensityImageFilter.h
@@ -82,7 +82,7 @@ protected:
   /** Constructor */
   BinaryImageToDensityImageFilter();
   /** Destructor */
-  ~BinaryImageToDensityImageFilter();
+  virtual ~BinaryImageToDensityImageFilter();
   /** PrintSelf method */
   void PrintSelf(std::ostream& os, itk::Indent indent) const;
 
diff --git a/Code/BasicFilters/otbChangeLabelImageFilter.h b/Code/BasicFilters/otbChangeLabelImageFilter.h
index b2b6216ecb0aa305ccdab9c1759eed51728f1ebc..f3009f2611cc8e35f23f5f0aa7d1a047daa7308a 100644
--- a/Code/BasicFilters/otbChangeLabelImageFilter.h
+++ b/Code/BasicFilters/otbChangeLabelImageFilter.h
@@ -46,7 +46,7 @@ public:
   typedef typename TOutput::ValueType ValueType;
 
   VectorChangeLabel() {};
-  ~VectorChangeLabel() {};
+  virtual ~VectorChangeLabel() {};
 
   typedef std::map<TInput, TOutput> ChangeMapType;
 
@@ -228,7 +228,7 @@ template< class TInput, class TOutput>
 {
 public:
   VectorChangeLabel() {m_NumberOfComponents=1;};
-  ~VectorChangeLabel() {};
+  virtual ~VectorChangeLabel() {};
 
 
   void SetNumberOfComponents(unsigned int nb)
diff --git a/Code/BasicFilters/otbFlexibleDistanceWithMissingValue.txx b/Code/BasicFilters/otbFlexibleDistanceWithMissingValue.txx
index 25ba273e0ca198eec11c9f4886039dea891a49ab..73ca172d7d6fb730e667223f2deb6d54458c8abf 100644
--- a/Code/BasicFilters/otbFlexibleDistanceWithMissingValue.txx
+++ b/Code/BasicFilters/otbFlexibleDistanceWithMissingValue.txx
@@ -98,13 +98,14 @@ FlexibleDistanceWithMissingValue< TVector >
   if (IsEuclidean())
     return Superclass::Evaluate(a,b);
 
-  // FIXME throw NaN exception or not ??
+  // FIXME throw NaN exception instaed of returning 0. ??
   if ( IsMissingValue( a ) || IsMissingValue( b ) )
     return 0.0;
 
   double temp = vcl_pow(vcl_abs(vcl_pow(a,this->Alpha) - vcl_pow(b,this->Alpha)), this->Beta) ;
   return temp ;
 }
+
 template< class TVector >
 void
 FlexibleDistanceWithMissingValue< TVector >
diff --git a/Code/BasicFilters/otbGaborFilterGenerator.h b/Code/BasicFilters/otbGaborFilterGenerator.h
index 52f465169209e325e137ac2761a829e316e11759..c13ed623f4ebc0c2f9aac5a2d936b2dce5741a15 100644
--- a/Code/BasicFilters/otbGaborFilterGenerator.h
+++ b/Code/BasicFilters/otbGaborFilterGenerator.h
@@ -109,7 +109,7 @@ protected:
   /** constructor */
   GaborFilterGenerator();
   /** destructor */
-  ~GaborFilterGenerator() {}
+  virtual ~GaborFilterGenerator() {}
 
   /** PrintSelf method */
   void PrintSelf(std::ostream& os, itk::Indent indent) const;
diff --git a/Code/BasicFilters/otbImageAndVectorImageOperationFilter.h b/Code/BasicFilters/otbImageAndVectorImageOperationFilter.h
index 08d54b4559fe1d770fa99c739dd524f0c5bd41f6..c4514290d4e3a2294cae0d815cc9dfb89e1497ed 100644
--- a/Code/BasicFilters/otbImageAndVectorImageOperationFilter.h
+++ b/Code/BasicFilters/otbImageAndVectorImageOperationFilter.h
@@ -42,7 +42,7 @@ public:
     {
       m_Operator = ADDITION;//1;
     };
-  ~ImageAndVectorImageOperationFunctor(){};
+  virtual ~ImageAndVectorImageOperationFunctor(){};
 
  
   void SetOperator(OperatorType oper)
@@ -216,7 +216,7 @@ public:
 
 protected:
   ImageAndVectorImageOperationFilter();
-  ~ImageAndVectorImageOperationFilter();
+  virtual ~ImageAndVectorImageOperationFilter();
 
   /** This is a source, so it must set the spacing, size, and largest possible
    * region for the output image that it will produce.
diff --git a/Code/BasicFilters/otbImportImageFilter.h b/Code/BasicFilters/otbImportImageFilter.h
index a394ec83e2367b76f99f1c177313b31dec194239..eb908a3110824935619087829d82cb6b1252bde5 100644
--- a/Code/BasicFilters/otbImportImageFilter.h
+++ b/Code/BasicFilters/otbImportImageFilter.h
@@ -141,7 +141,7 @@ public:
 
 protected:
   ImportImageFilter();
-  ~ImportImageFilter();
+  virtual ~ImportImageFilter();
   void PrintSelf(std::ostream& os, itk::Indent indent) const;
 
   /** This filter does not actually "produce" any data, rather it "wraps"
diff --git a/Code/BasicFilters/otbImportVectorImageFilter.h b/Code/BasicFilters/otbImportVectorImageFilter.h
index cc1c43bbd1b82236bb493f0ed1827ce694abe226..60ac579901387f70e1173535283ed84c958ee072 100644
--- a/Code/BasicFilters/otbImportVectorImageFilter.h
+++ b/Code/BasicFilters/otbImportVectorImageFilter.h
@@ -146,7 +146,7 @@ public:
 
 protected:
   ImportVectorImageFilter();
-  ~ImportVectorImageFilter();
+  virtual ~ImportVectorImageFilter();
   void PrintSelf(std::ostream& os, itk::Indent indent) const;
 
   /** This filter does not actually "produce" any data, rather it "wraps"
diff --git a/Code/BasicFilters/otbInverseLogPolarTransform.h b/Code/BasicFilters/otbInverseLogPolarTransform.h
index 951a34b9ae2992414987adaa76420cdaad08283a..b18b1103edfbd4e6f5f340dca11e42f072481394 100644
--- a/Code/BasicFilters/otbInverseLogPolarTransform.h
+++ b/Code/BasicFilters/otbInverseLogPolarTransform.h
@@ -107,7 +107,7 @@ protected:
   /** Constructor */
   InverseLogPolarTransform();
   /** Destructor */
-  ~InverseLogPolarTransform();
+  virtual ~InverseLogPolarTransform();
   /** PrintSelf method */
   void PrintSelf(std::ostream &os,itk::Indent indent) const;
 
diff --git a/Code/BasicFilters/otbLogPolarTransform.h b/Code/BasicFilters/otbLogPolarTransform.h
index 47ed9da65caa8813d9f0f4f745d112df851bd62c..ded4ec920b73ac2a8284ae756908ff26fe872807 100644
--- a/Code/BasicFilters/otbLogPolarTransform.h
+++ b/Code/BasicFilters/otbLogPolarTransform.h
@@ -108,7 +108,7 @@ protected:
   /** Constructor */
   LogPolarTransform();
   /** Destructor */
-  ~LogPolarTransform();
+  virtual ~LogPolarTransform();
   /** PrintSelf method */
   void PrintSelf(std::ostream &os,itk::Indent indent) const;
 
diff --git a/Code/BasicFilters/otbMeanShiftImageFilter.h b/Code/BasicFilters/otbMeanShiftImageFilter.h
index 8f7960d4462f57bf3e7069e11819f59749f5b6a9..39589b6e993f9ea664125e546b24a4a3940eb27c 100644
--- a/Code/BasicFilters/otbMeanShiftImageFilter.h
+++ b/Code/BasicFilters/otbMeanShiftImageFilter.h
@@ -194,7 +194,7 @@ protected:
   /** Constructor */
   MeanShiftImageFilter();
   /** destructor */
-  ~MeanShiftImageFilter() {};
+  virtual ~MeanShiftImageFilter() {};
 
   /**PrintSelf method */
   virtual void PrintSelf(std::ostream& os, itk::Indent indent) const;
diff --git a/Code/BasicFilters/otbMeanShiftVectorImageFilter.h b/Code/BasicFilters/otbMeanShiftVectorImageFilter.h
index ab76351ac3905de26b130233a76afd00ad6b1db5..6ea47b3c3e107b10b0df609c3ac9994d6efc8f4a 100644
--- a/Code/BasicFilters/otbMeanShiftVectorImageFilter.h
+++ b/Code/BasicFilters/otbMeanShiftVectorImageFilter.h
@@ -87,7 +87,7 @@ protected:
   /** Constructor */
   MeanShiftVectorImageFilter() {};
   /** destructor */
-  ~MeanShiftVectorImageFilter() {};
+  virtual ~MeanShiftVectorImageFilter() {};
 
   /**PrintSelf method */
   virtual void PrintSelf(std::ostream& os, itk::Indent indent) const
diff --git a/Code/BasicFilters/otbPersistentVectorizationImageFilter.h b/Code/BasicFilters/otbPersistentVectorizationImageFilter.h
index 6b27aede59a6a2e4935f54c79587749b4e4cd71e..eca4d72bbb21098e78caeabdf00c8140ef8d0cbe 100644
--- a/Code/BasicFilters/otbPersistentVectorizationImageFilter.h
+++ b/Code/BasicFilters/otbPersistentVectorizationImageFilter.h
@@ -86,7 +86,7 @@ public:
 
 protected:
   PersistentVectorizationImageFilter();
-  ~PersistentVectorizationImageFilter() {};
+  virtual ~PersistentVectorizationImageFilter() {};
   void PrintSelf(std::ostream& os, itk::Indent indent) const;
   virtual void GenerateData();
 
diff --git a/Code/BasicFilters/otbPointSetDensityFunction.h b/Code/BasicFilters/otbPointSetDensityFunction.h
index e28a7aca6a8848d5c81927be57b9c6c0b4d46af1..afef5a85b62f2de69e125e7a04cf2552aaccbccb 100644
--- a/Code/BasicFilters/otbPointSetDensityFunction.h
+++ b/Code/BasicFilters/otbPointSetDensityFunction.h
@@ -65,7 +65,7 @@ public:
 
 protected:
   PointSetDensityFunction();
-  ~PointSetDensityFunction() {};
+  virtual ~PointSetDensityFunction() {};
 
   void PrintSelf(std::ostream& os, itk::Indent indent) const;
 
diff --git a/Code/BasicFilters/otbSpatialObjectToImageDrawingFilter.h b/Code/BasicFilters/otbSpatialObjectToImageDrawingFilter.h
index ac824b539b24384d57945e4fffae18bbde7c6e5e..649bee567de20f6a04be46fe9217d8c6182fb715 100644
--- a/Code/BasicFilters/otbSpatialObjectToImageDrawingFilter.h
+++ b/Code/BasicFilters/otbSpatialObjectToImageDrawingFilter.h
@@ -137,7 +137,7 @@ public:
 
 protected:
   SpatialObjectToImageDrawingFilter();
-  ~SpatialObjectToImageDrawingFilter();
+  virtual ~SpatialObjectToImageDrawingFilter();
 
   virtual void GenerateOutputInformation(); // do nothing
   virtual void GenerateData();
diff --git a/Code/BasicFilters/otbStreamingMatrixTransposeMatrixImageFilter.h b/Code/BasicFilters/otbStreamingMatrixTransposeMatrixImageFilter.h
index f1c782c057cce2b9c8a6980aceb2a43b8c3b6c6a..c9f7eab2b246583bd47003d706f2d621e313766f 100644
--- a/Code/BasicFilters/otbStreamingMatrixTransposeMatrixImageFilter.h
+++ b/Code/BasicFilters/otbStreamingMatrixTransposeMatrixImageFilter.h
@@ -167,7 +167,7 @@ public:
 
 protected:
   PersistentMatrixTransposeMatrixImageFilter();
-  ~PersistentMatrixTransposeMatrixImageFilter() {};
+  virtual ~PersistentMatrixTransposeMatrixImageFilter() {};
   void PrintSelf(std::ostream& os, itk::Indent indent) const;
   /** Multi-thread version GenerateData. */
   virtual void  ThreadedGenerateData (const RegionType& outputRegionForThread,int threadId);
diff --git a/Code/BasicFilters/otbStreamingShrinkImageFilter.h b/Code/BasicFilters/otbStreamingShrinkImageFilter.h
index 8e30d71f9f772ca4c9c6f1af5ad16263e05fcbc7..0c96e4aaff83a68e7591fb508f7275a13120ee4d 100644
--- a/Code/BasicFilters/otbStreamingShrinkImageFilter.h
+++ b/Code/BasicFilters/otbStreamingShrinkImageFilter.h
@@ -78,7 +78,7 @@ protected:
   /** Constructor */
   StreamingShrinkImageFilter();
   /** Destructor */
-  ~StreamingShrinkImageFilter();
+  virtual ~StreamingShrinkImageFilter();
   /** PrintSelf method */
   void PrintSelf(std::ostream& os, itk::Indent indent) const;
 
diff --git a/Code/BasicFilters/otbStreamingStatisticsImageFilter.h b/Code/BasicFilters/otbStreamingStatisticsImageFilter.h
index 68eccc5a43d20f0dfc79bb913c7d165d5344807a..82416cee7c4dd8b889f3edaaaad9d1bc2a40a2b3 100644
--- a/Code/BasicFilters/otbStreamingStatisticsImageFilter.h
+++ b/Code/BasicFilters/otbStreamingStatisticsImageFilter.h
@@ -150,7 +150,7 @@ public:
 
 protected:
   PersistentStatisticsImageFilter();
-  ~PersistentStatisticsImageFilter() {};
+  virtual ~PersistentStatisticsImageFilter() {};
   void PrintSelf(std::ostream& os, itk::Indent indent) const;
 
   /** Multi-thread version GenerateData. */
diff --git a/Code/BasicFilters/otbVectorImageToAmplitudeImageFilter.h b/Code/BasicFilters/otbVectorImageToAmplitudeImageFilter.h
index 4206d3cef6f30f7ecf376df7c630b8a4c5e324c4..c19ff6e127238dbd95eb51c833cc5172b3768e9b 100644
--- a/Code/BasicFilters/otbVectorImageToAmplitudeImageFilter.h
+++ b/Code/BasicFilters/otbVectorImageToAmplitudeImageFilter.h
@@ -30,7 +30,7 @@ class VectorToAmplitudeFunctor
 {
 public:
   VectorToAmplitudeFunctor() {};
-  ~VectorToAmplitudeFunctor() {};
+  virtual ~VectorToAmplitudeFunctor() {};
 
   inline TOutput operator()(const TInput & A)
   {
diff --git a/Code/BasicFilters/otbVectorRescaleIntensityImageFilter.h b/Code/BasicFilters/otbVectorRescaleIntensityImageFilter.h
index 647c85d2f2667d3056c49acdd21fe032d1dd7e1c..f301874e6ce10682915a9b5470d819e9ae4eda5d 100644
--- a/Code/BasicFilters/otbVectorRescaleIntensityImageFilter.h
+++ b/Code/BasicFilters/otbVectorRescaleIntensityImageFilter.h
@@ -47,7 +47,7 @@ public:
   /// Constructor
   VectorAffineTransform() {}
   /// Desctructor
-  ~VectorAffineTransform() {}
+  virtual ~VectorAffineTransform() {}
 
   /// Accessors
   void SetOutputMaximum( TOutput a )
diff --git a/Code/BasicFilters/otbWindowedSincInterpolateImageFunctionBase.h b/Code/BasicFilters/otbWindowedSincInterpolateImageFunctionBase.h
index efb3fdf95094ecaaff6308513241a118dabf1e06..8716b7c60e6698cc3dbcb835e3b428887f93dadd 100644
--- a/Code/BasicFilters/otbWindowedSincInterpolateImageFunctionBase.h
+++ b/Code/BasicFilters/otbWindowedSincInterpolateImageFunctionBase.h
@@ -174,7 +174,7 @@ public:
 
 protected:
   WindowedSincInterpolateImageFunctionBase();
-  ~WindowedSincInterpolateImageFunctionBase();
+  virtual ~WindowedSincInterpolateImageFunctionBase();
   virtual void PrintSelf(std::ostream& os, itk::Indent indent) const;
 
 private:
diff --git a/Code/ChangeDetection/otbCBAMIChangeDetector.h b/Code/ChangeDetection/otbCBAMIChangeDetector.h
index 669713c6a67bcac09a746babcc10b983aadf609c..339f1b79529ef3a7a76fd5878c2d23772e4c3bdf 100644
--- a/Code/ChangeDetection/otbCBAMIChangeDetector.h
+++ b/Code/ChangeDetection/otbCBAMIChangeDetector.h
@@ -69,7 +69,7 @@ public:
   typedef typename VectorOfVectorType::iterator VecOfVecIteratorType;
 
   CBAMI() {};
-  ~CBAMI() {};
+  virtual ~CBAMI() {};
   inline TOutput operator()( const TInput1 & itA,
                              const TInput2 & itB)
   {
diff --git a/Code/ChangeDetection/otbCorrelationChangeDetector.h b/Code/ChangeDetection/otbCorrelationChangeDetector.h
index d4c723e7c96da1e332e330f935bbf9505ec9a28e..b2b252938ba637fbd6a99fde329035d24e5b518e 100644
--- a/Code/ChangeDetection/otbCorrelationChangeDetector.h
+++ b/Code/ChangeDetection/otbCorrelationChangeDetector.h
@@ -54,7 +54,7 @@ class CrossCorrelation
 {
 public:
   CrossCorrelation() {};
-  ~CrossCorrelation() {};
+  virtual ~CrossCorrelation() {};
   inline TOutput operator()( const TInput1 & itA,
                              const TInput2 & itB)
   {
diff --git a/Code/ChangeDetection/otbJoinHistogramMIImageFilter.h b/Code/ChangeDetection/otbJoinHistogramMIImageFilter.h
index d27a3ed137e768eb1e73cfdd827248b084088fdf..65e59e853836f85d84adcc86d076055562feff99 100644
--- a/Code/ChangeDetection/otbJoinHistogramMIImageFilter.h
+++ b/Code/ChangeDetection/otbJoinHistogramMIImageFilter.h
@@ -58,7 +58,7 @@ public:
   typedef double HistogramFrequencyType;
   typedef typename itk::Statistics::Histogram<HistogramFrequencyType, 2> HistogramType;
   JoinHistogramMI() {};
-  ~JoinHistogramMI() {};
+  virtual ~JoinHistogramMI() {};
   inline TOutput operator()( const TInput1 & itA,
                              const TInput2 & itB, const HistogramType* histogram)
   {
diff --git a/Code/ChangeDetection/otbLHMIChangeDetector.h b/Code/ChangeDetection/otbLHMIChangeDetector.h
index 1458a1619e7d6b66816f9c30878a48b16f70503c..9383c213de62536f80c274ef9c70663532dae198 100644
--- a/Code/ChangeDetection/otbLHMIChangeDetector.h
+++ b/Code/ChangeDetection/otbLHMIChangeDetector.h
@@ -77,7 +77,7 @@ public:
 
 
   LHMI() {};
-  ~LHMI() {};
+  virtual ~LHMI() {};
   inline TOutput operator()( const TInput1 & itA,
                              const TInput2 & itB)
   {
diff --git a/Code/ChangeDetection/otbMeanDifferenceImageFilter.h b/Code/ChangeDetection/otbMeanDifferenceImageFilter.h
index d8426797edb922d56aae327bc3e0fbd5a2a99b84..c009eeb5893e9b50586ed208b3d3fdfec999e27e 100644
--- a/Code/ChangeDetection/otbMeanDifferenceImageFilter.h
+++ b/Code/ChangeDetection/otbMeanDifferenceImageFilter.h
@@ -54,7 +54,7 @@ class MeanDifference
 {
 public:
   MeanDifference() {};
-  ~MeanDifference() {};
+  virtual ~MeanDifference() {};
   inline TOutput operator()( const TInput1 & itA,
                              const TInput2 & itB)
   {
diff --git a/Code/ChangeDetection/otbMeanRatioImageFilter.h b/Code/ChangeDetection/otbMeanRatioImageFilter.h
index ce6b93ec58ab9c8563218926466fbc01d7fe6849..209aa3c400bca249fb2ddba8111f48d32e66d32a 100644
--- a/Code/ChangeDetection/otbMeanRatioImageFilter.h
+++ b/Code/ChangeDetection/otbMeanRatioImageFilter.h
@@ -52,7 +52,7 @@ class MeanRatio
 {
 public:
   MeanRatio() {};
-  ~MeanRatio() {};
+  virtual ~MeanRatio() {};
   inline TOutput operator()( const TInput1 & itA,
                              const TInput2 & itB)
   {
diff --git a/Code/Common/otbCommandLineArgumentParser.h b/Code/Common/otbCommandLineArgumentParser.h
index abc1e72c632b20814c038470572d14596df5745a..39f8e8eacf3a76d0363caa5e800d4095574dd3b3 100644
--- a/Code/Common/otbCommandLineArgumentParser.h
+++ b/Code/Common/otbCommandLineArgumentParser.h
@@ -176,7 +176,7 @@ public:
 
 protected:
   CommandLineArgumentParseResult() {};
-  ~CommandLineArgumentParseResult() {};
+  virtual ~CommandLineArgumentParseResult() {};
 
 private:
 
@@ -261,7 +261,7 @@ public:
                    bool failOnUnknownTrailingParameters = true);
 protected:
   CommandLineArgumentParser();
-  ~CommandLineArgumentParser() {};
+  virtual ~CommandLineArgumentParser() {};
 
 private:
 
diff --git a/Code/Common/otbExtractROI.h b/Code/Common/otbExtractROI.h
index ada262a4c6421ab323cee4431b798bd3dc7741d8..e891267eab10f1537d4e522146a51aa412e7a7c3 100644
--- a/Code/Common/otbExtractROI.h
+++ b/Code/Common/otbExtractROI.h
@@ -80,7 +80,7 @@ public:
 
 protected:
   ExtractROI();
-  ~ExtractROI() {};
+  virtual ~ExtractROI() {};
   void PrintSelf(std::ostream& os, itk::Indent indent) const;
 
   /** ExtractROI
diff --git a/Code/Common/otbExtractROIBase.h b/Code/Common/otbExtractROIBase.h
index 8ea855b4023956cf1522466f52e4fbf1092c3fff..5e32146c80898009babde178278191ee91634091 100644
--- a/Code/Common/otbExtractROIBase.h
+++ b/Code/Common/otbExtractROIBase.h
@@ -104,7 +104,7 @@ public:
 
 protected:
   ExtractROIBase();
-  ~ExtractROIBase() {};
+  virtual ~ExtractROIBase() {};
   void PrintSelf(std::ostream& os, itk::Indent indent) const;
 
 
diff --git a/Code/Common/otbGISTableSource.h b/Code/Common/otbGISTableSource.h
index 31881ff12ee3ed5d4ff1602bb4de79692bf0522f..d0b7170627a84a0c99c7653272fda91938acd83e 100644
--- a/Code/Common/otbGISTableSource.h
+++ b/Code/Common/otbGISTableSource.h
@@ -63,7 +63,7 @@ class ITK_EXPORT GISTableSource : public itk::ProcessObject
 
 protected:
   GISTableSource();
-  ~GISTableSource();
+  virtual ~GISTableSource();
 
   void PrintSelf(std::ostream& os, itk::Indent indent) const;
 
diff --git a/Code/Common/otbGenericInterpolateImageFunction.h b/Code/Common/otbGenericInterpolateImageFunction.h
index e93ac60e53d193ea71280a584141960091a260f5..5588bc99c8fad4603a0e4912138897fae16c06cd 100644
--- a/Code/Common/otbGenericInterpolateImageFunction.h
+++ b/Code/Common/otbGenericInterpolateImageFunction.h
@@ -112,7 +112,7 @@ public:
 
 protected:
   GenericInterpolateImageFunction();
-  ~GenericInterpolateImageFunction();
+  virtual ~GenericInterpolateImageFunction();
   virtual void PrintSelf(std::ostream& os, itk::Indent indent) const;
 
   /** Call the superclass implementation and set the TablesHaveBeenGenerated
diff --git a/Code/Common/otbImageList.h b/Code/Common/otbImageList.h
index 86044ee2adb58bf9229c539552e558d5ade2c676..81f7f4eb490db2a8464fd0c6c32673328df05898 100644
--- a/Code/Common/otbImageList.h
+++ b/Code/Common/otbImageList.h
@@ -67,7 +67,7 @@ protected:
   /** Constructor */
   ImageList() {};
   /** Destructor */
-  ~ImageList() {};
+  virtual ~ImageList() {};
   /** PrintSelf method */
   void PrintSelf(std::ostream& os, itk::Indent indent) const
   {
diff --git a/Code/Common/otbImageOfVectorsToMonoChannelExtractROI.h b/Code/Common/otbImageOfVectorsToMonoChannelExtractROI.h
index 0a70115ecee5c324e2e04c86cb3542c4944eb289..77fc503133945aa8f2adfb82979d584de8812f32 100644
--- a/Code/Common/otbImageOfVectorsToMonoChannelExtractROI.h
+++ b/Code/Common/otbImageOfVectorsToMonoChannelExtractROI.h
@@ -81,7 +81,7 @@ public:
 
 protected:
   ImageOfVectorsToMonoChannelExtractROI();
-  ~ImageOfVectorsToMonoChannelExtractROI() {};
+  virtual ~ImageOfVectorsToMonoChannelExtractROI() {};
   void PrintSelf(std::ostream& os, itk::Indent indent) const;
 
   /** ExtractImageFilter can produce an image which is a different
diff --git a/Code/Common/otbImageRegionNonUniformMultidimensionalSplitter.h b/Code/Common/otbImageRegionNonUniformMultidimensionalSplitter.h
index dd98d986f4eedf4ff3606565c5f92fbb0c91b94a..81155b046f7f2ed3f1aceb92ac84ba42c6f4b25f 100644
--- a/Code/Common/otbImageRegionNonUniformMultidimensionalSplitter.h
+++ b/Code/Common/otbImageRegionNonUniformMultidimensionalSplitter.h
@@ -105,7 +105,7 @@ public:
 
 protected:
   ImageRegionNonUniformMultidimensionalSplitter() {}
-  ~ImageRegionNonUniformMultidimensionalSplitter() {}
+  virtual ~ImageRegionNonUniformMultidimensionalSplitter() {}
   void PrintSelf(std::ostream& os, itk::Indent indent) const;
 
 private:
diff --git a/Code/Common/otbImageRegionTileMapSplitter.h b/Code/Common/otbImageRegionTileMapSplitter.h
index b928783859a7d0d2ddc1ae89eed85e52789be705..650c2174bfbfe13de6e53ffb050556571da28848 100644
--- a/Code/Common/otbImageRegionTileMapSplitter.h
+++ b/Code/Common/otbImageRegionTileMapSplitter.h
@@ -121,7 +121,7 @@ public:
 
 protected:
   ImageRegionTileMapSplitter() {}
-  ~ImageRegionTileMapSplitter() {}
+  virtual ~ImageRegionTileMapSplitter() {}
   void PrintSelf(std::ostream& os, itk::Indent indent) const;
 
 private:
diff --git a/Code/Common/otbImageToVectorImageCastFilter.h b/Code/Common/otbImageToVectorImageCastFilter.h
index 3813631d962dc0dd5dfda7c16055ca61eb137727..45d7a4417f1681e4a3489d7b93e6dae30f7c3adc 100644
--- a/Code/Common/otbImageToVectorImageCastFilter.h
+++ b/Code/Common/otbImageToVectorImageCastFilter.h
@@ -38,7 +38,7 @@ class VectorCast
 public:
   typedef typename TOutput::ValueType OutputValueType;
   VectorCast() {};
-  ~VectorCast() {};
+  virtual ~VectorCast() {};
 
   bool operator!=(const VectorCast&) const
   {
diff --git a/Code/Common/otbMacro.h b/Code/Common/otbMacro.h
index 61acd04395134e4fcd7dd7227679607aa1f4136a..8c14ed0b79b6a8f8ad6f0e3de0723476ab5adda3 100644
--- a/Code/Common/otbMacro.h
+++ b/Code/Common/otbMacro.h
@@ -316,7 +316,7 @@ class Cleanup
 {
 public:
   Cleanup(std::strstream& ostr): m_StrStream(ostr) {}
-  ~Cleanup()
+  virtual ~Cleanup()
   {
     m_StrStream.rdbuf()->freeze(0);
   }
diff --git a/Code/Common/otbMultiChannelExtractROI.h b/Code/Common/otbMultiChannelExtractROI.h
index a7c25a4e8abf3c4e144dc27da8738828787a0ade..43383803503aec199e7949f66cb6ab8ace865955 100644
--- a/Code/Common/otbMultiChannelExtractROI.h
+++ b/Code/Common/otbMultiChannelExtractROI.h
@@ -120,7 +120,7 @@ public:
 
 protected:
   MultiChannelExtractROI();
-  ~MultiChannelExtractROI() {};
+  virtual ~MultiChannelExtractROI() {};
   void PrintSelf(std::ostream& os, itk::Indent indent) const;
 
   /** Reinitialize channels vector for multiple Update.*/
diff --git a/Code/Common/otbMultiToMonoChannelExtractROI.h b/Code/Common/otbMultiToMonoChannelExtractROI.h
index de5b3d5982a6505059ca7db950e7f00c9ebbd266..f81a0e5c2d07f93100364e294ba6b346194de383 100644
--- a/Code/Common/otbMultiToMonoChannelExtractROI.h
+++ b/Code/Common/otbMultiToMonoChannelExtractROI.h
@@ -88,7 +88,7 @@ public:
 
 protected:
   MultiToMonoChannelExtractROI();
-  ~MultiToMonoChannelExtractROI() {};
+  virtual ~MultiToMonoChannelExtractROI() {};
   void PrintSelf(std::ostream& os, itk::Indent indent) const;
 
   /** ExtractImageFilter can produce an image which is a different
diff --git a/Code/Common/otbPathFunction.h b/Code/Common/otbPathFunction.h
index fb95561b1dc578cc2d89ff35c2b6414b82b84d1b..5a35fa78398a5a7614ed8381ac9b08a7b892faec 100644
--- a/Code/Common/otbPathFunction.h
+++ b/Code/Common/otbPathFunction.h
@@ -76,7 +76,7 @@ public:
 
 protected:
   PathFunction();
-  ~PathFunction() {}
+  virtual ~PathFunction() {}
   void PrintSelf(std::ostream& os, itk::Indent indent) const;
 
   InputPathConstPointer  m_Path;
diff --git a/Code/Common/otbVectorDataExtractROI.h b/Code/Common/otbVectorDataExtractROI.h
index 4be06d60622963af86f66d9065ef6a568f0697af..b422b1c457b8c0bb5c4cd533dcb7758b3c2833e9 100644
--- a/Code/Common/otbVectorDataExtractROI.h
+++ b/Code/Common/otbVectorDataExtractROI.h
@@ -103,7 +103,7 @@ public:
 
 protected:
   VectorDataExtractROI();
-  ~VectorDataExtractROI() {};
+  virtual ~VectorDataExtractROI() {};
   void PrintSelf(std::ostream& os, itk::Indent indent) const;
 
    /** Method to compare the projection embedded in the cartoRegion And the the InputVectorData*/
diff --git a/Code/Common/otbVectorDataSource.h b/Code/Common/otbVectorDataSource.h
index ccc7bf6ad35503f661265ef4dd17a2ade6712183..07377e95d273957e7e8f1d7576a45eea7ad9c0f4 100644
--- a/Code/Common/otbVectorDataSource.h
+++ b/Code/Common/otbVectorDataSource.h
@@ -63,7 +63,7 @@ class ITK_EXPORT VectorDataSource : public itk::ProcessObject
 
 protected:
   VectorDataSource();
-  ~VectorDataSource();
+  virtual ~VectorDataSource();
 
   void PrintSelf(std::ostream& os, itk::Indent indent) const;
 
diff --git a/Code/DisparityMap/otbMIRegistrationFilter.h b/Code/DisparityMap/otbMIRegistrationFilter.h
index c22e18f75b28b76c50700c4d4e877ee61ed6de56..5ebb5bb7f3206f7aa4b7e622ef7864fe64c8ad72 100644
--- a/Code/DisparityMap/otbMIRegistrationFilter.h
+++ b/Code/DisparityMap/otbMIRegistrationFilter.h
@@ -119,7 +119,7 @@ public:
 
 protected:
   MIRegistrationFilter();
-  ~MIRegistrationFilter() {}
+  virtual ~MIRegistrationFilter() {}
   void PrintSelf(std::ostream& os, itk::Indent indent) const;
 
   /** Initialize the state of filter and equation before each iteration. */
diff --git a/Code/DisparityMap/otbNCCRegistrationFilter.h b/Code/DisparityMap/otbNCCRegistrationFilter.h
index 0fca41f3de2e32912f037d29e2c3eb23464ddd5c..7900c0e59fa73e1ce0a3afed100414ea1c2caf1c 100644
--- a/Code/DisparityMap/otbNCCRegistrationFilter.h
+++ b/Code/DisparityMap/otbNCCRegistrationFilter.h
@@ -132,7 +132,7 @@ public:
 
 protected:
   NCCRegistrationFilter();
-  ~NCCRegistrationFilter() {}
+  virtual ~NCCRegistrationFilter() {}
   void PrintSelf(std::ostream& os, itk::Indent indent) const;
 
   /** Initialize the state of filter and equation before each iteration. */
diff --git a/Code/DisparityMap/otbNCCRegistrationFunction.h b/Code/DisparityMap/otbNCCRegistrationFunction.h
index 3e5681b0c794e27accf6c6e677c14a394ac525cc..48017ee82e4ab51023827ff3ed01e2383852ef7d 100644
--- a/Code/DisparityMap/otbNCCRegistrationFunction.h
+++ b/Code/DisparityMap/otbNCCRegistrationFunction.h
@@ -149,7 +149,7 @@ public:
 
 protected:
   NCCRegistrationFunction();
-  ~NCCRegistrationFunction() {}
+  virtual ~NCCRegistrationFunction() {}
   void PrintSelf(std::ostream& os, itk::Indent indent) const;
 
   /** FixedImage image neighborhood iterator type. */
diff --git a/Code/DisparityMap/otbPointSetToDeformationFieldGenerator.h b/Code/DisparityMap/otbPointSetToDeformationFieldGenerator.h
index b245e99038f147a644500feea21739aa9ab1eaac..b049b8a703a51975c7ce43cbda41e712781e8db9 100644
--- a/Code/DisparityMap/otbPointSetToDeformationFieldGenerator.h
+++ b/Code/DisparityMap/otbPointSetToDeformationFieldGenerator.h
@@ -32,7 +32,7 @@ class DistanceComparisonFunctor
 {
 public:
   DistanceComparisonFunctor() {};
-  ~DistanceComparisonFunctor() {};
+  virtual ~DistanceComparisonFunctor() {};
   typedef std::vector<double> DistanceVectorType;
 
   void SetDistanceVector(DistanceVectorType &vec)
diff --git a/Code/FeatureExtraction/otbAssociativeSymmetricalSumImageFilter.h b/Code/FeatureExtraction/otbAssociativeSymmetricalSumImageFilter.h
index 0ad1fb5ede7f5cd24b351fe8e0c70821027d4149..83841921ac8a07165a7713716e84ed14c73315c0 100644
--- a/Code/FeatureExtraction/otbAssociativeSymmetricalSumImageFilter.h
+++ b/Code/FeatureExtraction/otbAssociativeSymmetricalSumImageFilter.h
@@ -47,7 +47,7 @@ class ITK_EXPORT AssociativeSymmetricalSum
 {
 public:
   AssociativeSymmetricalSum() {};
-  ~AssociativeSymmetricalSum() {};
+  virtual ~AssociativeSymmetricalSum() {};
 
   inline TOutput operator()( const TInput1 X,
                              const TInput2 Y)
diff --git a/Code/FeatureExtraction/otbCompacityPathFunction.h b/Code/FeatureExtraction/otbCompacityPathFunction.h
index 17f27fa511c5072b8745b9757ecec3be2ae4b327..620adabab689bd56079b9fbb08116562890743d7 100644
--- a/Code/FeatureExtraction/otbCompacityPathFunction.h
+++ b/Code/FeatureExtraction/otbCompacityPathFunction.h
@@ -71,7 +71,7 @@ public:
 
 protected:
   CompacityPathFunction() {};
-  ~CompacityPathFunction() {};
+  virtual ~CompacityPathFunction() {};
   void PrintSelf(std::ostream& os, itk::Indent indent) const;
 
 private:
diff --git a/Code/FeatureExtraction/otbComplexMomentImageFunction.h b/Code/FeatureExtraction/otbComplexMomentImageFunction.h
index 7c3a24b164e09d8ee396eebd693ba6ad5bab2c1d..769eecb7305a90b8e7fd6538c20497d1a8ae61c0 100644
--- a/Code/FeatureExtraction/otbComplexMomentImageFunction.h
+++ b/Code/FeatureExtraction/otbComplexMomentImageFunction.h
@@ -105,7 +105,7 @@ public:
 
 protected:
   ComplexMomentImageFunction();
-  ~ComplexMomentImageFunction() {};
+  virtual ~ComplexMomentImageFunction() {};
   void PrintSelf(std::ostream& os, itk::Indent indent) const;
 
 private:
diff --git a/Code/FeatureExtraction/otbComplexMomentPathFunction.h b/Code/FeatureExtraction/otbComplexMomentPathFunction.h
index b9da756c092fd4fdb9b802e3ad46b7a205be9cb5..1d53a6dd3dfa9bfb6f1c444cdf1957340d08a8b1 100644
--- a/Code/FeatureExtraction/otbComplexMomentPathFunction.h
+++ b/Code/FeatureExtraction/otbComplexMomentPathFunction.h
@@ -98,7 +98,7 @@ public:
 
 protected:
   ComplexMomentPathFunction();
-  ~ComplexMomentPathFunction() {};
+  virtual ~ComplexMomentPathFunction() {};
   void PrintSelf(std::ostream& os, itk::Indent indent) const;
 
 private:
diff --git a/Code/FeatureExtraction/otbFlusserImageFunction.h b/Code/FeatureExtraction/otbFlusserImageFunction.h
index a5bb476f588f489a34f844f3bba169b6b1f0632e..8b778527c5109de16281f8c6f4ec0a4810411ace 100644
--- a/Code/FeatureExtraction/otbFlusserImageFunction.h
+++ b/Code/FeatureExtraction/otbFlusserImageFunction.h
@@ -123,7 +123,7 @@ public:
 
 protected:
   FlusserImageFunction();
-  ~FlusserImageFunction() {};
+  virtual ~FlusserImageFunction() {};
   void PrintSelf(std::ostream& os, itk::Indent indent) const;
 
 private:
diff --git a/Code/FeatureExtraction/otbFlusserPathFunction.h b/Code/FeatureExtraction/otbFlusserPathFunction.h
index 9e56511c616e24d7940cc7501b96205fe3800521..a97cf5830b65e8d1c58160a21ad70bbfa0106ba8 100644
--- a/Code/FeatureExtraction/otbFlusserPathFunction.h
+++ b/Code/FeatureExtraction/otbFlusserPathFunction.h
@@ -97,7 +97,7 @@ public:
 
 protected:
   FlusserPathFunction();
-  ~FlusserPathFunction() {};
+  virtual ~FlusserPathFunction() {};
   void PrintSelf(std::ostream& os, itk::Indent indent) const;
 
 private:
diff --git a/Code/FeatureExtraction/otbForwardFourierMellinTransformImageFilter.h b/Code/FeatureExtraction/otbForwardFourierMellinTransformImageFilter.h
index 34debb692a5a1f1040b6d3b15736ca5543247369..00dab7d8fe0c39c09c7655cbde35a199b6154a42 100644
--- a/Code/FeatureExtraction/otbForwardFourierMellinTransformImageFilter.h
+++ b/Code/FeatureExtraction/otbForwardFourierMellinTransformImageFilter.h
@@ -133,7 +133,7 @@ public:
 
 protected:
   ForwardFourierMellinTransformImageFilter();
-  ~ForwardFourierMellinTransformImageFilter() {};
+  virtual ~ForwardFourierMellinTransformImageFilter() {};
   void PrintSelf(std::ostream& os, itk::Indent indent) const;
   /** Main Computation Method */
   void GenerateData();
diff --git a/Code/FeatureExtraction/otbHessianToScalarImageFilter.h b/Code/FeatureExtraction/otbHessianToScalarImageFilter.h
index 99fab2af9a076c14f499caaaf7c668e95c680269..e1340d8576799522ab0bda25d9c4aafb3213b26d 100644
--- a/Code/FeatureExtraction/otbHessianToScalarImageFilter.h
+++ b/Code/FeatureExtraction/otbHessianToScalarImageFilter.h
@@ -38,7 +38,7 @@ public:
   {
     m_Alpha = 1.0;
   }
-  ~HessianToScalar() {};
+  virtual ~HessianToScalar() {};
   inline TOutput operator()( const TInput & Hessian )
   {
 
diff --git a/Code/FeatureExtraction/otbHuImageFunction.h b/Code/FeatureExtraction/otbHuImageFunction.h
index 31bcb5cc8aa627ae4de0d7237f57c0ef2f18a224..71d55e5ff55a26aa86cec90dcb5a5a1e95c2d61f 100644
--- a/Code/FeatureExtraction/otbHuImageFunction.h
+++ b/Code/FeatureExtraction/otbHuImageFunction.h
@@ -116,7 +116,7 @@ public:
 
 protected:
   HuImageFunction();
-  ~HuImageFunction() {};
+  virtual ~HuImageFunction() {};
   void PrintSelf(std::ostream& os, itk::Indent indent) const;
 
 private:
diff --git a/Code/FeatureExtraction/otbHuPathFunction.h b/Code/FeatureExtraction/otbHuPathFunction.h
index 46f798baca1a53d4e2a8c7fbf2401fc4546c91a9..def32656341a077f069e730eab5859f3e8a36a65 100644
--- a/Code/FeatureExtraction/otbHuPathFunction.h
+++ b/Code/FeatureExtraction/otbHuPathFunction.h
@@ -94,7 +94,7 @@ public:
 
 protected:
   HuPathFunction();
-  ~HuPathFunction() {};
+  virtual ~HuPathFunction() {};
   void PrintSelf(std::ostream& os, itk::Indent indent) const;
 
 private:
diff --git a/Code/FeatureExtraction/otbImageToHessianDeterminantImageFilter.h b/Code/FeatureExtraction/otbImageToHessianDeterminantImageFilter.h
index 604cf28893a9eaffc8291c7702c22275b0ebd5c4..1e97f295a210ddf2dc9e111ced1a60c69f3585bc 100644
--- a/Code/FeatureExtraction/otbImageToHessianDeterminantImageFilter.h
+++ b/Code/FeatureExtraction/otbImageToHessianDeterminantImageFilter.h
@@ -47,7 +47,7 @@ class HessianDeterminant
 {
 public:
   HessianDeterminant() {};
-  ~HessianDeterminant() {};
+  virtual ~HessianDeterminant() {};
 
   /*
    *
diff --git a/Code/FeatureExtraction/otbImageToLineSegmentVectorData.h b/Code/FeatureExtraction/otbImageToLineSegmentVectorData.h
index f707ed73ed1edf4aec512264e257220eb767b2c7..5a5be70b29b550f696f9bb693e08e00e6fabc4f6 100644
--- a/Code/FeatureExtraction/otbImageToLineSegmentVectorData.h
+++ b/Code/FeatureExtraction/otbImageToLineSegmentVectorData.h
@@ -103,7 +103,7 @@ public PersistentImageFilter<TInputImage, TInputImage>
 
 protected:
   PersistentLineSegmentDetector();
-  ~PersistentLineSegmentDetector() {};
+  virtual ~PersistentLineSegmentDetector() {};
   void PrintSelf(std::ostream& os, itk::Indent indent) const;
   virtual void  ThreadedGenerateData (const RegionType& outputRegionForThread,int threadId);
 
diff --git a/Code/FeatureExtraction/otbImageToPathListAlignFilter.h b/Code/FeatureExtraction/otbImageToPathListAlignFilter.h
index 5d881755d4c6f553b7eba952022bca71d9ea6d92..b36983ed340b9cb18228a3cebaa437e8ff5da2dd 100644
--- a/Code/FeatureExtraction/otbImageToPathListAlignFilter.h
+++ b/Code/FeatureExtraction/otbImageToPathListAlignFilter.h
@@ -119,7 +119,7 @@ public:
 
 protected:
   ImageToPathListAlignFilter();
-  ~ImageToPathListAlignFilter();
+  virtual ~ImageToPathListAlignFilter();
 
   virtual void GenerateOutputInformation() {}; // do nothing
   virtual void GenerateData();
diff --git a/Code/FeatureExtraction/otbKeyPointSetsMatchingFilter.h b/Code/FeatureExtraction/otbKeyPointSetsMatchingFilter.h
index 666861990006d5a2333957362a868013d817ecf5..c83d7b0970c38626ed5016c17c09fd30077ed498 100644
--- a/Code/FeatureExtraction/otbKeyPointSetsMatchingFilter.h
+++ b/Code/FeatureExtraction/otbKeyPointSetsMatchingFilter.h
@@ -98,7 +98,7 @@ protected:
   /// Constructor
   KeyPointSetsMatchingFilter();
   /// Destructor
-  ~KeyPointSetsMatchingFilter() {};
+  virtual ~KeyPointSetsMatchingFilter() {};
   /// PrintSelf method
   virtual void PrintSelf(std::ostream& os, itk::Indent indent) const;
 
diff --git a/Code/FeatureExtraction/otbLandmark.h b/Code/FeatureExtraction/otbLandmark.h
index afa852f8b2110efa8fe93870572c8267e7c85dff..a1096576ab08831a891f37bba1249a76be21cbf8 100644
--- a/Code/FeatureExtraction/otbLandmark.h
+++ b/Code/FeatureExtraction/otbLandmark.h
@@ -67,7 +67,7 @@ protected:
   /// Constructor
   Landmark() {}
   /// Destructor
-  ~Landmark() {}
+  virtual ~Landmark() {}
   /// PrintSelf method
   virtual void PrintSelf(std::ostream& os, itk::Indent indent) const
   {
diff --git a/Code/FeatureExtraction/otbMultiplyByScalarImageFilter.h b/Code/FeatureExtraction/otbMultiplyByScalarImageFilter.h
index ef0f4ecb037f96df2448753afe697ed9fd71c35e..c4fdac4d60b650733e85633dc5a8608bb475ded6 100644
--- a/Code/FeatureExtraction/otbMultiplyByScalarImageFilter.h
+++ b/Code/FeatureExtraction/otbMultiplyByScalarImageFilter.h
@@ -38,7 +38,7 @@ public:
   {
     m_Coef = 1.0;
   }
-  ~MultiplyByScalar() {};
+  virtual ~MultiplyByScalar() {};
   inline TOutput operator()( const TInput & value )
   {
     TOutput result;
diff --git a/Code/FeatureExtraction/otbNonMaxRemovalByDirectionFilter.h b/Code/FeatureExtraction/otbNonMaxRemovalByDirectionFilter.h
index 9e83b41e34ece71581c0e6c4c66c4aafeb33a9b6..ba5fb970aa0a6ef77faf0a0f2493df0bb85fee84 100644
--- a/Code/FeatureExtraction/otbNonMaxRemovalByDirectionFilter.h
+++ b/Code/FeatureExtraction/otbNonMaxRemovalByDirectionFilter.h
@@ -37,7 +37,7 @@ class NonMaxRemovalByDirectionFunctor
 {
 public:
   NonMaxRemovalByDirectionFunctor() {};
-  ~NonMaxRemovalByDirectionFunctor() {};
+  virtual ~NonMaxRemovalByDirectionFunctor() {};
   inline TOutput operator()(const TInput1 & itA, const TInput2 &itB)
   {
     TOutput resp = 0;
diff --git a/Code/FeatureExtraction/otbOrientationPathFunction.h b/Code/FeatureExtraction/otbOrientationPathFunction.h
index 3a38b6fea9818311f0ba22af0b6497b2e7e4806d..31a0316465376d7cb15d0e6caa910d045e37efc2 100644
--- a/Code/FeatureExtraction/otbOrientationPathFunction.h
+++ b/Code/FeatureExtraction/otbOrientationPathFunction.h
@@ -67,7 +67,7 @@ public:
 
 protected:
   OrientationPathFunction() {};
-  ~OrientationPathFunction() {};
+  virtual ~OrientationPathFunction() {};
   void PrintSelf(std::ostream& os, itk::Indent indent) const;
 
 private:
diff --git a/Code/FeatureExtraction/otbPanTexTextureImageFunctionFilter.h b/Code/FeatureExtraction/otbPanTexTextureImageFunctionFilter.h
index f4ff39eb5e86c37b9e937fc6afb171a9733b9c41..4917c498350533a6962764408acf699b5b9536bc 100644
--- a/Code/FeatureExtraction/otbPanTexTextureImageFunctionFilter.h
+++ b/Code/FeatureExtraction/otbPanTexTextureImageFunctionFilter.h
@@ -80,7 +80,7 @@ protected:
     this->SetRadius(radius);
 
   };
-  ~PanTexTextureImageFunctionFilter() {};
+  virtual ~PanTexTextureImageFunctionFilter() {};
   //void PrintSelf(std::ostream& os, itk::Indent indent) const;
 
 private:
diff --git a/Code/FeatureExtraction/otbRegionImageToRectangularPathListFilter.h b/Code/FeatureExtraction/otbRegionImageToRectangularPathListFilter.h
index dd7e4b3c5b62163e92b589dafe1f2bae8f4bbf5c..6dc5de27a39a5a79ccc1a054ab01d2e8189b3eb3 100644
--- a/Code/FeatureExtraction/otbRegionImageToRectangularPathListFilter.h
+++ b/Code/FeatureExtraction/otbRegionImageToRectangularPathListFilter.h
@@ -102,7 +102,7 @@ public:
   
 protected:
   RegionImageToRectangularPathListFilter();
-  ~RegionImageToRectangularPathListFilter();
+  virtual ~RegionImageToRectangularPathListFilter();
 
   virtual void GenerateOutputInformation(){}; // do nothing
   virtual void GenerateData();
diff --git a/Code/FeatureExtraction/otbRegionImageToRectangularPathListFilter.txx b/Code/FeatureExtraction/otbRegionImageToRectangularPathListFilter.txx
index b45e404f6ed3e7975d5026df98eb2f5acb095f19..511fbb8f41d61fc318da63bb165837ea4667ead0 100644
--- a/Code/FeatureExtraction/otbRegionImageToRectangularPathListFilter.txx
+++ b/Code/FeatureExtraction/otbRegionImageToRectangularPathListFilter.txx
@@ -209,8 +209,8 @@ RegionImageToRectangularPathListFilter<TInputImage,TOutputPath>
       double ax, ay;
       for (regionIterator = regionContainer.begin(); regionIterator != regionContainer.end(); ++regionIterator) {
         explorerIndex = *regionIterator;
-        ax = vcl_fabs(explorerIndex[0] - avgX);
-        ay = vcl_fabs(explorerIndex[1] - avgY);
+        ax = vcl_abs(explorerIndex[0] - avgX);
+        ay = vcl_abs(explorerIndex[1] - avgY);
         sumAX += ax;
         sumAY += ay;
         crossTermAXY += ax * ay;
@@ -266,10 +266,10 @@ RegionImageToRectangularPathListFilter<TInputImage,TOutputPath>
       // Compute equivalent length and width (based on equal area criterion)
       double length, width;
       if (al2 != 0) {
-        length = vcl_sqrt(vcl_fabs(al1 / al2) * n);
+        length = vcl_sqrt(vcl_abs(al1 / al2) * n);
         //length = vcl_sqrt(l1 / l2 * n);
         if (al1 != 0)
-          width = vcl_fabs(al2 / al1) * length;
+          width = vcl_abs(al2 / al1) * length;
         else { // l1 == 0 and l2 == 0
           length = width = vcl_sqrt(static_cast<double>(n)); // should happen only when n == 1 anyway
         }
@@ -316,8 +316,8 @@ RegionImageToRectangularPathListFilter<TInputImage,TOutputPath>
         explorerIndex = *regionIterator;
         vx = explorerIndex[0] - avgX;
         vy = explorerIndex[1] - avgY;
-        if (vcl_fabs(vx * x1 + vy * y1) <= halfLength
-         && vcl_fabs(vx * x2 + vy * y2) <= halfWidth)
+        if (vcl_abs(vx * x1 + vy * y1) <= halfLength
+         && vcl_abs(vx * x2 + vy * y2) <= halfWidth)
           countWithin ++;
       }
 
diff --git a/Code/FeatureExtraction/otbRemoveIsolatedByDirectionFilter.h b/Code/FeatureExtraction/otbRemoveIsolatedByDirectionFilter.h
index 7b11a50113608db703872ada19708ee0deae5dfe..8ea18006073226f80932e0071f3a6024c2eb49fe 100644
--- a/Code/FeatureExtraction/otbRemoveIsolatedByDirectionFilter.h
+++ b/Code/FeatureExtraction/otbRemoveIsolatedByDirectionFilter.h
@@ -36,7 +36,7 @@ class RemoveIsolatedByDirectionFunctor
 {
 public:
   RemoveIsolatedByDirectionFunctor() {};
-  ~RemoveIsolatedByDirectionFunctor() {};
+  virtual ~RemoveIsolatedByDirectionFunctor() {};
   inline TOutput operator()(const TInput1 & itA, const TInput2 &itB)
   {
     double currentDirection = itB.GetCenterPixel();
diff --git a/Code/FeatureExtraction/otbRemoveWrongDirectionFilter.h b/Code/FeatureExtraction/otbRemoveWrongDirectionFilter.h
index 731c172cbfeaf2e90bdb1c74434cc6e6b113a367..35c1000a39ed4ee5c5c7175680447aec0e940194 100644
--- a/Code/FeatureExtraction/otbRemoveWrongDirectionFilter.h
+++ b/Code/FeatureExtraction/otbRemoveWrongDirectionFilter.h
@@ -40,7 +40,7 @@ class RemoveWrongDirectionFunctor
 {
 public:
   RemoveWrongDirectionFunctor() {};
-  ~RemoveWrongDirectionFunctor() {};
+  virtual ~RemoveWrongDirectionFunctor() {};
   inline TOutput operator()(const TInput1 &A, const TInput2 &B)
   {
     if (B < CONST_PI_8)
diff --git a/Code/FeatureExtraction/otbTextureImageFunction.h b/Code/FeatureExtraction/otbTextureImageFunction.h
index c42f35b5ab44d865018759fce631f18c97013841..75a1fd1b31544cd8973082779672c409b62ff60f 100644
--- a/Code/FeatureExtraction/otbTextureImageFunction.h
+++ b/Code/FeatureExtraction/otbTextureImageFunction.h
@@ -111,7 +111,7 @@ class ITK_EXPORT TextureImageFunction :
 
 protected:
   TextureImageFunction();
-  ~TextureImageFunction() {};
+  virtual ~TextureImageFunction() {};
   void PrintSelf(std::ostream& os, itk::Indent indent) const;
 
 private:
diff --git a/Code/FeatureExtraction/otbUrbanAreaDetectionImageFilter.h b/Code/FeatureExtraction/otbUrbanAreaDetectionImageFilter.h
index 1124b2a2b8a68f839617f98a229b12168961ca4f..d47bc7aad0076193ef59d4a57efb93f666d8d045 100644
--- a/Code/FeatureExtraction/otbUrbanAreaDetectionImageFilter.h
+++ b/Code/FeatureExtraction/otbUrbanAreaDetectionImageFilter.h
@@ -71,7 +71,7 @@ class RadiometricNonWaterNonVegetationIndexFunctor
                             m_WaterFunctor.SetNIRIndex(id); };
 
   RadiometricNonWaterNonVegetationIndexFunctor(){}
-  ~RadiometricNonWaterNonVegetationIndexFunctor(){};
+  virtual ~RadiometricNonWaterNonVegetationIndexFunctor(){};
   
   inline TOutput operator()(const TInput& pInPix)
     {
@@ -116,7 +116,7 @@ public:
     m_UpperThreshold = 1.0;
   };
 
-  ~RadiometricNonWaterNonVegetationDetectionFunctor() {};
+  virtual ~RadiometricNonWaterNonVegetationDetectionFunctor() {};
   inline TOutput operator()(const TInput& inPix)
   {
     // The vegetation and water areas are put to 0.
diff --git a/Code/Fusion/otbBayesianFusionFilter.h b/Code/Fusion/otbBayesianFusionFilter.h
index 111211883d4383ecd786f2716bad74ca26e10055..2a79d5d146f49af220ee4b25dc809b2b23a33d89 100644
--- a/Code/Fusion/otbBayesianFusionFilter.h
+++ b/Code/Fusion/otbBayesianFusionFilter.h
@@ -50,7 +50,7 @@ class BayesianFunctor
 {
 public:
   BayesianFunctor() {};
-  ~BayesianFunctor() {};
+  virtual ~BayesianFunctor() {};
   typedef typename TInputMultiSpectral::RealValueType  RealType;
   typedef typename itk::VariableSizeMatrix<RealType>   MatrixType;
 
diff --git a/Code/GeospatialAnalysis/otbGISTableFunction.h b/Code/GeospatialAnalysis/otbGISTableFunction.h
index 21d541a77f2d0b107c2a9706afcdaa550cc75e10..a783a65807c9021a22c41a1b3640d08101ec0c85 100644
--- a/Code/GeospatialAnalysis/otbGISTableFunction.h
+++ b/Code/GeospatialAnalysis/otbGISTableFunction.h
@@ -89,7 +89,7 @@ public:
 
 protected:
   GISTableFunction();
-  ~GISTableFunction() {}
+  virtual ~GISTableFunction() {}
   void PrintSelf(std::ostream& os, Indent indent) const;
 
   /** Const pointer to the input table. */
diff --git a/Code/GeospatialAnalysis/otbTransactorGISTableFunction.h b/Code/GeospatialAnalysis/otbTransactorGISTableFunction.h
index d84564b604f4f5d150d80c9d188b570e4b7243d4..7029eed84f26eb557dd5a9e068a15271745250fa 100644
--- a/Code/GeospatialAnalysis/otbTransactorGISTableFunction.h
+++ b/Code/GeospatialAnalysis/otbTransactorGISTableFunction.h
@@ -78,7 +78,7 @@ public:
 
 protected:
   TransactorGISTableFunction();
-  ~TransactorGISTableFunction() {}
+  virtual ~TransactorGISTableFunction() {}
   void PrintSelf(std::ostream& os, Indent indent) const;
 
   /** Const pointer to the input Table. */
diff --git a/Code/IO/otbBSQImageIO.h b/Code/IO/otbBSQImageIO.h
index 1709dfb6556e3bc2f40d51ba8d2f891ddd9637da..a7b559c5fa0bea0565bf1ef7eaa958e0f168495f 100644
--- a/Code/IO/otbBSQImageIO.h
+++ b/Code/IO/otbBSQImageIO.h
@@ -102,7 +102,7 @@ protected:
   /** Construtor.*/
   BSQImageIO();
   /** Destructor.*/
-  ~BSQImageIO();
+  virtual ~BSQImageIO();
 
   bool OpenOneraDataFileForReading(const char* filename);
   bool OpenOneraHeaderFileForReading(const char* filename);
diff --git a/Code/IO/otbBSQImageIOFactory.h b/Code/IO/otbBSQImageIOFactory.h
index 62765d0497e7f2274e42e3c3764f45194c7cfb1b..bfc1c0a4269073e406b235d4c643af390546db6d 100644
--- a/Code/IO/otbBSQImageIOFactory.h
+++ b/Code/IO/otbBSQImageIOFactory.h
@@ -54,7 +54,7 @@ public:
 
 protected:
   BSQImageIOFactory();
-  ~BSQImageIOFactory();
+  virtual ~BSQImageIOFactory();
 
 private:
   BSQImageIOFactory(const Self&); //purposely not implemented
diff --git a/Code/IO/otbDEMHandler.h b/Code/IO/otbDEMHandler.h
index de02500dcb6181ae21a259b6e85660299b055ade..da715458b14b15e8979cfc71a295f4942987022f 100644
--- a/Code/IO/otbDEMHandler.h
+++ b/Code/IO/otbDEMHandler.h
@@ -74,7 +74,7 @@ public :
 
 protected:
   DEMHandler();
-  ~DEMHandler();
+  virtual ~DEMHandler();
 
   void PrintSelf(std::ostream& os, itk::Indent indent) const;
 
diff --git a/Code/IO/otbDEMToImageGenerator.h b/Code/IO/otbDEMToImageGenerator.h
index b2d0d9ee7d3ac53a94eba4fa7a1e78019b81891a..dd9137b4216114e795b0515d1eb337bddde7286e 100644
--- a/Code/IO/otbDEMToImageGenerator.h
+++ b/Code/IO/otbDEMToImageGenerator.h
@@ -100,7 +100,7 @@ public :
 
 protected:
   DEMToImageGenerator();
-  ~DEMToImageGenerator(){};
+  virtual ~DEMToImageGenerator(){};
 
   void PrintSelf(std::ostream& os, itk::Indent indent) const;
   void ThreadedGenerateData(const OutputImageRegionType& outputRegionForThread,
diff --git a/Code/IO/otbDEMToOrthoImageGenerator.h b/Code/IO/otbDEMToOrthoImageGenerator.h
index 67dc24051f2f1b9a8df8325c3bdb926319a6fea7..ee548dbfca23f4760af69211d4c784679092738c 100644
--- a/Code/IO/otbDEMToOrthoImageGenerator.h
+++ b/Code/IO/otbDEMToOrthoImageGenerator.h
@@ -100,7 +100,7 @@ public :
 
 protected:
   DEMToOrthoImageGenerator();
-  ~DEMToOrthoImageGenerator(){};
+  virtual ~DEMToOrthoImageGenerator(){};
 
   void PrintSelf(std::ostream& os, Indent indent) const;
   virtual void GenerateOutputInformation();
diff --git a/Code/IO/otbDefaultImageMetadataInterfaceFactory.h b/Code/IO/otbDefaultImageMetadataInterfaceFactory.h
index b1f644e94a22038eed194598e2f10f9141ed5594..8b711867666afb0d79cc799b8ff4ace53855ca77 100644
--- a/Code/IO/otbDefaultImageMetadataInterfaceFactory.h
+++ b/Code/IO/otbDefaultImageMetadataInterfaceFactory.h
@@ -58,7 +58,7 @@ public:
 
 protected:
   DefaultImageMetadataInterfaceFactory();
-  ~DefaultImageMetadataInterfaceFactory();
+  virtual ~DefaultImageMetadataInterfaceFactory();
 
 private:
   DefaultImageMetadataInterfaceFactory(const Self&); //purposely not implemented
diff --git a/Code/IO/otbGDALImageIO.h b/Code/IO/otbGDALImageIO.h
index e3d25781f6161e0e4161f75603561b9ee7e595fc..d4aa0c92c91a51ae7ab046018e2d1fb4a41f4256 100644
--- a/Code/IO/otbGDALImageIO.h
+++ b/Code/IO/otbGDALImageIO.h
@@ -125,7 +125,7 @@ protected:
   /** Construtor.*/
   GDALImageIO();
   /** Destructor.*/
-  ~GDALImageIO();
+  virtual ~GDALImageIO();
 
   void PrintSelf(std::ostream& os, itk::Indent indent) const;
   /** Read all information on the image*/
diff --git a/Code/IO/otbGDALImageIOFactory.h b/Code/IO/otbGDALImageIOFactory.h
index d07784822170a68a4a12e54633e31618488be60d..b908406cb4a4da2ed6861625620f8f80df828660 100644
--- a/Code/IO/otbGDALImageIOFactory.h
+++ b/Code/IO/otbGDALImageIOFactory.h
@@ -55,7 +55,7 @@ public:
 
 protected:
   GDALImageIOFactory();
-  ~GDALImageIOFactory();
+  virtual ~GDALImageIOFactory();
 
 private:
   GDALImageIOFactory(const Self&); //purposely not implemented
diff --git a/Code/IO/otbIkonosImageMetadataInterfaceFactory.h b/Code/IO/otbIkonosImageMetadataInterfaceFactory.h
index 0e1af0acb3103be093f8103e0a998844967878ce..9e63445e4d1788dcd1c445d41e8eb2d9f0fa1413 100644
--- a/Code/IO/otbIkonosImageMetadataInterfaceFactory.h
+++ b/Code/IO/otbIkonosImageMetadataInterfaceFactory.h
@@ -57,7 +57,7 @@ public:
 
 protected:
   IkonosImageMetadataInterfaceFactory();
-  ~IkonosImageMetadataInterfaceFactory();
+  virtual ~IkonosImageMetadataInterfaceFactory();
 
 private:
   IkonosImageMetadataInterfaceFactory(const Self&); //purposely not implemented
diff --git a/Code/IO/otbImageFileReader.h b/Code/IO/otbImageFileReader.h
index cddfa3bbb242e7efb2b4dd4075165e528383fccc..2190767b976b62f8427f35af7099bbf8e3e0dd74 100644
--- a/Code/IO/otbImageFileReader.h
+++ b/Code/IO/otbImageFileReader.h
@@ -76,7 +76,7 @@ public:
 
 protected:
   ImageFileReader();
-  ~ImageFileReader();
+  virtual ~ImageFileReader();
   void PrintSelf(std::ostream& os, itk::Indent indent) const;
 
 private:
diff --git a/Code/IO/otbImageFileWriter.h b/Code/IO/otbImageFileWriter.h
index ec41235b08a9b3d24e95880f8b4d6ef150004971..9ae3ee5a20a52a523dd20e3c4ac034c3164ae495 100644
--- a/Code/IO/otbImageFileWriter.h
+++ b/Code/IO/otbImageFileWriter.h
@@ -105,7 +105,7 @@ public:
 
 protected:
   ImageFileWriter();
-  ~ImageFileWriter();
+  virtual ~ImageFileWriter();
   void PrintSelf(std::ostream& os, itk::Indent indent) const;
 
 private:
diff --git a/Code/IO/otbJPEG2000ImageIO.h b/Code/IO/otbJPEG2000ImageIO.h
index fdcadb5e2592868b0b8237abcf7abd1b296c38cc..2f9f2ee399ceb9cd022fc967d578edcf5cfd648c 100644
--- a/Code/IO/otbJPEG2000ImageIO.h
+++ b/Code/IO/otbJPEG2000ImageIO.h
@@ -101,7 +101,7 @@ protected:
   /** Construtor.*/
   JPEG2000ImageIO();
   /** Destructor.*/
-  ~JPEG2000ImageIO();
+  virtual ~JPEG2000ImageIO();
 
   void PrintSelf(std::ostream& os, itk::Indent indent) const;
 
diff --git a/Code/IO/otbJPEG2000ImageIOFactory.h b/Code/IO/otbJPEG2000ImageIOFactory.h
index 6cb3439304dece4020721d143ec818d319df97c0..c9c8a2ff3c41af989e683f3bb164088272095b77 100644
--- a/Code/IO/otbJPEG2000ImageIOFactory.h
+++ b/Code/IO/otbJPEG2000ImageIOFactory.h
@@ -54,7 +54,7 @@ public:
 
 protected:
   JPEG2000ImageIOFactory();
-  ~JPEG2000ImageIOFactory();
+  virtual ~JPEG2000ImageIOFactory();
 
 private:
   JPEG2000ImageIOFactory(const Self&); //purposely not implemented
diff --git a/Code/IO/otbKMLVectorDataIOFactory.h b/Code/IO/otbKMLVectorDataIOFactory.h
index 57b836936c7b80ae772191e3c4994e6a71776bd2..6056a7c2adb68fc8fcc88540a52d7a7cc0a533e0 100644
--- a/Code/IO/otbKMLVectorDataIOFactory.h
+++ b/Code/IO/otbKMLVectorDataIOFactory.h
@@ -53,7 +53,7 @@ public:
 
 protected:
   KMLVectorDataIOFactory();
-  ~KMLVectorDataIOFactory();
+  virtual ~KMLVectorDataIOFactory();
 
 private:
   KMLVectorDataIOFactory(const Self&); //purposely not implemented
diff --git a/Code/IO/otbLUMImageIO.h b/Code/IO/otbLUMImageIO.h
index a7180a20b6b6579d24a6881eb7ca1accfdf25a07..070130b7cc529b1b4e73413789bc65b86dc9c185 100644
--- a/Code/IO/otbLUMImageIO.h
+++ b/Code/IO/otbLUMImageIO.h
@@ -101,7 +101,7 @@ protected:
   /** Construtor.*/
   LUMImageIO();
   /** Destructor.*/
-  ~LUMImageIO();
+  virtual ~LUMImageIO();
 
   bool OpenOneraDataFileForReading(const char* filename);
   bool OpenOneraHeaderFileForReading(const char* filename);
diff --git a/Code/IO/otbLUMImageIOFactory.h b/Code/IO/otbLUMImageIOFactory.h
index 3cf27f2fd6b4da26fcb4af92471a20733c76f0b8..d160c4713e6042c7f33cc427649bc0b4638347e1 100644
--- a/Code/IO/otbLUMImageIOFactory.h
+++ b/Code/IO/otbLUMImageIOFactory.h
@@ -54,7 +54,7 @@ public:
 
 protected:
   LUMImageIOFactory();
-  ~LUMImageIOFactory();
+  virtual ~LUMImageIOFactory();
 
 private:
   LUMImageIOFactory(const Self&); //purposely not implemented
diff --git a/Code/IO/otbMSTARImageIO.h b/Code/IO/otbMSTARImageIO.h
index 57f7bce695137a9ab1506e9f53b1b474e5a51be7..f948b45f670d066e3b9fae06798d61fb5e91220a 100644
--- a/Code/IO/otbMSTARImageIO.h
+++ b/Code/IO/otbMSTARImageIO.h
@@ -93,7 +93,7 @@ public:
 
 
   MSTARImageIO();
-  ~MSTARImageIO();
+  virtual ~MSTARImageIO();
   void PrintSelf(std::ostream& os, itk::Indent indent) const;
 
 private:
diff --git a/Code/IO/otbMSTARImageIOFactory.h b/Code/IO/otbMSTARImageIOFactory.h
index 65db7453d5949b4b35a584075ad1478bf674d3cc..cc9e6f9d4664b729c6a4828029545e0050475f59 100644
--- a/Code/IO/otbMSTARImageIOFactory.h
+++ b/Code/IO/otbMSTARImageIOFactory.h
@@ -54,7 +54,7 @@ public:
 
 protected:
   MSTARImageIOFactory();
-  ~MSTARImageIOFactory();
+  virtual ~MSTARImageIOFactory();
 
 private:
   MSTARImageIOFactory(const Self&); //purposely not implemented
diff --git a/Code/IO/otbMWImageIO.h b/Code/IO/otbMWImageIO.h
index cdb18108427cd76f94879e020f7bc3a7dcc5ae02..eaae4b4d10660bce1c5be76cdb8e936297069ecf 100644
--- a/Code/IO/otbMWImageIO.h
+++ b/Code/IO/otbMWImageIO.h
@@ -101,7 +101,7 @@ protected:
   /** Construtor.*/
   MWImageIO();
   /** Destructor.*/
-  ~MWImageIO();
+  virtual ~MWImageIO();
 
   bool OpenOneraDataFileForReading(const char* filename);
   bool OpenOneraHeaderFileForReading(const char* filename);
diff --git a/Code/IO/otbMWImageIOFactory.h b/Code/IO/otbMWImageIOFactory.h
index 198f996025a51870dc585a1910927df1472bc329..ba10b677783d2c24a75cab447c1189176ac9f70a 100644
--- a/Code/IO/otbMWImageIOFactory.h
+++ b/Code/IO/otbMWImageIOFactory.h
@@ -54,7 +54,7 @@ public:
 
 protected:
   MWImageIOFactory();
-  ~MWImageIOFactory();
+  virtual ~MWImageIOFactory();
 
 private:
   MWImageIOFactory(const Self&); //purposely not implemented
diff --git a/Code/IO/otbONERAImageIO.h b/Code/IO/otbONERAImageIO.h
index 36f503bf217d1c3b82ad048a617e7499679cb3d4..8808b213922992f5f22ba062226fdb0410acb9ff 100644
--- a/Code/IO/otbONERAImageIO.h
+++ b/Code/IO/otbONERAImageIO.h
@@ -100,7 +100,7 @@ protected:
   /** Construtor.*/
   ONERAImageIO();
   /** Destructor.*/
-  ~ONERAImageIO();
+  virtual ~ONERAImageIO();
 
   bool OpenOneraDataFileForReading(const char* filename);
   bool OpenOneraHeaderFileForReading(const char* filename);
diff --git a/Code/IO/otbONERAImageIOFactory.h b/Code/IO/otbONERAImageIOFactory.h
index 2fe0debf83b0b617fa16b7af10634460d791c085..7e2a6eae8dd13d76e43a4f9e85e487f1bd41e6d1 100644
--- a/Code/IO/otbONERAImageIOFactory.h
+++ b/Code/IO/otbONERAImageIOFactory.h
@@ -54,7 +54,7 @@ public:
 
 protected:
   ONERAImageIOFactory();
-  ~ONERAImageIOFactory();
+  virtual ~ONERAImageIOFactory();
 
 private:
   ONERAImageIOFactory(const Self&); //purposely not implemented
diff --git a/Code/IO/otbPointSetFileReader.h b/Code/IO/otbPointSetFileReader.h
index 67a899b1a614f95dd9b5bf8881c1779b26dfb9b8..c0ee9f39308fea2473aabd7fda6842acf848107a 100644
--- a/Code/IO/otbPointSetFileReader.h
+++ b/Code/IO/otbPointSetFileReader.h
@@ -76,7 +76,7 @@ public:
 
 protected:
   PointSetFileReader();
-  ~PointSetFileReader();
+  virtual ~PointSetFileReader();
   void PrintSelf(std::ostream& os, itk::Indent indent) const;
 
   void TestFileExistanceAndReadability();
diff --git a/Code/IO/otbPrepareSRTMDirectory.h b/Code/IO/otbPrepareSRTMDirectory.h
index c4435b2796faabd4aa2c6655d103ba0da4493f62..e394c9833179af4677ce2f153a7f304ba0097870 100644
--- a/Code/IO/otbPrepareSRTMDirectory.h
+++ b/Code/IO/otbPrepareSRTMDirectory.h
@@ -76,7 +76,7 @@ public:
 
 protected:
   PrepareSRTMDirectory();
-  ~PrepareSRTMDirectory() {};
+  virtual ~PrepareSRTMDirectory() {};
   void PrintSelf(std::ostream& os, itk::Indent indent) const;
 
 private:
diff --git a/Code/IO/otbQuickBirdImageMetadataInterfaceFactory.h b/Code/IO/otbQuickBirdImageMetadataInterfaceFactory.h
index 80473a0851aa97d2200400841fbcaef6a1e9675a..f6690cf689a6f42afdf6d06dd5791c64bd693b39 100644
--- a/Code/IO/otbQuickBirdImageMetadataInterfaceFactory.h
+++ b/Code/IO/otbQuickBirdImageMetadataInterfaceFactory.h
@@ -57,7 +57,7 @@ public:
 
 protected:
   QuickBirdImageMetadataInterfaceFactory();
-  ~QuickBirdImageMetadataInterfaceFactory();
+  virtual ~QuickBirdImageMetadataInterfaceFactory();
 
 private:
   QuickBirdImageMetadataInterfaceFactory(const Self&); //purposely not implemented
diff --git a/Code/IO/otbRADImageIO.h b/Code/IO/otbRADImageIO.h
index ab8516f831b2145fe822d52d207e74cd4a2fcef8..830c09b43a7db74ebd9c2ad6e8a702d2081b7258 100644
--- a/Code/IO/otbRADImageIO.h
+++ b/Code/IO/otbRADImageIO.h
@@ -102,7 +102,7 @@ protected:
   /** Construtor.*/
   RADImageIO();
   /** Destructor.*/
-  ~RADImageIO();
+  virtual ~RADImageIO();
 
   bool OpenOneraDataFileForReading(const char* filename);
   bool OpenOneraHeaderFileForReading(const char* filename);
diff --git a/Code/IO/otbRADImageIOFactory.h b/Code/IO/otbRADImageIOFactory.h
index 2c53bb5d9e898eeeced6a2f25b1f745d0c9660ab..bc8a029c7e86af43957ae89e521edc31086a3b6b 100644
--- a/Code/IO/otbRADImageIOFactory.h
+++ b/Code/IO/otbRADImageIOFactory.h
@@ -54,7 +54,7 @@ public:
 
 protected:
   RADImageIOFactory();
-  ~RADImageIOFactory();
+  virtual ~RADImageIOFactory();
 
 private:
   RADImageIOFactory(const Self&); //purposely not implemented
diff --git a/Code/IO/otbSHPVectorDataIOFactory.h b/Code/IO/otbSHPVectorDataIOFactory.h
index b4860ed412b8c21266422539d447d38d459091e8..4a6c8b478567243f56dd5ffa23212cf30d8d151b 100644
--- a/Code/IO/otbSHPVectorDataIOFactory.h
+++ b/Code/IO/otbSHPVectorDataIOFactory.h
@@ -53,7 +53,7 @@ public:
 
 protected:
   SHPVectorDataIOFactory();
-  ~SHPVectorDataIOFactory();
+  virtual ~SHPVectorDataIOFactory();
 
 private:
   SHPVectorDataIOFactory(const Self&); //purposely not implemented
diff --git a/Code/IO/otbSpatialObjectDXFReader.h b/Code/IO/otbSpatialObjectDXFReader.h
index 8cf6b6effbb49bd2eeb33cb447d81e38e7bc4924..de2dadcb1642bd020e112accf0ee680685dc9d19 100644
--- a/Code/IO/otbSpatialObjectDXFReader.h
+++ b/Code/IO/otbSpatialObjectDXFReader.h
@@ -70,7 +70,7 @@ protected:
   /** Constructor */
   SpatialObjectDXFReader();
   /** Destructor */
-  ~SpatialObjectDXFReader();
+  virtual ~SpatialObjectDXFReader();
   /** Main computation method */
   virtual void GenerateData();
 
diff --git a/Code/IO/otbSpotImageMetadataInterfaceFactory.h b/Code/IO/otbSpotImageMetadataInterfaceFactory.h
index a7fd226b63c997247e90d82e74262781a9b0c257..f515561d4e1285efa9df5f8d0c843cd341dcda0a 100644
--- a/Code/IO/otbSpotImageMetadataInterfaceFactory.h
+++ b/Code/IO/otbSpotImageMetadataInterfaceFactory.h
@@ -58,7 +58,7 @@ public:
 
 protected:
   SpotImageMetadataInterfaceFactory();
-  ~SpotImageMetadataInterfaceFactory();
+  virtual ~SpotImageMetadataInterfaceFactory();
 
 private:
   SpotImageMetadataInterfaceFactory(const Self&); //purposely not implemented
diff --git a/Code/IO/otbStreamingImageFileWriter.h b/Code/IO/otbStreamingImageFileWriter.h
index 4b388d33145e80f79517b28dc190b778b11441ba..fb83bc99e038b6b65ed0d83245431e4705447897 100644
--- a/Code/IO/otbStreamingImageFileWriter.h
+++ b/Code/IO/otbStreamingImageFileWriter.h
@@ -173,7 +173,7 @@ public:
 
 protected:
   StreamingImageFileWriter();
-  ~StreamingImageFileWriter();
+  virtual ~StreamingImageFileWriter();
   void PrintSelf(std::ostream& os, itk::Indent indent) const;
 
   /** Does the real work. */
diff --git a/Code/IO/otbStreamingImageVirtualWriter.h b/Code/IO/otbStreamingImageVirtualWriter.h
index 0c5e3c5dbc2204b2bfa67bcdad4435b4781c1b6f..8fbe95539a57fc01e92a7b8a38bce777ff381dcb 100644
--- a/Code/IO/otbStreamingImageVirtualWriter.h
+++ b/Code/IO/otbStreamingImageVirtualWriter.h
@@ -126,7 +126,7 @@ public:
 
 protected:
   StreamingImageVirtualWriter();
-  ~StreamingImageVirtualWriter();
+  virtual ~StreamingImageVirtualWriter();
   void PrintSelf(std::ostream& os, itk::Indent indent) const;
 
   virtual void GenerateData(void);
diff --git a/Code/IO/otbTileMapImageIO.h b/Code/IO/otbTileMapImageIO.h
index 67525cb16a8590704a1ba77edeead300ef8b261d..c0b7887af06897fc3c3d72dbdd54b64e5598e5cc 100644
--- a/Code/IO/otbTileMapImageIO.h
+++ b/Code/IO/otbTileMapImageIO.h
@@ -157,7 +157,7 @@ protected:
   /** Construtor.*/
   TileMapImageIO();
   /** Destructor.*/
-  ~TileMapImageIO();
+  virtual ~TileMapImageIO();
 
   void PrintSelf(std::ostream& os, itk::Indent indent) const;
   /** Read all information on the image*/
diff --git a/Code/IO/otbTileMapImageIOFactory.h b/Code/IO/otbTileMapImageIOFactory.h
index 6f28e2aa20ae7a129a482e68726f3cbaed77b1bc..eb8c2c5e46d178d091c4b2c97a0bd6993c33a8e0 100644
--- a/Code/IO/otbTileMapImageIOFactory.h
+++ b/Code/IO/otbTileMapImageIOFactory.h
@@ -55,7 +55,7 @@ public:
 
 protected:
   TileMapImageIOFactory();
-  ~TileMapImageIOFactory();
+  virtual ~TileMapImageIOFactory();
 
 private:
   TileMapImageIOFactory(const Self&); //purposely not implemented
diff --git a/Code/IO/otbVectorDataFileReader.h b/Code/IO/otbVectorDataFileReader.h
index 57b0b02bf2be92dd073b84ff15efba6bdf579a98..47f99750594f2fd60c6516207c72806cc9a2f7c4 100644
--- a/Code/IO/otbVectorDataFileReader.h
+++ b/Code/IO/otbVectorDataFileReader.h
@@ -125,7 +125,7 @@ public :
 
 protected:
   VectorDataFileReader();
-  ~VectorDataFileReader();
+  virtual ~VectorDataFileReader();
   std::string m_ExceptionMessage;
 
   typename VectorDataIOBaseType::Pointer m_VectorDataIO;
diff --git a/Code/IO/otbVectorDataFileWriter.h b/Code/IO/otbVectorDataFileWriter.h
index 424307cfd87133a89aaeab23267849a1b1aaa856..eb84166d5213f14e2ef8257f060c6732e47d6063 100644
--- a/Code/IO/otbVectorDataFileWriter.h
+++ b/Code/IO/otbVectorDataFileWriter.h
@@ -101,7 +101,7 @@ public :
 
 protected:
   VectorDataFileWriter();
-  ~VectorDataFileWriter();
+  virtual ~VectorDataFileWriter();
 
   void PrintSelf(std::ostream& os, itk::Indent indent) const;
 
diff --git a/Code/Learning/otbSVMCrossValidationCostFunction.h b/Code/Learning/otbSVMCrossValidationCostFunction.h
index 0f6b48d7428271565148056d37a58629743c324d..48beeddf8555428c08b457246c47c101795fd5b8 100644
--- a/Code/Learning/otbSVMCrossValidationCostFunction.h
+++ b/Code/Learning/otbSVMCrossValidationCostFunction.h
@@ -94,7 +94,7 @@ protected:
   /// Constructor
   SVMCrossValidationCostFunction();
   /// Destructor
-  ~SVMCrossValidationCostFunction();
+  virtual ~SVMCrossValidationCostFunction();
 
   /** Update svm parameters struct according to the input parameters
     */
diff --git a/Code/Learning/otbSVMImageModelEstimator.h b/Code/Learning/otbSVMImageModelEstimator.h
index 050f820793085cea3a3b5af2b3d2a0374fa322e4..c7d43ffc6a145f76389a2626ae9c9822a0aaba62 100644
--- a/Code/Learning/otbSVMImageModelEstimator.h
+++ b/Code/Learning/otbSVMImageModelEstimator.h
@@ -102,7 +102,7 @@ protected:
   /** Constructor */
   SVMImageModelEstimator();
   /** Destructor */
-  ~SVMImageModelEstimator();
+  virtual ~SVMImageModelEstimator();
   /** PrintSelf */
   virtual void PrintSelf(std::ostream& os, itk::Indent indent) const;
 
diff --git a/Code/Learning/otbSVMModel.h b/Code/Learning/otbSVMModel.h
index 499e79c280133b7ff8bf295ff4c141e1eb57b116..8503170cfa312a867cc2b26ea2a696f13cbd9dd4 100644
--- a/Code/Learning/otbSVMModel.h
+++ b/Code/Learning/otbSVMModel.h
@@ -396,7 +396,7 @@ protected:
   /** Constructor */
   SVMModel();
   /** Destructor */
-  ~SVMModel();
+  virtual ~SVMModel();
   /** Display infos */
   void PrintSelf(std::ostream& os, itk::Indent indent) const;
 
diff --git a/Code/Learning/otbSVMModelEstimator.h b/Code/Learning/otbSVMModelEstimator.h
index bbf25837b602294c91fb7904d1712a05f3cffa1c..f493203c9cb9a7dabd28db14c56a0e2afc6b7747 100644
--- a/Code/Learning/otbSVMModelEstimator.h
+++ b/Code/Learning/otbSVMModelEstimator.h
@@ -297,7 +297,7 @@ protected:
   /** Constructor */
   SVMModelEstimator();
   /** Destructor */
-  ~SVMModelEstimator();
+  virtual ~SVMModelEstimator();
   virtual void PrintSelf(std::ostream& os, itk::Indent indent) const;
 
   /** Starts the modelling process */
diff --git a/Code/Learning/otbSVMPointSetModelEstimator.h b/Code/Learning/otbSVMPointSetModelEstimator.h
index ead89c746392ff7fe82b81b691ffbb43ae86e70e..4cbd6ac44871a59e9d0ada14272a3499702423d1 100644
--- a/Code/Learning/otbSVMPointSetModelEstimator.h
+++ b/Code/Learning/otbSVMPointSetModelEstimator.h
@@ -98,7 +98,7 @@ protected:
   /** Constructor */
   SVMPointSetModelEstimator();
   /** Destructor */
-  ~SVMPointSetModelEstimator();
+  virtual ~SVMPointSetModelEstimator();
   /** PrintSelf */
   virtual void PrintSelf(std::ostream& os, itk::Indent indent) const;
   /** Prepare data */
diff --git a/Code/Learning/otbSVMSampleListModelEstimator.h b/Code/Learning/otbSVMSampleListModelEstimator.h
index ce5ea4f99eb66e72a5eea1c68653e51813ae0f6a..40b8bc40a01ae1a84ddc72b7095f9d1e0a566026 100644
--- a/Code/Learning/otbSVMSampleListModelEstimator.h
+++ b/Code/Learning/otbSVMSampleListModelEstimator.h
@@ -162,7 +162,7 @@ protected:
   /** Constructor */
   SVMSampleListModelEstimator();
   /** Destructor */
-  ~SVMSampleListModelEstimator();
+  virtual ~SVMSampleListModelEstimator();
   /** PrintSelf */
   virtual void PrintSelf(std::ostream& os, itk::Indent indent) const;
 
diff --git a/Code/Markov/otbMarkovRandomFieldFilter.h b/Code/Markov/otbMarkovRandomFieldFilter.h
index 5cdd9787605d912aeb0701099b645c025b59c608..d140ea974f8e8cbbac3f6dfa1fa7e3e5402f6959 100644
--- a/Code/Markov/otbMarkovRandomFieldFilter.h
+++ b/Code/Markov/otbMarkovRandomFieldFilter.h
@@ -333,7 +333,7 @@ public:
 
 protected:
   MarkovRandomFieldFilter();
-  ~MarkovRandomFieldFilter(){};
+  virtual ~MarkovRandomFieldFilter(){};
   void PrintSelf(std::ostream& os, itk::Indent indent) const;
 
   /** Allocate memory for labelled images. This is automatically called
diff --git a/Code/MultiScale/otbConvexOrConcaveClassificationFilter.h b/Code/MultiScale/otbConvexOrConcaveClassificationFilter.h
index 3212bb5db909accebf4e347895e81cf9081e504b..7d4f48dded78d68998d851c9d38f0de5d447cb65 100644
--- a/Code/MultiScale/otbConvexOrConcaveClassificationFilter.h
+++ b/Code/MultiScale/otbConvexOrConcaveClassificationFilter.h
@@ -68,7 +68,7 @@ public:
   /**
    * Destructor
    */
-  ~ConvexOrConcaveDecisionRule() {};
+  virtual ~ConvexOrConcaveDecisionRule() {};
   /**
    * Label the pixel to convex, concave or flat
    * \return The label of the pixel
diff --git a/Code/MultiScale/otbGeodesicMorphologyIterativeDecompositionImageFilter.h b/Code/MultiScale/otbGeodesicMorphologyIterativeDecompositionImageFilter.h
index 6f9f67989cb95779bf52c1398df25a77e415de1a..da710e17a897232134d285d2c23aabcd266e5c12 100644
--- a/Code/MultiScale/otbGeodesicMorphologyIterativeDecompositionImageFilter.h
+++ b/Code/MultiScale/otbGeodesicMorphologyIterativeDecompositionImageFilter.h
@@ -125,7 +125,7 @@ protected:
   /** Constructor */
   GeodesicMorphologyIterativeDecompositionImageFilter();
   /** Destructor */
-  ~GeodesicMorphologyIterativeDecompositionImageFilter() {};
+  virtual ~GeodesicMorphologyIterativeDecompositionImageFilter() {};
   /** Generate output information */
   virtual void GenerateOutputInformation();
   /** Generate input requested region */
diff --git a/Code/MultiScale/otbGeodesicMorphologyLevelingFilter.h b/Code/MultiScale/otbGeodesicMorphologyLevelingFilter.h
index 660c232b63c1e933c29bc44a0f4d3fa8eccea74d..cb4df4863427e049113533a353afe5e266808499 100644
--- a/Code/MultiScale/otbGeodesicMorphologyLevelingFilter.h
+++ b/Code/MultiScale/otbGeodesicMorphologyLevelingFilter.h
@@ -38,7 +38,7 @@ public:
   /// Constructor
   LevelingFunctor() {};
   /// Destructor
-  ~LevelingFunctor() {};
+  virtual ~LevelingFunctor() {};
 
   inline TOutput operator()(const TInput& pixel, const TInputMap& convexPixel, const TInputMap& concavePixel)
   {
diff --git a/Code/MultiScale/otbMorphologicalPyramidAnalysisFilter.h b/Code/MultiScale/otbMorphologicalPyramidAnalysisFilter.h
index 2c35e040b821352344a559ee507d761dc65bcb88..31dc033a011c07bfdbadfaa95913e70d47d0bac7 100644
--- a/Code/MultiScale/otbMorphologicalPyramidAnalysisFilter.h
+++ b/Code/MultiScale/otbMorphologicalPyramidAnalysisFilter.h
@@ -114,7 +114,7 @@ protected:
   /** Constructor */
   MorphologicalPyramidAnalysisFilter();
   /** Destructor */
-  ~MorphologicalPyramidAnalysisFilter();
+  virtual ~MorphologicalPyramidAnalysisFilter();
   virtual void GenerateOutputInformation() {}; // does nothing
   /** Main computation method */
   virtual void GenerateData();
diff --git a/Code/MultiScale/otbMorphologicalPyramidResampler.h b/Code/MultiScale/otbMorphologicalPyramidResampler.h
index 347b9451fc0283e33277e8460ce6c978d2a1f1ea..1514e355ef261c9012001260b872c62a3f1d9b11 100644
--- a/Code/MultiScale/otbMorphologicalPyramidResampler.h
+++ b/Code/MultiScale/otbMorphologicalPyramidResampler.h
@@ -72,7 +72,7 @@ protected:
   /** Constructor */
   Resampler();
   /** Destructor */
-  ~Resampler() {};
+  virtual ~Resampler() {};
   /** Generate output information */
   virtual void GenerateOutputInformation();
   /** Configure input requested region to be the largest possible region */
diff --git a/Code/MultiScale/otbMorphologicalPyramidSegmentationFilter.h b/Code/MultiScale/otbMorphologicalPyramidSegmentationFilter.h
index 94f6795b0ed6e5afe7832e96db8240bf989ce091..7a60f05f4878acdb256905ee36c8a10009f54aaa 100644
--- a/Code/MultiScale/otbMorphologicalPyramidSegmentationFilter.h
+++ b/Code/MultiScale/otbMorphologicalPyramidSegmentationFilter.h
@@ -136,7 +136,7 @@ protected:
   /** Constructor */
   MorphologicalPyramidSegmentationFilter();
   /** Destructor */
-  ~MorphologicalPyramidSegmentationFilter();
+  virtual ~MorphologicalPyramidSegmentationFilter();
   virtual void GenerateOutputInformation() {}; // does nothing
   /** Main computation method */
   virtual void GenerateData();
diff --git a/Code/MultiScale/otbMorphologicalPyramidSynthesisFilter.h b/Code/MultiScale/otbMorphologicalPyramidSynthesisFilter.h
index c5d2c7d11a8095bc06d72482617904e5ca2f4f08..e192a293ba7553156de07fa116eea54e80400f8a 100644
--- a/Code/MultiScale/otbMorphologicalPyramidSynthesisFilter.h
+++ b/Code/MultiScale/otbMorphologicalPyramidSynthesisFilter.h
@@ -123,7 +123,7 @@ protected:
   /** Constructor */
   MorphologicalPyramidSynthesisFilter();
   /** Destructor */
-  ~MorphologicalPyramidSynthesisFilter();
+  virtual ~MorphologicalPyramidSynthesisFilter();
   virtual void GenerateOutputInformation() {}; // does nothing
   /** Main computation method */
   virtual void GenerateData();
diff --git a/Code/MultiScale/otbMultiScaleConvexOrConcaveClassificationFilter.h b/Code/MultiScale/otbMultiScaleConvexOrConcaveClassificationFilter.h
index d62b2048afffec66aed00899405cc8dc5ba76437..ad77ca2d818dcedf77bac748edc01018760c4773 100644
--- a/Code/MultiScale/otbMultiScaleConvexOrConcaveClassificationFilter.h
+++ b/Code/MultiScale/otbMultiScaleConvexOrConcaveClassificationFilter.h
@@ -68,7 +68,7 @@ public:
   /**
    * Destructor
    */
-  ~MultiScaleConvexOrConcaveDecisionRule() {};
+  virtual ~MultiScaleConvexOrConcaveDecisionRule() {};
   /**
    * Label the pixel to convex, concave or flat
    * \return The label of the pixel
diff --git a/Code/Projections/otbCompositeTransform.h b/Code/Projections/otbCompositeTransform.h
index 601786b2606431f7c93b18420e3f56ea745be93f..b185058cf4b3d169ab8fcf4b270bb80b5c0d31c2 100644
--- a/Code/Projections/otbCompositeTransform.h
+++ b/Code/Projections/otbCompositeTransform.h
@@ -127,7 +127,7 @@ public :
 
 protected:
   CompositeTransform();
-  ~CompositeTransform();
+  virtual ~CompositeTransform();
 
   FirstTransformPointerType  m_FirstTransform;
   SecondTransformPointerType m_SecondTransform;
diff --git a/Code/Projections/otbCoordinateToName.h b/Code/Projections/otbCoordinateToName.h
index 84592d1b8041dd71ce3b41cea904af7f6d5e8e3b..451594d8d12f367b0cc7685e2a7f2128972e266f 100644
--- a/Code/Projections/otbCoordinateToName.h
+++ b/Code/Projections/otbCoordinateToName.h
@@ -59,7 +59,7 @@ public:
 
 protected:
   CoordinateToName();
-  ~CoordinateToName() {};
+  virtual ~CoordinateToName() {};
   void PrintSelf(std::ostream& os, itk::Indent indent) const;
   void RetrieveXML(std::ostringstream& urlStream);
   void ParseXMLGeonames();
diff --git a/Code/Projections/otbForwardSensorModel.txx b/Code/Projections/otbForwardSensorModel.txx
index c1102e42c0f4f7d3b6470dfb88a06bbf6115ea06..31c2113888a09abc85ddf87470d7359c72032f3c 100644
--- a/Code/Projections/otbForwardSensorModel.txx
+++ b/Code/Projections/otbForwardSensorModel.txx
@@ -109,7 +109,7 @@ ForwardSensorModel< TScalarType, NInputDimensions, NOutputDimensions>
     this->m_Model->lineSampleHeightToWorld(ossimPoint, point[2], ossimGPoint);
   }
   //Use of average elevation
-  else if (this->m_AverageElevation != -10000)
+  else if (this->m_AverageElevation != -32768.0)
   {
     this->m_Model->lineSampleHeightToWorld(ossimPoint, this->m_AverageElevation, ossimGPoint);
   }
diff --git a/Code/Projections/otbGenericRSTransform.h b/Code/Projections/otbGenericRSTransform.h
index e3f352837b391c717800b7bb855436d264c5c4ca..85f47ce8b13aae858f2d3dcae977d6383f103cae 100644
--- a/Code/Projections/otbGenericRSTransform.h
+++ b/Code/Projections/otbGenericRSTransform.h
@@ -96,6 +96,9 @@ namespace otb
       itkSetStringMacro(DEMDirectory);
       itkGetStringMacro(DEMDirectory);
 
+      itkSetMacro(AverageElevation, double);
+      itkGetMacro(AverageElevation, double);
+
       /** Set/Get Dictionary*/
       const itk::MetaDataDictionary& GetInputDictionary() const
       {
@@ -207,6 +210,7 @@ namespace otb
       std::string m_InputProjectionRef;
       std::string m_OutputProjectionRef;
       std::string m_DEMDirectory;
+      double m_AverageElevation;
 
       SpacingType         m_InputSpacing;
       OriginType          m_InputOrigin;
diff --git a/Code/Projections/otbGenericRSTransform.txx b/Code/Projections/otbGenericRSTransform.txx
index 7ec3532d15ff564bb4e96d635a835d76d34a3e37..f77749f6d23104513e6542421efeebd602c4cac7 100644
--- a/Code/Projections/otbGenericRSTransform.txx
+++ b/Code/Projections/otbGenericRSTransform.txx
@@ -32,7 +32,7 @@ namespace otb
 
 template<class TScalarType, unsigned int NInputDimensions, unsigned int NOutputDimensions>
 GenericRSTransform<TScalarType, NInputDimensions, NOutputDimensions>
-::GenericRSTransform() : Superclass(SpaceDimension,ParametersDimension)
+::GenericRSTransform() : Superclass(SpaceDimension,ParametersDimension), m_DEMDirectory(""),  m_AverageElevation(-32768.0)
 {
   m_InputProjectionRef.clear();
   m_OutputProjectionRef.clear();
@@ -110,25 +110,29 @@ GenericRSTransform<TScalarType, NInputDimensions, NOutputDimensions>
   //Set the input transformation
   //*****************************
   try
-    {
+  {
     if (m_InputKeywordList.GetSize()  > 0)
-      {
+    {
       typedef otb::ForwardSensorModel<double, InputSpaceDimension, InputSpaceDimension> ForwardSensorModelType;
       typename ForwardSensorModelType::Pointer sensorModel = ForwardSensorModelType::New();
       sensorModel->SetImageGeometry(m_InputKeywordList);
       if ( !m_DEMDirectory.empty())
-        {
+      {
         sensorModel->SetDEMDirectory(m_DEMDirectory);
-        }
+      }
+      else if (m_AverageElevation != -32768.0)
+      {
+        sensorModel->SetAverageElevation(m_AverageElevation);
+      }
       m_InputTransform = sensorModel.GetPointer();
       inputTransformIsSensor = true;
       otbMsgDevMacro(<< "Input projection set to sensor model.");
-      }
     }
+  }
   catch(itk::ExceptionObject &)
-    {
+  {
     otbMsgDevMacro(<<" Input keyword list does not describe a sensor model.");
-    }
+  }
 
 
   if ((m_InputTransform.IsNull()) && ( !m_InputProjectionRef.empty() ))//map projection
@@ -177,25 +181,29 @@ GenericRSTransform<TScalarType, NInputDimensions, NOutputDimensions>
   //Set the output transformation
   //*****************************
   try
-    {
+  {
     if (m_OutputKeywordList.GetSize()  > 0)
-      {
+    {
       typedef otb::InverseSensorModel<double, InputSpaceDimension, OutputSpaceDimension> InverseSensorModelType;
       typename InverseSensorModelType::Pointer sensorModel = InverseSensorModelType::New();
       sensorModel->SetImageGeometry(m_OutputKeywordList);
       if ( !m_DEMDirectory.empty())
-        {
+      {
         sensorModel->SetDEMDirectory(m_DEMDirectory);
-        }
+      }
+      else if (m_AverageElevation != -32768.0)
+      {
+        sensorModel->SetAverageElevation(m_AverageElevation);
+      }
       m_OutputTransform = sensorModel.GetPointer();
       outputTransformIsSensor = true;
       otbMsgDevMacro(<< "Output projection set to sensor model");
-      }
     }
+  }
   catch(itk::ExceptionObject &)
-    {
+  {
     otbMsgDevMacro(<<" Output keyword list does not describe a sensor model.");
-    }
+  }
 
 
   if ((m_OutputTransform.IsNull()) && ( !m_OutputProjectionRef.empty() ))//map projection
@@ -239,7 +247,6 @@ GenericRSTransform<TScalarType, NInputDimensions, NOutputDimensions>
   }
   else
   {
-
     m_TransformAccuracy = Projection::PRECISE;
   }
 
diff --git a/Code/Projections/otbInverseSensorModel.txx b/Code/Projections/otbInverseSensorModel.txx
index 6dbcaf21461ec075b670fee5ef434b78085181b0..43bf9ce92874c24c84da6bb0908fb1c4f20d8393 100644
--- a/Code/Projections/otbInverseSensorModel.txx
+++ b/Code/Projections/otbInverseSensorModel.txx
@@ -65,7 +65,7 @@ InverseSensorModel< TScalarType, NInputDimensions, NOutputDimensions>
   {
     ossimGPoint.height(point[2]);
   }
-  else if (this->m_AverageElevation != -10000)
+  else if (this->m_AverageElevation != -32768.0)
   {
     ossimGPoint.height(this->m_AverageElevation);
   }
diff --git a/Code/Projections/otbOrthoRectificationFilter.h b/Code/Projections/otbOrthoRectificationFilter.h
index 68740e0167ce739e1cdd29a20188a665dfa97b7a..0faa79b4de454df70a9a269fb58209ee593a8a4e 100644
--- a/Code/Projections/otbOrthoRectificationFilter.h
+++ b/Code/Projections/otbOrthoRectificationFilter.h
@@ -127,7 +127,7 @@ public :
 
 protected:
   OrthoRectificationFilter();
-  ~OrthoRectificationFilter();
+  virtual ~OrthoRectificationFilter();
   void PrintSelf(std::ostream& os, itk::Indent indent) const;
 
   virtual void GenerateInputRequestedRegion();
diff --git a/Code/Projections/otbPlaceNameToLonLat.h b/Code/Projections/otbPlaceNameToLonLat.h
index 866498b641ffcddba3dcc0ce221271320a4c1604..5dc5b8bddaaedb04b8108d40672945903243ec2c 100644
--- a/Code/Projections/otbPlaceNameToLonLat.h
+++ b/Code/Projections/otbPlaceNameToLonLat.h
@@ -61,7 +61,7 @@ public:
 
 protected:
   PlaceNameToLonLat();
-  ~PlaceNameToLonLat() {};
+  virtual ~PlaceNameToLonLat() {};
   void PrintSelf(std::ostream& os, itk::Indent indent) const;
   void RetrieveXML(std::ostringstream& urlStream);
   void ParseXMLYahoo();
diff --git a/Code/Projections/otbSensorModelBase.txx b/Code/Projections/otbSensorModelBase.txx
index 03fccd16992052396426186bc9c115edca67474b..a6460def06c26c185b7521b7cc9717b5fbef3fd0 100644
--- a/Code/Projections/otbSensorModelBase.txx
+++ b/Code/Projections/otbSensorModelBase.txx
@@ -43,7 +43,7 @@ SensorModelBase< TScalarType,NInputDimensions,NOutputDimensions>
   m_DEMHandler = DEMHandlerType::New();
   m_UseDEM = false;
   m_DEMIsLoaded = false;
-  m_AverageElevation = -10000;
+  m_AverageElevation = -32768.0;
 
 }
 
diff --git a/Code/Projections/otbVectorDataProjectionFilter.h b/Code/Projections/otbVectorDataProjectionFilter.h
index 1ae4d789ba36da45a8600e8b5c8975f14f6f8d58..80d6cce2ba23ebf142bc9da0335bd9850b065b49 100644
--- a/Code/Projections/otbVectorDataProjectionFilter.h
+++ b/Code/Projections/otbVectorDataProjectionFilter.h
@@ -131,6 +131,9 @@ public:
   itkSetStringMacro(DEMDirectory);
   itkGetStringMacro(DEMDirectory);
 
+  itkSetMacro(AverageElevation, double);
+  itkGetMacro(AverageElevation, double);
+
 
   itkGetMacro(InputKeywordList,ImageKeywordlist);
   void SetInputKeywordList(ImageKeywordlist kwl)
@@ -209,7 +212,9 @@ private:
   std::string m_OutputProjectionRef;
   ImageKeywordlist m_InputKeywordList;
   ImageKeywordlist m_OutputKeywordList;
+
   std::string m_DEMDirectory;
+  double m_AverageElevation;
 
   SpacingType         m_InputSpacing;
   OriginType          m_InputOrigin;
diff --git a/Code/Projections/otbVectorDataProjectionFilter.txx b/Code/Projections/otbVectorDataProjectionFilter.txx
index 3820e7ac6db07c6247d4aef27467b94ec5fd3739..800f3d586052935b081ca6cfc4e654eb3c3b59f8 100644
--- a/Code/Projections/otbVectorDataProjectionFilter.txx
+++ b/Code/Projections/otbVectorDataProjectionFilter.txx
@@ -37,7 +37,7 @@ namespace otb
  */
 template <class TInputVectorData, class TOutputVectorData >
 VectorDataProjectionFilter<TInputVectorData,TOutputVectorData>
-::VectorDataProjectionFilter()
+::VectorDataProjectionFilter(): m_DEMDirectory(""), m_AverageElevation(-32768.0)
 {
   m_InputProjectionRef.clear();
   m_OutputProjectionRef.clear();
@@ -321,6 +321,7 @@ VectorDataProjectionFilter<TInputVectorData,TOutputVectorData>
   m_Transform->SetInputKeywordList(m_InputKeywordList);
   m_Transform->SetOutputKeywordList(m_OutputKeywordList);
   m_Transform->SetDEMDirectory(m_DEMDirectory);
+  m_Transform->SetAverageElevation(m_AverageElevation);
   m_Transform->SetInputSpacing(m_InputSpacing);
   m_Transform->SetInputOrigin(m_InputOrigin);
   m_Transform->SetOutputSpacing(m_OutputSpacing);
diff --git a/Code/Radiometry/otbAeronetFileReader.cxx b/Code/Radiometry/otbAeronetFileReader.cxx
index 1003c36fb092d08bb6d5047c25a1f520eb0c35a6..849abf7388fbfd5f7d391824b1268876f1649d31 100755
--- a/Code/Radiometry/otbAeronetFileReader.cxx
+++ b/Code/Radiometry/otbAeronetFileReader.cxx
@@ -150,7 +150,7 @@ AeronetFileReader
   ossimLocalTm current_date = ParseDate(line[col_date], line[col_time]);
   double dcurrent_date = current_date.getJulian();
   // Check hour +/- epsilon
-  if(vcl_fabs(dcurrent_date-ref_date) < epsilon)
+  if(vcl_abs(dcurrent_date-ref_date) < epsilon)
   {
     double dwater = atof(line[col_vapor].c_str());
     double dangst = atof(line[col_angst].c_str());
diff --git a/Code/Radiometry/otbAeronetFileReader.h b/Code/Radiometry/otbAeronetFileReader.h
index 19fe58737b75ff4d822084a19cd476a991e645c3..74ef1227a394d17a81c78e75b7950729575b8f99 100755
--- a/Code/Radiometry/otbAeronetFileReader.h
+++ b/Code/Radiometry/otbAeronetFileReader.h
@@ -119,7 +119,7 @@ protected:
   /** Constructor */
   AeronetFileReader();
   /** Destructor */
-  ~AeronetFileReader();
+  virtual ~AeronetFileReader();
   /** Main computation method */
   virtual void GenerateData();
 
diff --git a/Code/Radiometry/otbAtmosphericCorrectionParameters.cxx b/Code/Radiometry/otbAtmosphericCorrectionParameters.cxx
index e99d56c0c3c35af0e168f181271670796d1e5d2c..fbecbb50ac3a08f8b8c8eadbd0b0f0a12b3c529b 100644
--- a/Code/Radiometry/otbAtmosphericCorrectionParameters.cxx
+++ b/Code/Radiometry/otbAtmosphericCorrectionParameters.cxx
@@ -19,8 +19,9 @@ PURPOSE.  See the above copyright notices for more information.
 #include "otbAtmosphericCorrectionParameters.h"
 
 #include "otbAeronetFileReader.h"
+#include "base/ossimFilename.h"
 #include <fstream>
-#include <iostream>
+
 
 
 
@@ -33,7 +34,6 @@ FilterFunctionValues
   m_MinSpectralValue = 0;
   m_MaxSpectralValue = 0;
   m_UserStep = 0.0025;
-  m_FilterFunctionValues.clear();
 }
 
 /**PrintSelf method */
@@ -41,16 +41,15 @@ void
 FilterFunctionValues
 ::PrintSelf(std::ostream& os, itk::Indent indent) const
 {
-  Superclass::PrintSelf(os,indent);
-  os << indent << "Minimum spectral value: " << m_MinSpectralValue << std::endl;
-  os << indent << "Maximum spectral value: " << m_MaxSpectralValue << std::endl;
-  os << indent << "User Step between each wavelenght spectral band values: " << m_UserStep << std::endl;
-  os << indent << "Filter function Vector Values: " << std::endl;
+  os << indent << "Minimum spectral value       : " << m_MinSpectralValue << std::endl;
+  os << indent << "Maximum spectral value       : " << m_MaxSpectralValue << std::endl;
+  os << indent << "Wavelenght spectral band step: " << m_UserStep << std::endl;
+  os << indent << "Filter function values: " << std::endl;
   for (unsigned int i=0; i<m_FilterFunctionValues.size(); ++i)
   {
     os << indent << m_FilterFunctionValues[i] <<std::endl;
   }
-  os << indent << "Filter function Vector Values 6S: " << std::endl;
+  os << indent << "6S Filter function values: " << std::endl;
   for (unsigned int i=0; i<m_FilterFunctionValues6S.size(); ++i)
   {
     os << indent << m_FilterFunctionValues6S[i] <<std::endl;
@@ -77,42 +76,86 @@ AtmosphericCorrectionParameters
   m_OzoneAmount          = 0.28;
   m_AerosolModel         = CONTINENTAL;
   m_AerosolOptical       = 0.2;
+  m_WavelenghtSpectralBand.clear();
 }
 
 /** Get data from aeronet file*/
 void
 AtmosphericCorrectionParameters
 ::UpdateAeronetData( std::string file, int year, int month, int day, int hour, int minute, double epsi )
-{ 
-	if(file == "")
-	  itkExceptionMacro(<<"No Aeronet filename specified.");
-		
-    AeronetFileReader::Pointer reader = AeronetFileReader::New();
-    reader->SetFileName(file);
-    reader->SetDay(day);
-    reader->SetMonth(month);
-    reader->SetYear(year);
-    reader->SetHour(hour);
-    reader->SetMinute(minute);
-    reader->SetEpsilon(epsi);
-    std::cout<<day<<std::endl;
-    std::cout<<month<<std::endl;
-    std::cout<<year<<std::endl;
-    std::cout<<hour<<std::endl;
-    std::cout<<minute<<std::endl;
-    std::cout<<epsi<<std::endl;
-
-    std::cout<<reader->GetDay()<<std::endl;
-    std::cout<<reader->GetMonth()<<std::endl;
-    std::cout<<reader->GetYear()<<std::endl;
-    std::cout<<reader->GetHour()<<std::endl;
-    std::cout<<reader->GetMinute()<<std::endl;
-    std::cout<<reader->GetEpsilon()<<std::endl;
-                    
-    reader->Update();
-    
-    m_AerosolOptical = reader->GetOutput()->GetAerosolOpticalThickness();
-    m_WaterVaporAmount = reader->GetOutput()->GetWater();
+{
+  if(file == "")
+    itkExceptionMacro(<<"No Aeronet filename specified.");
+  
+  AeronetFileReader::Pointer reader = AeronetFileReader::New();
+  reader->SetFileName(file);
+  reader->SetDay(day);
+  reader->SetMonth(month);
+  reader->SetYear(year);
+  reader->SetHour(hour);
+  reader->SetMinute(minute);
+  reader->SetEpsilon(epsi);
+  
+  reader->Update();
+  
+  m_AerosolOptical = reader->GetOutput()->GetAerosolOpticalThickness();
+  m_WaterVaporAmount = reader->GetOutput()->GetWater();
+}
+
+
+/** Get data from filter function file*/
+void
+AtmosphericCorrectionParameters
+::LoadFilterFunctionValue( std::string filename )
+{
+  m_WavelenghtSpectralBand.clear();
+  FilterFunctionValues::Pointer ffv = FilterFunctionValues::New();
+
+  ossimFilename fname(filename);
+  if(!fname.exists())
+    itkExceptionMacro("Filename "<<filename<<" doesn not exist.");
+
+  std::ifstream file( filename.c_str() );
+
+  if ( !file )
+    itkExceptionMacro("Enable to read "<<filename<<" file.");
+
+  int bandId = 0;
+  std::string line;
+  ossimString separatorList = " ";
+
+  FilterFunctionValues::Pointer function = FilterFunctionValues::New();
+  FilterFunctionValues::ValuesVectorType vect;
+  m_WavelenghtSpectralBand.clear();
+  vect.clear();
+  
+  while ( std::getline( file, line ) )
+  {
+  	ossimString osLine(line);
+    std::vector<ossimString> keywordStrings = osLine.split(separatorList);
+
+    if(keywordStrings.size() == 2 || keywordStrings.size() == 3)
+    {
+      if(bandId != 0)
+      {
+ 	  	function->SetFilterFunctionValues(vect);
+ 	    m_WavelenghtSpectralBand.push_back(function);
+ 	  	function = FilterFunctionValues::New();
+ 	    vect.clear();
+ 	  }
+ 	  bandId++;
+ 	  function->SetMinSpectralValue(keywordStrings[0].toDouble());
+ 	  function->SetMaxSpectralValue(keywordStrings[1].toDouble());
+ 	  if(keywordStrings.size() == 3)
+	    function->SetUserStep(keywordStrings[2].toDouble());
+	}
+    else if(keywordStrings.size()==1)
+      vect.push_back(keywordStrings[0].toDouble());
+    else if(keywordStrings.size()!=0)
+	  itkExceptionMacro("File "<<filename<<" not valid.");
+    }
+  function->SetFilterFunctionValues(vect);
+  m_WavelenghtSpectralBand.push_back(function);
 }
 
 
@@ -121,26 +164,24 @@ void
 AtmosphericCorrectionParameters
 ::PrintSelf(std::ostream& os, itk::Indent indent) const
 {
-  Superclass::PrintSelf(os,indent);
-  os << indent << "Solar zenithal angle: " << m_SolarZenithalAngle << std::endl;
-  os << indent << "Solar azimutal angle: " << m_SolarAzimutalAngle << std::endl;
-  os << indent << "Viewing zenithal angle: " << m_ViewingZenithalAngle << std::endl;
-  os << indent << "Viewing azimutal angle: " << m_ViewingAzimutalAngle << std::endl;
-  os << indent << "Month: " << m_Month << std::endl;
-  os << indent << "Day: " << m_Day << std::endl;
-  os << indent << "Atmospheric pressure: " << m_AtmosphericPressure << std::endl;
-  os << indent << "Water vapor amount: " << m_WaterVaporAmount << std::endl;
-  os << indent << "Ozone amount: " << m_OzoneAmount << std::endl;
-  os << indent << "Aerosol model: " << m_AerosolModel << std::endl;
-  os << indent << "Aerosol optical : " << m_AerosolOptical << std::endl;
+  os << "Solar zenithal angle  : " << m_SolarZenithalAngle << std::endl;
+  os << "Solar azimutal angle  : " << m_SolarAzimutalAngle << std::endl;
+  os << "Viewing zenithal angle: " << m_ViewingZenithalAngle << std::endl;
+  os << "Viewing azimutal angle: " << m_ViewingAzimutalAngle << std::endl;
+  os << "Month                 : " << m_Month << std::endl;
+  os << "Day                   : " << m_Day << std::endl;
+  os << "Atmospheric pressure  : " << m_AtmosphericPressure << std::endl;
+  os << "Water vapor amount    : " << m_WaterVaporAmount << std::endl;
+  os << "Ozone amount          : " << m_OzoneAmount << std::endl;
+  os << "Aerosol model         : " << m_AerosolModel << std::endl;
+  os << "Aerosol optical       : " << m_AerosolOptical << std::endl;
 
   // Function values print :
-  os << indent << "Filter function Values: " << std::endl;
+  os << "Filter function values: " << std::endl;
   for (unsigned int i=0; i<m_WavelenghtSpectralBand.size(); ++i)
   {
-    os << indent << "Channel : "<< i+1 <<" : " << std::endl;
+    os << indent << "Channel "<< i+1 <<" : " << std::endl;
     os << indent << m_WavelenghtSpectralBand[i]<< std::endl;
   }
 }
 } // end namespace otb
-
diff --git a/Code/Radiometry/otbAtmosphericCorrectionParameters.h b/Code/Radiometry/otbAtmosphericCorrectionParameters.h
index 353bbe6cc4a77597861fa0b2bb9411a24976e5c5..c0f5b578867d1a385ee6d19a568b9958d2c8228a 100644
--- a/Code/Radiometry/otbAtmosphericCorrectionParameters.h
+++ b/Code/Radiometry/otbAtmosphericCorrectionParameters.h
@@ -51,8 +51,8 @@ public:
   /** Creation through object factory macro */
   itkNewMacro(Self);
 
-  typedef double WavelenghtSpectralBandType;
-  typedef std::vector<WavelenghtSpectralBandType>    ValuesVectorType;
+  typedef double                                  WavelenghtSpectralBandType;
+  typedef std::vector<WavelenghtSpectralBandType> ValuesVectorType;
 
   /** Set vector that contains the filter function value. */
   void SetFilterFunctionValues(const ValuesVectorType & vect)
@@ -147,8 +147,7 @@ public:
   itkNewMacro(Self);
 
   typedef enum {NO_AEROSOL=0,CONTINENTAL=1,MARITIME=2,URBAN=3,DESERTIC=5} AerosolModelType;
-  typedef std::vector<FilterFunctionValues::Pointer>                               WavelenghtSpectralBandVectorType;
-  //typedef itk::VariableSizeMatrix<WavelenghtSpectralBandType>    WavelenghtSpectralBandMatrixType;
+  typedef std::vector<FilterFunctionValues::Pointer>                      WavelenghtSpectralBandVectorType;
 
   /**
    * Set/Get the solar zenithal angle.
@@ -257,7 +256,12 @@ public:
   	this->UpdateAeronetData( file, year, m_Month, m_Day, hour, minute, 0.4 );
   };
     
-  
+  /** Read a file that contains filter function values.
+   *  Format is MinSpectralValue MaxSpectralValue UserStep and then the list of coefficients for each band.
+   *  NB : if no UserStep writen, the default value will be 0,0025µm
+   */
+   void LoadFilterFunctionValue( std::string filename );
+     
   /** Constructor */
   AtmosphericCorrectionParameters();
   /** Destructor */
diff --git a/Code/Radiometry/otbAtmosphericRadiativeTerms.cxx b/Code/Radiometry/otbAtmosphericRadiativeTerms.cxx
index 9f615440d749dee14e6052ced9f87b7060e61ebe..999a9a0e63ce3c954b28cb0749aac5455bd10fe3 100644
--- a/Code/Radiometry/otbAtmosphericRadiativeTerms.cxx
+++ b/Code/Radiometry/otbAtmosphericRadiativeTerms.cxx
@@ -27,15 +27,15 @@ AtmosphericRadiativeTermsSingleChannel
 ::PrintSelf(std::ostream& os, itk::Indent indent) const
 {
   Superclass::PrintSelf(os,indent);
-  os << indent << "Intrinsic Atmospheric Reflectance: " << m_IntrinsicAtmosphericReflectance << std::endl;
-  os << indent << "Shperical Albedo of the Atmosphere: " << m_SphericalAlbedo << std::endl;
-  os << indent << "Total Gaseous Transmission: " << m_TotalGaseousTransmission << std::endl;
-  os << indent << "Downward Transmittance of the Atmospher: " << m_DownwardTransmittance << std::endl;
-  os << indent << "Upward Transmittance of the Atmospher: " << m_UpwardTransmittance << std::endl;
-  os << indent << "Upward diffuse transmittance: " << m_UpwardDiffuseTransmittance << std::endl;
-  os << indent << "Upward direct transmittance: " << m_UpwardDirectTransmittance << std::endl;
-  os << indent << "Upward diffuse transmittance for rayleigh: " << m_UpwardDiffuseTransmittanceForRayleigh << std::endl;
-  os << indent << "Upward diffuse transmittance for aerosols: " << m_UpwardDiffuseTransmittanceForAerosol << std::endl;
+  os << indent << "Intrinsic Atmospheric Reflectance        : " << m_IntrinsicAtmosphericReflectance << std::endl;
+  os << indent << "Atmospher Shperical Albedo               : " << m_SphericalAlbedo << std::endl;
+  os << indent << "Total Gaseous Transmission               : " << m_TotalGaseousTransmission << std::endl;
+  os << indent << "Atmospher Downward Transmittance         : " << m_DownwardTransmittance << std::endl;
+  os << indent << "Atmospher Upward Transmittance           : " << m_UpwardTransmittance << std::endl;
+  os << indent << "Upward Diffuse Transmittance             : " << m_UpwardDiffuseTransmittance << std::endl;
+  os << indent << "Upward Direct Transmittance              : " << m_UpwardDirectTransmittance << std::endl;
+  os << indent << "Upward Diffuse Transmittance for Rayleigh: " << m_UpwardDiffuseTransmittanceForRayleigh << std::endl;
+  os << indent << "Upward Diffuse Transmittance for aerosols: " << m_UpwardDiffuseTransmittanceForAerosol << std::endl;
 }
 
 
@@ -503,7 +503,7 @@ AtmosphericRadiativeTerms
 {
   for (unsigned int i=0; i<m_Values.size(); ++i)
   {
-    os << indent << "Channel "<< i << " : "<< std::endl;
+    os << "Channel "<< i << " : "<< std::endl;
     //ValueType::(os,indent);
     os << indent << "Intrinsic Atmospheric Reflectance        : " << m_Values[i]->GetIntrinsicAtmosphericReflectance() << std::endl;
     os << indent << "Shperical Albedo of the Atmosphere       : " << m_Values[i]->GetSphericalAlbedo() << std::endl;
diff --git a/Code/Radiometry/otbAtmosphericRadiativeTerms.h b/Code/Radiometry/otbAtmosphericRadiativeTerms.h
index 79e2a10a430d2946e02f150bc7f01c29b5924d03..7b916da0c601dafd8c0240ac6cc0a52e15d166b2 100644
--- a/Code/Radiometry/otbAtmosphericRadiativeTerms.h
+++ b/Code/Radiometry/otbAtmosphericRadiativeTerms.h
@@ -144,7 +144,6 @@ private:
 
   /** The upward diffuse transmittance for aerosols. */
   double m_UpwardDiffuseTransmittanceForAerosol;
-
 };
 
 
diff --git a/Code/Radiometry/otbBuiltUpIndicesFunctor.h b/Code/Radiometry/otbBuiltUpIndicesFunctor.h
index b5036042e5a9e6d543baa6eede6fc5b44ab32dea..ea39f95a36206293e0885266cb421717d7582d16 100644
--- a/Code/Radiometry/otbBuiltUpIndicesFunctor.h
+++ b/Code/Radiometry/otbBuiltUpIndicesFunctor.h
@@ -111,7 +111,7 @@ public:
   /// Constructor
   NDBI() {};
   /// Desctructor
-  ~NDBI() {};
+  virtual ~NDBI() {};
   // Operator on r and nir single pixel values
 protected:
   inline TOutput Evaluate(const TInput1 &pTM4, const TInput2 &pTM5) const
@@ -142,7 +142,7 @@ public:
   /// Constructor
   ISU() : m_A(100.), m_B(25.) {};
   /// Desctructor
-  ~ISU() {};
+  virtual ~ISU() {};
 
   /** Set/Get A correction */
   void SetA(const double pA)
diff --git a/Code/Radiometry/otbImageToLuminanceImageFilter.h b/Code/Radiometry/otbImageToLuminanceImageFilter.h
index a5a05338f084022a32591bce003a1271876b3bfa..3bfa54e7428b349e6617306138e8244d8663499c 100644
--- a/Code/Radiometry/otbImageToLuminanceImageFilter.h
+++ b/Code/Radiometry/otbImageToLuminanceImageFilter.h
@@ -56,7 +56,7 @@ public:
     m_Beta(0.)
   {};
 
-  ~ImageToLuminanceImageFunctor() {};
+  virtual ~ImageToLuminanceImageFunctor() {};
 
   void SetAlpha(double alpha)
   {
diff --git a/Code/Radiometry/otbImageToReflectanceImageFilter.h b/Code/Radiometry/otbImageToReflectanceImageFilter.h
index 9e60fe0b2dcec219a45e5532c6263b0cad6c5e6c..0c8959f82c301f0f09d6a93a603612dcb1bd5aef 100644
--- a/Code/Radiometry/otbImageToReflectanceImageFilter.h
+++ b/Code/Radiometry/otbImageToReflectanceImageFilter.h
@@ -50,7 +50,7 @@ class ImageToReflectanceImageFunctor
 {
 public:
   ImageToReflectanceImageFunctor() {};
-  ~ImageToReflectanceImageFunctor() {};
+  virtual ~ImageToReflectanceImageFunctor() {};
 
   typedef Functor::ImageToLuminanceImageFunctor<TInput, TOutput>        ImToLumFunctorType;
   typedef Functor::LuminanceToReflectanceImageFunctor<TInput, TOutput>  LumToReflecFunctorType;
diff --git a/Code/Radiometry/otbLuminanceToReflectanceImageFilter.h b/Code/Radiometry/otbLuminanceToReflectanceImageFilter.h
index fc2a00d2cf9b7d18122593c517d461cab4ae3c0d..2834efe7b4459992064d479e93936b35e309554d 100644
--- a/Code/Radiometry/otbLuminanceToReflectanceImageFilter.h
+++ b/Code/Radiometry/otbLuminanceToReflectanceImageFilter.h
@@ -59,7 +59,7 @@ public:
     m_IlluminationCorrectionCoefficient(1.0)
   {};
 
-  ~LuminanceToReflectanceImageFunctor() {};
+  virtual ~LuminanceToReflectanceImageFunctor() {};
 
   void SetSolarIllumination(double solarIllumination)
   {
diff --git a/Code/Radiometry/otbReflectanceToSurfaceReflectanceImageFilter.h b/Code/Radiometry/otbReflectanceToSurfaceReflectanceImageFilter.h
index 8111427e48ad6d231c6e872443d1b723a2a73d67..f6876b0f2c7dbd56d1762f0d4b4ff322603f7978 100644
--- a/Code/Radiometry/otbReflectanceToSurfaceReflectanceImageFilter.h
+++ b/Code/Radiometry/otbReflectanceToSurfaceReflectanceImageFilter.h
@@ -50,7 +50,7 @@ public:
     m_Residu = 1.;
     m_SphericalAlbedo = 1.;
   };
-  ~ReflectanceToSurfaceReflectanceImageFunctor() {};
+  virtual ~ReflectanceToSurfaceReflectanceImageFunctor() {};
 
   /**
    * Set/Get the spherical albedo of the atmosphere.
@@ -156,7 +156,8 @@ public:
   typedef AtmosphericCorrectionParametersTo6SAtmosphericRadiativeTerms  Parameters2RadiativeTermsType;
   typedef Parameters2RadiativeTermsType::Pointer                        Parameters2RadiativeTermsPointerType;
   typedef AtmosphericCorrectionParameters::Pointer                      CorrectionParametersPointerType;
-  typedef AtmosphericRadiativeTerms::Pointer                            AtmosphericRadiativeTermsPointerType;
+   typedef AtmosphericRadiativeTerms::Pointer                            AtmosphericRadiativeTermsPointerType;
+
 
   typedef FilterFunctionValues                                          FilterFunctionValuesType;
   typedef FilterFunctionValuesType::ValuesVectorType                    CoefVectorType;
@@ -174,7 +175,7 @@ public:
   }
 
   /** Get/Set Atmospheric Correction Parameters. */
-  itkGetConstObjectMacro(AtmosphericRadiativeTerms, AtmosphericRadiativeTerms);
+  itkGetObjectMacro(AtmosphericRadiativeTerms, AtmosphericRadiativeTerms);
   itkGetObjectMacro(CorrectionParameters, AtmosphericCorrectionParameters);
 
   /** Get/Set Aeronet file name. */
@@ -196,21 +197,29 @@ public:
   	return m_FilterFunctionCoef;
   }
 
+  /** Compute radiative terms if necessary and then updtae functors attibuts. */
+  void GenerateParameters();
+
+  /** Set/Get UseGenerateParameters. */
+  itkSetMacro(UseGenerateParameters, bool);
+  itkGetMacro(UseGenerateParameters, bool);
+
 protected:
   /** Constructor */
   ReflectanceToSurfaceReflectanceImageFilter();
   /** Destructor */
   virtual ~ReflectanceToSurfaceReflectanceImageFilter() {};
 
-  /** If empty, fill AtmosphericRadiativeTerms using image metadata*/
-  void UpdateAtmosphericRadiativeTerms( const MetaDataDictionaryType dict );
-
   /** Read the aeronet data and extract aerosol optical and water vapor amount. */
-  void UpdateAeronetData( const MetaDataDictionaryType dict );
+  //void UpdateAeronetData( const MetaDataDictionaryType dict );
 
   /** Initialize the functor vector */
-  void BeforeThreadedGenerateData();
- 
+  void GenerateOutputInformation();
+
+  /** Fill AtmosphericRadiativeTerms using image metadata*/
+  void UpdateAtmosphericRadiativeTerms();
+  /** Update Functors parameters */
+  void UpdateFunctors();
   
 private:
   AtmosphericRadiativeTermsPointerType m_AtmosphericRadiativeTerms;
@@ -222,8 +231,10 @@ private:
   std::string m_FilterFunctionValuesFileName;
   /** Contains the filter function values (each element is a vector and represnts the values for each channel) */
   FilterFunctionCoefVectorType m_FilterFunctionCoef;
-  /** BeforeThreadedGenerateData executed once or not */
-  bool m_BeforeDone;
+  /** Enable/Disable GenerateParameters in GenerateOutputInformation.
+   *  Usefull for image view that call GenerateOutputInformation each time you move the full area.
+   */
+  bool m_UseGenerateParameters;
 };
 
 } // end namespace otb
diff --git a/Code/Radiometry/otbReflectanceToSurfaceReflectanceImageFilter.txx b/Code/Radiometry/otbReflectanceToSurfaceReflectanceImageFilter.txx
index dfd308f36017fd52aa28e06c9fa58e8fbfa79324..799ea439c06f0d5faf8db363b6091a663343a1d3 100644
--- a/Code/Radiometry/otbReflectanceToSurfaceReflectanceImageFilter.txx
+++ b/Code/Radiometry/otbReflectanceToSurfaceReflectanceImageFilter.txx
@@ -21,7 +21,7 @@
 #include "otbReflectanceToSurfaceReflectanceImageFilter.h"
 #include "otbImageMetadataInterfaceFactory.h"
 #include "otbImageMetadataInterfaceBase.h"
-#include "otbAeronetFileReader.h"
+
 
 namespace otb
 {
@@ -36,117 +36,139 @@ ReflectanceToSurfaceReflectanceImageFilter<TInputImage,TOutputImage>
   m_AtmosphericRadiativeTerms = AtmosphericRadiativeTerms::New();
   m_CorrectionParameters      = AtmosphericCorrectionParameters::New();
   m_IsSetAtmosphericRadiativeTerms = false;
-  m_BeforeDone = false;
   m_AeronetFileName = "";
   m_FilterFunctionValuesFileName = "";
   m_FilterFunctionCoef.clear();
+  m_UseGenerateParameters = true;
 }
 
 
 template <class TInputImage, class TOutputImage>
 void
 ReflectanceToSurfaceReflectanceImageFilter<TInputImage,TOutputImage>
-::UpdateAtmosphericRadiativeTerms( const MetaDataDictionaryType dict )
+::UpdateAtmosphericRadiativeTerms()
 {
-	 ImageMetadataInterfaceBase::Pointer imageMetadataInterface = ImageMetadataInterfaceFactory::CreateIMI(dict);
-	 
-    if ((m_CorrectionParameters->GetDay() == 0))
+  MetaDataDictionaryType dict = this->GetInput()->GetMetaDataDictionary();
+  
+  ImageMetadataInterfaceBase::Pointer imageMetadataInterface = ImageMetadataInterfaceFactory::CreateIMI(dict);
+  
+  if ((m_CorrectionParameters->GetDay() == 0))
     {
       m_CorrectionParameters->SetDay(imageMetadataInterface->GetDay(dict));
     }
-
-    if ((m_CorrectionParameters->GetMonth() == 0))
+  
+  if ((m_CorrectionParameters->GetMonth() == 0))
     {
       m_CorrectionParameters->SetMonth(imageMetadataInterface->GetMonth(dict));
     }
-
-    if ((m_CorrectionParameters->GetSolarZenithalAngle() == 361.))
+  
+  if ((m_CorrectionParameters->GetSolarZenithalAngle() == 361.))
     {
       m_CorrectionParameters->SetSolarZenithalAngle(90. - imageMetadataInterface->GetSunElevation(dict));
     }
-    
-    if ((m_CorrectionParameters->GetSolarAzimutalAngle() == 361.))
+  
+  if ((m_CorrectionParameters->GetSolarAzimutalAngle() == 361.))
     {
       m_CorrectionParameters->SetSolarAzimutalAngle(imageMetadataInterface->GetSunAzimuth(dict));
     }
-
-    if ((m_CorrectionParameters->GetViewingZenithalAngle() == 361.))
+  
+  if ((m_CorrectionParameters->GetViewingZenithalAngle() == 361.))
     {
       m_CorrectionParameters->SetViewingZenithalAngle(90. - imageMetadataInterface->GetSatElevation(dict));
     }
-    
-    if ((m_CorrectionParameters->GetViewingAzimutalAngle() == 361.))
+  
+  if ((m_CorrectionParameters->GetViewingAzimutalAngle() == 361.))
     {
       m_CorrectionParameters->SetViewingAzimutalAngle(imageMetadataInterface->GetSatAzimuth(dict));
     }
-    
-    if(m_AeronetFileName != "")
-      m_CorrectionParameters->UpdateAeronetData( m_AeronetFileName, 
-      											 imageMetadataInterface->GetYear(dict),
-      											 imageMetadataInterface->GetHour(dict),
-      											 imageMetadataInterface->GetMinute(dict) );    
-      
-    Parameters2RadiativeTermsPointerType param2Terms = Parameters2RadiativeTermsType::New();
-    
-    if( m_FilterFunctionCoef.size() != this->GetInput()->GetNumberOfComponentsPerPixel() )
-    	itkExceptionMacro(<<"Filter Function and image channels mismatch.");
-   
-    for(unsigned int i=0; i<this->GetInput()->GetNumberOfComponentsPerPixel(); i++)
+  
+  if(m_AeronetFileName != "")
+    m_CorrectionParameters->UpdateAeronetData( m_AeronetFileName, 
+					       imageMetadataInterface->GetYear(dict),
+					       imageMetadataInterface->GetHour(dict),
+					       imageMetadataInterface->GetMinute(dict) );    
+  
+  // load fiter function values
+  if(m_FilterFunctionValuesFileName != "")
+    {
+      m_CorrectionParameters->LoadFilterFunctionValue( m_FilterFunctionValuesFileName );
+   } 
+  // the user has set the filter function values 
+  else
     {
+      if( m_FilterFunctionCoef.size() != this->GetInput()->GetNumberOfComponentsPerPixel() )
+	{
+	  itkExceptionMacro(<<"Filter Function and image channels mismatch.");
+	}
+      for(unsigned int i=0; i<this->GetInput()->GetNumberOfComponentsPerPixel(); i++)
+	{
 	  FilterFunctionValuesType::Pointer functionValues = FilterFunctionValuesType::New();
 	  functionValues->SetFilterFunctionValues(m_FilterFunctionCoef[i]);
-      functionValues->SetMinSpectralValue(imageMetadataInterface->GetFirstWavelengths(dict)[i]);
-      functionValues->SetMaxSpectralValue(imageMetadataInterface->GetLastWavelengths(dict)[i]);
-
-      m_CorrectionParameters->SetWavelenghtSpectralBandWithIndex(i, functionValues);
+	  functionValues->SetMinSpectralValue(imageMetadataInterface->GetFirstWavelengths(dict)[i]);
+	  functionValues->SetMaxSpectralValue(imageMetadataInterface->GetLastWavelengths(dict)[i]);
+	  
+	  m_CorrectionParameters->SetWavelenghtSpectralBandWithIndex(i, functionValues);
+	}
     }
-   
-    param2Terms->SetInput(m_CorrectionParameters);
-    param2Terms->Update();
-   
-    m_AtmosphericRadiativeTerms = param2Terms->GetOutput();
+  
+  
+  Parameters2RadiativeTermsPointerType param2Terms = Parameters2RadiativeTermsType::New();
+  
+  param2Terms->SetInput(m_CorrectionParameters);
+  param2Terms->Update();
+  m_AtmosphericRadiativeTerms = param2Terms->GetOutput();
 }
 
 
 template <class TInputImage, class TOutputImage>
 void
 ReflectanceToSurfaceReflectanceImageFilter<TInputImage,TOutputImage>
-::BeforeThreadedGenerateData()
+::GenerateOutputInformation()
 {
-  if(m_BeforeDone == true)
-	return;
-	
-  std::cout<<"BeforeThreadedGenerateData "<<this->GetNumberOfThreads()<<std::endl;
-  if(m_IsSetAtmosphericRadiativeTerms==false)
-    this->UpdateAtmosphericRadiativeTerms(this->GetInput()->GetMetaDataDictionary());
-  
-      std::cout<<"m_CorrectionParameters: "<<std::endl;
-    std::cout<<m_CorrectionParameters<<std::endl;
-    std::cout<<"m_AtmosphericRadiativeTerms: "<<std::endl;    
-    std::cout<<m_AtmosphericRadiativeTerms<<std::endl;
-  
+  Superclass::GenerateOutputInformation();
+  if(m_UseGenerateParameters)
+    this->GenerateParameters();
+}
+
+template <class TInputImage, class TOutputImage>
+void
+ReflectanceToSurfaceReflectanceImageFilter<TInputImage,TOutputImage>
+::UpdateFunctors()
+{  
   this->GetFunctorVector().clear();
+
   for (unsigned int i = 0;i<this->GetInput()->GetNumberOfComponentsPerPixel();++i)
-  {
-    double coef;
-    double res;
-    coef = static_cast<double>(m_AtmosphericRadiativeTerms->GetTotalGaseousTransmission(i)
+    {
+      double coef;
+      double res;
+      coef = static_cast<double>(m_AtmosphericRadiativeTerms->GetTotalGaseousTransmission(i)
                                  * m_AtmosphericRadiativeTerms->GetDownwardTransmittance(i)
                                  * m_AtmosphericRadiativeTerms->GetUpwardTransmittance(i)     );
-    coef = 1. / coef;
-    res = -m_AtmosphericRadiativeTerms->GetIntrinsicAtmosphericReflectance(i) * coef;
-
-    FunctorType functor;
-    functor.SetCoefficient(coef);
-    functor.SetResidu(res);
-    functor.SetSphericalAlbedo(static_cast<double>(m_AtmosphericRadiativeTerms->GetSphericalAlbedo(i)));
-
-    this->GetFunctorVector().push_back(functor);
-  }
-  m_BeforeDone = true;
-  std::cout<<"BeforeThreadedGenerateData FIN"<<std::endl;
+      coef = 1. / coef;
+      res = -m_AtmosphericRadiativeTerms->GetIntrinsicAtmosphericReflectance(i) * coef;
+      FunctorType functor;
+      functor.SetCoefficient(coef);
+      functor.SetResidu(res);
+      functor.SetSphericalAlbedo(static_cast<double>(m_AtmosphericRadiativeTerms->GetSphericalAlbedo(i)));
+    
+      this->GetFunctorVector().push_back(functor);
+    }
 }
+
+
+template <class TInputImage, class TOutputImage>
+void
+ReflectanceToSurfaceReflectanceImageFilter<TInputImage,TOutputImage>
+::GenerateParameters()
+{
+  if(m_IsSetAtmosphericRadiativeTerms==false)
+    {
+      this->UpdateAtmosphericRadiativeTerms();
+    }
   
+  this->UpdateFunctors();
+}
+
 }
 
 #endif
diff --git a/Code/Radiometry/otbSoilIndicesFunctor.h b/Code/Radiometry/otbSoilIndicesFunctor.h
index 1628e4ac52dc0f5ac109a631a905843d9b49033d..b65355266f75f0dec3e52a273ef12d4a07a261d6 100644
--- a/Code/Radiometry/otbSoilIndicesFunctor.h
+++ b/Code/Radiometry/otbSoilIndicesFunctor.h
@@ -185,7 +185,7 @@ public:
   /// Constructor
   IR() {};
   /// Desctructor
-  ~IR() {};
+  virtual ~IR() {};
   // Operator on r and nir single pixel values
 protected:
   inline TOutput Evaluate(const TInput1 &pGreen, const TInput2 &pRed) const
@@ -216,7 +216,7 @@ public:
   /// Constructor
   IC() {};
   /// Desctructor
-  ~IC() {};
+  virtual ~IC() {};
   // Operator on r and nir single pixel values
 protected:
   inline TOutput Evaluate(const TInput1 &pGreen, const TInput2 &pRed) const
@@ -247,7 +247,7 @@ public:
   /// Constructor
   IB() {};
   /// Desctructor
-  ~IB() {};
+  virtual ~IB() {};
   // Operator on r and nir single pixel values
 protected:
   inline TOutput Evaluate(const TInput1 &pGreen, const TInput2 &pRed) const
@@ -274,7 +274,7 @@ public:
   /// Constructor
   IB2() {};
   /// Desctructor
-  ~IB2() {};
+  virtual ~IB2() {};
   // Operator on r and nir single pixel values
 protected:
   inline TOutput Evaluate(const TInput1 &pGreen, const TInput2 &pRed, const TInput2 &pNir) const
diff --git a/Code/Radiometry/otbSurfaceAdjencyEffect6SCorrectionSchemeFilter.h b/Code/Radiometry/otbSurfaceAdjencyEffect6SCorrectionSchemeFilter.h
index abadc5188d95fe314b3c7c5c56313b32dc5ac55e..8dc7dad340413aae054f8fc1dde2e344a3248746 100644
--- a/Code/Radiometry/otbSurfaceAdjencyEffect6SCorrectionSchemeFilter.h
+++ b/Code/Radiometry/otbSurfaceAdjencyEffect6SCorrectionSchemeFilter.h
@@ -45,7 +45,7 @@ class ComputeNeighborhoodContributionFunctor
 {
 public:
   ComputeNeighborhoodContributionFunctor() {};
-  ~ComputeNeighborhoodContributionFunctor() {};
+  virtual ~ComputeNeighborhoodContributionFunctor() {};
 
   typedef itk::VariableSizeMatrix<double>             WeightingMatrixType;
   typedef typename std::vector<WeightingMatrixType>   WeightingValuesContainerType;
diff --git a/Code/Radiometry/otbVegetationIndicesFunctor.h b/Code/Radiometry/otbVegetationIndicesFunctor.h
index 8f78fd1bba4819a75377ce12191b56a5ac52f59c..953abad0074169c5e07764539d369ef711ef6c25 100644
--- a/Code/Radiometry/otbVegetationIndicesFunctor.h
+++ b/Code/Radiometry/otbVegetationIndicesFunctor.h
@@ -261,7 +261,7 @@ public:
   /// Constructor
   NDVI() {};
   /// Desctructor
-  ~NDVI() {};
+  virtual ~NDVI() {};
   // Operator on r and nir single pixel values
 protected:
   inline TOutput Evaluate(const TInput1 &r, const TInput2 &nir) const
@@ -290,7 +290,7 @@ class RVI : public RAndNIRIndexBase<TInput1, TInput2, TOutput>
 {
 public:
   RVI() {};
-  ~RVI() {};
+  virtual ~RVI() {};
 protected:
   inline TOutput Evaluate(const TInput1 &r, const TInput2 &nir) const
   {
@@ -317,7 +317,7 @@ class PVI : public RAndNIRIndexBase<TInput1, TInput2, TOutput>
 {
 public:
   PVI() {};
-  ~PVI() {};
+  virtual ~PVI() {};
   /** Set/Get A and B parameters */
   void SetA(const double A)
   {
@@ -367,7 +367,7 @@ class SAVI : public RAndNIRIndexBase<TInput1, TInput2, TOutput>
 {
 public:
   SAVI() : m_L(0.5) {};
-  ~SAVI() {};
+  virtual ~SAVI() {};
 
   /** Set/Get L correction */
   void SetL(const double L)
@@ -412,7 +412,7 @@ class TSAVI : public RAndNIRIndexBase<TInput1, TInput2, TOutput>
 {
 public:
   TSAVI() : m_A(0.7), m_S(0.9), m_X(0.08) {};
-  ~TSAVI() {};
+  virtual ~TSAVI() {};
 
   /** Set/Get S and A parameters */
   void SetS(const double S)
@@ -477,7 +477,7 @@ class MSAVI2 : public RAndNIRIndexBase<TInput1, TInput2, TOutput>
 {
 public:
   MSAVI2() {};
-  ~MSAVI2() {};
+  virtual ~MSAVI2() {};
 
 protected:
   inline TOutput Evaluate(const TInput1 &r, const TInput2 &nir) const
@@ -507,7 +507,7 @@ class GEMI : public RAndNIRIndexBase<TInput1, TInput2, TOutput>
 {
 public:
   GEMI() {};
-  ~GEMI() {};
+  virtual ~GEMI() {};
 
 protected:
   inline TOutput Evaluate(const TInput1 &r, const TInput2 &nir) const
@@ -553,7 +553,7 @@ public:
   /// Constructor
   WDVI() : m_S(0.4) {};
   /// Desctructor
-  ~WDVI() {};
+  virtual ~WDVI() {};
   // Operator on r and nir single pixel values
 /** Set/Get Slop of soil line */
   void SetS( const double s)
@@ -596,7 +596,7 @@ public:
   {
 	m_WDVIfunctor.SetS(m_S);
   };
-  ~MSAVI() {};
+  virtual ~MSAVI() {};
 /** Set/Get Slop of soil line */
   void SetS( const double s)
   {
@@ -660,7 +660,7 @@ class AVI : public RAndGAndNIRIndexBase<TInput1,TInput2,TInput3,TOutput>
 {
 public:
   AVI() : m_LambdaG(560.), m_LambdaR(660.), m_LambdaNir(830.) {};
-  ~AVI() {};
+  virtual ~AVI() {};
 /** Set/Get Lambda red parameter*/
   void SetLambdaR(const double lr)
   {
@@ -747,7 +747,7 @@ class ARVI : public RAndBAndNIRIndexBase<TInput1,TInput2,TInput3,TOutput>
 {
 public:
   ARVI() : m_Gamma(0.5) {};
-  ~ARVI() {};
+  virtual ~ARVI() {};
 
   /** Set/Get Gamma parameter */
   void SetGamma(const double gamma)
@@ -793,7 +793,7 @@ class TSARVI: public RAndBAndNIRIndexBase<TInput1,TInput2,TInput3,TOutput>
 {
 public:
   TSARVI() : m_X(0.08), m_Gamma(0.5) {};
-  ~TSARVI() {};
+  virtual ~TSARVI() {};
 
   /** Set/Get A and B parameters */
   void SetA(const double A)
@@ -873,7 +873,7 @@ class EVI : public RAndBAndNIRIndexBase<TInput1,TInput2,TInput3,TOutput>
 {
 public:
   EVI() : m_G(2.5), m_C1(6.0), m_C2(7.5), m_L(1.0) {};
-  ~EVI() {};
+  virtual ~EVI() {};
 /** Set/Get G parameter */
   void SetG(const double g)
   {
@@ -952,7 +952,7 @@ class IPVI : public RAndNIRIndexBase<TInput1, TInput2, TOutput>
 {
 public:
   IPVI() {};
-  ~IPVI() {};
+  virtual ~IPVI() {};
 
 protected:
   inline TOutput Evaluate(const TInput1 &r, const TInput2 &nir) const
@@ -984,7 +984,7 @@ class TNDVI : public RAndNIRIndexBase<TInput1, TInput2, TOutput>
 public:
   typedef NDVI<TInput1, TInput2, TOutput> NDVIFunctorType;
   TNDVI() {};
-  ~TNDVI() {};
+  virtual ~TNDVI() {};
 
   NDVIFunctorType GetNDVI(void)const
   {
diff --git a/Code/Radiometry/otbWaterIndicesFunctor.h b/Code/Radiometry/otbWaterIndicesFunctor.h
index 422cb73f151cb3971e0950e106388f94c3e4a6e8..1b3828f5820c170a0e2b36749bb126cbc909295a 100644
--- a/Code/Radiometry/otbWaterIndicesFunctor.h
+++ b/Code/Radiometry/otbWaterIndicesFunctor.h
@@ -104,7 +104,7 @@ class WaterIndexFunctor : public WaterIndexBase<TInput1, TInput2, TOutput>
 {
 public:
   WaterIndexFunctor() {};
-  ~WaterIndexFunctor() {};
+  virtual ~WaterIndexFunctor() {};
 protected:
   inline TOutput Evaluate(const TInput1 &id1, const TInput2 &id2) const
   {
@@ -139,7 +139,7 @@ class SRWI : public WaterIndexBase<TInput1, TInput2, TOutput>
 {
 public:
   SRWI() {};
-  ~SRWI() {};
+  virtual ~SRWI() {};
 protected:
   inline TOutput Evaluate(const TInput1 &rho860, const TInput2 &rho1240) const
   {
@@ -174,7 +174,7 @@ public:
   /// Constructor
   NDWI() {};
   /// Desctructor
-  ~NDWI() {};
+  virtual ~NDWI() {};
   WIFunctorType GetWIFunctor(void)const
   {
     return (m_WIFunctor);
@@ -227,7 +227,7 @@ public:
   /// Constructor
   NDWI2() {};
   /// Desctructor
-  ~NDWI2() {};
+  virtual ~NDWI2() {};
   WIFunctorType GetWIFunctor(void)const
   {
     return (m_WIFunctor);
@@ -279,7 +279,7 @@ public:
   /// Constructor
   MNDWI() {};
   /// Desctructor
-  ~MNDWI() {};
+  virtual ~MNDWI() {};
   WIFunctorType GetWIFunctor(void)const
   {
     return (m_WIFunctor);
@@ -332,7 +332,7 @@ public:
   /// Constructor
   NDPI() {};
   /// Desctructor
-  ~NDPI() {};
+  virtual ~NDPI() {};
   WIFunctorType GetWIFunctor(void)const
   {
     return (m_WIFunctor);
@@ -385,7 +385,7 @@ public:
   /// Constructor
   NDTI() {};
   /// Desctructor
-  ~NDTI() {};
+  virtual ~NDTI() {};
   WIFunctorType GetWIFunctor(void)const
   {
     return (m_WIFunctor);
@@ -452,7 +452,7 @@ public:
     reference[0] = 136.0; reference[1] = 132.0; reference[2] = 47.0; reference[3] = 24.0;
     this->SetReferenceWaterPixel( reference );
   };
-  ~WaterSqrtSpectralAngleFunctor() {};
+  virtual ~WaterSqrtSpectralAngleFunctor() {};
 
   /** Set Reference Pixel */
   void SetReferenceWaterPixel(InputVectorPixelType ref)
diff --git a/Code/SpatialReasoning/otbImageMultiSegmentationToRCC8GraphFilter.h b/Code/SpatialReasoning/otbImageMultiSegmentationToRCC8GraphFilter.h
index be9dfcd427ed7425b591a576f0c55547a6cacaf6..250cf7cd14f70ddcfadb8a4e9822559c012b82ba 100644
--- a/Code/SpatialReasoning/otbImageMultiSegmentationToRCC8GraphFilter.h
+++ b/Code/SpatialReasoning/otbImageMultiSegmentationToRCC8GraphFilter.h
@@ -79,7 +79,7 @@ protected:
   /** Constructor */
   ImageMultiSegmentationToRCC8GraphFilter();
   /** Destructor */
-  ~ImageMultiSegmentationToRCC8GraphFilter();
+  virtual ~ImageMultiSegmentationToRCC8GraphFilter();
   /** Main computation method */
   virtual void GenerateData();
   /** PrintSelf method */
diff --git a/Code/SpatialReasoning/otbPolygonListToRCC8GraphFilter.h b/Code/SpatialReasoning/otbPolygonListToRCC8GraphFilter.h
index 4057acc242441178fcf26a9e7f78a8d0135ac292..3211927cd6da6b46a800531094996bfadaf14801 100644
--- a/Code/SpatialReasoning/otbPolygonListToRCC8GraphFilter.h
+++ b/Code/SpatialReasoning/otbPolygonListToRCC8GraphFilter.h
@@ -117,7 +117,7 @@ protected:
   /** Constructor */
   PolygonListToRCC8GraphFilter();
   /** Destructor */
-  ~PolygonListToRCC8GraphFilter();
+  virtual ~PolygonListToRCC8GraphFilter();
   /** Main computation method */
   virtual void GenerateData();
 
diff --git a/Code/SpatialReasoning/otbRCC8GraphFileReader.h b/Code/SpatialReasoning/otbRCC8GraphFileReader.h
index 72a3f0cd2e379361faba457eab378c70ad779df9..8ffe0302fb3de7af4ab967da56cd4df15d41fc4c 100644
--- a/Code/SpatialReasoning/otbRCC8GraphFileReader.h
+++ b/Code/SpatialReasoning/otbRCC8GraphFileReader.h
@@ -87,7 +87,7 @@ protected:
   /** Constructor */
   RCC8GraphFileReader();
   /** Destructor */
-  ~RCC8GraphFileReader();
+  virtual ~RCC8GraphFileReader();
   /** Main computation method */
   virtual void GenerateData();
   /**
diff --git a/Code/SpatialReasoning/otbRCC8VertexBase.h b/Code/SpatialReasoning/otbRCC8VertexBase.h
index 324a3c340e4c809637c86868fdc17f5daa8553ba..a719e72c744f85cf293037957d2c6f9222c10a2e 100644
--- a/Code/SpatialReasoning/otbRCC8VertexBase.h
+++ b/Code/SpatialReasoning/otbRCC8VertexBase.h
@@ -77,7 +77,7 @@ protected:
   /** Constructor */
   RCC8VertexBase();
   /** Desctructor */
-  ~RCC8VertexBase() {};
+  virtual ~RCC8VertexBase() {};
   /** PrintSelf method */
   void PrintSelf(std::ostream& os, itk::Indent indent) const;
 
diff --git a/Code/Visu/otbFixedSizeFullImageWidget.h b/Code/Visu/otbFixedSizeFullImageWidget.h
index 8232299624b9cdadc6c5444c34bebd086f978e06..614283f39a1d34df76c894f3e253246855601fbb 100644
--- a/Code/Visu/otbFixedSizeFullImageWidget.h
+++ b/Code/Visu/otbFixedSizeFullImageWidget.h
@@ -67,7 +67,7 @@ protected:
   /** Constructor. */
   FixedSizeFullImageWidget();
   /** Destructor. */
-  ~FixedSizeFullImageWidget();
+  virtual ~FixedSizeFullImageWidget();
 
   /** Return the width and heigh of the displayed image (overloaded for scroll)*/
   int wDisplayed()
diff --git a/Code/Visu/otbFullResolutionImageWidget.h b/Code/Visu/otbFullResolutionImageWidget.h
index 1c474fa59f7fd5f522decd9fa8c7e351834f189a..0e0c55621f3784c15a608af4a23ef4d094e94cdf 100644
--- a/Code/Visu/otbFullResolutionImageWidget.h
+++ b/Code/Visu/otbFullResolutionImageWidget.h
@@ -72,7 +72,7 @@ protected:
   /** Constructor. */
   FullResolutionImageWidget();
   /** Destructor. */
-  ~FullResolutionImageWidget();
+  virtual ~FullResolutionImageWidget();
 
 private:
   FullResolutionImageWidget(const Self&);// purposely not implemented
diff --git a/Code/Visu/otbImageToGrayscaleAnaglyphImageFilter.h b/Code/Visu/otbImageToGrayscaleAnaglyphImageFilter.h
index 216355463d9055b6f3709315ef45b5992e82c090..34c19572f2fa7dbe51020f2a2768e35d02750a90 100644
--- a/Code/Visu/otbImageToGrayscaleAnaglyphImageFilter.h
+++ b/Code/Visu/otbImageToGrayscaleAnaglyphImageFilter.h
@@ -42,7 +42,7 @@ public:
   /// Constructor
   GrayscaleAnaglyphFunctor() {};
   /// Destructor
-  ~GrayscaleAnaglyphFunctor() {};
+  virtual ~GrayscaleAnaglyphFunctor() {};
 
 
   inline TOutputPixel operator()(const TInputPixel1& pixel1, const TInputPixel2& pixel2)
diff --git a/Code/Visu/otbImageViewer.h b/Code/Visu/otbImageViewer.h
index 7955bc21ba04fc810c0c8d6d984166ade413acdc..2b2873c8b49a1b0771fe18b2cce30611bf53d4de 100644
--- a/Code/Visu/otbImageViewer.h
+++ b/Code/Visu/otbImageViewer.h
@@ -82,7 +82,7 @@ protected:
   /**Constructor */
   ImageViewer();
   /** Destructor */
-  ~ImageViewer();
+  virtual ~ImageViewer();
 
 private:
   ImageViewer(const Self&); //purposely not implemented
diff --git a/Code/Visu/otbImageViewerBase.h b/Code/Visu/otbImageViewerBase.h
index 79a6afdd6b1258ea23cc35574db1a0bdaa86d12c..d7faa3cf053bc4ba06622f9fbfea382dbbbf4148 100644
--- a/Code/Visu/otbImageViewerBase.h
+++ b/Code/Visu/otbImageViewerBase.h
@@ -423,7 +423,7 @@ protected:
 
   // Constructor and destructor
   ImageViewerBase();
-  ~ImageViewerBase();
+  virtual ~ImageViewerBase();
 
   /** Line width*/
   double m_LineWidth;
diff --git a/Code/Visu/otbImageViewerFullResolutionEventsInterface.h b/Code/Visu/otbImageViewerFullResolutionEventsInterface.h
index fd6a1a268ad8e766a29c02eecee8ba6025beb9cf..a1bf8d25390ca6c8c1ad50d48db39e4627d5f99f 100644
--- a/Code/Visu/otbImageViewerFullResolutionEventsInterface.h
+++ b/Code/Visu/otbImageViewerFullResolutionEventsInterface.h
@@ -63,7 +63,7 @@ protected:
     m_ForwardEvents = false;
   }
   /** Destructor */
-  ~ImageViewerFullResolutionEventsInterface() {}
+  virtual ~ImageViewerFullResolutionEventsInterface() {}
 
 private:
   ImageViewerFullResolutionEventsInterface(const Self&); //purposely not implemented
diff --git a/Code/Visu/otbImageViewerFullWidget.h b/Code/Visu/otbImageViewerFullWidget.h
index a708a10229c57c78fe22a7668784bdc1437bf684..3b268963b4b76e6a45b1f67b7c49b3c1aa3e1ca3 100644
--- a/Code/Visu/otbImageViewerFullWidget.h
+++ b/Code/Visu/otbImageViewerFullWidget.h
@@ -502,7 +502,7 @@ protected:
   /**
    * Destructor.
    */
-  ~ImageViewerFullWidget()
+  virtual ~ImageViewerFullWidget()
   {
     m_Parent = NULL;
   }
diff --git a/Code/Visu/otbImageViewerScrollWidget.h b/Code/Visu/otbImageViewerScrollWidget.h
index 77300a80c321efb52ac57ab2c586c2f2d55ab052..8657e23f09293f0fbf5dc02f977fb95dbf1356fc 100644
--- a/Code/Visu/otbImageViewerScrollWidget.h
+++ b/Code/Visu/otbImageViewerScrollWidget.h
@@ -143,7 +143,7 @@ protected:
   /**
    * Destructor.
    */
-  ~ImageViewerScrollWidget()
+  virtual ~ImageViewerScrollWidget()
   {
     m_Parent = NULL;
   }
diff --git a/Code/Visu/otbImageViewerZoomWidget.h b/Code/Visu/otbImageViewerZoomWidget.h
index 3204083b83ab350756dc30484cb4848d079b5844..02ab3af841578dc6ffccd3b31c4302281b56e8ae 100644
--- a/Code/Visu/otbImageViewerZoomWidget.h
+++ b/Code/Visu/otbImageViewerZoomWidget.h
@@ -188,7 +188,7 @@ protected:
   /**
    * Destructor.
    */
-  ~ImageViewerZoomWidget()
+  virtual ~ImageViewerZoomWidget()
   {
     m_Parent = NULL;
   }
diff --git a/Code/Visu/otbImageWidgetBase.h b/Code/Visu/otbImageWidgetBase.h
index b6c35a64bed2c87f6f2ab6d50022e559bb4bd573..92d606474542faf6c86832836aff8106ffce804d 100644
--- a/Code/Visu/otbImageWidgetBase.h
+++ b/Code/Visu/otbImageWidgetBase.h
@@ -180,7 +180,7 @@ protected:
   /** Constructor */
   ImageWidgetBase();
   /** Destructor */
-  ~ImageWidgetBase();
+  virtual ~ImageWidgetBase();
 
   /** Draw the widget */
   virtual void draw(void);
diff --git a/Code/Visu/otbImageWidgetFormBase.h b/Code/Visu/otbImageWidgetFormBase.h
index 8617b2ccaf3fcd6190eaff549a3fa7d8fe182790..b0d211f662b68dd6fa44677b9f7d652cc66edc74 100644
--- a/Code/Visu/otbImageWidgetFormBase.h
+++ b/Code/Visu/otbImageWidgetFormBase.h
@@ -101,7 +101,7 @@ protected:
   };
 
   /** Destructor. */
-  ~ImageWidgetFormBase()
+  virtual ~ImageWidgetFormBase()
   {};
 
   ColorType m_Color;
diff --git a/Code/Visu/otbImageWidgetTransferFunction.h b/Code/Visu/otbImageWidgetTransferFunction.h
index 1619529c6d7d8462944fb7406be7d3bca842d2fb..e0cc3c8900e94ce43e160c7ff4f208a0ab800e6a 100644
--- a/Code/Visu/otbImageWidgetTransferFunction.h
+++ b/Code/Visu/otbImageWidgetTransferFunction.h
@@ -134,7 +134,7 @@ public:
 protected:
   /** Constructor and  destructor */
   ImageWidgetAffineTransferFunction() {}
-  ~ImageWidgetAffineTransferFunction() {}
+  virtual ~ImageWidgetAffineTransferFunction() {}
 private:
   ImageWidgetAffineTransferFunction(const Self&); //purposely not implemented
   void operator=(const Self&); //purposely not implemented
@@ -185,7 +185,7 @@ public:
 protected:
   /** Constructor and  destructor */
   ImageWidgetSquareRootTransferFunction() {}
-  ~ImageWidgetSquareRootTransferFunction() {}
+  virtual ~ImageWidgetSquareRootTransferFunction() {}
 private:
   ImageWidgetSquareRootTransferFunction(const Self&); //purposely not implemented
   void operator=(const Self&); //purposely not implemented
@@ -236,7 +236,7 @@ public:
 protected:
   /** Constructor and  destructor */
   ImageWidgetLogTransferFunction() {}
-  ~ImageWidgetLogTransferFunction() {}
+  virtual ~ImageWidgetLogTransferFunction() {}
 private:
   ImageWidgetLogTransferFunction(const Self&); //purposely not implemented
   void operator=(const Self&); //purposely not implemented
@@ -287,7 +287,7 @@ public:
 protected:
   /** Constructor and  destructor */
   ImageWidgetSquareTransferFunction() {}
-  ~ImageWidgetSquareTransferFunction() {}
+  virtual ~ImageWidgetSquareTransferFunction() {}
 private:
   ImageWidgetSquareTransferFunction(const Self&); //purposely not implemented
   void operator=(const Self&); //purposely not implemented
diff --git a/Code/Visu/otbVectorImageToColorAnaglyphVectorImageFilter.h b/Code/Visu/otbVectorImageToColorAnaglyphVectorImageFilter.h
index 0169d46c1d1445d296b1b866f415073f489369be..b34988a2036fad4d27b74cbcbd792bb0cdb9286d 100644
--- a/Code/Visu/otbVectorImageToColorAnaglyphVectorImageFilter.h
+++ b/Code/Visu/otbVectorImageToColorAnaglyphVectorImageFilter.h
@@ -51,7 +51,7 @@ public:
     m_BlueChannelIndex = 2;
   };
   /// Destructor
-  ~ColorAnaglyphFunctor() {};
+  virtual ~ColorAnaglyphFunctor() {};
 
   inline TOutputPixel operator()(const TInputPixel1& pixel1, const TInputPixel2& pixel2)
   {
diff --git a/Code/Visu/otbZoomableImageWidget.h b/Code/Visu/otbZoomableImageWidget.h
index cd2f762a358b5c62c80ec6dfcebf5fef8099498e..d06f1e57f99bbd29225b4104944d99f8804a8cd6 100644
--- a/Code/Visu/otbZoomableImageWidget.h
+++ b/Code/Visu/otbZoomableImageWidget.h
@@ -77,7 +77,7 @@ protected:
   /** Constructor. */
   ZoomableImageWidget();
   /** Destructor. */
-  ~ZoomableImageWidget();
+  virtual ~ZoomableImageWidget();
 
 private:
   ZoomableImageWidget(const Self&);// purposely not implemented
diff --git a/Code/Visualization/otbAlphaBlendingFunction.h b/Code/Visualization/otbAlphaBlendingFunction.h
index 6018a527ab7dc927dad2effbf4e933ccebd0931a..4dc841de6af961bb0321ae615282d300cd7bb6c4 100644
--- a/Code/Visualization/otbAlphaBlendingFunction.h
+++ b/Code/Visualization/otbAlphaBlendingFunction.h
@@ -93,7 +93,7 @@ protected:
   /** Constructor */
   AlphaBlendingFunction() : m_Alpha(1.0) {}
   /** Destructor */
-  ~AlphaBlendingFunction() {}
+  virtual ~AlphaBlendingFunction() {}
 private:
   AlphaBlendingFunction(const Self&); //purposely not implemented
   void operator=(const Self&); //purposely not implemented
diff --git a/Code/Visualization/otbBlendingImageFilter.h b/Code/Visualization/otbBlendingImageFilter.h
index 18cc92c26975fd85df8e22a121c1c7924061257e..c53ab0a911097455517ba4e118bf99c4e331d570 100644
--- a/Code/Visualization/otbBlendingImageFilter.h
+++ b/Code/Visualization/otbBlendingImageFilter.h
@@ -62,7 +62,7 @@ public:
   }
 
   /** Destructor */
-  ~BlendingFunctor(){}
+  virtual ~BlendingFunctor(){}
 
   /** Set the rendering function
    *  \param function the Blending function.
diff --git a/Code/Visualization/otbCurves2DWidget.h b/Code/Visualization/otbCurves2DWidget.h
index 8f4e5bd2a619c60b8831d82a648ee830c622aa8a..504cbe6f23795b62303bdb0e9523d5274ca87f81 100644
--- a/Code/Visualization/otbCurves2DWidget.h
+++ b/Code/Visualization/otbCurves2DWidget.h
@@ -124,7 +124,7 @@ protected:
   /** Constructor */
   Curves2DWidget();
   /** Destructor */
-  ~Curves2DWidget();
+  virtual ~Curves2DWidget();
   /** Printself method */
   void PrintSelf(std::ostream& os, itk::Indent indent) const;
 
diff --git a/Code/Visualization/otbGlWidget.h b/Code/Visualization/otbGlWidget.h
index 9b31185e1a264cb7fd2e0373f93d5a4952ad0d24..47c637d44262fb496d9ae4a6807ec4eade6d621b 100644
--- a/Code/Visualization/otbGlWidget.h
+++ b/Code/Visualization/otbGlWidget.h
@@ -104,7 +104,7 @@ protected:
   /** Constructor */
   GlWidget();
   /** Destructor */
-  ~GlWidget();
+  virtual ~GlWidget();
   /** Printself method */
   virtual void PrintSelf(std::ostream& os, itk::Indent indent) const;
   /** Actually render the buffer to the screen. This method is
diff --git a/Code/Visualization/otbImageLayer.h b/Code/Visualization/otbImageLayer.h
index 2448e08e98c8fbdd21e9d764a58d0c10ba7e8efa..85f6c97916688bd061c0c06d8bb0fac8f5e1317a 100644
--- a/Code/Visualization/otbImageLayer.h
+++ b/Code/Visualization/otbImageLayer.h
@@ -199,7 +199,7 @@ protected:
   /** Constructor */
   ImageLayer();
   /** Destructor */
-  ~ImageLayer();
+  virtual ~ImageLayer();
   /** Printself method */
   void PrintSelf(std::ostream& os, itk::Indent indent) const;
 
diff --git a/Code/Visualization/otbImageLayerGenerator.h b/Code/Visualization/otbImageLayerGenerator.h
index 57e0a9be39c1ea7c8ec039aafd43e84c71da1cc7..d169b9e2e661f117afba3b242e7880d0733a66b6 100644
--- a/Code/Visualization/otbImageLayerGenerator.h
+++ b/Code/Visualization/otbImageLayerGenerator.h
@@ -183,7 +183,7 @@ protected:
   /** Constructor */
   ImageLayerGenerator();
   /** Destructor */
-  ~ImageLayerGenerator();
+  virtual ~ImageLayerGenerator();
   /** Printself method */
   void PrintSelf(std::ostream& os, itk::Indent indent) const;
 
diff --git a/Code/Visualization/otbImageLayerRenderingModel.h b/Code/Visualization/otbImageLayerRenderingModel.h
index cb040493996a70c9d99ff372f4df0010f071d3c1..b9a7dfb5905ad31c27227a83fd7e4bf7a47705c4 100644
--- a/Code/Visualization/otbImageLayerRenderingModel.h
+++ b/Code/Visualization/otbImageLayerRenderingModel.h
@@ -18,12 +18,13 @@
 #ifndef __otbImageLayerRenderingModel_h
 #define __otbImageLayerRenderingModel_h
 
-#include "otbMVCModelBase.h"
+#include "otbMVCModel.h"
 #include "otbLayerBasedModel.h"
 #include "otbImageLayerBase.h"
 #include "otbObjectList.h"
 #include "otbImageLayerRenderingModelListener.h"
 #include "otbBlendingImageFilter.h"
+#include "otbListenerBase.h"
 
 namespace otb
 {
@@ -43,7 +44,7 @@ namespace otb
 template <class TOutputImage = otb::Image<itk::RGBAPixel<unsigned char>,2 >,
           class TLayer = otb::ImageLayerBase<TOutputImage>  >
 class ImageLayerRenderingModel
-  : public MVCModelBase<ImageLayerRenderingModelListener>, public LayerBasedModel< TLayer >
+  : public MVCModel<ListenerBase>, public LayerBasedModel< TLayer >
 {
 public:
   /** Standard class typedefs */
@@ -74,7 +75,8 @@ public:
   typedef typename LayerListType::ConstIterator LayerIteratorType;
 
   /** Listener typedef */
-  typedef ImageLayerRenderingModelListener          ListenerType;
+//  typedef ImageLayerRenderingModelListener          ListenerType;
+  typedef ListenerBase ListenerType;
 
   /** Blending filter typedef */
   typedef otb::BlendingImageFilter<OutputImageType> BlendingFilterType;
@@ -109,46 +111,46 @@ public:
 
   /** Update will render all visible layers, rasterize all visible
    * layers and notify all listeners. */
-  void Update(void);
+  virtual void Update(void);
 
   /** Change the Scaled extract region by giving the center of the
    * region */
-  void SetScaledExtractRegionCenter(const IndexType & index);
+  virtual void SetScaledExtractRegionCenter(const IndexType & index);
 
   /** Change the extract region by giving the center of the
    * region */
-  void SetExtractRegionCenter(const IndexType & index);
+  virtual void SetExtractRegionCenter(const IndexType & index);
 
   /** Change the extract region by giving the 2 points of the
    * region */
-  void SetExtractRegionByIndex(const IndexType & startIndex, const IndexType & stopIndex );
+  virtual void SetExtractRegionByIndex(const IndexType & startIndex, const IndexType & stopIndex );
 
   /** Get the sumbsampling rate */
-  unsigned int GetSubsamplingRate();
+  virtual unsigned int GetSubsamplingRate();
 
   /** Filters Initialisation. */
-  void Init();
+  virtual void Init();
 
 protected:
   /** Constructor */
   ImageLayerRenderingModel();
   /** Destructor */
-  ~ImageLayerRenderingModel();
+  virtual ~ImageLayerRenderingModel();
 
   /** Printself method */
-  void          PrintSelf(std::ostream& os, itk::Indent indent) const;
+  virtual void          PrintSelf(std::ostream& os, itk::Indent indent) const;
 
   /** Renders all visible layers */
-   void         RenderVisibleLayers(void);
+  virtual void         RenderVisibleLayers(void);
 
   /** Rasterize visible layers */
-   void         RasterizeVisibleLayers(void);
+  virtual void         RasterizeVisibleLayers(void);
 
   /** Notify a registered listener */
-   void         Notify(ListenerType * listener);
+  virtual  void         Notify(ListenerType * listener);
 
   /** Constrains the given region to the largest possible one. */
-  RegionType    ConstrainRegion(const RegionType & region, const RegionType & largest);
+  virtual RegionType    ConstrainRegion(const RegionType & region, const RegionType & largest);
 
 private:
   ImageLayerRenderingModel(const Self&);     // purposely not implemented
diff --git a/Code/Visualization/otbImageLayerRenderingModel.txx b/Code/Visualization/otbImageLayerRenderingModel.txx
index f00ff1103f5553e662162604bdfd3397d00c37b6..29933ed0fb3bc4837032d84f6268ee9f0369b004 100644
--- a/Code/Visualization/otbImageLayerRenderingModel.txx
+++ b/Code/Visualization/otbImageLayerRenderingModel.txx
@@ -247,7 +247,7 @@ ImageLayerRenderingModel<TOutputImage, TLayer>
 {
   // Notify the listener
   otbMsgDevMacro(<<"ImageLayerRenderingModel::Notify(): Notifying listener");
-  listener->ImageLayerRenderingModelNotify();
+  listener->Notify();
 }
 
 
diff --git a/Code/Visualization/otbImageLayerRenderingModelListener.h b/Code/Visualization/otbImageLayerRenderingModelListener.h
index ccdbb1ee563e7ef2ff3676ee91f5bfc364bcc30d..8a366574ec2ae98748496d0369489cea7a44c362 100644
--- a/Code/Visualization/otbImageLayerRenderingModelListener.h
+++ b/Code/Visualization/otbImageLayerRenderingModelListener.h
@@ -35,7 +35,7 @@ public:
   typedef ImageLayerRenderingModelListener Self;
 
   // Update the display
-  virtual void ImageLayerRenderingModelNotify() = 0;
+  virtual void Notify() = 0;
 
 protected:
   /** Constructor */
diff --git a/Code/Visualization/otbImageView.h b/Code/Visualization/otbImageView.h
index ae5abf511d820a1fd5dcb345d554a32916c17634..6431554a0b5680a9f96c2b824cba951adc6c6eba 100644
--- a/Code/Visualization/otbImageView.h
+++ b/Code/Visualization/otbImageView.h
@@ -19,7 +19,8 @@
 #define __otbImageView_h
 
 #include "otbImageWidget.h"
-#include "otbImageLayerRenderingModelListener.h"
+// #include "otbImageLayerRenderingModelListener.h"
+#include "otbListenerBase.h"
 #include "otbImageWidgetController.h"
 #include "otbRegionGlComponent.h"
 
@@ -34,7 +35,7 @@ namespace otb
 
 template <class TViewerModel >
 class ImageView
-  : public ImageLayerRenderingModelListener, public itk::Object
+  : public ListenerBase, public itk::Object
 {
 public:
   /** Standard class typedefs */
@@ -107,7 +108,7 @@ public:
   /** Constructor */
   ImageView();
   /** Destructor */
-  ~ImageView();
+  virtual ~ImageView();
   /** Printself method */
   void PrintSelf(std::ostream& os, itk::Indent indent) const;
 
@@ -121,7 +122,7 @@ public:
   void UpdateZoomWidget();
 
   /** Handle notification from the viewer */
-  virtual void ImageLayerRenderingModelNotify();
+  virtual void Notify();
 
 private:
   ImageView(const Self&);      // purposely not implemented
diff --git a/Code/Visualization/otbImageView.txx b/Code/Visualization/otbImageView.txx
index 511c294df5a3d3f6361eaec617260ba218b89e41..b0ef1beaee2d4732d57046ce1bd04619a3d6efa0 100644
--- a/Code/Visualization/otbImageView.txx
+++ b/Code/Visualization/otbImageView.txx
@@ -93,7 +93,7 @@ ImageView<TViewerModel>
 template < class TViewerModel >
 void
 ImageView<TViewerModel>
-::ImageLayerRenderingModelNotify()
+::Notify()
 {
   this->Update();
 }
diff --git a/Code/Visualization/otbImageWidget.h b/Code/Visualization/otbImageWidget.h
index 9c3ea5be289a034c4e31d63c7578b2f8aa0054b4..97d7e3396c46ede75ccc2179f83751ef1f07f723 100644
--- a/Code/Visualization/otbImageWidget.h
+++ b/Code/Visualization/otbImageWidget.h
@@ -155,7 +155,7 @@ protected:
   /** Constructor */
   ImageWidget();
   /** Destructor */
-  ~ImageWidget();
+  virtual ~ImageWidget();
   /** Printself method */
   void PrintSelf(std::ostream& os, itk::Indent indent) const;
 
diff --git a/Code/Visualization/otbImageWidgetController.h b/Code/Visualization/otbImageWidgetController.h
index 81e1816100c6d24c6ef448d70d0e748434c7c5e5..addfbececdea37161c8c61d719d8383dcdd846d7 100644
--- a/Code/Visualization/otbImageWidgetController.h
+++ b/Code/Visualization/otbImageWidgetController.h
@@ -93,7 +93,7 @@ protected:
   /** Constructor */
   ImageWidgetController();
   /** Destructor */
-  ~ImageWidgetController();
+  virtual ~ImageWidgetController();
   /** Printself method */
   void PrintSelf(std::ostream& os, itk::Indent indent) const;
 
diff --git a/Code/Visualization/otbListenerBase.h b/Code/Visualization/otbListenerBase.h
new file mode 100644
index 0000000000000000000000000000000000000000..416df070e7e34f875eacac555a96c5c80ae667eb
--- /dev/null
+++ b/Code/Visualization/otbListenerBase.h
@@ -0,0 +1,52 @@
+/*=========================================================================
+
+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.
+
+=========================================================================*/
+#ifndef __otbListenerBase_h
+#define __otbListenerBase_h
+
+namespace otb
+{
+/**
+ * \class ListenerBase
+ *
+ *  Vectorization view interface specification for the model
+ *
+ *  \ingroup Visualization
+ */
+
+class ListenerBase
+{
+public:
+  /** Standard class typedefs */
+  typedef ListenerBase Self;
+
+  // Update the display
+  virtual void Notify() = 0;
+
+protected:
+  /** Constructor */
+  ListenerBase() {};
+  /** Destructor */
+  virtual ~ListenerBase() {};
+
+private:
+  ListenerBase(const Self&); //purposely not implemented
+  void operator=(const Self&); //purposely not implemented
+};
+
+} // end namespace otb
+#endif
diff --git a/Code/Visualization/otbMVCModelBase.h b/Code/Visualization/otbMVCModel.h
similarity index 73%
rename from Code/Visualization/otbMVCModelBase.h
rename to Code/Visualization/otbMVCModel.h
index 4d3a586ff1ad238140c04e63087cf859a8b21a8f..2014766ff875d6b8e7dd8ec91e4d0c36226531ed 100644
--- a/Code/Visualization/otbMVCModelBase.h
+++ b/Code/Visualization/otbMVCModel.h
@@ -15,24 +15,31 @@ the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
 PURPOSE.  See the above copyright notices for more information.
 
 =========================================================================*/
-#ifndef __otbMVCModelBase_h
-#define __otbMVCModelBase_h
+#ifndef __otbMVCModel_h
+#define __otbMVCModel_h
 
 #include <set>
+#include "itkObject.h"
+#include "itkObjectFactory.h"
 
 namespace otb
 {
-/** \class MVCModelBase
- * \brief Interface class for MVC based modelling.
- *  Implements the registration and
+/** \class MVCModel
+ *
+ * Base class for MVC based modelling. Implements the registration and
  * Unregistration of listeners, as well as the NotifyAll method. A valid listener must
  * implement a Notify() method.
- *  \ingroup Visualization
  */
 template <class TListener>
-class MVCModelBase
+class MVCModel
 {
 public:
+  /** Standard class typedefs */
+  typedef MVCModel    Self;
+  typedef itk::Object Superclass;
+  typedef itk::SmartPointer<Self> Pointer;
+  typedef itk::SmartPointer<const Self> ConstPointer;
+
   // Define the listener type
   typedef TListener ListenerType;
 
@@ -68,15 +75,22 @@ public:
   }
 
   /** Notify changes to a given listerner */
-  virtual void Notify(ListenerType * listener) {};
+  virtual void Notify(ListenerType * listener)
+  {
+     listener->Notify();
+  };
 
 protected:
   /** Constructor */
-  MVCModelBase() {}
+  MVCModel() {}
   /** Destructor */
-  virtual ~MVCModelBase() {}
+  virtual ~MVCModel() {}
 
 private:
+  MVCModel(const Self&); //purposely not implemented
+  void operator=(const Self&); //purposely not implemented
+
+
   /** Registered liteners */
   ListenersSetType m_RegisteredListeners;
 };
diff --git a/Code/Visualization/otbMultiplyBlendingFunction.h b/Code/Visualization/otbMultiplyBlendingFunction.h
index b7e13e95ffdc125b414dada9fb1d1017cb867f5c..8771e4bef1beacc21ffcdd0feb6b842cf0f5206f 100644
--- a/Code/Visualization/otbMultiplyBlendingFunction.h
+++ b/Code/Visualization/otbMultiplyBlendingFunction.h
@@ -80,7 +80,7 @@ namespace Function
       /** Constructor */
       MultiplyBlendingFunction() {}
       /** Destructor */
-      ~MultiplyBlendingFunction() {}
+      virtual ~MultiplyBlendingFunction() {}
     private:
       MultiplyBlendingFunction(const Self&); //purposely not implemented
       void operator=(const Self&); //purposely not implemented
diff --git a/Code/Visualization/otbPixelDescriptionModel.h b/Code/Visualization/otbPixelDescriptionModel.h
index 87b9412b4d8c3f45cb5749023fd9c42076071d3e..7e825368a9b9b6af29612162ca18a52c80e27789 100644
--- a/Code/Visualization/otbPixelDescriptionModel.h
+++ b/Code/Visualization/otbPixelDescriptionModel.h
@@ -18,7 +18,7 @@
 #ifndef __otbPixelDescriptionModel_h
 #define __otbPixelDescriptionModel_h
 
-#include "otbMVCModelBase.h"
+#include "otbMVCModel.h"
 #include "otbLayerBasedModel.h"
 #include "otbPixelDescriptionModelListener.h"
 #include "otbImageLayerBase.h"
@@ -35,7 +35,7 @@ namespace otb
 
 template <class TOutputImage >
 class PixelDescriptionModel
-  : public MVCModelBase<PixelDescriptionModelListener>, public LayerBasedModel< ImageLayerBase< TOutputImage > >
+  : public MVCModel<PixelDescriptionModelListener>, public LayerBasedModel< ImageLayerBase< TOutputImage > >
 {
 public:
   /** Standard class typedefs */
diff --git a/Code/Visualization/otbPixelDescriptionModel.txx b/Code/Visualization/otbPixelDescriptionModel.txx
index ac20aecec746c8050d428582fc897fd288bca124..932c7768d685598814e08367b6ae8236d49e673d 100644
--- a/Code/Visualization/otbPixelDescriptionModel.txx
+++ b/Code/Visualization/otbPixelDescriptionModel.txx
@@ -81,7 +81,7 @@ void
 PixelDescriptionModel<TOutputImage>
 ::Notify(ListenerType * listener)
 {
-  listener->PixelDescriptionModelNotify();
+  listener->Notify();
 }
 
 } // end namespace otb
diff --git a/Code/Visualization/otbPixelDescriptionModelListener.h b/Code/Visualization/otbPixelDescriptionModelListener.h
index 383412433c240a027253401b33979675585567f6..6bb2f2279d8d633fef3a4076eaeccf23c5b77fbb 100644
--- a/Code/Visualization/otbPixelDescriptionModelListener.h
+++ b/Code/Visualization/otbPixelDescriptionModelListener.h
@@ -34,7 +34,7 @@ public:
   typedef PixelDescriptionModelListener Self;
 
   // Update the display
-  virtual void PixelDescriptionModelNotify() = 0;
+  virtual void Notify() = 0;
 
 protected:
   /** Constructor */
diff --git a/Code/Visualization/otbPixelDescriptionView.h b/Code/Visualization/otbPixelDescriptionView.h
index 346ecd7c749ece8e166eb33b3c347077722e5c82..0559e735d4f4546ebd421d19527767540d7cace5 100644
--- a/Code/Visualization/otbPixelDescriptionView.h
+++ b/Code/Visualization/otbPixelDescriptionView.h
@@ -78,10 +78,10 @@ public:
   /** Constructor */
   PixelDescriptionView();
   /** Destructor */
-  ~PixelDescriptionView();
+  virtual ~PixelDescriptionView();
 
   /** Handle notification from the viewer */
-  virtual void PixelDescriptionModelNotify();
+  virtual void Notify();
 
 private:
   PixelDescriptionView(const Self&);      // purposely not implemented
diff --git a/Code/Visualization/otbPixelDescriptionView.txx b/Code/Visualization/otbPixelDescriptionView.txx
index 5df637accf54c278fe4f5a031ad257cd50d15831..99642d6c41454e2a01ab7494b67902a4e41b9a21 100644
--- a/Code/Visualization/otbPixelDescriptionView.txx
+++ b/Code/Visualization/otbPixelDescriptionView.txx
@@ -65,7 +65,7 @@ PixelDescriptionView<TInputPixelDescription>
 template < class TInputPixelDescription >
 void
 PixelDescriptionView<TInputPixelDescription>
-::PixelDescriptionModelNotify()
+::Notify()
 {
   this->Update();
 }
diff --git a/Code/Visualization/otbRenderingImageFilter.h b/Code/Visualization/otbRenderingImageFilter.h
index 6f5c865a0b025b00d048afe821bfd486a01c8ed5..c7845f6ae492e95bce3fe08fe8c99c92066684e5 100644
--- a/Code/Visualization/otbRenderingImageFilter.h
+++ b/Code/Visualization/otbRenderingImageFilter.h
@@ -79,7 +79,7 @@ public:
   }
 
   /** Destructor */
-  ~RenderingFunctor(){}
+  virtual ~RenderingFunctor(){}
 
   /** Set the rendering function
    *  \param function the Rendering function.
diff --git a/Code/Visualization/otbStandardRenderingFunction.h b/Code/Visualization/otbStandardRenderingFunction.h
index 0685608285d20453c4d24d2d9e80151ea715810b..ee1d178acc9af51c1a17de89e291e5566607b1a4 100644
--- a/Code/Visualization/otbStandardRenderingFunction.h
+++ b/Code/Visualization/otbStandardRenderingFunction.h
@@ -42,7 +42,7 @@ class Identity
 {
 public:
   Identity(){};
-  ~Identity(){};
+  virtual ~Identity(){};
   bool operator !=(const Identity &) const
   {
     return false;
@@ -347,7 +347,7 @@ protected:
                                 m_AutoMinMaxQuantile(0.02), m_DefaultChannelsAreSet(false), m_UTime()
   {}
   /** Destructor */
-  ~StandardRenderingFunction() {}
+  virtual ~StandardRenderingFunction() {}
 
   /** Perform the computation for a single value (this is done in
    * order to have the same code for vector and scalar version)
diff --git a/Code/Visualization/otbUniformAlphaBlendingFunction.h b/Code/Visualization/otbUniformAlphaBlendingFunction.h
index 475db2dec3eeea57a938eee5cb8e5a77db62951d..44493a031a1a8b7018a14959eb323f7fd761cdb1 100644
--- a/Code/Visualization/otbUniformAlphaBlendingFunction.h
+++ b/Code/Visualization/otbUniformAlphaBlendingFunction.h
@@ -77,7 +77,7 @@ protected:
   /** Constructor */
   UniformAlphaBlendingFunction() : m_Alpha(0.5) {}
   /** Destructor */
-  ~UniformAlphaBlendingFunction() {}
+  virtual ~UniformAlphaBlendingFunction() {}
 private:
   UniformAlphaBlendingFunction(const Self&); //purposely not implemented
   void operator=(const Self&); //purposely not implemented
diff --git a/Testing/Code/BasicFilters/CMakeLists.txt b/Testing/Code/BasicFilters/CMakeLists.txt
index 830d474ffefa7d8e36a403042358f3b74d0c283c..ce2431ae98f06c004cf10e79c6ac3ba920740d2e 100644
--- a/Testing/Code/BasicFilters/CMakeLists.txt
+++ b/Testing/Code/BasicFilters/CMakeLists.txt
@@ -831,7 +831,9 @@ ${TEMP}/bfTvVectorImageToAmplitudeImageFilterOutput.tif
          otbFlexibleDistanceWithMissingValueNew)
 
   ADD_TEST(bfTuFlexibleDistanceWithMissingValue ${BASICFILTERS_TESTS8}
-         otbFlexibleDistanceWithMissingValue)
+          otbFlexibleDistanceWithMissingValue
+          0.00000001
+)
 
 # -------            otb::LabelizeNeighborhoodConnectedImageFilter   ----------------------------
 
diff --git a/Testing/Code/BasicFilters/otbFlexibleDistanceWithMissingValue.cxx b/Testing/Code/BasicFilters/otbFlexibleDistanceWithMissingValue.cxx
index ab849101ba0127b6747c421a1433efd8a72c1157..36d6a5a0ac5d55176d8a28c6e9848846598f480b 100644
--- a/Testing/Code/BasicFilters/otbFlexibleDistanceWithMissingValue.cxx
+++ b/Testing/Code/BasicFilters/otbFlexibleDistanceWithMissingValue.cxx
@@ -21,6 +21,7 @@ PURPOSE.  See the above copyright notices for more information.
 
 #include <iostream>
 #include <cstdlib>
+#include <iomanip>
 #include "itkVariableLengthVector.h"
 #include "otbFlexibleDistanceWithMissingValue.h"
 
@@ -30,23 +31,29 @@ int otbFlexibleDistanceWithMissingValue( int argc, char * argv[] )
   typedef itk::VariableLengthVector< double > VectorType;
   typedef otb::Statistics::FlexibleDistanceWithMissingValue< VectorType > DistanceType;
 
-  const double epsilon = 0.00000001;
+  const double epsilon(atof(argv[1]));
 
   float a = 2.0;
   float b = 0.5;
+  unsigned int dim = 3;
   DistanceType::SetAlphaBeta(a,b);
 
-  VectorType x(3);
+  VectorType x( dim );
   x.Fill( 1. );
 
-  VectorType y(3);
+  VectorType y( dim );
   y.Fill( 2. );
 
   DistanceType::Pointer dist = DistanceType::New();
   double distanceValue = dist->Evaluate( x, y );
-  std::cout << "Distance: " << distanceValue << std::endl;
-
-  if ( (distanceValue - 3.*vcl_pow(3,b)) < epsilon )
+  std::cout << std::setprecision(20)<< std::endl;
+  std::cout << "dim,a,b          : " << dim<<","<<a<<","<<b<< std::endl;
+  std::cout << "dim*vcl_pow(3,b) : " << dim*vcl_pow(3,b) << std::endl;
+  std::cout << "Distance         : " << distanceValue << std::endl;
+  std::cout << "Epsilon          : " << epsilon << std::endl;
+  std::cout << "-> Tests diff    : " << vcl_abs(distanceValue - dim*vcl_pow(3,b)) << std::endl;
+
+  if ( vcl_abs(distanceValue - dim*vcl_pow(3,b)) < epsilon )
     return EXIT_SUCCESS;
   else
     return EXIT_FAILURE;
diff --git a/Testing/Code/Radiometry/otbAtmosphericCorrectionSequencement.cxx b/Testing/Code/Radiometry/otbAtmosphericCorrectionSequencement.cxx
index d4cc59629953f58aedb6bb130443f5b1a50b7c2e..179bc6859d0da79863d9cecea03c3c7548d4ac76 100644
--- a/Testing/Code/Radiometry/otbAtmosphericCorrectionSequencement.cxx
+++ b/Testing/Code/Radiometry/otbAtmosphericCorrectionSequencement.cxx
@@ -197,7 +197,7 @@ int otbAtmosphericCorrectionSequencementTest( int argc, char *argv[] )
 
   AtmosphericCorrectionParametersTo6SRadiativeTermsType::Pointer  filterAtmosphericCorrectionParametersTo6SRadiativeTerms = AtmosphericCorrectionParametersTo6SRadiativeTermsType::New();
   filterAtmosphericCorrectionParametersTo6SRadiativeTerms->SetInput( dataAtmosphericCorrectionParameters );
-
+  filterAtmosphericCorrectionParametersTo6SRadiativeTerms->Update();
 
 //-------------------------------
 
diff --git a/Testing/Code/Radiometry/otbReflectanceToSurfaceReflectanceImageFilter.cxx b/Testing/Code/Radiometry/otbReflectanceToSurfaceReflectanceImageFilter.cxx
index 6dd59fafdbc07cfab67dcb7339f1f5505b043c64..47b5af37c05a591986a586b940566d795f54b53b 100644
--- a/Testing/Code/Radiometry/otbReflectanceToSurfaceReflectanceImageFilter.cxx
+++ b/Testing/Code/Radiometry/otbReflectanceToSurfaceReflectanceImageFilter.cxx
@@ -28,7 +28,6 @@ int otbReflectanceToSurfaceReflectanceImageFilter(int argc, char * argv[])
   const char * inputFileName  = argv[1];
   const char * outputFileName = argv[2];
 
-
   const unsigned int Dimension = 2;
   typedef double PixelType;
   typedef otb::VectorImage<PixelType,Dimension> InputImageType;
@@ -54,7 +53,6 @@ int otbReflectanceToSurfaceReflectanceImageFilter(int argc, char * argv[])
   DataVectorType downTrans;
   DataVectorType upTrans;
 
-  std::cout<<nbChannel<<std::endl;
   for ( unsigned int j=0; j<nbChannel; j++)
   {
     intrinsic.push_back(static_cast<double>(atof(argv[3+j])));
diff --git a/Testing/Code/Radiometry/otbRomaniaReflectanceToRomaniaSurfaceReflectanceImageFilter.cxx b/Testing/Code/Radiometry/otbRomaniaReflectanceToRomaniaSurfaceReflectanceImageFilter.cxx
index 2200bd23dfb1283c1017f1b4eff7f08743064670..e0ebf526ed3ab5252d438e79151cb5f1a4aed4f6 100644
--- a/Testing/Code/Radiometry/otbRomaniaReflectanceToRomaniaSurfaceReflectanceImageFilter.cxx
+++ b/Testing/Code/Radiometry/otbRomaniaReflectanceToRomaniaSurfaceReflectanceImageFilter.cxx
@@ -146,6 +146,7 @@ int otbRomaniaReflectanceToRomaniaSurfaceReflectanceImageFilter(int argc, char *
   }
 
   corrToRadia->SetInput( param );
+  corrToRadia->Update();
 
   // Instantiating object
   ReflectanceToSurfaceReflectanceImageFilterType::Pointer filter = ReflectanceToSurfaceReflectanceImageFilterType::New();
diff --git a/Utilities/otbossim/CMakeLists.txt b/Utilities/otbossim/CMakeLists.txt
index f66550abd22703f8ae7dda2fabf46a14cc5dd93a..273a712c07fc3dce1599441778a0beec18cb2717 100644
--- a/Utilities/otbossim/CMakeLists.txt
+++ b/Utilities/otbossim/CMakeLists.txt
@@ -107,7 +107,7 @@ IF(NOT OTB_DISABLE_UTILITIES_COMPILATION)
   ELSE("${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}" MATCHES "^2\\.4$")
       ADD_CUSTOM_COMMAND(
           OUTPUT ${OTB_BINARY_DIR}/Utilities/otbossim/include/ossim/ossimVersion.h
-          COMMAND ${OTB_BINARY_DIR}/bin/version-config
+          COMMAND version-config
           ARGS "${OTB_BINARY_DIR}/Utilities/otbossim/include/ossim/ossimVersion.h" "${OSSIM_VERSION}"
           DEPENDS version-config
           COMMENT "Generating ossimVersion.h" )