diff --git a/src/plugins/qbsprojectmanager/qbsprojectmanager.cpp b/src/plugins/qbsprojectmanager/qbsprojectmanager.cpp
index b26b6cc7cb7fab9f2c139c36d53ff606620e2133..d444acc173d213a3bfd3c25fdafbe1ac2cbd7a21 100644
--- a/src/plugins/qbsprojectmanager/qbsprojectmanager.cpp
+++ b/src/plugins/qbsprojectmanager/qbsprojectmanager.cpp
@@ -44,12 +44,12 @@
 #include <QVariantMap>
 
 #include <qbs.h>
+#include <tools/profile.h> // TODO: Do this in qbs.h.
 
-// qbs settings structure:
-const char PROFILE_LIST[] = "preferences.qtcreator.kit.";
-const char PROFILES_PREFIX[] = "profiles.";
+const QChar sep = QLatin1Char('.');
 
-const QChar sep = QChar(QLatin1Char('.'));
+static QString qtcProfileGroup() { return QLatin1String("preferences.qtcreator.kit"); }
+static QString qtcProfilePrefix() { return qtcProfileGroup() + sep; }
 
 namespace QbsProjectManager {
 
@@ -111,29 +111,12 @@ QString QbsManager::profileForKit(const ProjectExplorer::Kit *k) const
 {
     if (!k)
         return QString();
-    return m_settings->value(QString::fromLatin1(PROFILE_LIST) + k->id().toString()).toString();
+    return m_settings->value(qtcProfilePrefix() + k->id().toString()).toString();
 }
 
 void QbsManager::setProfileForKit(const QString &name, const ProjectExplorer::Kit *k)
 {
-    m_settings->setValue(QString::fromLatin1(PROFILE_LIST) + k->id().toString(), name);
-}
-
-QStringList QbsManager::profileNames() const
-{
-    QStringList keyList = m_settings->allKeys();
-
-    QStringList result;
-    foreach (const QString &key, keyList) {
-        if (!key.startsWith(QString::fromLatin1(PROFILES_PREFIX)))
-            continue;
-        QString profile = key;
-        profile.remove(0, QString::fromLatin1(PROFILES_PREFIX).count());
-        profile = profile.left(profile.indexOf(sep));
-        if (!result.contains(profile))
-            result << profile;
-    }
-    return result;
+    m_settings->setValue(qtcProfilePrefix() + k->id().toString(), name);
 }
 
 qbs::Settings *QbsManager::settings()
@@ -148,41 +131,25 @@ qbs::Preferences *QbsManager::preferences()
 
 void QbsManager::addProfile(const QString &name, const QVariantMap &data)
 {
-    const QString base = QLatin1String(PROFILES_PREFIX) + name + sep;
+    qbs::Profile profile(name, settings());
     const QVariantMap::ConstIterator cend = data.constEnd();
     for (QVariantMap::ConstIterator it = data.constBegin(); it != cend; ++it)
-        m_settings->setValue(base + it.key(), it.value());
+        profile.setValue(it.key(), it.value());
 }
 
 void QbsManager::removeCreatorProfiles()
 {
-    QStringList keyList = m_settings->allKeys();
-    QStringList profilesToDelete;
-
-    // Find profiles to remove:
-    foreach (const QString &key, keyList) {
-        if (!key.startsWith(QLatin1String(PROFILE_LIST)))
-            continue;
-        profilesToDelete.append(m_settings->value(key).toString());
-        m_settings->remove(key);
-    }
-    // Remove profiles:
-    foreach (const QString &key, keyList) {
-        if (!key.startsWith(QLatin1String(PROFILES_PREFIX)))
-            continue;
-        const QString kitname = key.mid(QString::fromLatin1(PROFILES_PREFIX).size());
-        foreach (const QString &i, profilesToDelete) {
-            if (kitname.startsWith(i + sep))
-                m_settings->remove(key);
-        }
+    foreach (const QString &key, m_settings->allKeysWithPrefix(qtcProfileGroup())) {
+        const QString fullKey = qtcProfilePrefix() + key;
+        qbs::Profile(m_settings->value(fullKey).toString(), m_settings).removeProfile();
+        m_settings->remove(fullKey);
     }
 }
 
 void QbsManager::addProfileFromKit(const ProjectExplorer::Kit *k)
 {
-    QStringList usedProfileNames = profileNames();
     const QString name = ProjectExplorer::Project::makeUnique(
-                QString::fromLatin1("qtc_") + k->fileSystemFriendlyName(), usedProfileNames);
+                QString::fromLatin1("qtc_") + k->fileSystemFriendlyName(), m_settings->profiles());
     setProfileForKit(name, k);
 
     // set up properties:
diff --git a/src/plugins/qbsprojectmanager/qbsprojectmanager.h b/src/plugins/qbsprojectmanager/qbsprojectmanager.h
index 04af44c2aaad3711dd247cf4797a18009c3d5e7d..ebbea9c14e15cb398821153ddeb4339bbe4e1b2c 100644
--- a/src/plugins/qbsprojectmanager/qbsprojectmanager.h
+++ b/src/plugins/qbsprojectmanager/qbsprojectmanager.h
@@ -69,10 +69,9 @@ public:
     QString mimeType() const;
     ProjectExplorer::Project *openProject(const QString &fileName, QString *errorString);
 
-    // QBS settings management:
+    // QBS profiles management:
     QString profileForKit(const ProjectExplorer::Kit *k) const;
     void setProfileForKit(const QString &name, const ProjectExplorer::Kit *k);
-    QStringList profileNames() const;
 
     static qbs::Settings *settings();
     static qbs::Preferences *preferences();