diff --git a/src/plugins/debugger/debuggeritem.h b/src/plugins/debugger/debuggeritem.h
index 5802b23f81b0d1bf77fc035c9bd967dd1d2f28d8..c7d9d7077715aebacfcbcbf51d0adf4c14c8d77c 100644
--- a/src/plugins/debugger/debuggeritem.h
+++ b/src/plugins/debugger/debuggeritem.h
@@ -42,6 +42,7 @@
 
 namespace Debugger {
 
+class DebuggerItemManager;
 namespace Internal {
 class DebuggerItemConfigWidget;
 class DebuggerItemModel;
@@ -63,7 +64,6 @@ public:
     QString engineTypeName() const;
 
     QVariantMap toMap() const;
-    void reinitializeFromFile();
 
     QVariant id() const { return m_id; }
 
@@ -92,6 +92,7 @@ public:
 
 private:
     DebuggerItem(const QVariant &id);
+    void reinitializeFromFile();
 
     QVariant m_id;
     QString m_displayName;
@@ -102,6 +103,7 @@ private:
 
     friend class Internal::DebuggerItemConfigWidget;
     friend class Internal::DebuggerItemModel;
+    friend class DebuggerItemManager;
 };
 
 } // namespace Debugger
diff --git a/src/plugins/debugger/debuggeritemmanager.cpp b/src/plugins/debugger/debuggeritemmanager.cpp
index cef2fd529a34db2b15bebd9dcd96c1732770e2e8..552018bd98bc6df8314cf8db2b2554e5269d032f 100644
--- a/src/plugins/debugger/debuggeritemmanager.cpp
+++ b/src/plugins/debugger/debuggeritemmanager.cpp
@@ -433,10 +433,18 @@ void DebuggerItemManager::setItemData(const QVariant &id, const QString &display
     for (int i = 0, n = m_debuggers.size(); i != n; ++i) {
         DebuggerItem &item = m_debuggers[i];
         if (item.id() == id) {
-            item.setDisplayName(displayName);
-            item.setCommand(fileName);
-            item.reinitializeFromFile();
-            emit m_instance->debuggerUpdated(id);
+            bool changed = false;
+            if (item.displayName() != displayName) {
+                item.setDisplayName(displayName);
+                changed = true;
+            }
+            if (item.command() != fileName) {
+                item.setCommand(fileName);
+                item.reinitializeFromFile();
+                changed = true;
+            }
+            if (changed)
+                emit m_instance->debuggerUpdated(id);
             break;
         }
     }
diff --git a/src/plugins/debugger/debuggeroptionspage.cpp b/src/plugins/debugger/debuggeroptionspage.cpp
index da42957d65aba43c747d95de825b280cc3e51a30..ef89a2d35d37593456bf6e736710ead1c9ec6439 100644
--- a/src/plugins/debugger/debuggeroptionspage.cpp
+++ b/src/plugins/debugger/debuggeroptionspage.cpp
@@ -39,6 +39,7 @@
 #include <utils/qtcassert.h>
 #include <utils/winutils.h>
 
+#include <QFileInfo>
 #include <QFormLayout>
 #include <QHeaderView>
 #include <QLabel>
@@ -59,26 +60,6 @@ static const char debuggingToolsWikiLinkC[] = "http://qt-project.org/wiki/Qt_Cre
 // DebuggerItemConfigWidget
 // -----------------------------------------------------------------------
 
-class DebuggerItemConfigWidget : public QWidget
-{
-    Q_DECLARE_TR_FUNCTIONS(Debugger::Internal::DebuggerItemConfigWidget)
-
-public:
-    explicit DebuggerItemConfigWidget(DebuggerItemModel *model);
-    DebuggerItem store() const;
-    void setItem(const DebuggerItem &item);
-    void apply();
-
-private:
-    QLineEdit *m_displayNameLineEdit;
-    QLabel *m_cdbLabel;
-    PathChooser *m_binaryChooser;
-    QLineEdit *m_abis;
-    DebuggerItemModel *m_model;
-    bool m_autodetected;
-    QVariant m_id;
-};
-
 DebuggerItemConfigWidget::DebuggerItemConfigWidget(DebuggerItemModel *model) :
     m_model(model)
 {
@@ -90,6 +71,7 @@ DebuggerItemConfigWidget::DebuggerItemConfigWidget(DebuggerItemModel *model) :
     m_binaryChooser->setExpectedKind(PathChooser::ExistingCommand);
     m_binaryChooser->setMinimumWidth(400);
     m_binaryChooser->setHistoryCompleter(QLatin1String("DebuggerPaths"));
+    connect(m_binaryChooser, SIGNAL(changed(QString)), this, SLOT(commandWasChanged()));
 
     m_cdbLabel = new QLabel(this);
     m_cdbLabel->setTextInteractionFlags(Qt::TextBrowserInteraction);
@@ -107,7 +89,7 @@ DebuggerItemConfigWidget::DebuggerItemConfigWidget(DebuggerItemModel *model) :
     formLayout->addRow(new QLabel(tr("ABIs:")), m_abis);
 }
 
-DebuggerItem DebuggerItemConfigWidget::store() const
+DebuggerItem DebuggerItemConfigWidget::item() const
 {
     DebuggerItem item(m_id);
     if (m_id.isNull())
@@ -116,11 +98,28 @@ DebuggerItem DebuggerItemConfigWidget::store() const
     item.setDisplayName(m_displayNameLineEdit->text());
     item.setCommand(m_binaryChooser->fileName());
     item.setAutoDetected(m_autodetected);
-    item.reinitializeFromFile();
-    m_model->updateDebugger(item);
+    QList<ProjectExplorer::Abi> abiList;
+    foreach (const QString &a, m_abis->text().split(QRegExp(QLatin1String("[^A-Za-z0-9-_]+")))) {
+        ProjectExplorer::Abi abi(a);
+        if (a.isNull())
+            continue;
+        abiList << a;
+    }
+    item.setAbis(abiList);
     return item;
 }
 
+
+void DebuggerItemConfigWidget::store() const
+{
+    m_model->updateDebugger(item());
+}
+
+void DebuggerItemConfigWidget::setAbis(const QStringList &abiNames)
+{
+    m_abis->setText(abiNames.join(QLatin1String(", ")));
+}
+
 void DebuggerItemConfigWidget::setItem(const DebuggerItem &item)
 {
     store(); // store away the (changed) settings for future use
@@ -157,17 +156,34 @@ void DebuggerItemConfigWidget::setItem(const DebuggerItem &item)
     m_cdbLabel->setVisible(!text.isEmpty());
     m_binaryChooser->setCommandVersionArguments(QStringList(versionCommand));
 
-    m_abis->setText(item.abiNames().join(QLatin1String(", ")));
+    setAbis(item.abiNames());
 }
 
 void DebuggerItemConfigWidget::apply()
 {
-    DebuggerItem item = m_model->currentDebugger();
-    if (!item.isValid())
+    DebuggerItem current = m_model->currentDebugger();
+    if (!current.isValid())
         return; // Nothing was selected here.
 
-    item = store();
-    setItem(item);
+    store();
+    setItem(item());
+}
+
+void DebuggerItemConfigWidget::commandWasChanged()
+{
+    // Use DebuggerItemManager as a cache:
+    const DebuggerItem *existing
+            = DebuggerItemManager::findByCommand(m_binaryChooser->fileName());
+    if (existing) {
+        setAbis(existing->abiNames());
+    } else {
+        QFileInfo fi = QFileInfo(m_binaryChooser->path());
+        if (fi.isExecutable()) {
+            DebuggerItem tmp = item();
+            tmp.reinitializeFromFile();
+            setAbis(tmp.abiNames());
+        }
+    }
 }
 
 // --------------------------------------------------------------------------
diff --git a/src/plugins/debugger/debuggeroptionspage.h b/src/plugins/debugger/debuggeroptionspage.h
index fd1782f4b47d5a2a6a1b5f1d973f6bd86199dbac..9eff612759a826a5ea3de9f17ac5dca26f96e7a7 100644
--- a/src/plugins/debugger/debuggeroptionspage.h
+++ b/src/plugins/debugger/debuggeroptionspage.h
@@ -30,15 +30,23 @@
 #ifndef DEBUGGER_DEBUGGEROPTIONSPAGE_H
 #define DEBUGGER_DEBUGGEROPTIONSPAGE_H
 
+#include "debuggeritem.h"
+
 #include <coreplugin/dialogs/ioptionspage.h>
 
+#include <QWidget>
+
 QT_BEGIN_NAMESPACE
+class QLabel;
+class QLineEdit;
 class QPushButton;
 class QTreeView;
-class QWidget;
 QT_END_NAMESPACE
 
-namespace Utils { class DetailsWidget; }
+namespace Utils {
+class DetailsWidget;
+class PathChooser;
+} // namespace Utils
 
 namespace Debugger {
 namespace Internal {
@@ -47,6 +55,36 @@ class DebuggerItemModel;
 class DebuggerItemConfigWidget;
 class DebuggerKitConfigWidget;
 
+// -----------------------------------------------------------------------
+// DebuggerItemConfigWidget
+// -----------------------------------------------------------------------
+
+class DebuggerItemConfigWidget : public QWidget
+{
+    Q_OBJECT
+
+public:
+    explicit DebuggerItemConfigWidget(DebuggerItemModel *model);
+    void setItem(const DebuggerItem &item);
+    void apply();
+
+private slots:
+    void commandWasChanged();
+
+private:
+    DebuggerItem item() const;
+    void store() const;
+    void setAbis(const QStringList &abiNames);
+
+    QLineEdit *m_displayNameLineEdit;
+    QLabel *m_cdbLabel;
+    Utils::PathChooser *m_binaryChooser;
+    QLineEdit *m_abis;
+    DebuggerItemModel *m_model;
+    bool m_autodetected;
+    QVariant m_id;
+};
+
 // --------------------------------------------------------------------------
 // DebuggerOptionsPage
 // --------------------------------------------------------------------------