diff --git a/src/plugins/coreplugin/designmode.cpp b/src/plugins/coreplugin/designmode.cpp
index 1dcece3b695ed03be4ced06053af84a857cce1b6..351767dcbe4cedd4d8cf6c2038f0b7952c52c7d2 100644
--- a/src/plugins/coreplugin/designmode.cpp
+++ b/src/plugins/coreplugin/designmode.cpp
@@ -186,10 +186,9 @@ void DesignMode::currentEditorChanged(Core::IEditor *editor)
     if (!mimeEditorAvailable)
         setEnabled(false);
 
-    if ((!mimeEditorAvailable && core->modeManager()->currentMode() == this)
-        || !modeActivated)
+    if (!mimeEditorAvailable && core->modeManager()->currentMode() == this)
     {
-        // switch back to edit mode
+        // switch back to edit mode - we don't want to be here
         core->modeManager()->activateMode(Constants::MODE_EDIT);
     }
 
diff --git a/src/plugins/designer/cpp/formclasswizard.cpp b/src/plugins/designer/cpp/formclasswizard.cpp
index 2c185c33506f9428d99884530f008eb6e3f02e78..c6b7b9a75f635e06b7eaae682cbe2721026a43a5 100644
--- a/src/plugins/designer/cpp/formclasswizard.cpp
+++ b/src/plugins/designer/cpp/formclasswizard.cpp
@@ -96,7 +96,7 @@ Core::GeneratedFiles FormClassWizard::generateFiles(const QWizard *w, QString *e
     // UI
     Core::GeneratedFile uiFile(formFileName);
     uiFile.setContents(params.uiTemplate());
-    uiFile.setEditorId(QLatin1String(Constants::FORMEDITOR_ID));
+    uiFile.setEditorId(QLatin1String(Constants::DESIGNER_XML_EDITOR_ID));
 
     QString source, header;
     Designer::FormClassWizardGenerationParameters generationParameters;
diff --git a/src/plugins/designer/formwindoweditor.cpp b/src/plugins/designer/formwindoweditor.cpp
index 7915619525947cd0117000c3a3e3632b788ac7e4..d32ad3bef84282e815eaae14f445fb36a470c81c 100644
--- a/src/plugins/designer/formwindoweditor.cpp
+++ b/src/plugins/designer/formwindoweditor.cpp
@@ -144,6 +144,7 @@ void FormWindowEditor::setFile(Core::IFile *file)
     }
 
     m_file = file;
+    m_formWindow->setFileName(file->fileName());
 
     if (m_file) {
         connect(m_file, SIGNAL(changed()), this, SIGNAL(changed()));
@@ -185,6 +186,9 @@ bool FormWindowEditor::createNew(const QString &contents)
 
     if (qdesigner_internal::FormWindowBase *fw = qobject_cast<qdesigner_internal::FormWindowBase *>(m_formWindow))
         fw->setDesignerGrid(qdesigner_internal::FormWindowBase::defaultDesignerGrid());
+
+    initializeResources();
+
     return true;
 }
 
@@ -216,31 +220,42 @@ bool FormWindowEditor::open(const QString &fileName /*= QString()*/)
             return false;
         m_formWindow->setDirty(false);
 
-        ProjectExplorer::ProjectExplorerPlugin *pe = ProjectExplorer::ProjectExplorerPlugin::instance();
-        ProjectExplorer::SessionManager *session = pe->session();
-        m_sessionNode = session->sessionNode();
-        m_sessionWatcher = new ProjectExplorer::NodesWatcher();
-        connect(m_sessionWatcher, SIGNAL(filesAdded()), this, SLOT(updateResources()));
-        connect(m_sessionWatcher, SIGNAL(filesRemoved()), this, SLOT(updateResources()));
-        connect(m_sessionWatcher, SIGNAL(foldersAdded()), this, SLOT(updateResources()));
-        connect(m_sessionWatcher, SIGNAL(foldersRemoved()), this, SLOT(updateResources()));
-        m_sessionNode->registerWatcher(m_sessionWatcher);
-
-        if (qdesigner_internal::FormWindowBase *fw = qobject_cast<qdesigner_internal::FormWindowBase *>(m_formWindow)) {
-            QtResourceSet *rs = fw->resourceSet();
-            m_originalUiQrcPaths = rs->activeQrcPaths();
-        }
+        initializeResources(fileName);
 
-        emit opened(fileName);
-        updateResources();
+        setDisplayName(fi.fileName());
 
-        QDesignerFormWindowManagerInterface *fwm = FormEditorW::instance()->designerEditor()->formWindowManager();
-        fwm->setActiveFormWindow(m_formWindow);
+    }
 
