diff --git a/include/dynamic-graph/signal-caster.h b/include/dynamic-graph/signal-caster.h
index d4a56e5309e1054def13aea206a0c2334cbcaa11..a713b415abea8eb6f66df39d613ad4a42908849d 100644
--- a/include/dynamic-graph/signal-caster.h
+++ b/include/dynamic-graph/signal-caster.h
@@ -47,7 +47,6 @@ namespace dynamicgraph
   class DYNAMIC_GRAPH_DLLAPI SignalCaster
   {
   public:
-    explicit SignalCaster ();
     virtual ~SignalCaster ();
 
     /// Typedef of displayer functions that take an encapsulated 'any'
@@ -87,10 +86,14 @@ namespace dynamicgraph
     std::map<std::string, cast_functions_type> functions_;
 
     std::map<std::string, const std::type_info*> type_info_;
+
+  private:
+    explicit SignalCaster ();
+    friend SignalCaster& g_caster(void);
   };
 
-  /// The library-wide instance of SignalCaster
-  extern DYNAMIC_GRAPH_DLLAPI SignalCaster g_caster;
+  /// Access on the library wide caster instance (simple singleton design).
+  DYNAMIC_GRAPH_DLLAPI SignalCaster& g_caster(void);
 
   ///The SignalCast registerer class. Can be used to automatically
   /// register a cast when instanced somewhere in a cpp file. Pass the
@@ -105,7 +108,7 @@ namespace dynamicgraph
 				 SignalCaster::caster_type caster,
 				 SignalCaster::tracer_type tracer)
     {
-      g_caster.registerCast(type, displayer, caster, tracer);
+      g_caster().registerCast(type, displayer, caster, tracer);
     }
   };
 
@@ -117,19 +120,19 @@ namespace dynamicgraph
   template<typename T>
   void signal_disp (const T& value, std::ostream& os)
   {
-    g_caster.disp(value, os);
+    g_caster().disp(value, os);
   }
 
   template<typename T>
   T signal_cast(std::istringstream& iss)
   {
-    return boost::any_cast<T>(g_caster.cast(typeid(T), iss));
+    return boost::any_cast<T>(g_caster().cast(typeid(T), iss));
   }
 
   template<typename T>
   void signal_trace (const T& value, std::ostream& os)
   {
-    g_caster.trace(value, os);
+    g_caster().trace(value, os);
   }
 } // end of namespace dynamicgraph.
 
diff --git a/src/signal/signal-cast-helper.cpp b/src/signal/signal-cast-helper.cpp
index 8f409c65d31b007b672b5700ed3b6a876d0dbdef..109fc51bc020d75c90afd1d2ab05584228e4ca3c 100644
--- a/src/signal/signal-cast-helper.cpp
+++ b/src/signal/signal-cast-helper.cpp
@@ -70,10 +70,10 @@ namespace dynamicgraph
   namespace
   {
     DefaultCastRegisterer<double> double_reg;
-    DefaultCastRegisterer<int> int_reg;
-    DefaultCastRegisterer<unsigned int> uint_reg;
-    DefaultCastRegisterer<dynamicgraph::Vector> vectorCastRegisterer;
-    DefaultCastRegisterer<dynamicgraph::Matrix> matrixCastRegisterer;
+    // 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/src/signal/signal-caster.cpp b/src/signal/signal-caster.cpp
index 02842ffe430bf254c85d98dc31129a9c8ab76449..6ab9aacd8d5bee34afd84a7edba656efaba79424 100644
--- a/src/signal/signal-caster.cpp
+++ b/src/signal/signal-caster.cpp
@@ -120,6 +120,21 @@ namespace dynamicgraph
   }
 
   /// The global instance of the caster class.
-  SignalCaster g_caster;
+  //SignalCaster g_caster;
+  /// Singleton on the library-wide instance of SignalCaster
+  SignalCaster& g_caster(void)
+  {
+    static SignalCaster staticptr;
+    return staticptr;
+  }
 
 } // namespace dynamicgraph
+
+
+
+
+struct sigcastint
+{
+  sigcastint() { std::cout << "sigcastint!" << std::endl; }
+};
+sigcastint sigcastint_init;