diff --git a/include/dynamic-graph/signal-ptr.h b/include/dynamic-graph/signal-ptr.h
index f048f8e8ec03ebedd404ae2f7071d222a6275998..4c6909c65d84c38db93c45a190ff51fe268812a0 100644
--- a/include/dynamic-graph/signal-ptr.h
+++ b/include/dynamic-graph/signal-ptr.h
@@ -107,6 +107,7 @@ namespace dynamicgraph
     { setConstantDefault( accessCopy () ); }
     inline void unsetConstantDefault (){ modeNoThrow = false; }
 
+    virtual void checkCompatibility();
 
   public:  /* --- INHERITANCE --- */
 
diff --git a/include/dynamic-graph/signal-ptr.t.cpp b/include/dynamic-graph/signal-ptr.t.cpp
index 1d32bfa17781bd778e35aa9f3c12533f774203f2..82b03bd414f6169687605a5faab0e763983d46bd 100644
--- a/include/dynamic-graph/signal-ptr.t.cpp
+++ b/include/dynamic-graph/signal-ptr.t.cpp
@@ -135,6 +135,17 @@ namespace dynamicgraph
     dgTDEBUGOUT(5);
   }
 
+  template< class T,class Time >
+  void SignalPtr<T,Time>::
+  checkCompatibility  ()
+  {
+    if( isPluged()&&(!autoref ()) )
+      { getPtr()->checkCompatibility(); }
+    else if( isAbstractPluged()&&(!autoref ()) )
+      { abstractTransmitter->checkCompatibility(); }
+    else Signal<T,Time>::checkCompatibility();
+  }
+
   template< class T,class Time >
   bool SignalPtr<T,Time>::
   needUpdate( const Time& t ) const