diff --git a/include/dynamic-graph/signal-caster.h b/include/dynamic-graph/signal-caster.h
index 69b003e3c53adb3d8ad6b6985a138aa090b46f99..d4a56e5309e1054def13aea206a0c2334cbcaa11 100644
--- a/include/dynamic-graph/signal-caster.h
+++ b/include/dynamic-graph/signal-caster.h
@@ -109,84 +109,6 @@ namespace dynamicgraph
     }
   };
 
-  /// This class can be used to register default casts, i.e. casts
-  /// already supported by the object to an std::iostream through the
-  /// operators >> and << .
-  template<typename T>
-  class DefaultCastRegisterer : public SignalCastRegisterer
-  {
-  public:
-    DefaultCastRegisterer ()
-      : SignalCastRegisterer (typeid(T), disp, cast, trace)
-    {}
-
-    static boost::any cast (std::istringstream& iss);
-
-    static void disp (const boost::any& object, std::ostream& os)
-    {
-      os << boost::any_cast<T> (object) << std::endl;
-    }
-
-    static void trace (const boost::any& object, std::ostream& os)
-    {
-      disp(object,os);
-    }
-  };
-
-
-  // Define a custom implementation of the DefaultCastRegisterer
-  // to workaround the limitations of the stream based approach.
-  // When dealing with double: displaying a double on a stream
-  // is *NOT* the opposite of reading a double from a stream.
-  //
-  // In practice, it means that there is no way to read
-  // a NaN, +inf, -inf from a stream!
-  //
-  // To workaround this problem, parse special values manually
-  // (the strings used are the one produces by displaying special
-  // values on a stream).
-  template <>
-  inline boost::any
-  DefaultCastRegisterer<double>::cast (std::istringstream& iss)
-    {
-      std::string tmp;
-      iss >> tmp;
-
-      if (tmp == "nan")
-	return std::numeric_limits<double>::quiet_NaN ();
-      else if (tmp == "inf" || tmp == "+inf")
-	return std::numeric_limits<double>::infinity ();
-      else if (tmp == "-inf")
-	return -1. * std::numeric_limits<double>::infinity ();
-
-      try
-	{
-	  return boost::lexical_cast<double> (tmp);
-	}
-      catch (boost::bad_lexical_cast&)
-	{
-	  boost::format fmt ("failed to serialize %s (to double)");
-	  fmt % tmp;
-	  throw ExceptionSignal(ExceptionSignal::GENERIC, fmt.str ());
-	}
-    }
-
-  template <typename T>
-  boost::any
-  DefaultCastRegisterer<T>::cast (std::istringstream& iss)
-    {
-      T inst;
-      iss >> inst;
-      if (iss.fail ())
-	{
-	  boost::format fmt ("failed to serialize %s ");
-	  fmt % iss.str ();
-	  throw ExceptionSignal(ExceptionSignal::GENERIC, fmt.str ());
-	}
-      return inst;
-    }
-
-
 
   /// Global signal cast template (helper) functions
   ///
diff --git a/src/signal/signal-caster.cpp b/src/signal/signal-caster.cpp
index 72bc26a4f49ea328b033447353ff4d08651833e8..02842ffe430bf254c85d98dc31129a9c8ab76449 100644
--- a/src/signal/signal-caster.cpp
+++ b/src/signal/signal-caster.cpp
@@ -122,14 +122,4 @@ namespace dynamicgraph
   /// The global instance of the caster class.
   SignalCaster g_caster;
 
-  /// Registers useful casts
-  namespace
-  {
-    DefaultCastRegisterer<double> double_reg;
-    DefaultCastRegisterer<int> int_reg;
-    DefaultCastRegisterer<unsigned int> uint_reg;
-    DefaultCastRegisterer<dynamicgraph::Vector> vectorCastRegisterer;
-    DefaultCastRegisterer<dynamicgraph::Matrix> matrixCastRegisterer;
-  } // end of anonymous namespace.
-  
 } // namespace dynamicgraph
diff --git a/tests/signal-cast-registerer.cpp b/tests/signal-cast-registerer.cpp
index f171ed20739deddc422e68006637bdb67213e698..cc61c4935d7f9e36e3bd745b1c70f1fba3817150 100644
--- a/tests/signal-cast-registerer.cpp
+++ b/tests/signal-cast-registerer.cpp
@@ -26,6 +26,7 @@
 #include <dynamic-graph/pool.h>
 #include <dynamic-graph/signal-caster.h>
 #include <dynamic-graph/signal.h>
+#include <dynamic-graph/signal-cast-helper.h>
 
 #include "signal-cast-registerer-libA.hh"
 #include "signal-cast-registerer-libB.hh"