diff --git a/include/gepetto/gui/pythonwidget.hh b/include/gepetto/gui/pythonwidget.hh
index 443e58c208d45470337c5fc4721c96f1e695d570..f2309f84db69a1de3b6b5d0966f9cc8a1955dcee 100644
--- a/include/gepetto/gui/pythonwidget.hh
+++ b/include/gepetto/gui/pythonwidget.hh
@@ -28,6 +28,7 @@
 #include <QDockWidget>
 #include <QLayout>
 #include <QPushButton>
+#include <QSettings>
 
 class PythonQtObjectPtr;
 class PythonQtScriptingConsole;
@@ -98,6 +99,9 @@ namespace gepetto {
           const QVariantList& args = QVariantList(),
           const QVariantMap& kwargs = QVariantMap()) const;
 
+      void saveHistory (QSettings& settings);
+      void restoreHistory (QSettings& settings);
+
     public slots:
       /// Load a plugin by importing a module
       ///
diff --git a/src/gui/pythonwidget.cc b/src/gui/pythonwidget.cc
index 612f8e3fcb3a3681c6f24da62f4c06c77a7fd358..bfd33c39f4fe7e4484a3e3bc3f178831216870f6 100644
--- a/src/gui/pythonwidget.cc
+++ b/src/gui/pythonwidget.cc
@@ -18,6 +18,7 @@
 
 #include <QAction>
 #include <QFileDialog>
+#include <QSettings>
 #include <PythonQt.h>
 #include <PythonQt_QtAll.h>
 #include <gui/PythonQtScriptingConsole.h>
@@ -119,6 +120,32 @@ namespace gepetto {
         fd->deleteLater();
       }
 
+      void PythonWidget::saveHistory (QSettings& settings)
+      {
+        settings.beginGroup("pythonqt");
+        QStringList history = console_->history ();
+        int limit = 200;
+        int start = std::max(history.length() - limit, 0);
+        QList<QVariant> h;
+        foreach (QString s, history.mid(start)) {
+          h << s;
+        }
+        settings.setValue("history", h);
+        settings.endGroup();
+      }
+
+      void PythonWidget::restoreHistory (QSettings& settings)
+      {
+        settings.beginGroup("pythonqt");
+        QList<QVariant> h = settings.value("history").toList();
+        QStringList history;
+        foreach(QVariant v, h) {
+          history << v.toString();
+        }
+        console_->setHistory (history);
+        settings.endGroup();
+      }
+
       void PythonWidget::loadScriptPlugin(QString moduleName, QString fileName)
       {
         PythonQt* pqt = PythonQt::self();
diff --git a/src/gui/settings.cc b/src/gui/settings.cc
index 8d7a28ad52ff963c313fbf0bafd1d79d717fd18f..3474a11d07186c652ef0715ba6e4bf8c07b6065f 100644
--- a/src/gui/settings.cc
+++ b/src/gui/settings.cc
@@ -212,6 +212,9 @@ namespace gepetto {
         mw->restoreState (settings.value("state").toByteArray());
         mw->centralWidget()->setVisible (settings.value("centralWidgetVisibility", true).toBool());
         settings.endGroup();
+#if GEPETTO_GUI_HAS_PYTHONQT
+        mw->pythonWidget()->restoreHistory(settings);
+#endif
       }
     }
 
@@ -228,6 +231,9 @@ namespace gepetto {
         settings.setValue("state"   , mw->saveState());
         settings.setValue("centralWidgetVisibility", mw->centralWidget()->isVisible ());
         settings.endGroup();
+#if GEPETTO_GUI_HAS_PYTHONQT
+        mw->pythonWidget()->saveHistory(settings);
+#endif
       }
     }