diff --git a/res/layout/data_usage_bytes_editor.xml b/res/layout/data_usage_bytes_editor.xml
index 8de7450..2878c3e 100644
--- a/res/layout/data_usage_bytes_editor.xml
+++ b/res/layout/data_usage_bytes_editor.xml
@@ -17,25 +17,27 @@
 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
     android:orientation="horizontal"
     android:gravity="center"
-    android:layout_width="wrap_content"
+    android:paddingStart="16dp"
+    android:paddingEnd="16dp"
+    android:layout_width="match_parent"
     android:layout_height="wrap_content">
 
-    <NumberPicker
+    <EditText
         android:id="@+id/bytes"
         android:layout_width="wrap_content"
-        android:minWidth="48dip"
         android:layout_height="wrap_content"
+        android:layout_weight="1"
+        android:minWidth="48dip"
         android:layout_gravity="center_vertical"
-        android:layout_marginStart="16dip"
-        android:layout_marginEnd="16dip"
         android:focusable="true"
-        android:focusableInTouchMode="true" />
+        android:focusableInTouchMode="true"
+        android:inputType="numberDecimal" />
 
-    <TextView
+    <Spinner
+        android:id="@+id/size_spinner"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:layout_gravity="center_vertical"
-        android:textAppearance="?android:attr/textAppearanceMedium"
-        android:text="@*android:string/megabyteShort" />
+        android:entries="@array/bytes_picker_sizes" />
 
 </LinearLayout>
diff --git a/res/values/strings.xml b/res/values/strings.xml
index a0a0c97..fd21db1 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -7178,4 +7178,9 @@
     <!-- [CHAR_LIMIT=NONE] Label for when app is ignoring battery optimizations -->
     <string name="not_battery_optimizing">Not using battery optimization</string>
 
+    <string-array name="bytes_picker_sizes" translatable="false">
+        <item>@*android:string/megabyteShort</item>
+        <item>@*android:string/gigabyteShort</item>
+    </string-array>
+
 </resources>
diff --git a/src/com/android/settings/DevelopmentSettings.java b/src/com/android/settings/DevelopmentSettings.java
index 8ae5888..943a4e6 100644
--- a/src/com/android/settings/DevelopmentSettings.java
+++ b/src/com/android/settings/DevelopmentSettings.java
@@ -766,22 +766,24 @@
                 Log.e(TAG, "No WebView providers available");
                 return;
             }
-            String[] options = new String[providers.length];
-            String[] values = new String[providers.length];
+            ArrayList<String> options = new ArrayList<String>();
+            ArrayList<String> values = new ArrayList<String>();
             for(int n = 0; n < providers.length; n++) {
-                options[n] = providers[n].description;
-                values[n] = providers[n].packageName;
+                if (isPackageEnabled(providers[n].packageName)) {
+                    options.add(providers[n].description);
+                    values.add(providers[n].packageName);
+                }
             }
-            mWebViewProvider.setEntries(options);
-            mWebViewProvider.setEntryValues(values);
+            mWebViewProvider.setEntries(options.toArray(new String[options.size()]));
+            mWebViewProvider.setEntryValues(values.toArray(new String[values.size()]));
 
             String value = mWebViewUpdateService.getCurrentWebViewPackageName();
             if (value == null) {
                 value = "";
             }
 
