diff --git a/Code/IO/otbKMLVectorDataIOFactory.txx b/Code/IO/otbKMLVectorDataIOFactory.txx
index e90ea721555bd4ac662088499f13881ee9ad0333..f40c6cf69f011027af482aae3db8ab73a3b0a0ad 100644
--- a/Code/IO/otbKMLVectorDataIOFactory.txx
+++ b/Code/IO/otbKMLVectorDataIOFactory.txx
@@ -29,22 +29,28 @@ namespace otb
 template<class TData>
 KMLVectorDataIOFactory<TData>::KMLVectorDataIOFactory()
 {
-  this->RegisterOverride("otbVectorDataIOBase",
-                         "otbKMLVectorDataIO",
+  static std::string classOverride = std::string("otbVectorDataIOBase<") + typeid(TData).name() + ">";
+  static std::string subclass = std::string("otbKMLVectorDataIO<") + typeid(TData).name() + ">";
+
+  this->RegisterOverride(classOverride.c_str(),
+                         subclass.c_str(),
                          "KML Vectordata IO",
                          1,
                          itk::CreateObjectFunction<KMLVectorDataIO<TData> >::New());
 }
+
 template<class TData>
 KMLVectorDataIOFactory<TData>::~KMLVectorDataIOFactory()
 {
 }
+
 template<class TData>
 const char*
 KMLVectorDataIOFactory<TData>::GetITKSourceVersion(void) const
 {
   return ITK_SOURCE_VERSION;
 }
+
 template<class TData>
 const char*
 KMLVectorDataIOFactory<TData>::GetDescription() const
diff --git a/Code/IO/otbOGRVectorDataIOFactory.txx b/Code/IO/otbOGRVectorDataIOFactory.txx
index 301d976e0a362d04456a28c188553bd403ec05cc..80b84e422d9d84c3c8d75a3d44fa374ce95e686a 100644
--- a/Code/IO/otbOGRVectorDataIOFactory.txx
+++ b/Code/IO/otbOGRVectorDataIOFactory.txx
@@ -29,8 +29,11 @@ namespace otb
 template<class TData>
 OGRVectorDataIOFactory<TData>::OGRVectorDataIOFactory()
 {
-  this->RegisterOverride("otbVectorDataIOBase",
-                         "otbOGRVectorDataIO",
+  static std::string classOverride = std::string("otbVectorDataIOBase<") + typeid(TData).name() + ">";
+  static std::string subclass = std::string("otbOGRVectorDataIO<") + typeid(TData).name() + ">";
+
+  this->RegisterOverride(classOverride.c_str(),
+                         subclass.c_str(),
                          "OGR Vectordata IO",
                          1,
                          itk::CreateObjectFunction<OGRVectorDataIO<TData> >::New());
diff --git a/Code/IO/otbVectorDataIOFactory.txx b/Code/IO/otbVectorDataIOFactory.txx
index 5e904f6d9eb1ef4a8dc3f3d25c8ca49de968ee10..b77c363cbb83a8c34d561f14d8756c3858c869ce 100644
--- a/Code/IO/otbVectorDataIOFactory.txx
+++ b/Code/IO/otbVectorDataIOFactory.txx
@@ -38,10 +38,12 @@ VectorDataIOFactory<TData>
 ::CreateVectorDataIO(const char* path, FileModeType mode)
 {
   RegisterBuiltInFactories();
+  
+  std::string baseclassID = std::string("otbVectorDataIOBase<") + typeid(TData).name() + ">";
 
   std::list<VectorDataIOBasePointerType> possibleVectorDataIO;
   std::list<itk::LightObject::Pointer>   allobjects =
-    itk::ObjectFactoryBase::CreateAllInstance("otbVectorDataIOBase");
+    itk::ObjectFactoryBase::CreateAllInstance(baseclassID.c_str());
   for (std::list<itk::LightObject::Pointer>::iterator i = allobjects.begin();
        i != allobjects.end(); ++i)
     {