-        setDisplayName(fi.fileName());
+    return true;
+}
+void FormWindowEditor::initializeResources(const QString &fileName /*= QString()*/)
+{
+    ProjectExplorer::ProjectExplorerPlugin *pe = ProjectExplorer::ProjectExplorerPlugin::instance();
+    ProjectExplorer::SessionManager *session = pe->session();
+
+    m_sessionNode = session->sessionNode();
+    m_sessionWatcher = new ProjectExplorer::NodesWatcher();
+
+    connect(m_sessionWatcher, SIGNAL(filesAdded()), this, SLOT(updateResources()));
+    connect(m_sessionWatcher, SIGNAL(filesRemoved()), this, SLOT(updateResources()));
+    connect(m_sessionWatcher, SIGNAL(foldersAdded()), this, SLOT(updateResources()));
+    connect(m_sessionWatcher, SIGNAL(foldersRemoved()), this, SLOT(updateResources()));
+    m_sessionNode->registerWatcher(m_sessionWatcher);
+
+    if (qdesigner_internal::FormWindowBase *fw = qobject_cast<qdesigner_internal::FormWindowBase *>(m_formWindow)) {
+        QtResourceSet *rs = fw->resourceSet();
+        m_originalUiQrcPaths = rs->activeQrcPaths();
     }
+
+    if (!fileName.isEmpty())
+        emit opened(fileName);
+
+    updateResources();
+
+    QDesignerFormWindowManagerInterface *fwm = FormEditorW::instance()->designerEditor()->formWindowManager();
+    fwm->setActiveFormWindow(m_formWindow);
+
     emit changed();
-    return true;
 }
 
 void FormWindowEditor::updateResources()
diff --git a/src/plugins/designer/formwindoweditor.h b/src/plugins/designer/formwindoweditor.h
index ed9b7a67ab081e70efe613b76ef049b00713e6b9..50da0e86b4288f67d76a89b881ac6b4607caadd7 100644
--- a/src/plugins/designer/formwindoweditor.h
+++ b/src/plugins/designer/formwindoweditor.h
@@ -113,6 +113,8 @@ private slots:
     void updateResources();
 
 private:
+    void initializeResources(const QString &fileName = QString());
+
     QWidget *m_containerWidget;
     QString m_displayName;
     QList<int> m_context;
diff --git a/src/plugins/designer/formwizard.cpp b/src/plugins/designer/formwizard.cpp
index aa79fdf3b21514d8c677d57d1c61a3d6089e841c..1c219a121b71c7bd0f1fdc506006c7a6373d8945 100644
--- a/src/plugins/designer/formwizard.cpp
+++ b/src/plugins/designer/formwizard.cpp
@@ -66,6 +66,6 @@ Core::GeneratedFiles FormWizard::generateFiles(const QWizard *w,
 
     Core::GeneratedFile file(fileName);
     file.setContents(formTemplate);
-    file.setEditorId(QLatin1String(Constants::FORMEDITOR_ID));
+    file.setEditorId(QLatin1String(Constants::DESIGNER_XML_EDITOR_ID));
     return Core::GeneratedFiles() << file;
 }
diff --git a/src/plugins/qmldesigner/qmldesignerplugin.cpp b/src/plugins/qmldesigner/qmldesignerplugin.cpp
index dd67918caba7cab40cbd29625838b39612f96a2e..e7e7ab6281af41938139d8095b0c18f433e333ef 100644
--- a/src/plugins/qmldesigner/qmldesignerplugin.cpp
+++ b/src/plugins/qmldesigner/qmldesignerplugin.cpp
@@ -204,6 +204,7 @@ void BauhausPlugin::createDesignModeWidget()
                                             Core::Constants::PASTE, m_context->context());
     command->setDefaultKeySequence(QKeySequence::Paste);
     editMenu->addAction(command, Core::Constants::G_EDIT_COPYPASTE);
+    Core::ModeManager *modeManager = creatorCore->modeManager();
 
     command = actionManager->registerAction(m_mainWidget->selectAllAction(),
                                             Core::Constants::SELECTALL, m_context->context());
@@ -218,7 +219,8 @@ void BauhausPlugin::createDesignModeWidget()
 
     m_mainWidget->addAction(deleteAction);
 
-    Core::ModeManager *modeManager = creatorCore->modeManager();
+    connect(m_editorManager, SIGNAL(currentEditorChanged(Core::IEditor*)),
+            this, SLOT(updateEditor(Core::IEditor*)));
 
     connect(modeManager, SIGNAL(currentModeChanged(Core::IMode*)),
             this, SLOT(modeChanged(Core::IMode*)));
@@ -228,6 +230,16 @@ void BauhausPlugin::createDesignModeWidget()
 
 }
 
+void BauhausPlugin::updateEditor(Core::IEditor *editor)
+{
+    Core::ICore *creatorCore = Core::ICore::instance();
+    if (editor->id() == QmlJSEditor::Constants::C_QMLJSEDITOR_ID
+        && creatorCore->modeManager()->currentMode() == m_designMode)
+    {
+        m_mainWidget->showEditor(editor);
+    }
+}
+
 void BauhausPlugin::modeChanged(Core::IMode *mode)
 {
     if (mode == m_designMode) {
@@ -236,7 +248,6 @@ void BauhausPlugin::modeChanged(Core::IMode *mode)
     } else {
         if (m_isActive) {
             m_isActive = false;
-
             m_mainWidget->showEditor(0);
         }
     }
diff --git a/src/plugins/qmldesigner/qmldesignerplugin.h b/src/plugins/qmldesigner/qmldesignerplugin.h
index 6e4c7c16b20bcb61a6c472ab12a1fa59733a17b6..9ea4479890e5bf4ae9443b69ff284bce90580596 100644
--- a/src/plugins/qmldesigner/qmldesignerplugin.h
+++ b/src/plugins/qmldesigner/qmldesignerplugin.h
@@ -84,6 +84,7 @@ private slots:
     void modeChanged(Core::IMode *mode);
     void textEditorsClosed(QList<Core::IEditor *> editors);
     void updateActions(Core::IEditor* editor);
+    void updateEditor(Core::IEditor *editor);
 
 private:
     void createDesignModeWidget();