diff --git a/src/plugins/coreplugin/coreimpl.cpp b/src/plugins/coreplugin/coreimpl.cpp
index f17028ef55830775736776b3e755aa70646378cb..b9628e0eb9bacc48bbf95efe5692fa7847c41507 100644
--- a/src/plugins/coreplugin/coreimpl.cpp
+++ b/src/plugins/coreplugin/coreimpl.cpp
@@ -228,9 +228,9 @@ void CoreImpl::removeContextObject(IContext *context)
     m_mainwindow->removeContextObject(context);
 }
 
-void CoreImpl::openFiles(const QStringList &arguments)
+void CoreImpl::openFiles(const QStringList &arguments, bool switchMode)
 {
-    m_mainwindow->openFiles(arguments);
+    m_mainwindow->openFiles(arguments, switchMode);
 }
 
 void CoreImpl::emitNewItemsDialogRequested()
diff --git a/src/plugins/coreplugin/coreimpl.h b/src/plugins/coreplugin/coreimpl.h
index 0e00f4e02b428062cb6b9b610da4fb76ad0c22e5..e926c9fdcb944f0ef7058027fee564a65aad0768 100644
--- a/src/plugins/coreplugin/coreimpl.h
+++ b/src/plugins/coreplugin/coreimpl.h
@@ -88,7 +88,7 @@ public:
     void addContextObject(IContext *context);
     void removeContextObject(IContext *context);
 
-    void openFiles(const QStringList &fileNames);
+    void openFiles(const QStringList &fileNames, bool switchMode);
 
     void emitNewItemsDialogRequested();
 
diff --git a/src/plugins/coreplugin/coreplugin.cpp b/src/plugins/coreplugin/coreplugin.cpp
index e1894406ddfc182a890e0241634af349c7aa598b..9e8d03bfcca31dae0c5e597ea0ca623f9afd0cd8 100644
--- a/src/plugins/coreplugin/coreplugin.cpp
+++ b/src/plugins/coreplugin/coreplugin.cpp
@@ -100,7 +100,7 @@ void CorePlugin::extensionsInitialized()
 
 void CorePlugin::remoteCommand(const QStringList & /* options */, const QStringList &args)
 {
-    m_mainWindow->openFiles(args);
+    m_mainWindow->openFiles(args, true);
     m_mainWindow->activateWindow();
 }
 
diff --git a/src/plugins/coreplugin/icore.h b/src/plugins/coreplugin/icore.h
index 8aa2ff502d61bda46453e7b3e1d459ee58a4ca91..b07ee409edfd0da404ede04e9c01b3dbb79aaa63 100644
--- a/src/plugins/coreplugin/icore.h
+++ b/src/plugins/coreplugin/icore.h
@@ -119,7 +119,7 @@ public:
     virtual void addContextObject(IContext *context) = 0;
     virtual void removeContextObject(IContext *context) = 0;
 
-    virtual void openFiles(const QStringList &fileNames) = 0;
+    virtual void openFiles(const QStringList &fileNames, bool switchMode) = 0;
 
 signals:
     void coreAboutToOpen();
diff --git a/src/plugins/coreplugin/mainwindow.cpp b/src/plugins/coreplugin/mainwindow.cpp
index ffb3a46f6b2c42b24217bc3e08eb2f8d6ebf02bd..c7a9c8a074aefd437101f9a85abb0e720c29fe3b 100644
--- a/src/plugins/coreplugin/mainwindow.cpp
+++ b/src/plugins/coreplugin/mainwindow.cpp
@@ -416,7 +416,7 @@ void MainWindow::dropEvent(QDropEvent *event)
     QStringList files;
     if (isDesktopFileManagerDrop(event->mimeData(), &files)) {
         event->accept();
-        openFiles(files);
+        openFiles(files, true);
     } else {
         event->ignore();
     }
@@ -793,7 +793,7 @@ void MainWindow::newFile()
 
 void MainWindow::openFile()
 {
-    openFiles(editorManager()->getOpenFileNames());
+    openFiles(editorManager()->getOpenFileNames(), true);
 }
 
 static QList<IFileFactory*> getNonEditorFileFactories()
@@ -823,7 +823,7 @@ static IFileFactory *findFileFactory(const QList<IFileFactory*> &fileFactories,
 }
 
 // opens either an editor or loads a project
