diff --git a/src/signal-base-py.cc b/src/signal-base-py.cc
index 793698762f104f65be9440ea6f3acc6cffa46002..dc5d5e145479e43ef88245c55dbcfddf1ecd5484 100644
--- a/src/signal-base-py.cc
+++ b/src/signal-base-py.cc
@@ -18,7 +18,10 @@
 #include <sstream>
 
 #include <dynamic-graph/signal-base.h>
+#include <dynamic-graph/signal.h>
 #include <dynamic-graph/signal-caster.h>
+#include <dynamic-graph/linear-algebra.h>
+#include <../src/convert-dg-to-py.hh>
 
 using dynamicgraph::SignalBase;
 
@@ -26,6 +29,7 @@ namespace dynamicgraph {
   namespace python {
 
     extern PyObject* error;
+    using namespace convert;
 
     namespace signalBase {
 
@@ -107,6 +111,29 @@ namespace dynamicgraph {
 	pointer = PyCObject_AsVoidPtr(object);
 	SignalBase<int>* signal = (SignalBase<int>*)pointer;
 
+	/* Temptative for specific signal type. */
+	Signal<dynamicgraph::Vector,int> * sigvec
+	  = dynamic_cast< Signal<dynamicgraph::Vector,int>* >( signal );
+	if( NULL!= sigvec )
+	  {
+	    return vectorToPython( sigvec->accessCopy() );
+	  }
+
+	Signal<dynamicgraph::Matrix,int> * sigmat
+	  = dynamic_cast< Signal<dynamicgraph::Matrix,int>* >( signal );
+	if( NULL!= sigmat )
+	  {
+	    return matrixToPython( sigmat->accessCopy() );
+	  }
+
+	Signal<double,int> * sigdouble
+	  = dynamic_cast< Signal<double,int>* >( signal );
+	if( NULL!= sigdouble )
+	  {
+	    return Py_BuildValue("d", sigdouble->accessCopy() );
+	  }
+
+	/* Non specific signal: use a generic way. */
 	std::ostringstream value;
 	try {
 	  signal->get(value);