diff --git a/src/libs/utils/reloadpromptutils.cpp b/src/libs/utils/reloadpromptutils.cpp
index 14cb1e4115a97d15c3e859b0a9d5f41eb08dfa44..3aea436fd1c3c513e3be6cf3cfc82bd344ed7aa3 100644
--- a/src/libs/utils/reloadpromptutils.cpp
+++ b/src/libs/utils/reloadpromptutils.cpp
@@ -36,11 +36,18 @@ using namespace Core;
 using namespace Core::Utils;
 
 QTCREATOR_UTILS_EXPORT Core::Utils::ReloadPromptAnswer
-    Core::Utils::reloadPrompt(const QString &fileName, QWidget *parent)
+    Core::Utils::reloadPrompt(const QString &fileName, bool modified, QWidget *parent)
 {
+
     const QString title = QCoreApplication::translate("Core::Utils::reloadPrompt", "File Changed");
-    const QString msg = QCoreApplication::translate("Core::Utils::reloadPrompt",
-                                                    "The file %1 has changed outside Qt Creator. Do you want to reload it?").arg(fileName);
+    QString msg;
+
+    if (modified)
+        msg = QCoreApplication::translate("Core::Utils::reloadPrompt",
+                                          "The unsaved file %1 has been changed outside Qt Creator. Do you want to reload it and discard your changes?").arg(fileName);
+    else
+        msg = QCoreApplication::translate("Core::Utils::reloadPrompt",
+                                          "The file %1 has changed outside Qt Creator. Do you want to reload it?").arg(fileName);
     return reloadPrompt(title, msg, parent);
 }
 
diff --git a/src/libs/utils/reloadpromptutils.h b/src/libs/utils/reloadpromptutils.h
index 919ad92b8cc388bd2ff255ddd8baa2bdae712983..f48b0fe57a33696346393493d97f8213ff5795b3 100644
--- a/src/libs/utils/reloadpromptutils.h
+++ b/src/libs/utils/reloadpromptutils.h
@@ -42,7 +42,7 @@ namespace Utils {
 
 enum ReloadPromptAnswer { ReloadCurrent, ReloadAll, ReloadSkipCurrent, ReloadNone };
 
-QTCREATOR_UTILS_EXPORT ReloadPromptAnswer reloadPrompt(const QString &fileName, QWidget *parent);
+QTCREATOR_UTILS_EXPORT ReloadPromptAnswer reloadPrompt(const QString &fileName, bool modified, QWidget *parent);
 QTCREATOR_UTILS_EXPORT ReloadPromptAnswer reloadPrompt(const QString &title, const QString &prompt, QWidget *parent);
 
 } // namespace Utils
diff --git a/src/plugins/bineditor/bineditorplugin.cpp b/src/plugins/bineditor/bineditorplugin.cpp
index 99a1b2868193a701c550f9f6687ede8041ee639b..d08d95829ab91a667cdb3cdc0ac2c99f08e385ed 100644
--- a/src/plugins/bineditor/bineditorplugin.cpp
+++ b/src/plugins/bineditor/bineditorplugin.cpp
@@ -196,6 +196,12 @@ public:
         switch (*behavior) {
         case  Core::IFile::ReloadNone:
             return;
+        case Core::IFile::ReloadUnmodified:
+            if (!isModified()) {
+                open(fileName);
+                return;
+            }
+            break;
         case Core::IFile::ReloadAll:
             open(fileName);
             return;
@@ -206,7 +212,7 @@ public:
             break;
         }
 