-void MainWindow::openFiles(const QStringList &fileNames)
+void MainWindow::openFiles(const QStringList &fileNames, bool switchMode)
 {
     QList<IFileFactory*> nonEditorFileFactories = getNonEditorFileFactories();
 
@@ -832,8 +832,13 @@ void MainWindow::openFiles(const QStringList &fileNames)
         const QString absoluteFilePath = fi.absoluteFilePath();
         if (IFileFactory *fileFactory = findFileFactory(nonEditorFileFactories, mimeDatabase(), fi)) {
             fileFactory->open(absoluteFilePath);
+            if (switchMode)
+                Core::ModeManager::instance()->activateMode(Core::Constants::MODE_EDIT);
         } else {
-            editorManager()->openEditor(absoluteFilePath);
+            EditorManager::OpenEditorFlag flags;
+            if (switchMode)
+                flags = EditorManager::ModeSwitch;
+            editorManager()->openEditor(absoluteFilePath, QString(), flags);
         }
     }
 }
diff --git a/src/plugins/coreplugin/mainwindow.h b/src/plugins/coreplugin/mainwindow.h
index 379676bad2461170ab0950f7cae3b77ce5a76e56..92adeceda6ddb2c105d61ad76b37bed39ece9948 100644
--- a/src/plugins/coreplugin/mainwindow.h
+++ b/src/plugins/coreplugin/mainwindow.h
@@ -97,7 +97,7 @@ public:
     void removeContextObject(IContext *contex);
     void resetContext();
 
-    void openFiles(const QStringList &fileNames);
+    void openFiles(const QStringList &fileNames, bool switchMode);
 
     Core::ActionManager *actionManager() const;
     Core::FileManager *fileManager() const;
diff --git a/src/plugins/projectexplorer/projectexplorer.cpp b/src/plugins/projectexplorer/projectexplorer.cpp
index 449d4e0b7773f6e46781026124ae56b75040399a..22cbc2dc830e57dfdf1e683ac8ca040b096634cc 100644
--- a/src/plugins/projectexplorer/projectexplorer.cpp
+++ b/src/plugins/projectexplorer/projectexplorer.cpp
@@ -1240,7 +1240,7 @@ void ProjectExplorerPlugin::restoreSession()
     connect(d->m_welcomePage, SIGNAL(requestSession(QString)), this, SLOT(loadSession(QString)));
     connect(d->m_welcomePage, SIGNAL(requestProject(QString)), this, SLOT(loadProject(QString)));
 
-    Core::ICore::instance()->openFiles(arguments);
+    Core::ICore::instance()->openFiles(arguments, false);
     updateActions();
 
 }
@@ -2375,7 +2375,7 @@ void ProjectExplorerPlugin::openOpenProjectDialog()
     const QString path = fileMananger->useProjectsDirectory() ? fileMananger->projectsDirectory() : QString();
     const QStringList files = fileMananger->getOpenFileNames(filters, path, &projectFilesFilter);
     if (!files.isEmpty())
-        Core::ICore::instance()->openFiles(files);
+        Core::ICore::instance()->openFiles(files, true);
 }
 
 Q_EXPORT_PLUGIN(ProjectExplorerPlugin)
diff --git a/src/plugins/qt4projectmanager/gettingstartedwelcomepagewidget.cpp b/src/plugins/qt4projectmanager/gettingstartedwelcomepagewidget.cpp
index ae6e92046835fe4c47a2d1871c09cef58fa2abb7..10d3af85ec0d9c26f7a7649de83b82e1ad89bd8c 100644
--- a/src/plugins/qt4projectmanager/gettingstartedwelcomepagewidget.cpp
+++ b/src/plugins/qt4projectmanager/gettingstartedwelcomepagewidget.cpp
@@ -335,7 +335,7 @@ void GettingStartedWelcomePageWidget::slotOpenExample()
         tryFile = proFileInfo.path() + '/' + proFileInfo.baseName() + ".qml";
     if(QFile::exists(tryFile))
         files << tryFile;
-    Core::ICore::instance()->openFiles(files);
+    Core::ICore::instance()->openFiles(files, true);
     if (!helpFile.isEmpty())
         slotOpenContextHelpPage(helpFile);
 }