diff --git a/src/dynamic-graph-py.cc b/src/dynamic-graph-py.cc
index 88029a0e71268c126fcbd9d26d158af7a67e1beb..083f35f0e6559719ca24490c8268efd5072c8630 100644
--- a/src/dynamic-graph-py.cc
+++ b/src/dynamic-graph-py.cc
@@ -30,6 +30,7 @@ namespace dynamicgraph {
       extern PyObject* create(PyObject* self, PyObject* args);
       extern PyObject* getTime(PyObject* self, PyObject* args);
       extern PyObject* getName(PyObject* self, PyObject* args);
+      extern PyObject* display(PyObject* self, PyObject* args);
       extern PyObject* getValue(PyObject* self, PyObject* args);
       extern PyObject* setValue(PyObject* self, PyObject* args);
       extern PyObject* recompute(PyObject* self, PyObject* args);
@@ -38,7 +39,6 @@ namespace dynamicgraph {
       extern PyObject* create(PyObject* self, PyObject* args);
       extern PyObject* getName(PyObject* self, PyObject* args);
       extern PyObject* getSignal(PyObject* self, PyObject* args);
-      extern PyObject* displaySignals(PyObject* self, PyObject* args);
       extern PyObject* listSignals(PyObject* self, PyObject* args);
       extern PyObject* executeCommand(PyObject* self, PyObject* args);
       extern PyObject* listCommands(PyObject* self, PyObject* args);
@@ -147,9 +147,11 @@ static PyMethodDef dynamicGraphMethods[] = {
    METH_VARARGS, "Get time of  a SignalBase"},
   {"signal_base_get_name", dynamicgraph::python::signalBase::getName,
    METH_VARARGS, "Get the name of a signal"},
+  {"signal_base_display", dynamicgraph::python::signalBase::display,
+   METH_VARARGS, "Print the signal in a string"},
   {"signal_base_get_value", dynamicgraph::python::signalBase::getValue,
-   METH_VARARGS, "Read the value of a signal"},
-  {"signal_base_set_value", dynamicgraph::python::signalBase::setValue,
+   METH_VARARGS, "Read the value of a signal"}, 
+ {"signal_base_set_value", dynamicgraph::python::signalBase::setValue,
    METH_VARARGS, "Set the value of a signal"},
   {"signal_base_recompute", dynamicgraph::python::signalBase::recompute,
    METH_VARARGS, "Recompute the signal at given time"},
@@ -160,9 +162,6 @@ static PyMethodDef dynamicGraphMethods[] = {
    "get the name of an Entity"},
   {"entity_get_signal", dynamicgraph::python::entity::getSignal, METH_VARARGS,
    "get signal by name from an Entity"},
-  {"entity_display_signals", dynamicgraph::python::entity::displaySignals,
-   METH_VARARGS,
-   "Display the list of signals of an entity in standard output"},
   {"entity_list_signals", dynamicgraph::python::entity::listSignals,
    METH_VARARGS,
    "Return the list of signals of an entity."},
diff --git a/src/dynamic_graph/entity.py b/src/dynamic_graph/entity.py
index fa1634f419bf712af04c4fca5089e682741ee61b..d43852bea8330e3a1604dc0427768a5b580b0d6d 100644
--- a/src/dynamic_graph/entity.py
+++ b/src/dynamic_graph/entity.py
@@ -79,7 +79,11 @@ class Entity (object) :
         """
         Print the list of signals into standard output: temporary.
         """
-        wrap.entity_display_signals(self.obj)
+        signals = self.signals()
+        print "--- <" +  self.name + "> signal list: "
+        for s in signals[:-1]:
+            print "    |-- <" + str(s)
+        print "    `-- <" + str(signals[-1])
 
     def signals(self) :
         """
diff --git a/src/dynamic_graph/signal_base.py b/src/dynamic_graph/signal_base.py
index e51e7888d66362409f1b946eaf1baa68a91ea499..c4836102d6270fc5b162bdf6738c3483faae3c01 100644
--- a/src/dynamic_graph/signal_base.py
+++ b/src/dynamic_graph/signal_base.py
@@ -211,3 +211,9 @@ class SignalBase (object) :
         Force signal to recompute the value at given time.
         """
         return wrap.signal_base_recompute(self.obj, time)
+
+    def __str__(self):
+        """
+        Print signal in a string
+        """
+        return wrap.signal_base_display(self.obj)
diff --git a/src/entity-py.cc b/src/entity-py.cc
index 325824f83d7fdac87f2b2c4a88e295c46a8af0d9..f907867f1d6d8ca409aaf3194e76952e5aa4ced2 100644
--- a/src/entity-py.cc
+++ b/src/entity-py.cc
@@ -132,31 +132,6 @@ namespace dynamicgraph {
 	return PyCObject_FromVoidPtr((void*)signal, NULL);
       }
 
-      PyObject* displaySignals(PyObject* /*self*/, PyObject* args)
-      {
-	void* pointer = NULL;
-	PyObject* object = NULL;
-
-	if (!PyArg_ParseTuple(args, "O", &object))
-	  return NULL;
-
-	if (!PyCObject_Check(object)) {
-	  PyErr_SetString(PyExc_TypeError,
-			  "function takes a PyCObject as argument");
-	  return NULL;
-	}
-
-	pointer = PyCObject_AsVoidPtr(object);
-	Entity* entity = (Entity*)pointer;
-	try {
-	  entity->displaySignalList(std::cout);
-	} catch(ExceptionAbstract& exc) {
-	  PyErr_SetString(error, exc.getStringMessage().c_str());
-	  return NULL;
-	}
-	return Py_BuildValue("");
-      }
-
       PyObject* listSignals(PyObject* /*self*/, PyObject* args)
       {
 	void* pointer = NULL;
diff --git a/src/signal-base-py.cc b/src/signal-base-py.cc
index 52475bf08e8c3d0cf08f5defa54ed7a74388ffee..e0d6d8a6117b2bd138431ae232f247e624d6896a 100644
--- a/src/signal-base-py.cc
+++ b/src/signal-base-py.cc
@@ -73,6 +73,28 @@ namespace dynamicgraph {
 	return Py_BuildValue("i", time);
       }
 
+      PyObject* display(PyObject* /*self*/, PyObject* args)
+      {
+	void* pointer = NULL;
+	PyObject* object = NULL;
+	if (!PyArg_ParseTuple(args,"O", &object))
+	  return NULL;
+	if (!PyCObject_Check(object))
+	  return NULL;
+
+	pointer = PyCObject_AsVoidPtr(object);
+	SignalBase<int>* obj = (SignalBase<int>*)pointer;
+
+	std::ostringstream oss;
+	try {
+	  obj->display(oss);
+	} catch (std::exception& exc) {
+	  PyErr_SetString(error, exc.what());
+	  return NULL;
+	}
+	return Py_BuildValue("s", oss.str().c_str());
+      }
+
       PyObject* getValue(PyObject* /*self*/, PyObject* args)
       {
 	void* pointer = NULL;