-        switch (Core::Utils::reloadPrompt(fileName, Core::ICore::instance()->mainWindow())) {
+        switch (Core::Utils::reloadPrompt(fileName, isModified(), Core::ICore::instance()->mainWindow())) {
         case Core::Utils::ReloadCurrent:
             open(fileName);
             break;
diff --git a/src/plugins/coreplugin/editormanager/editormanager.cpp b/src/plugins/coreplugin/editormanager/editormanager.cpp
index 1908936ec191f5d09b24cbc587eea9b80c069a6d..73943eb29ba5e27705315f48e75dd19460167bd8 100644
--- a/src/plugins/coreplugin/editormanager/editormanager.cpp
+++ b/src/plugins/coreplugin/editormanager/editormanager.cpp
@@ -186,6 +186,8 @@ struct EditorManagerPrivate {
 
     OpenEditorsModel *m_editorModel;
     QString m_externalEditor;
+
+    IFile::ReloadBehavior m_reloadBehavior;
 };
 }
 
@@ -206,7 +208,8 @@ EditorManagerPrivate::EditorManagerPrivate(ICore *core, QWidget *parent) :
     m_openInExternalEditorAction(new QAction(EditorManager::tr("Open in External Editor"), parent)),
     currentNavigationHistoryPosition(0),
     m_windowPopup(0),
-    m_coreListener(0)
+    m_coreListener(0),
+    m_reloadBehavior(IFile::AskForReload)
 {
     m_editorModel = new OpenEditorsModel(parent);
 }
@@ -1717,12 +1720,14 @@ bool EditorManager::restoreState(const QByteArray &state)
 
 static const char * const documentStatesKey = "EditorManager/DocumentStates";
 static const char * const externalEditorKey = "EditorManager/ExternalEditorCommand";
+static const char * const reloadBehaviorKey = "EditorManager/ReloadBehavior";
 
 void EditorManager::saveSettings()
 {
     SettingsDatabase *settings = m_d->m_core->settingsDatabase();
     settings->setValue(QLatin1String(documentStatesKey), m_d->m_editorStates);
     settings->setValue(QLatin1String(externalEditorKey), m_d->m_externalEditor);
+    settings->setValue(QLatin1String(reloadBehaviorKey), m_d->m_reloadBehavior);
 }
 
 void EditorManager::readSettings()
@@ -1745,6 +1750,9 @@ void EditorManager::readSettings()
             .value<QMap<QString, QVariant> >();
     if (settings->contains(QLatin1String(externalEditorKey)))
         m_d->m_externalEditor = settings->value(QLatin1String(externalEditorKey)).toString();
+
+    if (settings->contains(QLatin1String(reloadBehaviorKey)))
+        m_d->m_reloadBehavior = (IFile::ReloadBehavior)settings->value(QLatin1String(reloadBehaviorKey)).toInt();
 }
 
 
@@ -1913,6 +1921,15 @@ QString EditorManager::externalEditor() const
     return m_d->m_externalEditor;
 }
 
