diff --git a/src/plugins/baremetal/baremetaldevice.cpp b/src/plugins/baremetal/baremetaldevice.cpp
index daa93d5eb39917a9eab66ad5553c52997427ab09..b32bbc627089d6783e0baef0c1c25e6945e33735 100644
--- a/src/plugins/baremetal/baremetaldevice.cpp
+++ b/src/plugins/baremetal/baremetaldevice.cpp
@@ -79,13 +79,21 @@ void BareMetalDevice::fromMap(const QVariantMap &map)
     IDevice::fromMap(map);
     QString gdbServerProvider = map.value(QLatin1String(gdbServerProviderIdKeyC)).toString();
     if (gdbServerProvider.isEmpty()) {
-        const QSsh::SshConnectionParameters sshParams = sshParameters();
-        DefaultGdbServerProvider *newProvider = new DefaultGdbServerProvider;
-        newProvider->setDisplayName(displayName());
-        newProvider->m_host = sshParams.host;
-        newProvider->m_port = sshParams.port;
-        GdbServerProviderManager::instance()->registerProvider(newProvider);
-        gdbServerProvider = newProvider->id();
+        const QString name = displayName();
+        if (GdbServerProvider *provider =
+                GdbServerProviderManager::instance()->findByDisplayName(name)) {
+            gdbServerProvider = provider->id();
+        } else {
+            const QSsh::SshConnectionParameters sshParams = sshParameters();
+            DefaultGdbServerProvider *newProvider = new DefaultGdbServerProvider;
+            newProvider->setDisplayName(name);
+            newProvider->m_host = sshParams.host;
+            newProvider->m_port = sshParams.port;
+            if (GdbServerProviderManager::instance()->registerProvider(newProvider))
+                gdbServerProvider = newProvider->id();
+            else
+                delete newProvider;
+        }
     }
     setGdbServerProviderId(gdbServerProvider);
 }
diff --git a/src/plugins/baremetal/gdbserverprovidermanager.cpp b/src/plugins/baremetal/gdbserverprovidermanager.cpp
index 5f0e8d88811998b82c632bd568f5e1c9105d92e4..84207afdae07cfe70db901e93a2afda355e041a2 100644
--- a/src/plugins/baremetal/gdbserverprovidermanager.cpp
+++ b/src/plugins/baremetal/gdbserverprovidermanager.cpp
@@ -172,6 +172,14 @@ GdbServerProvider *GdbServerProviderManager::findProvider(const QString &id) con
     return Utils::findOrDefault(m_providers, Utils::equal(&GdbServerProvider::id, id));
 }
 
+GdbServerProvider *GdbServerProviderManager::findByDisplayName(const QString &displayName) const
+{
+    if (displayName.isEmpty())
+        return 0;
+
+    return Utils::findOrDefault(m_providers, Utils::equal(&GdbServerProvider::displayName, displayName));
+}
+
 void GdbServerProviderManager::notifyAboutUpdate(GdbServerProvider *provider)
 {
     if (!provider || !m_providers.contains(provider))
diff --git a/src/plugins/baremetal/gdbserverprovidermanager.h b/src/plugins/baremetal/gdbserverprovidermanager.h
index e510feed8f1adbe5ec7b05ae4fb3acfa91c04bf2..56a98dd588391a537b6b3cfca5c611dfdd647217 100644
--- a/src/plugins/baremetal/gdbserverprovidermanager.h
+++ b/src/plugins/baremetal/gdbserverprovidermanager.h
@@ -56,6 +56,7 @@ public:
     QList<GdbServerProvider *> providers() const;
     QList<GdbServerProviderFactory *> factories() const;
     GdbServerProvider *findProvider(const QString &id) const;
+    GdbServerProvider *findByDisplayName(const QString &displayName) const;
     bool registerProvider(GdbServerProvider *);
     void deregisterProvider(GdbServerProvider *);