diff --git a/src/plugins/debugger/debuggeroptionspage.cpp b/src/plugins/debugger/debuggeroptionspage.cpp
index b56918398bf34c08fe44d5395c9935c7716b9560..5cfdfba1f899ec0311df1f3bf22ffe7525eb24c4 100644
--- a/src/plugins/debugger/debuggeroptionspage.cpp
+++ b/src/plugins/debugger/debuggeroptionspage.cpp
@@ -71,7 +71,6 @@ 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);
@@ -87,6 +86,8 @@ DebuggerItemConfigWidget::DebuggerItemConfigWidget(DebuggerItemModel *model) :
     formLayout->addRow(m_cdbLabel);
     formLayout->addRow(new QLabel(tr("Path:")), m_binaryChooser);
     formLayout->addRow(new QLabel(tr("ABIs:")), m_abis);
+
+    connect(m_binaryChooser, SIGNAL(changed(QString)), this, SLOT(binaryPathHasChanged()));
 }
 
 DebuggerItem DebuggerItemConfigWidget::item() const
@@ -123,12 +124,37 @@ void DebuggerItemConfigWidget::setAbis(const QStringList &abiNames)
     m_abis->setText(abiNames.join(QLatin1String(", ")));
 }
 
+void DebuggerItemConfigWidget::handleCommandChange()
+{
+    // Use DebuggerItemManager as a cache:
+    const DebuggerItem *existing
+            = DebuggerItemManager::findByCommand(m_binaryChooser->fileName());
+    if (existing) {
+        setAbis(existing->abiNames());
+        m_engineType = existing->engineType();
+    } else {
+        QFileInfo fi = QFileInfo(m_binaryChooser->path());
+        if (fi.isExecutable()) {
+            DebuggerItem tmp = item();
+            tmp.reinitializeFromFile();
+            setAbis(tmp.abiNames());
+            m_engineType = tmp.engineType();
+        } else {
+            setAbis(QStringList());
+            m_engineType = NoEngineType;
+        }
+    }
+    m_model->updateDebugger(item());
+}
+
 void DebuggerItemConfigWidget::setItem(const DebuggerItem &item)
 {
     store(); // store away the (changed) settings for future use
 
+    m_id = QVariant(); // reset Id to avoid intermediate signal handling
+
+    // Set values:
     m_autodetected = item.isAutoDetected();
-    m_id = item.id();
 
     m_displayNameLineEdit->setEnabled(!item.isAutoDetected());
     m_displayNameLineEdit->setText(item.displayName());
@@ -157,6 +183,7 @@ void DebuggerItemConfigWidget::setItem(const DebuggerItem &item)
 
     setAbis(item.abiNames());
     m_engineType = item.engineType();
+    m_id = item.id();
 }
 
 void DebuggerItemConfigWidget::apply()
@@ -169,27 +196,13 @@ void DebuggerItemConfigWidget::apply()
     setItem(item());
 }
 
-void DebuggerItemConfigWidget::commandWasChanged()
+void DebuggerItemConfigWidget::binaryPathHasChanged()
 {
-    // Use DebuggerItemManager as a cache:
-    const DebuggerItem *existing
-            = DebuggerItemManager::findByCommand(m_binaryChooser->fileName());
-    if (existing) {
-        setAbis(existing->abiNames());
-        m_engineType = existing->engineType();
-    } else {
-        QFileInfo fi = QFileInfo(m_binaryChooser->path());
-        if (fi.isExecutable()) {
-            DebuggerItem tmp = item();
-            tmp.reinitializeFromFile();
-            setAbis(tmp.abiNames());
-            m_engineType = tmp.engineType();
-        } else {
-            setAbis(QStringList());
-            m_engineType = NoEngineType;
-        }
-    }
-    m_model->updateDebugger(item());
+    // Ignore change if this is no valid DebuggerItem
+    if (!m_id.isValid())
+        return;
+
+    handleCommandChange();
 }
 
 // --------------------------------------------------------------------------
diff --git a/src/plugins/debugger/debuggeroptionspage.h b/src/plugins/debugger/debuggeroptionspage.h
index 158362d9ed3dfb7fa1f56afc5a2d38d8aa92dfd4..2e5a1e1c68141dffd0eda9c2557680676e11e747 100644
--- a/src/plugins/debugger/debuggeroptionspage.h
+++ b/src/plugins/debugger/debuggeroptionspage.h
@@ -70,13 +70,15 @@ public:
     void apply();
 
 private slots:
-    void commandWasChanged();
+    void binaryPathHasChanged();
 
 private:
     DebuggerItem item() const;
     void store() const;
     void setAbis(const QStringList &abiNames);
 
+    void handleCommandChange();
+
     QLineEdit *m_displayNameLineEdit;
     QLabel *m_cdbLabel;
     Utils::PathChooser *m_binaryChooser;