diff --git a/include/gepetto/gui/mainwindow.hh b/include/gepetto/gui/mainwindow.hh
index c8a806f6bb6b63f3762ea9606f1279bc8a917eb0..e2e8480b99364d8b76582358414e4dc90eebaa8e 100644
--- a/include/gepetto/gui/mainwindow.hh
+++ b/include/gepetto/gui/mainwindow.hh
@@ -29,6 +29,12 @@ namespace gepetto {
       Q_OBJECT
 
       public:
+        enum RefreshType {
+          RefreshBodyTree = 1,
+          RefreshPlugins  = 2,
+          RefreshAll = RefreshBodyTree + RefreshPlugins
+        };
+
         Settings* settings_;
 
         explicit MainWindow(Settings* settings, QWidget *parent = 0);
@@ -81,7 +87,9 @@ signals:
         void logJobFailed  (int id, const QString& text);
 
         OSGWidget* delayedCreateView (QString name = "");
-        void requestRefresh ();
+        /// Request a refresh of the interface.
+        /// \param refreshType tells what to refresh. See RefreshType
+        void requestRefresh (int refreshType = RefreshAll);
         void requestApplyCurrentConfiguration ();
         void requestConfigurationValidation ();
         void configurationValidationStatusChanged (bool valid);
diff --git a/pyplugins/gepetto/gui/pythonwidget.py b/pyplugins/gepetto/gui/pythonwidget.py
index 5a6039b0f10a1d50ad7252a5c793dea2ec7906d0..7c4df4b4cf0476ff080301a23312ed54528ffcc3 100644
--- a/pyplugins/gepetto/gui/pythonwidget.py
+++ b/pyplugins/gepetto/gui/pythonwidget.py
@@ -3,10 +3,11 @@ from gepetto.corbaserver import Client
 import sys
 sys.argv = ["none"]
 
+### This class represents one special tab of the new QDockWidget
 class _NodeCreator (QtGui.QWidget):
-    def __init__(self, parent, client):
+    def __init__(self, parent, plugin):
         super(_NodeCreator, self).__init__ (parent)
-        self.client = client
+        self.plugin = plugin
         box = QtGui.QVBoxLayout(self)
 
         # Name line edit
@@ -31,7 +32,7 @@ class _NodeCreator (QtGui.QWidget):
 
     def update(self):
         self.groupNodes.clear()
-        for n in self.client.gui.getSceneList():
+        for n in self.plugin.client.gui.getSceneList():
             self.groupNodes.addItem (n)
 
     def addWidgetsInHBox(self, widgets):
@@ -49,14 +50,21 @@ class _NodeCreator (QtGui.QWidget):
 
     def addMesh (self):
         filename = QtGui.QFileDialog.getOpenFileName (self, "Choose a mesh")
-        self.client.gui.addMesh(str(self.nodeName.text), str(filename))
+        self.plugin.client.gui.addMesh(str(self.nodeName.text), str(filename))
+        self.refreshBodyTree()
 
     def createGroup (self):
-        self.client.gui.createGroup(str(self.nodeName.text))
+        self.plugin.client.gui.createGroup(str(self.nodeName.text))
         self.groupNodes.addItem(self.nodeName.text)
+        self.refreshBodyTree()
 
     def addToGroup (self):
-        self.client.gui.addToGroup(str(self.nodeName.text), str(self.groupNodes.currentText))
+        self.plugin.client.gui.addToGroup(str(self.nodeName.text), str(self.groupNodes.currentText))
+        self.refreshBodyTree()
+
+    ## See gepetto::gui::MainWindow::requestRefresh for more information
+    def refreshBodyTree(self, select = 1):
+        self.plugin.main.requestRefresh(select)
 
 class Plugin(QtGui.QDockWidget):
     """
@@ -72,14 +80,18 @@ class Plugin(QtGui.QDockWidget):
         # Initialize the widget
         self.tabWidget = QtGui.QTabWidget(self)
         self.setWidget (self.tabWidget)
-        self.nodeCreator = _NodeCreator(self, self.client)
+        self.nodeCreator = _NodeCreator(self, self)
         self.tabWidget.addTab (self.nodeCreator, "Node Creator")
+        self.main = mainWindow
         mainWindow.connect('refresh()', self.refresh)
 
     ### If present, this function is called when a new OSG Widget is created.
     def osgWidget(self, osgWindow):
         osgWindow.connect('selected(QString)', self.selected)
 
+    def resetConnection(self):
+        self.client = Client()
+
     def refresh(self):
         self.nodeCreator.update()
 
diff --git a/src/gui/bodytreewidget.cc b/src/gui/bodytreewidget.cc
index 591ade1b4b0d81d0ab0260c29c114e4b73059bd4..1a64448caf10f4132c45666c3539eb499de0c863 100644
--- a/src/gui/bodytreewidget.cc
+++ b/src/gui/bodytreewidget.cc
@@ -72,7 +72,6 @@ namespace gepetto {
       view_->setModel(model_);
       view_->setSelectionMode(QAbstractItemView::SingleSelection);
 
-      connect (main, SIGNAL (refresh()), SLOT (reloadBodyTree()));
       connect (view_, SIGNAL (customContextMenuRequested(QPoint)), SLOT(customContextMenu(QPoint)));
 
       toolBox_->removeItem(0);
diff --git a/src/gui/mainwindow.cc b/src/gui/mainwindow.cc
index e5d1ce765c34101636becffa65a2fcf1e1a9d1c3..b2d29aafb3f6e0830693f9eaa31578b4387de139 100644
--- a/src/gui/mainwindow.cc
+++ b/src/gui/mainwindow.cc
@@ -179,9 +179,12 @@ namespace gepetto {
       return osgWindows_.last();
     }
 
-    void MainWindow::requestRefresh()
+    void MainWindow::requestRefresh(int type)
     {
-      emit refresh ();
+      if (type & RefreshBodyTree)
+        bodyTree()->reloadBodyTree();
+      if (type & RefreshPlugins)
+        emit refresh ();
     }
 
     OSGWidget *MainWindow::onCreateView() {