diff --git a/src/dynamic-graph-py.cc b/src/dynamic-graph-py.cc
index 544b0b50c5f00d5b6eb905c739258cf7dd9fc9de..a6235bc4fefbf91a0d0a2f93ff5b9f8dd9b38639 100644
--- a/src/dynamic-graph-py.cc
+++ b/src/dynamic-graph-py.cc
@@ -11,6 +11,7 @@
 #include <dynamic-graph/exception-factory.h>
 #include <dynamic-graph/interpreter-helper.h>
 #include <dynamic-graph/functions.h>
+#include <dynamic-graph/signal-base.h>
 
 namespace dynamicgraph {
   namespace python {
@@ -44,21 +45,31 @@ namespace dynamicgraph {
     PyObject*
     plug(PyObject* self, PyObject* args)
     {
-      char* objIn = NULL;
-      char* objOut = NULL;
-      char* sigIn = NULL;
-      char* sigOut = NULL;
-      if (!PyArg_ParseTuple(args,"ssss", &objOut, &sigOut, &objIn, &sigIn))
+      PyObject* objOut = NULL;
+      PyObject* objIn = NULL;
+      void* pObjOut;
+      void* pObjIn;
+
+      if (!PyArg_ParseTuple(args,"OO", &objOut, &objIn))
+	return NULL;
+
+      if (!PyCObject_Check(objOut))
+	return NULL;
+      if (!PyCObject_Check(objIn))
 	return NULL;
 
+      pObjIn = PyCObject_AsVoidPtr(objIn);
+	SignalBase<int>* signalIn = (SignalBase<int>*)pObjIn;
+      pObjOut = PyCObject_AsVoidPtr(objOut);
+	SignalBase<int>* signalOut = (SignalBase<int>*)pObjOut;
       std::ostringstream os;
+
       try {
-	interpreter.cmdPlug(objOut, sigOut, objIn, sigIn, os);
+	signalIn->plug(signalOut);
       } catch (std::exception& exc) {
 	PyErr_SetString(error, exc.what());
 	return NULL;
       }
-
       return Py_BuildValue("");
     }
 
diff --git a/src/dynamic_graph/__init__.py b/src/dynamic_graph/__init__.py
index 9ca6f39d76b27a83afebc32f3195c22bc71b9fc8..688261755701d3c992f3f6eb829462e96957d4ad 100644
--- a/src/dynamic_graph/__init__.py
+++ b/src/dynamic_graph/__init__.py
@@ -10,9 +10,6 @@ import re
 def plug (signalOut, signalIn) :
     """
     Plug an output signal into an input signal
-    syntax is plug ("entityIn.signalIn", "entityOut.signalOut")
     """
     # get signals and entities
-    [eOut, sOut] = re.split("\.", signalOut)
-    [eIn, sIn] = re.split("\.", signalIn)
-    w_plug(eOut, sOut, eIn, sIn)
+    w_plug(signalOut.object, signalIn.object)