diff --git a/Modules/Core/ImageBase/include/otbDefaultConvertNewImpl.h b/Modules/Core/ImageBase/include/otbDefaultConvertNewImpl.h
index 7cf9add535bf2d4631a99702b3a475e835d68cf1..4ffd0d6099dde95ecf94e9c466be092c866819e8 100644
--- a/Modules/Core/ImageBase/include/otbDefaultConvertNewImpl.h
+++ b/Modules/Core/ImageBase/include/otbDefaultConvertNewImpl.h
@@ -19,7 +19,6 @@
 #define otbDefaultConvertNewImp_h
 
 #include "itkDefaultConvertPixelTraits.h"
-#include "itkRGBPixel.h"
 
 // #include "itkOffset.h"
 // #include "itkVector.h"
@@ -29,73 +28,81 @@
 
 namespace otb 
 {
+
+
 template < typename PixelType>
-class DefaultConvertPixelTraitsTest : public itk::DefaultConvertPixelTraits < PixelType >
+class DefaultConvertPixelTraitsTest 
+: public itk::DefaultConvertPixelTraits < PixelType >
 {
 public:
-  typedef PixelType TargetType;
-  static void SetNthComponent(int , TargetType & pixel, const TargetType& v)
-    {
-      pixel = v;
-    }  
-};
+  typedef itk::DefaultConvertPixelTraits < PixelType > SuperClass;
+  using SuperClass::ComponentType;
 
-//
-//  Default traits for the complex<> pixel type
-//
+  using SuperClass::SetNthComponent;
 
-template < typename T >
-class DefaultConvertPixelTraitsTest < std::complex < T > > 
-: public itk::DefaultConvertPixelTraits < std::complex < T > >
-{
-public:
-  typedef itk::DefaultConvertPixelTraits < std::complex < T > > SuperClass;
-  typedef typename SuperClass::TargetType TargetType;
-  static void SetNthComponent(int , TargetType & pixel, const TargetType& v)
+  static void SetNthComponent(int , PixelType & pixel, const PixelType & v)
     {
       pixel = v;
     }  
-  static TargetType GetNthComponent ( int , const TargetType & pixel )
-    {
-    return pixel;
-    }
 };
 
+// We might not need this specialization if the compileur allow
+// us to declare to function with same signature in some case :
+// see "SetNthComponent"
+#define OTB_DEFAULTCONVERTTRAITS_NATIVE_SPECIAL(type)                      \
+  template< >                                                              \
+  class DefaultConvertPixelTraitsTest < type >                                 \
+  : public itk::DefaultConvertPixelTraits < type >                         \
+  {                                                                        \
+public:                                                                    \
+  typedef itk::DefaultConvertPixelTraits < type > SuperClass;              \
+    using typename SuperClass::ComponentType;                              \
+  };
+
+OTB_DEFAULTCONVERTTRAITS_NATIVE_SPECIAL(float)
+OTB_DEFAULTCONVERTTRAITS_NATIVE_SPECIAL(double)
+OTB_DEFAULTCONVERTTRAITS_NATIVE_SPECIAL(long double)
+OTB_DEFAULTCONVERTTRAITS_NATIVE_SPECIAL(int)
+OTB_DEFAULTCONVERTTRAITS_NATIVE_SPECIAL(char)
+OTB_DEFAULTCONVERTTRAITS_NATIVE_SPECIAL(short)
+OTB_DEFAULTCONVERTTRAITS_NATIVE_SPECIAL(unsigned int)
+OTB_DEFAULTCONVERTTRAITS_NATIVE_SPECIAL(signed char)
+OTB_DEFAULTCONVERTTRAITS_NATIVE_SPECIAL(unsigned char)
+OTB_DEFAULTCONVERTTRAITS_NATIVE_SPECIAL(unsigned short)
+OTB_DEFAULTCONVERTTRAITS_NATIVE_SPECIAL(long)
+OTB_DEFAULTCONVERTTRAITS_NATIVE_SPECIAL(unsigned long)
+OTB_DEFAULTCONVERTTRAITS_NATIVE_SPECIAL(long long)
+OTB_DEFAULTCONVERTTRAITS_NATIVE_SPECIAL(unsigned long long)
+OTB_DEFAULTCONVERTTRAITS_NATIVE_SPECIAL(bool)
+
+#undef OTB_DEFAULTCONVERTTRAITS_NATIVE_SPECIAL
+
 //
 //  Default traits for the Offset<> pixel type
 //
 
-template<unsigned int VDimension>
-class DefaultConvertPixelTraitsTest < itk::Offset< VDimension > > : 
-public itk::DefaultConvertPixelTraits< itk::Offset< VDimension > >
-{
-public:
-  typedef itk::DefaultConvertPixelTraits < itk::Offset< VDimension > > SuperClass;
-  typedef typename SuperClass::TargetType TargetType;
-  static void SetNthComponent(int , TargetType & pixel, const TargetType& v)
-    {
-      pixel = v;
-    }
-};
+// template<unsigned int VDimension>
+// class DefaultConvertPixelTraitsTest < itk::Offset< VDimension > > : 
+// public itk::DefaultConvertPixelTraits< itk::Offset< VDimension > >
+// {
+// public:
+//   typedef itk::DefaultConvertPixelTraits < itk::Offset< VDimension > > SuperClass;
+//   using typename SuperClass::ComponentType;
+
+//   using SuperClass::SetNthComponent;
+
+//   static void SetNthComponent(int , TargetType & pixel, const TargetType& v)
+//     {
+//       pixel = v;
+//     }
+// };
 
 //
-//  Default traits for the pixel types deriving from Matrix<>
+//  Default traits for the pixel types deriving from FixedArray<>
 //
 
-template<typename VComponent, unsigned VRows, unsigned VCols >
-class DefaultConvertPixelTraitsTest < itk::Matrix< VComponent, VRows, VCols > >
-: public itk::DefaultConvertPixelTraits < itk::Matrix< VComponent, VRows, VCols > >
-{
-public:
-  typedef itk::DefaultConvertPixelTraits < itk::Matrix< VComponent, VRows, VCols > > SuperClass;
-  typedef typename SuperClass::TargetType TargetType;
-  static void SetNthComponent(int , TargetType & pixel, const TargetType& v)
-    {
-      pixel = v;
-    }
-};
-
-#define OTB_DEFAULTCONVERTTRAITS_FIXEDARRAY_TYPE(type)                                       \
+/*
+define OTB_DEFAULTCONVERTTRAITS_FIXEDARRAY_TYPE(type)                                        \
 template < typename TComponentType , unsigned VDimension >                                   \
 class DefaultConvertPixelTraitsTest < type < TComponentType , VDimension > >                 \
 : public itk::DefaultConvertPixelTraits < type < TComponentType , VDimension > >             \
@@ -108,11 +115,104 @@ public:
       pixel = v;                                                                             \
     }                                                                                        \
 }                                                                                            \
+*/
+// OTB_DEFAULTCONVERTTRAITS_FIXEDARRAY_TYPE(itk::FixedArray);
+// OTB_DEFAULTCONVERTTRAITS_FIXEDARRAY_TYPE(itk::Vector);
+// OTB_DEFAULTCONVERTTRAITS_FIXEDARRAY_TYPE(itk::CovariantVector);
+// OTB_DEFAULTCONVERTTRAITS_FIXEDARRAY_TYPE(itk::Point);
+
+// #undef OTB_DEFAULTCONVERTTRAITS_FIXEDARRAY_TYPE
+
+//
+//  Default traits for pixel types deriving from VariableLengthVector<>
+//
+
+// template < typename T >
+// class DefaultConvertPixelTraitsTest < itk::VariableLengthVector < T > >
+// : public itk::DefaultConvertPixelTraits < itk::VariableLengthVector< T > >
+// {
+// public:
+//   typedef itk::DefaultConvertPixelTraits< itk::VariableLengthVector < T > > SuperClass;
+//   using typename SuperClass::TargetType;
+//   using typename SuperClass::ComponentType;
+// };
+
+//
+//  Default traits for the pixel types deriving from Matrix<>
+//
+
+// template<typename VComponent, unsigned VRows, unsigned VCols >
+// class DefaultConvertPixelTraitsTest < itk::Matrix< VComponent, VRows, VCols > >
+// : public itk::DefaultConvertPixelTraits < itk::Matrix< VComponent, VRows, VCols > >
+// {
+// public:
+//   typedef itk::DefaultConvertPixelTraits < itk::Matrix< VComponent, VRows, VCols > > SuperClass;
+//   using typename SuperClass::TargetType;
+//   using typename SuperClass::ComponentType;
+
+
+//   using SuperClass::SetNthComponent;
+
+//   static void SetNthComponent(int , TargetType & pixel, const TargetType& v)
+//     {
+//       pixel = v;
+//     }
+// };
+
+//
+//  Default traits for pixel types deriving from VariableSizeMatrix<>
+//
+
+// template < typename T >
+// class DefaultConvertPixelTraitsTest< itk::VariableSizeMatrix< T > >
+// : public itk::DefaultConvertPixelTraits< itk::VariableSizeMatrix< T > >
+// {
+//   public:
+//   typedef itk::DefaultConvertPixelTraits< itk::VariableSizeMatrix < T > > SuperClass;
+//   using typename SuperClass::TargetType;
+//   using typename SuperClass::ComponentType;
+// };
+
+//
+//  Default traits for pixel types deriving from std::complex<>
+//
 
-OTB_DEFAULTCONVERTTRAITS_FIXEDARRAY_TYPE(itk::Vector);
-OTB_DEFAULTCONVERTTRAITS_FIXEDARRAY_TYPE(itk::CovariantVector);
-OTB_DEFAULTCONVERTTRAITS_FIXEDARRAY_TYPE(itk::Point);
-OTB_DEFAULTCONVERTTRAITS_FIXEDARRAY_TYPE(itk::FixedArray);
+template < typename T >
+class DefaultConvertPixelTraitsTest < ::std::complex < T > > 
+: public itk::DefaultConvertPixelTraits < ::std::complex < T > >
+{
+public:
+
+  typedef itk::DefaultConvertPixelTraits < ::std::complex < T > > SuperClass;
+  using typename SuperClass::TargetType ;
+  using typename SuperClass::ComponentType ;
+
+  using SuperClass::SetNthComponent ;
+
+  static void SetNthComponent(int , TargetType & pixel, const TargetType & v)
+    {
+      pixel = v;
+    }
+
+  static TargetType GetNthComponent ( int , const TargetType & pixel )
+    {
+    return pixel;
+    }
+
+  static ComponentType GetScalarValue(const TargetType& pixel)
+    {
+       /*
+       * This seems to be dead code, since the complex to scalar
+       * conversion is done by ConvertPixelBuffer
+       *
+       * Historically, it was returning std::norm, which causes
+       * compilation error on MacOSX 10.9.
+       * Now returns the equivalent implementation of std::norm.
+       */
+      return static_cast<ComponentType>( pixel.real()*pixel.real()
+                                         + pixel.imag()*pixel.imag() );
+    }
+};
 
 } // end namespace
 #endif