diff --git a/src/plugins/qmldesigner/QmlDesigner.pluginspec b/src/plugins/qmldesigner/QmlDesigner.pluginspec
index bb2ed107848474f10f783688182f796c621becdd..26e62766327ef3f8db07ca5e4b997055c1c59e7c 100644
--- a/src/plugins/qmldesigner/QmlDesigner.pluginspec
+++ b/src/plugins/qmldesigner/QmlDesigner.pluginspec
@@ -1,4 +1,4 @@
-<plugin name="QmlDesigner" version="1.3.82" compatVersion="1.3.82">
+<plugin name="QmlDesigner" version="1.3.82" compatVersion="1.3.82" experimental="true">
     <vendor>Nokia Corporation</vendor>
     <copyright>(C) 2010 Nokia Corporation</copyright>
     <license>
diff --git a/src/plugins/qmljseditor/qmljseditorfactory.cpp b/src/plugins/qmljseditor/qmljseditorfactory.cpp
index 474b05fc4f0b806016e766561189fa794cfba40c..64d62a01d89ba13d775ca10c9e11e3f67de62841 100644
--- a/src/plugins/qmljseditor/qmljseditorfactory.cpp
+++ b/src/plugins/qmljseditor/qmljseditorfactory.cpp
@@ -33,10 +33,49 @@
 #include "qmljseditorconstants.h"
 #include "qmljseditorplugin.h"
 
+#include <extensionsystem/pluginmanager.h>
+#include <extensionsystem/pluginspec.h>
+
+#include <coreplugin/icore.h>
 #include <coreplugin/editormanager/editormanager.h>
 
 #include <QtCore/QFileInfo>
 #include <QtCore/QDebug>
+#include <QtCore/QSettings>
+#include <QtGui/QMessageBox>
+#include <QtGui/QPushButton>
+#include <QtGui/QMainWindow>
+
+namespace {
+    const char * const QMLDESIGNER_INFO_BAR = "QmlJSEditor.QmlDesignerInfoBar";
+    const char * const KEY_QMLGROUP = "QML";
+    const char * const KEY_NAGABOUTDESIGNER = "AskAboutVisualDesigner";
+
+    bool isQmlDesignerExperimentallyDisabled()
+    {
+        ExtensionSystem::PluginManager *pm = ExtensionSystem::PluginManager::instance();
+        foreach (const ExtensionSystem::PluginSpec *spec, pm->plugins()) {
+            if (spec->name() == QLatin1String("QmlDesigner")) {
+                if (spec->isExperimental() && !spec->isEnabled())
+                    return true;
+                return false;
+            }
+        }
+        return false;
+    }
+
+    bool isNaggingAboutExperimentalDesignerEnabled()
+    {
+        if (!isQmlDesignerExperimentallyDisabled()) {
+            return false;
+        }
+        QSettings *settings = Core::ICore::instance()->settings();
+        settings->beginGroup(QLatin1String(KEY_QMLGROUP));
+        bool nag = settings->value(QLatin1String(KEY_NAGABOUTDESIGNER), true).toBool();
+        settings->endGroup();
+        return nag;
+    }
+}
 
 using namespace QmlJSEditor::Internal;
 using namespace QmlJSEditor::Constants;
