diff --git a/src/plugins/coreplugin/scriptmanager/scriptmanager.cpp b/src/plugins/coreplugin/scriptmanager/scriptmanager.cpp
index 3edcc75658cd055989b64310c2d8aea9ae46fc93..1d13fa5ad380f8b7ff10871100deba9ba310e3e6 100644
--- a/src/plugins/coreplugin/scriptmanager/scriptmanager.cpp
+++ b/src/plugins/coreplugin/scriptmanager/scriptmanager.cpp
@@ -46,10 +46,6 @@
 #include <QtGui/QToolBar>
 #include <QtGui/QStatusBar>
 
-namespace {
-    enum { debugQWorkbenchWrappers = 0 };
-}
-
 // Script function template to pop up a message box
 // with a certain icon and buttons.
 template <int MsgBoxIcon, int MsgBoxButtons>
@@ -178,14 +174,9 @@ namespace Core {
 namespace Internal {
 
 ScriptManagerPrivate::ScriptManagerPrivate(QObject *parent)
-   : ScriptManager(parent), m_initialized(false)
-{
-}
-
-QScriptEngine &ScriptManagerPrivate::scriptEngine()
+   : ScriptManager(parent),
+   m_engine(0)
 {
-    ensureEngineInitialized();
-    return m_engine;
 }
 
 // Split a backtrace of the form:
@@ -225,25 +216,26 @@ bool ScriptManagerPrivate::runScript(const QString &script, QString *errorMessag
     ensureEngineInitialized();
     stack->clear();
 
-    m_engine.pushContext();
-    m_engine.evaluate(script);
+    m_engine->pushContext();
+    m_engine->evaluate(script);
 
-    const bool failed = m_engine.hasUncaughtException ();
+    const bool failed = m_engine->hasUncaughtException ();
     if (failed) {
-        const int errorLineNumber = m_engine.uncaughtExceptionLineNumber();
-        const QStringList backTrace = m_engine.uncaughtExceptionBacktrace();
+        const int errorLineNumber = m_engine->uncaughtExceptionLineNumber();
+        const QStringList backTrace = m_engine->uncaughtExceptionBacktrace();
         parseBackTrace(backTrace, *stack);
         const QString backtrace = backTrace.join(QString(QLatin1Char('\n')));
         *errorMessage = ScriptManager::tr("Exception at line %1: %2\n%3").arg(errorLineNumber).arg(engineError(m_engine)).arg(backtrace);
     }
-    m_engine.popContext();
+    m_engine->popContext();
     return !failed;
 }
 
 void ScriptManagerPrivate::ensureEngineInitialized()
 {
-    if (m_initialized)
+    if (m_engine)
         return;
+    m_engine = new QScriptEngine(this);
     // register QObjects that occur as properties
     SharedTools::registerQObject<QMainWindow>(m_engine);
     SharedTools::registerQObject<QStatusBar>(m_engine);
@@ -252,52 +244,51 @@ void ScriptManagerPrivate::ensureEngineInitialized()
 //    SharedTools::registerQObjectInterface<Core::MessageManager, MessageManagerPrototype>(m_engine);
 
 //    SharedTools::registerQObjectInterface<Core::IFile, FilePrototype>(m_engine);
-//    qScriptRegisterSequenceMetaType<QList<Core::IFile *> >(&m_engine);
+//    qScriptRegisterSequenceMetaType<QList<Core::IFile *> >(m_engine);
 //    SharedTools::registerQObjectInterface<Core::FileManager, FileManagerPrototype>(m_engine);
 
 //    SharedTools::registerQObjectInterface<Core::IEditor, EditorPrototype>(m_engine);
-    qScriptRegisterSequenceMetaType<QList<Core::IEditor *> >(&m_engine);
+    qScriptRegisterSequenceMetaType<QList<Core::IEditor *> >(m_engine);
 
 //    SharedTools::registerQObjectInterface<Core::EditorGroup, EditorGroupPrototype>(m_engine);
-    qScriptRegisterSequenceMetaType<QList<Core::EditorGroup *> >(&m_engine);
+    qScriptRegisterSequenceMetaType<QList<Core::EditorGroup *> >(m_engine);
 
     SharedTools::registerQObjectInterface<Core::EditorManager, EditorManagerPrototype>(m_engine);
 
 //    SharedTools::registerQObjectInterface<Core::ICore, CorePrototype>(m_engine);
 
     // Make "core" available
-    m_engine.globalObject().setProperty(QLatin1String("core"), qScriptValueFromValue(&m_engine, Core::ICore::instance()));
+    m_engine->globalObject().setProperty(QLatin1String("core"), qScriptValueFromValue(m_engine, Core::ICore::instance()));
 
     // CLASSIC:  registerInterfaceWithDefaultPrototype<Core::MessageManager, MessageManagerPrototype>(m_engine);
 
     // Message box conveniences
-    m_engine.globalObject().setProperty(QLatin1String("critical"),
-                                        m_engine.newFunction(messageBox<QMessageBox::Critical, QMessageBox::Ok>, 3));
-    m_engine.globalObject().setProperty(QLatin1String("warning"),
-                                        m_engine.newFunction(messageBox<QMessageBox::Warning, QMessageBox::Ok>, 3));
-    m_engine.globalObject().setProperty(QLatin1String("information"),
-                                        m_engine.newFunction(messageBox<QMessageBox::Information, QMessageBox::Ok>, 3));
+    m_engine->globalObject().setProperty(QLatin1String("critical"),
+                                        m_engine->newFunction(messageBox<QMessageBox::Critical, QMessageBox::Ok>, 3));
+    m_engine->globalObject().setProperty(QLatin1String("warning"),
+                                        m_engine->newFunction(messageBox<QMessageBox::Warning, QMessageBox::Ok>, 3));
+    m_engine->globalObject().setProperty(QLatin1String("information"),
+                                        m_engine->newFunction(messageBox<QMessageBox::Information, QMessageBox::Ok>, 3));
     // StandardButtons has overloaded operator '|' - grrr.
     enum { MsgBoxYesNo = 0x00014000 };
-    m_engine.globalObject().setProperty(QLatin1String("yesNoQuestion"),
-                                        m_engine.newFunction(messageBox<QMessageBox::Question, MsgBoxYesNo>, 3));
+    m_engine->globalObject().setProperty(QLatin1String("yesNoQuestion"),
+                                        m_engine->newFunction(messageBox<QMessageBox::Question, MsgBoxYesNo>, 3));
 
-    m_engine.globalObject().setProperty(QLatin1String("getText"), m_engine.newFunction(inputDialogGetText, 3));
-    m_engine.globalObject().setProperty(QLatin1String("getInteger"), m_engine.newFunction(inputDialogGetInteger, 3));
-    m_engine.globalObject().setProperty(QLatin1String("getDouble"), m_engine.newFunction(inputDialogGetDouble, 3));
-    m_engine.globalObject().setProperty(QLatin1String("getItem"), m_engine.newFunction(inputDialogGetItem, 3));
+    m_engine->globalObject().setProperty(QLatin1String("getText"), m_engine->newFunction(inputDialogGetText, 3));
+    m_engine->globalObject().setProperty(QLatin1String("getInteger"), m_engine->newFunction(inputDialogGetInteger, 3));
+    m_engine->globalObject().setProperty(QLatin1String("getDouble"), m_engine->newFunction(inputDialogGetDouble, 3));
+    m_engine->globalObject().setProperty(QLatin1String("getItem"), m_engine->newFunction(inputDialogGetItem, 3));
 
     // file box
-    m_engine.globalObject().setProperty(QLatin1String("getOpenFileNames"), m_engine.newFunction(fileBox<QFileDialog::AcceptOpen, QFileDialog::ExistingFiles> , 2));
-    m_engine.globalObject().setProperty(QLatin1String("getOpenFileName"), m_engine.newFunction(fileBox<QFileDialog::AcceptOpen, QFileDialog::ExistingFile> , 2));
-    m_engine.globalObject().setProperty(QLatin1String("getSaveFileName"), m_engine.newFunction(fileBox<QFileDialog::AcceptSave, QFileDialog::AnyFile> , 2));
-    m_engine.globalObject().setProperty(QLatin1String("getExistingDirectory"), m_engine.newFunction(fileBox<QFileDialog::AcceptSave, QFileDialog::DirectoryOnly> , 2));
-    m_initialized = true;
+    m_engine->globalObject().setProperty(QLatin1String("getOpenFileNames"), m_engine->newFunction(fileBox<QFileDialog::AcceptOpen, QFileDialog::ExistingFiles> , 2));
+    m_engine->globalObject().setProperty(QLatin1String("getOpenFileName"), m_engine->newFunction(fileBox<QFileDialog::AcceptOpen, QFileDialog::ExistingFile> , 2));
+    m_engine->globalObject().setProperty(QLatin1String("getSaveFileName"), m_engine->newFunction(fileBox<QFileDialog::AcceptSave, QFileDialog::AnyFile> , 2));
+    m_engine->globalObject().setProperty(QLatin1String("getExistingDirectory"), m_engine->newFunction(fileBox<QFileDialog::AcceptSave, QFileDialog::DirectoryOnly> , 2));
 }
 
-QString ScriptManagerPrivate::engineError(QScriptEngine &scriptEngine)
+QString ScriptManagerPrivate::engineError(QScriptEngine *scriptEngine)
 {
-    QScriptValue error = scriptEngine.evaluate(QLatin1String("Error"));
+    QScriptValue error = scriptEngine->evaluate(QLatin1String("Error"));
     if (error.isValid())
         return error.toString();
     return ScriptManager::tr("Unknown error");
diff --git a/src/plugins/coreplugin/scriptmanager/scriptmanager.h b/src/plugins/coreplugin/scriptmanager/scriptmanager.h
index 5d40f5b190bd07bb6690d0d5aa903d2ef6dbc40a..8b3fcb2b09d00faebaca0dcf6860cce184068747 100644
--- a/src/plugins/coreplugin/scriptmanager/scriptmanager.h
+++ b/src/plugins/coreplugin/scriptmanager/scriptmanager.h
@@ -59,9 +59,6 @@ public:
     ScriptManager(QObject *parent = 0) : QObject(parent) {}
     virtual ~ScriptManager() { }
 
-    // Access the engine (for plugins to wrap additional interfaces).
-    virtual QScriptEngine &scriptEngine() = 0;
-
     // Run a script
     virtual bool runScript(const QString &script, QString *errorMessage, Stack *errorStack) = 0;
     virtual bool runScript(const QString &script, QString *errorMessage) = 0;
diff --git a/src/plugins/coreplugin/scriptmanager/scriptmanager_p.h b/src/plugins/coreplugin/scriptmanager/scriptmanager_p.h
index 2a94e094ab8a6d2ffa9f3644af6813b74ae8c26d..4a34fd61d1acb95e6b28837eae7c8c7a1c1bde5c 100644
--- a/src/plugins/coreplugin/scriptmanager/scriptmanager_p.h
+++ b/src/plugins/coreplugin/scriptmanager/scriptmanager_p.h
@@ -45,17 +45,15 @@ class ScriptManagerPrivate : public Core::ScriptManager
 public:
     explicit ScriptManagerPrivate(QObject *parent);
 
-    QScriptEngine &scriptEngine();
     bool runScript(const QString &script, QString *errorMessage, Stack *stack);
     bool runScript(const QString &script, QString *errorMessage);
 
-    static QString engineError(QScriptEngine &scriptEngine);
+    static QString engineError(QScriptEngine *scriptEngine);
 
 private:
     void ensureEngineInitialized();
 
-    QScriptEngine m_engine;
-    bool m_initialized;
+    QScriptEngine *m_engine;
 };
 
 } // namespace Internal
diff --git a/src/plugins/duieditor/duieditoractionhandler.cpp b/src/plugins/duieditor/duieditoractionhandler.cpp
index 28c50a236198a59ecf2eae5bd43227e224862152..de776d5a814882b9995fd33ea433d2e180c2a38f 100644
--- a/src/plugins/duieditor/duieditoractionhandler.cpp
+++ b/src/plugins/duieditor/duieditoractionhandler.cpp
@@ -33,7 +33,6 @@
 
 #include <coreplugin/icore.h>
 #include <coreplugin/actionmanager/actionmanager.h>
-#include <coreplugin/scriptmanager/scriptmanager.h>
 
 #include <QtCore/QDebug>
 #include <QtGui/QAction>
diff --git a/src/shared/scriptwrapper/interface_wrap_helpers.h b/src/shared/scriptwrapper/interface_wrap_helpers.h
index 968c417f29f815f6ab5a3fe1f1d98ee5349def02..b28e84dbe060b9b132bd819d6ad9f4a14ede9473 100644
--- a/src/shared/scriptwrapper/interface_wrap_helpers.h
+++ b/src/shared/scriptwrapper/interface_wrap_helpers.h
@@ -70,13 +70,13 @@ static void scriptValueToQObjectInterface(const QScriptValue &sv, QObjectInterfa
 // QObject that implements the interface, so it can be casted to it.
 
 template <class QObjectInterface, class Prototype>
-static void registerQObjectInterface(QScriptEngine &engine)
+static void registerQObjectInterface(QScriptEngine *engine)
 {
-    Prototype *protoType = new Prototype(&engine);
-    const QScriptValue scriptProtoType = engine.newQObject(protoType);
+    Prototype *protoType = new Prototype(engine);
+    const QScriptValue scriptProtoType = engine->newQObject(protoType);
 
     const int metaTypeId = qScriptRegisterMetaType<QObjectInterface*>(
-        &engine,
+        engine,
         qObjectInterfaceToScriptValue<QObjectInterface>,
         scriptValueToQObjectInterface<QObjectInterface>,
         scriptProtoType);
diff --git a/src/shared/scriptwrapper/wrap_helpers.h b/src/shared/scriptwrapper/wrap_helpers.h
index 533450d8da8472c9ed6ae17fcc0ae41a9bd309b2..eed26e06852b10d913a5a8e3c258a66fd0bc923e 100644
--- a/src/shared/scriptwrapper/wrap_helpers.h
+++ b/src/shared/scriptwrapper/wrap_helpers.h
@@ -319,9 +319,9 @@ static void scriptValueToQObject(const QScriptValue &sv, SomeQObject * &p)
 // Q_PROPERTY(QMainWindow*).
 
 template <class SomeQObject>
-static void registerQObject(QScriptEngine &engine)
+static void registerQObject(QScriptEngine *engine)
 {
-    qScriptRegisterMetaType<SomeQObject*>(&engine,
+    qScriptRegisterMetaType<SomeQObject*>(engine,
                                           qObjectToScriptValue<SomeQObject>,
                                           scriptValueToQObject<SomeQObject>);
 }