diff --git a/src/plugins/debugger/debuggeragents.cpp b/src/plugins/debugger/debuggeragents.cpp
index c4b592856a0a5a2fea6cb276e9a6c9f5ee0abcc8..d18e72c2aa2614f724eb377ac831d2e32f33b200 100644
--- a/src/plugins/debugger/debuggeragents.cpp
+++ b/src/plugins/debugger/debuggeragents.cpp
@@ -33,6 +33,7 @@
 #include "debuggerplugin.h"
 #include "debuggerstringutils.h"
 #include "stackframe.h"
+#include "debuggerconstants.h"
 
 #include <coreplugin/coreconstants.h>
 #include <coreplugin/editormanager/editormanager.h>
@@ -367,8 +368,8 @@ void DisassemblerViewAgent::setContents(const QString &contents)
                 Core::Constants::K_DEFAULT_TEXT_EDITOR_ID,
                 &titlePattern));
         QTC_ASSERT(d->editor, return);
-        d->editor->setProperty("OpenedByDebugger", true);
-        d->editor->setProperty("DisassemblerView", true);
+        d->editor->setProperty(Debugger::Constants::OPENED_BY_DEBUGGER, true);
+        d->editor->setProperty(Debugger::Constants::OPENED_WITH_DISASSEMBLY, true);
         d->configureMimeType();
     }
 
diff --git a/src/plugins/debugger/debuggerconstants.h b/src/plugins/debugger/debuggerconstants.h
index 0360144147da087358cd513e9d3960c77d04873f..a01e32759233bf7d323373b26e8e1e19c5af7b67 100644
--- a/src/plugins/debugger/debuggerconstants.h
+++ b/src/plugins/debugger/debuggerconstants.h
@@ -87,6 +87,9 @@ namespace Internal {
 
 } // namespace Internal
 
+const char * const OPENED_BY_DEBUGGER         = "OpenedByDebugger";
+const char * const OPENED_WITH_DISASSEMBLY    = "DisassemblerView";
+
 } // namespace Constants
 
 
diff --git a/src/plugins/debugger/debuggerplugin.cpp b/src/plugins/debugger/debuggerplugin.cpp
index ea90ff9f155df533787b803373b413ad38df41b9..c178d8a2ae6f22f40e93caf6bb66c3d1ac3810ea 100644
--- a/src/plugins/debugger/debuggerplugin.cpp
+++ b/src/plugins/debugger/debuggerplugin.cpp
@@ -2146,9 +2146,17 @@ void DebuggerPluginPrivate::cleanupViews()
     if (theDebuggerBoolSetting(CloseBuffersOnExit)) {
         if (EditorManager *editorManager = EditorManager::instance()) {
             QList<IEditor *> toClose;
-            foreach (IEditor *editor, editorManager->openedEditors())
-                if (editor->property("OpenedByDebugger").toBool())
-                    toClose.append(editor);
+            foreach (IEditor *editor, editorManager->openedEditors()) {
+                if (editor->property(Debugger::Constants::OPENED_BY_DEBUGGER).toBool()) {
+                    // close disassembly views. close other opened files if they are not modified and not current editor
+                    if (editor->property(Debugger::Constants::OPENED_WITH_DISASSEMBLY).toBool()
+                            || (!editor->file()->isModified() && editor != editorManager->currentEditor())) {
+                        toClose.append(editor);
+                    } else {
+                        editor->setProperty(Debugger::Constants::OPENED_BY_DEBUGGER, false);
+                    }
+                }
+            }
             editorManager->closeEditors(toClose);
         }
     }
@@ -2425,7 +2433,7 @@ void DebuggerPluginPrivate::gotoLocation(const QString &file, int line, bool set
     if (!editor)
         return;
     if (newEditor)
-        editor->setProperty("OpenedByDebugger", true);
+        editor->setProperty(Debugger::Constants::OPENED_BY_DEBUGGER, true);
     if (setMarker)
         m_locationMark.reset(new LocationMark(file, line));
 }