+void EditorManager::setReloadBehavior(IFile::ReloadBehavior behavior)
+{
+    m_d->m_reloadBehavior = behavior;
+}
+
+IFile::ReloadBehavior EditorManager::reloadBehavior() const
+{
+    return m_d->m_reloadBehavior;
+}
 
 Core::IEditor *EditorManager::duplicateEditor(Core::IEditor *editor)
 {
diff --git a/src/plugins/coreplugin/editormanager/editormanager.h b/src/plugins/coreplugin/editormanager/editormanager.h
index 5faae2a12769a9cdb3d177699867953f0d277856..8bb8d0439afbd750c7d342ecca7569b471909fb1 100644
--- a/src/plugins/coreplugin/editormanager/editormanager.h
+++ b/src/plugins/coreplugin/editormanager/editormanager.h
@@ -177,6 +177,8 @@ public:
     QString defaultExternalEditor() const;
     QString externalEditorHelpText() const;
 
+    void setReloadBehavior(IFile::ReloadBehavior behavior);
+    IFile::ReloadBehavior reloadBehavior() const;
 
     // Helper to display a message dialog when encountering a read-only
     // file, prompting the user about how to make it writeable.
diff --git a/src/plugins/coreplugin/filemanager.cpp b/src/plugins/coreplugin/filemanager.cpp
index e0525edbc8939e02355ea142bc9e180c845892d6..c59d23c2933a1d756ffa45db3c853a6c08e9b1bf 100644
--- a/src/plugins/coreplugin/filemanager.cpp
+++ b/src/plugins/coreplugin/filemanager.cpp
@@ -484,8 +484,7 @@ void FileManager::checkForReload()
         m_blockActivated = true;
         const QList<QPointer<IFile> > changed = m_changedFiles;
         m_changedFiles.clear();
-        IFile::ReloadBehavior behavior =
-            IFile::AskForReload;
+        IFile::ReloadBehavior behavior = EditorManager::instance()->reloadBehavior();
         foreach (IFile *f, changed) {
             if (!f)
                 continue;
diff --git a/src/plugins/coreplugin/generalsettings.cpp b/src/plugins/coreplugin/generalsettings.cpp
index 53b880f9e5518619fcec432ed313ce1dc08f6084..5a75f4f9dfd4f6f99fbb171890f4a52507f48580 100644
--- a/src/plugins/coreplugin/generalsettings.cpp
+++ b/src/plugins/coreplugin/generalsettings.cpp
@@ -74,6 +74,7 @@ QWidget *GeneralSettings::createPage(QWidget *parent)
 
     m_page->colorButton->setColor(StyleHelper::baseColor());
     m_page->externalEditorEdit->setText(EditorManager::instance()->externalEditor());
+    m_page->reloadBehavior->setCurrentIndex(EditorManager::instance()->reloadBehavior());
 #ifdef Q_OS_UNIX
     m_page->terminalEdit->setText(ConsoleProcess::terminalEmulator(Core::ICore::instance()->settings()));
 #else
@@ -101,6 +102,7 @@ void GeneralSettings::apply()
     // Apply the new base color if accepted
     StyleHelper::setBaseColor(m_page->colorButton->color());
     EditorManager::instance()->setExternalEditor(m_page->externalEditorEdit->text());
+    EditorManager::instance()->setReloadBehavior(IFile::ReloadBehavior(m_page->reloadBehavior->currentIndex()));
 #ifdef Q_OS_UNIX
 	ConsoleProcess::setTerminalEmulator(Core::ICore::instance()->settings(),
                                         m_page->terminalEdit->text());
diff --git a/src/plugins/coreplugin/generalsettings.ui b/src/plugins/coreplugin/generalsettings.ui
index a863709ac09b23c692a52cd964868a7236c8fc52..e2b84b732254b290c4e0613c966db69a1339dbcd 100644
--- a/src/plugins/coreplugin/generalsettings.ui
+++ b/src/plugins/coreplugin/generalsettings.ui
@@ -6,8 +6,8 @@
    <rect>
     <x>0</x>
     <y>0</y>
-    <width>540</width>
-    <height>236</height>
+    <width>536</width>
+    <height>233</height>
    </rect>
   </property>
   <layout class="QVBoxLayout" name="verticalLayout_2">
@@ -59,7 +59,7 @@
             <height>0</height>
            </size>
           </property>
-          <property name="alphaAllowed">
+          <property name="alphaAllowed" stdset="0">
            <bool>false</bool>
           </property>
          </widget>
@@ -156,6 +156,58 @@
         </item>
        </layout>
       </item>
+      <item>
+       <layout class="QHBoxLayout" name="horizontalLayout_2">
+        <item>
+         <widget class="QLabel" name="label_2">
+          <property name="text">
+           <string>When files are externally modified:</string>
+          </property>
+         </widget>
+        </item>
+        <item>
+         <widget class="QComboBox" name="reloadBehavior">
+          <property name="sizePolicy">
+           <sizepolicy hsizetype="MinimumExpanding" vsizetype="Fixed">
+            <horstretch>0</horstretch>
+            <verstretch>0</verstretch>
+           </sizepolicy>
+          </property>
+          <property name="currentIndex">
+           <number>0</number>
+          </property>
+          <item>
+           <property name="text">
+            <string>Always ask</string>
+           </property>
+          </item>
+          <item>
+           <property name="text">
+            <string>Reload all unmodified files</string>
+           </property>
+          </item>
+          <item>
+           <property name="text">
+            <string>Ignore modifications</string>
+           </property>
+          </item>
+         </widget>
+        </item>
+        <item>
+         <spacer name="horizontalSpacer_3">
+          <property name="orientation">
+           <enum>Qt::Horizontal</enum>
+          </property>
+          <property name="sizeHint" stdset="0">
+           <size>
+            <width>40</width>
+            <height>20</height>
+           </size>
+          </property>
+         </spacer>
+        </item>
+       </layout>
+      </item>
      </layout>
     </widget>
    </item>
diff --git a/src/plugins/coreplugin/ifile.h b/src/plugins/coreplugin/ifile.h
index edd4eb04ec3283b686a8e31b1b3aeb2b4e4daefc..4093d39a0f4ea632d580f2b31fe73966ee2151ed 100644
--- a/src/plugins/coreplugin/ifile.h
+++ b/src/plugins/coreplugin/ifile.h
@@ -42,7 +42,15 @@ class CORE_EXPORT IFile : public QObject
     Q_OBJECT
 
 public:
-    enum ReloadBehavior { AskForReload, ReloadAll, ReloadPermissions, ReloadNone };
+    // This enum must match the indexes of the reloadBehavior widget
+    // in generalsettings.ui
+    enum ReloadBehavior {
+        AskForReload = 0,
+        ReloadUnmodified = 1,
+        ReloadNone = 2,
+        ReloadAll,
+        ReloadPermissions
+    };
 
     IFile(QObject *parent = 0) : QObject(parent) {}
     virtual ~IFile() {}
diff --git a/src/plugins/designer/formwindowfile.cpp b/src/plugins/designer/formwindowfile.cpp
index fe459d9a156b12fa1df0a5f47d7841224b11d3b5..52441d33452206c1528a854c36c9563246a29a51 100644
--- a/src/plugins/designer/formwindowfile.cpp
+++ b/src/plugins/designer/formwindowfile.cpp
@@ -31,6 +31,7 @@
 #include "designerconstants.h"
 
 #include <coreplugin/icore.h>
+#include <coreplugin/editormanager/editormanager.h>
 #include <utils/reloadpromptutils.h>
 
 #include <QtDesigner/QDesignerFormWindowInterface>
@@ -117,6 +118,12 @@ void FormWindowFile::modified(Core::IFile::ReloadBehavior *behavior)
     switch (*behavior) {
     case  Core::IFile::ReloadNone:
         return;
+    case Core::IFile::ReloadUnmodified:
+        if (!isModified()) {
+            reload(m_fileName);
+            return;
+        }
+        break;
     case Core::IFile::ReloadAll:
         emit reload(m_fileName);
         return;
@@ -127,7 +134,7 @@ void FormWindowFile::modified(Core::IFile::ReloadBehavior *behavior)
         break;
     }
 
-    switch (Core::Utils::reloadPrompt(m_fileName, Core::ICore::instance()->mainWindow())) {
+    switch (Core::Utils::reloadPrompt(m_fileName, isModified(), Core::ICore::instance()->mainWindow())) {
     case Core::Utils::ReloadCurrent:
         emit reload(m_fileName);
         break;
diff --git a/src/plugins/resourceeditor/resourceeditorw.cpp b/src/plugins/resourceeditor/resourceeditorw.cpp
index 416e9c903843c12dbaa5e886d6f01427e95f3646..ae5925e65b607bd90f09191ad1bd11ce246106e4 100644
--- a/src/plugins/resourceeditor/resourceeditorw.cpp
+++ b/src/plugins/resourceeditor/resourceeditorw.cpp
@@ -34,6 +34,7 @@
 #include <qrceditor.h>
 
 #include <coreplugin/icore.h>
+#include <coreplugin/editormanager/editormanager.h>
 #include <utils/reloadpromptutils.h>
 
 #include <QtCore/QTemporaryFile>
@@ -189,8 +190,14 @@ void ResourceEditorFile::modified(Core::IFile::ReloadBehavior *behavior)
     const QString fileName = m_parent->m_resourceEditor->fileName();
 
     switch (*behavior) {
-    case  Core::IFile::ReloadNone:
+    case Core::IFile::ReloadNone:
         return;
+    case Core::IFile::ReloadUnmodified:
+        if (!isModified()) {
+            m_parent->open(fileName);
+            return;
+        }
+        break;
     case Core::IFile::ReloadAll:
         m_parent->open(fileName);
         return;
@@ -201,7 +208,7 @@ void ResourceEditorFile::modified(Core::IFile::ReloadBehavior *behavior)
         break;
     }
 
-    switch (Core::Utils::reloadPrompt(fileName, Core::ICore::instance()->mainWindow())) {
+    switch (Core::Utils::reloadPrompt(fileName, isModified(), Core::ICore::instance()->mainWindow())) {
     case Core::Utils::ReloadCurrent:
         m_parent->open(fileName);
         break;
diff --git a/src/plugins/texteditor/basetextdocument.cpp b/src/plugins/texteditor/basetextdocument.cpp
index a51c584eec3fc33dccb59d48999bc83cdf0f85f7..d40d43f538ca541155e2a8291afbd328c19ff4e0 100644
--- a/src/plugins/texteditor/basetextdocument.cpp
+++ b/src/plugins/texteditor/basetextdocument.cpp
@@ -31,6 +31,7 @@
 #include "basetexteditor.h"
 #include "storagesettings.h"
 
+
 #include <QtCore/QFile>
 #include <QtCore/QFileInfo>
 #include <QtCore/QTextStream>
@@ -42,6 +43,7 @@
 #ifndef TEXTEDITOR_STANDALONE
 #include <utils/reloadpromptutils.h>
 #include <coreplugin/icore.h>
+#include <coreplugin/editormanager/editormanager.h>
 #endif
 #include <utils/qtcassert.h>
 
@@ -256,6 +258,12 @@ void BaseTextDocument::modified(Core::IFile::ReloadBehavior *behavior)
     switch (*behavior) {
     case Core::IFile::ReloadNone:
         return;
+    case Core::IFile::ReloadUnmodified:
+        if (!isModified()) {
+            reload();
+            return;
+        }
+        break;
     case Core::IFile::ReloadAll:
         reload();
         return;
@@ -267,7 +275,8 @@ void BaseTextDocument::modified(Core::IFile::ReloadBehavior *behavior)
     }
 
 #ifndef TEXTEDITOR_STANDALONE
-    switch (Core::Utils::reloadPrompt(m_fileName, QApplication::activeWindow())) {
+
+    switch (Core::Utils::reloadPrompt(m_fileName, isModified(), QApplication::activeWindow())) {
     case Core::Utils::ReloadCurrent:
         reload();
         break;
diff --git a/src/plugins/texteditor/basetexteditor.cpp b/src/plugins/texteditor/basetexteditor.cpp
index a86c65dd8dab331ddc7b3568bd51cd267808c278..6419f553b7bad5894d49ff71fd0d3028fb8d176f 100644
--- a/src/plugins/texteditor/basetexteditor.cpp
+++ b/src/plugins/texteditor/basetexteditor.cpp
@@ -46,7 +46,6 @@
 #include <extensionsystem/pluginmanager.h>
 #include <find/basetextfind.h>
 
-#include <utils/reloadpromptutils.h>
 #include <aggregation/aggregate.h>
 #endif
 #include <utils/linecolumnlabel.h>