diff --git a/src/plugins/coreplugin/settingsdatabase.cpp b/src/plugins/coreplugin/settingsdatabase.cpp
index 881fa2f45962c9729892b7f116422ee89d0ebedc..b26cb188f3a66a74895cb09ec596d674cdc0864e 100644
--- a/src/plugins/coreplugin/settingsdatabase.cpp
+++ b/src/plugins/coreplugin/settingsdatabase.cpp
@@ -49,7 +49,7 @@
 using namespace Core;
 using namespace Core::Internal;
 
-enum { debug_settings = 1 };
+enum { debug_settings = 0 };
 
 namespace Core {
 namespace Internal {
@@ -67,7 +67,7 @@ public:
     QString effectiveKey(const QString &key) const
     {
         QString g = effectiveGroup();
-        if (!g.isEmpty())
+        if (!g.isEmpty() && !key.isEmpty())
             g += QLatin1Char('/');
         g += key;
         return g;
@@ -181,8 +181,25 @@ bool SettingsDatabase::contains(const QString &key) const
 
 void SettingsDatabase::remove(const QString &key)
 {
-    Q_UNUSED(key);
-    // TODO: Remove key and all subkeys
+    const QString effectiveKey = d->effectiveKey(key);
+
+    // Delete keys from the database
+    QSqlQuery query(d->m_db);
+    query.prepare(QLatin1String("DELETE FROM settings WHERE key = ? OR key LIKE ?"));
+    query.addBindValue(effectiveKey);
+    query.addBindValue(effectiveKey + QLatin1String("/%"));
+    query.exec();
+
+    // Remove keys from the cache
+    foreach (const QString &k, d->m_settings.keys()) {
+        // Either it's an exact match, or it matches up to a /
+        if (k.startsWith(effectiveKey)
+            && (k.length() == effectiveKey.length()
+                || k.at(effectiveKey.length()) == QLatin1Char('/')))
+        {
+            d->m_settings.remove(k);
+        }
+    }
 }
 
 void SettingsDatabase::beginGroup(const QString &prefix)
diff --git a/src/plugins/quickopen/quickopenplugin.cpp b/src/plugins/quickopen/quickopenplugin.cpp
index 9640e8f08ec97f50e4cbe3fe2b56e8a81801ea2a..ae64e8dfe5132640f30b703565dc107fd2bb703f 100644
--- a/src/plugins/quickopen/quickopenplugin.cpp
+++ b/src/plugins/quickopen/quickopenplugin.cpp
@@ -206,8 +206,8 @@ void QuickOpenPlugin::saveSettings()
     if (core && core->settingsDatabase()) {
         Core::SettingsDatabase *s = core->settingsDatabase();
         s->beginGroup("QuickOpen");
-        s->setValue("RefreshInterval", refreshInterval());
         s->remove("");
+        s->setValue("RefreshInterval", refreshInterval());
         foreach (IQuickOpenFilter *filter, m_filters) {
             if (!m_customFilters.contains(filter))
                 s->setValue(filter->name(), filter->saveState());