-            for (int i = 0; i < values.length; i++) {
-                if (value.contentEquals(values[i])) {
+            for (int i = 0; i < values.size(); i++) {
+                if (value.contentEquals(values.get(i))) {
                     mWebViewProvider.setValueIndex(i);
                     return;
                 }
diff --git a/src/com/android/settings/SettingsActivity.java b/src/com/android/settings/SettingsActivity.java
index b6ac0c0..b875823 100644
--- a/src/com/android/settings/SettingsActivity.java
+++ b/src/com/android/settings/SettingsActivity.java
@@ -460,18 +460,22 @@
     @Override
     public SharedPreferences getSharedPreferences(String name, int mode) {
         if (name.equals(getPackageName() + "_preferences")) {
-            String tag = getClass().getName();
-            if (getIntent() != null && getIntent().hasExtra(EXTRA_SHOW_FRAGMENT)) {
-                tag = getIntent().getStringExtra(EXTRA_SHOW_FRAGMENT);
-            }
-            if (tag.startsWith("com.android.settings.")) {
-                tag = tag.replace("com.android.settings.", "");
-            }
-            return new SharedPreferencesLogger(this, tag);
+            return new SharedPreferencesLogger(this, getMetricsTag());
         }
         return super.getSharedPreferences(name, mode);
     }
 
+    private String getMetricsTag() {
+        String tag = getClass().getName();
+        if (getIntent() != null && getIntent().hasExtra(EXTRA_SHOW_FRAGMENT)) {
+            tag = getIntent().getStringExtra(EXTRA_SHOW_FRAGMENT);
+        }
+        if (tag.startsWith("com.android.settings.")) {
+            tag = tag.replace("com.android.settings.", "");
+        }
+        return tag;
+    }
+
     private static boolean isShortCutIntent(final Intent intent) {
         Set<String> categories = intent.getCategories();
         return (categories != null) && categories.contains("com.android.settings.SHORTCUT");
@@ -610,6 +614,9 @@
             mActionBar.setHomeButtonEnabled(mDisplayHomeAsUpEnabled);
         }
         mSwitchBar = (SwitchBar) findViewById(R.id.switch_bar);
+        if (mSwitchBar != null) {
+            mSwitchBar.setMetricsTag(getMetricsTag());
+        }
 
         // see if we should show Back/Next buttons
         if (intent.getBooleanExtra(EXTRA_PREFS_SHOW_BUTTON_BAR, false)) {
diff --git a/src/com/android/settings/datausage/BillingCycleSettings.java b/src/com/android/settings/datausage/BillingCycleSettings.java
index 5807992..e00170d 100644
--- a/src/com/android/settings/datausage/BillingCycleSettings.java
+++ b/src/com/android/settings/datausage/BillingCycleSettings.java
@@ -30,7 +30,9 @@
 import android.util.Log;
 import android.view.LayoutInflater;
 import android.view.View;
+import android.widget.EditText;
 import android.widget.NumberPicker;
+import android.widget.Spinner;
 import com.android.settings.InstrumentedFragment;
 import com.android.settings.R;
 import com.android.settingslib.NetworkPolicyEditor;
@@ -172,7 +174,8 @@
 
             final LayoutInflater dialogInflater = LayoutInflater.from(context);
             mView = dialogInflater.inflate(R.layout.data_usage_bytes_editor, null, false);
-            setupPicker((NumberPicker) mView.findViewById(R.id.bytes));
+            setupPicker((EditText) mView.findViewById(R.id.bytes),
+                    (Spinner) mView.findViewById(R.id.size_spinner));
             return new AlertDialog.Builder(context)
                     .setTitle(R.string.data_usage_warning_editor_title)
                     .setView(mView)
@@ -180,32 +183,28 @@
                     .create();
         }
 
-        private void setupPicker(NumberPicker bytesPicker) {
+        private void setupPicker(EditText bytesPicker, Spinner type) {
             final BillingCycleSettings target = (BillingCycleSettings) getTargetFragment();
             final NetworkPolicyEditor editor = target.services.mPolicyEditor;
 
             final NetworkTemplate template = getArguments().getParcelable(EXTRA_TEMPLATE);
             final boolean isLimit = getArguments().getBoolean(EXTRA_LIMIT);
-            final long warningBytes = editor.getPolicyWarningBytes(template);
-            final long limitBytes = editor.getPolicyLimitBytes(template);
+            final long bytes = isLimit ? editor.getPolicyLimitBytes(template)
+                    : editor.getPolicyWarningBytes(template);
+            final long limitDisabled = isLimit ? LIMIT_DISABLED : WARNING_DISABLED;
 
-            if (isLimit) {
-                bytesPicker.setMaxValue(Integer.MAX_VALUE);
-                if (warningBytes != WARNING_DISABLED) {
-                    bytesPicker.setMinValue((int) (warningBytes / MB_IN_BYTES) + 1);
-                } else {
-                    bytesPicker.setMinValue(0);
-                }
+            if (bytes > 1.5f * GB_IN_BYTES) {
+                bytesPicker.setText(formatText(bytes / (float) GB_IN_BYTES));
+                type.setSelection(1);
             } else {
-                bytesPicker.setMinValue(0);
-                if (limitBytes != LIMIT_DISABLED) {
-                    bytesPicker.setMaxValue((int) (limitBytes / MB_IN_BYTES) - 1);
-                } else {
-                    bytesPicker.setMaxValue(Integer.MAX_VALUE);
-                }
+                bytesPicker.setText(formatText(bytes / (float) MB_IN_BYTES));
+                type.setSelection(0);
             }
-            bytesPicker.setValue((int) ((isLimit ? limitBytes : warningBytes) / MB_IN_BYTES));
-            bytesPicker.setWrapSelectorWheel(false);
+        }
+
+        private String formatText(float v) {
+            v = Math.round(v * 100) / 100f;
+            return String.valueOf(v);
         }
 
         @Override
@@ -218,11 +217,15 @@
 
             final NetworkTemplate template = getArguments().getParcelable(EXTRA_TEMPLATE);
             final boolean isLimit = getArguments().getBoolean(EXTRA_LIMIT);
-            NumberPicker bytesPicker = (NumberPicker) mView.findViewById(R.id.bytes);
-            // clear focus to finish pending text edits
-            bytesPicker.clearFocus();
+            EditText bytesField = (EditText) mView.findViewById(R.id.bytes);
+            Spinner spinner = (Spinner) mView.findViewById(R.id.size_spinner);
 
-            final long bytes = bytesPicker.getValue() * MB_IN_BYTES;
+            String bytesString = bytesField.getText().toString();
+            if (bytesString.isEmpty()) {
+                bytesString = "0";
+            }
+            final long bytes = (long) (Float.valueOf(bytesString)
+                        * (spinner.getSelectedItemPosition() == 0 ? MB_IN_BYTES : GB_IN_BYTES));
             if (isLimit) {
                 editor.setPolicyLimitBytes(template, bytes);
             } else {
diff --git a/src/com/android/settings/widget/SwitchBar.java b/src/com/android/settings/widget/SwitchBar.java
index 019103f..adf1ce0 100644
--- a/src/com/android/settings/widget/SwitchBar.java
+++ b/src/com/android/settings/widget/SwitchBar.java
@@ -34,6 +34,7 @@
 import android.widget.Switch;
 import android.widget.TextView;
 
+import com.android.internal.logging.MetricsLogger;
 import com.android.settings.R;
 import com.android.settingslib.RestrictedLockUtils;
 
@@ -64,6 +65,8 @@
     private boolean mDisabledByAdmin = false;
     private EnforcedAdmin mEnforcedAdmin = null;
 
+    private String mMetricsTag;
+
     private ArrayList<OnSwitchChangeListener> mSwitchChangeListeners =
             new ArrayList<OnSwitchChangeListener>();
 
@@ -125,6 +128,10 @@
         setVisibility(View.GONE);
     }
 
+    public void setMetricsTag(String tag) {
+        mMetricsTag = tag;
+    }
+
     public void setTextViewLabel(boolean isChecked) {
         mLabel = getResources()
                 .getString(isChecked ? R.string.switch_on_text : R.string.switch_off_text);
@@ -217,9 +224,11 @@
     @Override
     public void onClick(View v) {
         if (mDisabledByAdmin) {
+            MetricsLogger.histogram(mContext, mMetricsTag + "/switch_bar|restricted", 1);
             RestrictedLockUtils.sendShowAdminSupportDetailsIntent(mContext, mEnforcedAdmin);
         } else {
             final boolean isChecked = !mSwitch.isChecked();
+            MetricsLogger.histogram(mContext, mMetricsTag + "/switch_bar|" + isChecked, 1);
             setChecked(isChecked);
         }
     }
