diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index 3aae9d9bcb5f45b83a5e41d944d80c4084f1c5ee..cfea46db929aa7029ed27aded893611ec55f99b5 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -34,6 +34,7 @@ ADD_LIBRARY(${PYTHON_MODULE}
 	dynamic-graph-py.cc
 	signal-base-py.cc
 	entity-py.cc
+	factory-py.cc
 )
 
 # Remove prefix lib
diff --git a/src/dynamic-graph-py.cc b/src/dynamic-graph-py.cc
index 1e260e39fe0ad02ef0a2e6b191a5654036cb1864..5cab7d6af3782db28a74a2653fc9667bb37fc6ab 100644
--- a/src/dynamic-graph-py.cc
+++ b/src/dynamic-graph-py.cc
@@ -30,6 +30,9 @@ namespace dynamicgraph {
 
     }
 
+    namespace factory {
+      PyObject* getEntityClassList(PyObject* self, PyObject* args);
+    }
     PyObject* error;
 
     static dynamicgraph::InterpreterHelper interpreter;
@@ -114,6 +117,10 @@ static PyMethodDef dynamicGraphMethods[] = {
   {"entity_display_signals", dynamicgraph::python::entity::displaySignals,
    METH_VARARGS,
    "Display the list of signals of an entity in standard output"},
+  {"factory_get_entity_class_list",
+   dynamicgraph::python::factory::getEntityClassList,
+   METH_VARARGS,
+   "return the list of entity classes"},
   {NULL, NULL, 0, NULL}        /* Sentinel */
 };
 
diff --git a/src/factory-py.cc b/src/factory-py.cc
new file mode 100644
index 0000000000000000000000000000000000000000..a9bd7d94c6d43d26a1e1947da944cdc91e9cac31
--- /dev/null
+++ b/src/factory-py.cc
@@ -0,0 +1,44 @@
+/*
+ *  Copyright 2010 (C) CNRS
+ *  Author: Florent Lamiraux
+ */
+
+#include <Python.h>
+#include <iostream>
+#include <dynamic-graph/factory.h>
+
+using dynamicgraph::Entity;
+using dynamicgraph::ExceptionAbstract;
+
+namespace dynamicgraph {
+  namespace python {
+    
+    extern PyObject* error;
+
+    namespace factory {
+
+      /**
+	 \brief Get name of entity
+      */
+      PyObject* getEntityClassList(PyObject* self, PyObject* args)
+      {
+	if (!PyArg_ParseTuple(args, ""))
+	  return NULL;
+
+	std::vector <std::string> classNames;
+	dynamicgraph::g_factory.listEntities(classNames);
+	unsigned int classNumber = classNames.size();
+	// Build a tuple object
+	PyObject* classTuple = PyTuple_New(classNumber);
+	
+	for (unsigned int iEntity = 0; iEntity < classNames.size(); iEntity++) {
+	  PyObject* className = Py_BuildValue("s", classNames[iEntity].c_str());
+	  PyTuple_SetItem(classTuple, iEntity, className);
+	}
+
+	return Py_BuildValue("O", classTuple);
+      }
+      
+    } // namespace factory
+  } // namespace python
+} // namespace dynamicgraph