diff --git a/src/com/android/browser/BrowserPreferencesPage.java b/src/com/android/browser/BrowserPreferencesPage.java
index e093ced..c6ce8a6 100644
--- a/src/com/android/browser/BrowserPreferencesPage.java
+++ b/src/com/android/browser/BrowserPreferencesPage.java
@@ -70,20 +70,29 @@
         e = findPreference(BrowserSettings.PREF_GEARS_SETTINGS);
         e.setOnPreferenceClickListener(this);
 
-        PreferenceScreen s = (PreferenceScreen)
+        PreferenceScreen manageDatabases = (PreferenceScreen)
             findPreference(BrowserSettings.PREF_WEBSTORAGE_SETTINGS);
 
+        Preference clearDatabases =
+            findPreference(BrowserSettings.PREF_WEBSTORAGE_CLEAR_ALL);
+
         Vector origins = WebStorage.getInstance().getOrigins();
+        manageDatabases.setEnabled(false);
+        clearDatabases.setEnabled(false);
         if (origins != null) {
+            if (origins.size() > 0) {
+                manageDatabases.setEnabled(true);
+                clearDatabases.setEnabled(true);
+            }
             for (int i = 0;  i < origins.size(); i++) {
                 OriginSettings origin =
                     new OriginSettings(this, (String) origins.get(i));
                 PreferenceScreen screen =
                     getPreferenceManager().createPreferenceScreen(this);
                 origin.setScreen(screen);
-                origin.setRootScreen(s);
+                origin.setRootScreen(manageDatabases);
                 origin.setup();
-                s.addPreference(screen);
+                manageDatabases.addPreference(screen);
             }
         }
     }
diff --git a/src/com/android/browser/BrowserQuotaPreference.java b/src/com/android/browser/BrowserQuotaPreference.java
index 653c085..e635bb2 100644
--- a/src/com/android/browser/BrowserQuotaPreference.java
+++ b/src/com/android/browser/BrowserQuotaPreference.java
@@ -24,6 +24,8 @@
 import android.view.View;
 import android.webkit.WebStorage;
 
+import java.util.Vector;
+
 /**
  * Utility class to display and manage the choosen quota
  * for an origin (HTML5 WebStorage feature)
@@ -44,25 +46,41 @@
         mOrigin = origin;
     }
 
-    public void setCurrentIndex () {
+    /**
+     * Find the minimum quota fitting the current usage
+     * and only show larger quotas in the list
+     */
+    public void setQuotaList () {
+        CharSequence[] entries = getEntries();
         CharSequence[] values = getEntryValues();
-        long quota = 0;
+        Vector<CharSequence> listEntries = new Vector<CharSequence>();
+        Vector<CharSequence> listValues = new Vector<CharSequence>();
+        long usage = 0;
         if (mOrigin != null) {
-            quota = mOrigin.getQuota();
+          usage = mOrigin.getUsage();
         }
         for (int i = 0; i < values.length; i++) {
             long value = Long.parseLong(values[i].toString());
             value *= sOneMB; // the string array is expressed in MB
-            if (value >= quota) {
-                setValueIndex(i);
-                break;
+            if (value >= usage) {
+                listEntries.add(entries[i]);
+                listValues.add(values[i]);
             }
         }
+        CharSequence[] newEntries = new CharSequence[listEntries.size()];
+        CharSequence[] newValues = new CharSequence[listValues.size()];
+        for (int i = 0; i < listEntries.size(); i++) {
+            newEntries[i] = listEntries.get(i);
+            newValues[i] = listValues.get(i);
+        }
+        setEntries(newEntries);
+        setEntryValues(newValues);
+        setValueIndex(0);
     }
 
     @Override
     protected View onCreateDialogView() {
-        setCurrentIndex();
+        setQuotaList();
         return super.onCreateDialogView();
     }
 
diff --git a/src/com/android/browser/BrowserSettings.java b/src/com/android/browser/BrowserSettings.java
index 9be22ea..36a9d3f 100644
--- a/src/com/android/browser/BrowserSettings.java
+++ b/src/com/android/browser/BrowserSettings.java
@@ -128,6 +128,7 @@
     public final static String PREF_DEBUG_SETTINGS = "debug_menu";
     public final static String PREF_GEARS_SETTINGS = "gears_settings";
     public final static String PREF_WEBSTORAGE_SETTINGS = "webstorage_manage_databases";
+    public final static String PREF_WEBSTORAGE_CLEAR_ALL = "webstorage_clear_databases";
     public final static String PREF_TEXT_SIZE = "text_size";
     public final static String PREF_DEFAULT_TEXT_ENCODING =
             "default_text_encoding";
@@ -492,6 +493,7 @@
         PreferenceScreen screen = (PreferenceScreen)
             activity.findPreference(BrowserSettings.PREF_WEBSTORAGE_SETTINGS);
         screen.removeAll();
+        screen.setEnabled(false);
     }
 
     /*package*/ void resetDefaultPreferences(Context ctx) {
diff --git a/src/com/android/browser/OriginSettings.java b/src/com/android/browser/OriginSettings.java
index 3c7273d..e80888a 100644
--- a/src/com/android/browser/OriginSettings.java
+++ b/src/com/android/browser/OriginSettings.java
@@ -17,6 +17,7 @@
 package com.android.browser;
 
 import android.content.Context;
+import android.preference.Preference;
 import android.preference.PreferenceActivity;
 import android.preference.PreferenceScreen;
 import android.util.Log;
@@ -63,6 +64,10 @@
         return mQuota;
     }
 
+    public long getUsage() {
+        return mUsage;
+    }
+
     public void setScreen(PreferenceScreen screen) {
         mInfoScreen = screen;
     }
@@ -130,5 +135,12 @@
         mInfoScreen.removeAll();
         mRootScreen.removePreference(mInfoScreen);
         mInfoScreen.getDialog().dismiss();
+        if (mRootScreen.getPreferenceCount() == 0) {
+            mRootScreen.getDialog().dismiss();
+            mRootScreen.setEnabled(false);
+            Preference clearDatabases = mActivity.findPreference(
+                    BrowserSettings.PREF_WEBSTORAGE_CLEAR_ALL);
+            clearDatabases.setEnabled(false);
+        }
     }
 }
