diff --git a/include/gepetto/gui/pythonwidget.hh b/include/gepetto/gui/pythonwidget.hh
index 1c8e4dd14f09647d0941f776854483e2d841426b..53f5887d703ed89f53eda3d7d05e8e097364fee9 100644
--- a/include/gepetto/gui/pythonwidget.hh
+++ b/include/gepetto/gui/pythonwidget.hh
@@ -98,8 +98,10 @@ namespace gepetto {
       /// class PythonQt.QtGui.QDockWidget
       void loadModulePlugin(QString moduleName);
       void unloadModulePlugin(QString moduleName);
+      void loadScriptPlugin(QString moduleName, QString fileName);
 
     private:
+      void loadPlugin(QString moduleName, PythonQtObjectPtr module);
       void unloadModulePlugin(PythonQtObjectPtr module);
 
       void addSignalHandlersToPlugin(PythonQtObjectPtr plugin);
diff --git a/src/gui/pythonwidget.cc b/src/gui/pythonwidget.cc
index caf1a6ace32f418f64d9c33590f3183314e39e77..cd95e9aede06ed02d0cc0a5e153c23856d57f246 100644
--- a/src/gui/pythonwidget.cc
+++ b/src/gui/pythonwidget.cc
@@ -95,9 +95,24 @@ namespace gepetto {
         fd->deleteLater();
       }
 
+      void PythonWidget::loadScriptPlugin(QString moduleName, QString fileName)
+      {
+        PythonQt* pqt = PythonQt::self();
+        PythonQtObjectPtr module = pqt->createModuleFromFile (moduleName, fileName);
+        if (pqt->handleError()) {
+          return;
+        }
+        if (module.isNull()) {
+          pqt->handleError();
+          qDebug() << "Enable to load module" << moduleName << "from script"
+            << fileName;
+          return;
+        }
+        loadPlugin (moduleName, module);
+      }
+
       void PythonWidget::loadModulePlugin(QString moduleName)
       {
-        MainWindow* main = MainWindow::instance();
         PythonQt* pqt = PythonQt::self();
         PythonQtObjectPtr module = pqt->importModule (moduleName);
         if (pqt->handleError()) {
@@ -108,6 +123,13 @@ namespace gepetto {
           qDebug() << "Enable to load module" << moduleName;
           return;
         }
+        loadPlugin (moduleName, module);
+      }
+
+      void PythonWidget::loadPlugin(QString moduleName, PythonQtObjectPtr module)
+      {
+        PythonQt* pqt = PythonQt::self();
+        MainWindow* main = MainWindow::instance();
         module.addObject("windowsManager", main->osg().get());
 
         QString var = "pluginInstance";
diff --git a/src/gui/settings.cc b/src/gui/settings.cc
index 7a80c37bdeae0e59878e6247107a2924ffbe755c..58af9e30677603b8ca484383c12776f925b5056f 100644
--- a/src/gui/settings.cc
+++ b/src/gui/settings.cc
@@ -176,8 +176,18 @@ namespace gepetto {
         pluginManager_.initPlugin (name);
 #if GEPETTO_GUI_HAS_PYTHONQT
       PythonWidget* pw = mw->pythonWidget();
-      foreach (QString name, pyplugins_)
-        pw->loadModulePlugin (name);
+      foreach (QString name, pyplugins_) {
+        if (name.endsWith (".py")) {
+          QFileInfo fi (name);
+          QString moduleName = fi.baseName();
+          QString script;
+          if (fi.isAbsolute()) script = name;
+          else script = QDir::currentPath() + QDir::separator() + name;
+          qDebug() << "Loading" << script << "into module" << moduleName;
+          pw->loadScriptPlugin (moduleName, script);
+        } else
+          pw->loadModulePlugin (name);
+      }
 #endif
     }