@@ -77,6 +116,14 @@ Core::IFile *QmlJSEditorFactory::open(const QString &fileName)
 
 Core::IEditor *QmlJSEditorFactory::createEditor(QWidget *parent)
 {
+    static bool listenerInitialized = false;
+    if (!listenerInitialized) {
+        listenerInitialized = true;
+        if (isNaggingAboutExperimentalDesignerEnabled()) {
+            connect(Core::EditorManager::instance(), SIGNAL(currentEditorChanged(Core::IEditor*)),
+                     SLOT(updateEditorInfoBar(Core::IEditor*)));
+        }
+    }
     QmlJSTextEditor *rc = new QmlJSTextEditor(parent);
     QmlJSEditorPlugin::instance()->initializeEditor(rc);
     return rc->editableInterface();
@@ -86,3 +133,58 @@ QStringList QmlJSEditorFactory::mimeTypes() const
 {
     return m_mimeTypes;
 }
+
+void QmlJSEditorFactory::updateEditorInfoBar(Core::IEditor *editor)
+{
+    if (qobject_cast<QmlJSEditorEditable *>(editor)) {
+        Core::EditorManager::instance()->showEditorInfoBar(QMLDESIGNER_INFO_BAR,
+            tr("Do you want to enable the experimental Quick Designer?"),
+            tr("Enable Quick Designer"), this, SLOT(activateQmlDesigner()));
+    } else {
+        Core::EditorManager::instance()->hideEditorInfoBar(QMLDESIGNER_INFO_BAR);
+    }
+}
+
+void QmlJSEditorFactory::activateQmlDesigner()
+{
+    QString menu;
+#ifdef Q_WS_MAC
+    menu = tr("Qt Creator -> About Plugins...");
+#else
+    menu = tr("Help -> About Plugins...");
+#endif
+    QMessageBox message(Core::ICore::instance()->mainWindow());
+    message.setWindowTitle(tr("Enable experimental Quick Designer?"));
+    message.setText(tr("Do you want to enable the experimental Quick Designer? "
+                       "After enabling it, you can access the visual design capabilities by switching to Design Mode. "
+                       "This can affect the overall stability of Qt Creator. "
+                       "To disable Quick Designer again, visit the menu '%1' and disable 'QmlDesigner'.").arg(menu));
+    message.setIcon(QMessageBox::Question);
+    QPushButton *enable = message.addButton(tr("Enable Quick Designer"), QMessageBox::AcceptRole);
+    QPushButton *dontNag = message.addButton(tr("Never ask me again"), QMessageBox::ActionRole);
+    message.addButton(tr("Cancel"), QMessageBox::RejectRole);
+    message.exec();
+    if (message.clickedButton() == enable) {
+        ExtensionSystem::PluginManager *pm = ExtensionSystem::PluginManager::instance();
+        foreach (ExtensionSystem::PluginSpec *spec, pm->plugins()) {
+            if (spec->name() == QLatin1String("QmlDesigner")) {
+                spec->setEnabled(true);
+                pm->writeSettings();
+                QMessageBox::information(Core::ICore::instance()->mainWindow(), tr("Please restart Qt Creator"),
+                                         tr("Please restart Qt Creator to make the change effective."));
+                disconnect(Core::EditorManager::instance(), SIGNAL(currentEditorChanged(Core::IEditor*)),
+                         this, SLOT(updateEditorInfoBar(Core::IEditor*)));
+                Core::EditorManager::instance()->hideEditorInfoBar(QMLDESIGNER_INFO_BAR);
+                return;
+            }
+        }
+    } else if (message.clickedButton() == dontNag) {
+        QSettings *settings = Core::ICore::instance()->settings();
+        settings->beginGroup(QLatin1String(KEY_QMLGROUP));
+        settings->setValue(QLatin1String(KEY_NAGABOUTDESIGNER), false);
+        settings->endGroup();
+        disconnect(Core::EditorManager::instance(), SIGNAL(currentEditorChanged(Core::IEditor*)),
+                 this, SLOT(updateEditorInfoBar(Core::IEditor*)));
+        Core::EditorManager::instance()->hideEditorInfoBar(QMLDESIGNER_INFO_BAR);
+    }
+}
diff --git a/src/plugins/qmljseditor/qmljseditorfactory.h b/src/plugins/qmljseditor/qmljseditorfactory.h
index 084d99c341be355e10c464df463d9c27e41f0a59..5527a93c8c19f4cfa060e67269df8a4322f442d7 100644
--- a/src/plugins/qmljseditor/qmljseditorfactory.h
+++ b/src/plugins/qmljseditor/qmljseditorfactory.h
@@ -58,6 +58,10 @@ public:
     Core::IFile *open(const QString &fileName);
     Core::IEditor *createEditor(QWidget *parent);
 
+private slots:
+    void activateQmlDesigner();
+    void updateEditorInfoBar(Core::IEditor *editor);
+
 private:
     QStringList m_mimeTypes;
 };