diff --git a/res/values/arrays.xml b/res/values/arrays.xml
index 14e1fc8..c29c7be 100644
--- a/res/values/arrays.xml
+++ b/res/values/arrays.xml
@@ -686,6 +686,20 @@
         <item>error</item>
     </string-array>
 
+    <!-- Titles for frame time tracking preference. [CHAR LIMIT=35] -->
+    <string-array name="track_frame_time_entries">
+        <item>Off</item>
+        <item>On screen</item>
+        <item>In adb shell dumpsys gfxinfo</item>
+    </string-array>
+
+    <!-- Values for frame time tracking preference. -->
+    <string-array name="track_frame_time_values" translatable="false" >
+        <item>false</item>
+        <item>visual</item>
+        <item>true</item>
+    </string-array>
+
     <!-- Titles for app process limit preference. [CHAR LIMIT=35] -->
     <string-array name="app_process_limit_entries">
         <item>Standard limit</item>
diff --git a/res/values/strings.xml b/res/values/strings.xml
index ee82030..426162f 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -3957,8 +3957,6 @@
 
     <!-- UI debug setting: profile time taken by hardware acceleration to render apps [CHAR LIMIT=25] -->
     <string name="track_frame_time">Profile GPU rendering</string>
-    <!-- UI debug setting: profile hardware acceleration summary [CHAR LIMIT=50] -->
-    <string name="track_frame_time_summary">Measure rendering time in adb shell dumpsys gfxinfo</string>
 
     <!-- UI debug setting: scaling factor for window animations [CHAR LIMIT=25] -->
     <string name="window_animation_scale_title">Window animation scale</string>
diff --git a/res/xml/development_prefs.xml b/res/xml/development_prefs.xml
index e67aad1..616e958 100644
--- a/res/xml/development_prefs.xml
+++ b/res/xml/development_prefs.xml
@@ -183,10 +183,12 @@
             android:title="@string/show_cpu_usage"
             android:summary="@string/show_cpu_usage_summary"/>
 
-        <CheckBoxPreference
+        <ListPreference
             android:key="track_frame_time"
             android:title="@string/track_frame_time"
-            android:summary="@string/track_frame_time_summary"/>
+            android:persistent="false"
+            android:entries="@array/track_frame_time_entries"
+            android:entryValues="@array/track_frame_time_values" />
 
         <ListPreference
             android:key="enable_opengl_traces"
diff --git a/src/com/android/settings/DevelopmentSettings.java b/src/com/android/settings/DevelopmentSettings.java
index 5e7573f..0edb437 100644
--- a/src/com/android/settings/DevelopmentSettings.java
+++ b/src/com/android/settings/DevelopmentSettings.java
@@ -166,11 +166,11 @@
     private CheckBoxPreference mShowCpuUsage;
     private CheckBoxPreference mForceHardwareUi;
     private CheckBoxPreference mForceMsaa;
-    private CheckBoxPreference mTrackFrameTime;
     private CheckBoxPreference mShowHwScreenUpdates;
     private CheckBoxPreference mShowHwLayersUpdates;
     private CheckBoxPreference mShowHwOverdraw;
     private CheckBoxPreference mDebugLayout;
+    private ListPreference mTrackFrameTime;
     private ListPreference mWindowAnimationScale;
     private ListPreference mTransitionAnimationScale;
     private ListPreference mAnimatorDurationScale;
@@ -240,7 +240,9 @@
         mShowCpuUsage = findAndInitCheckboxPref(SHOW_CPU_USAGE_KEY);
         mForceHardwareUi = findAndInitCheckboxPref(FORCE_HARDWARE_UI_KEY);
         mForceMsaa = findAndInitCheckboxPref(FORCE_MSAA_KEY);
-        mTrackFrameTime = findAndInitCheckboxPref(TRACK_FRAME_TIME_KEY);
+        mTrackFrameTime = (ListPreference) findPreference(TRACK_FRAME_TIME_KEY);
+        mAllPrefs.add(mTrackFrameTime);
+        mTrackFrameTime.setOnPreferenceChangeListener(this);
         mShowHwScreenUpdates = findAndInitCheckboxPref(SHOW_HW_SCREEN_UPDATES_KEY);
         mShowHwLayersUpdates = findAndInitCheckboxPref(SHOW_HW_LAYERS_UPDATES_KEY);
         mShowHwOverdraw = findAndInitCheckboxPref(SHOW_HW_OVERDRAW_KEY);
@@ -708,14 +710,28 @@
     }
 
     private void updateTrackFrameTimeOptions() {
-        updateCheckBox(mTrackFrameTime,
-                SystemProperties.getBoolean(HardwareRenderer.PROFILE_PROPERTY, false));
+        String value = SystemProperties.get(HardwareRenderer.PROFILE_PROPERTY);
+        if (value == null) {
+            value = "";
+        }
+
+        CharSequence[] values = mTrackFrameTime.getEntryValues();
+        for (int i = 0; i < values.length; i++) {
+            if (value.contentEquals(values[i])) {
+                mTrackFrameTime.setValueIndex(i);
+                mTrackFrameTime.setSummary(mTrackFrameTime.getEntries()[i]);
+                return;
+            }
+        }
+        mTrackFrameTime.setValueIndex(0);
+        mTrackFrameTime.setSummary(mTrackFrameTime.getEntries()[0]);
     }
 
-    private void writeTrackFrameTimeOptions() {
+    private void writeTrackFrameTimeOptions(Object newValue) {
         SystemProperties.set(HardwareRenderer.PROFILE_PROPERTY,
-                mTrackFrameTime.isChecked() ? "true" : "false");
+                newValue == null ? "" : newValue.toString());
         pokeSystemProperties();
+        updateTrackFrameTimeOptions();
     }
 
     private void updateShowHwScreenUpdatesOptions() {
@@ -1071,8 +1087,6 @@
             writeHardwareUiOptions();
         } else if (preference == mForceMsaa) {
             writeMsaaOptions();
-        } else if (preference == mTrackFrameTime) {
-            writeTrackFrameTimeOptions();
         } else if (preference == mShowHwScreenUpdates) {
             writeShowHwScreenUpdatesOptions();
         } else if (preference == mShowHwLayersUpdates) {
@@ -1108,6 +1122,9 @@
         } else if (preference == mOpenGLTraces) {
             writeOpenGLTracesOptions(newValue);
             return true;
+        } else if (preference == mTrackFrameTime) {
+            writeTrackFrameTimeOptions(newValue);
+            return true;
         } else if (preference == mEnableTracesPref) {
             writeEnableTracesOptions();
             return true;
diff --git a/src/com/android/settings/ProxySelector.java b/src/com/android/settings/ProxySelector.java
index f521d6d..9bb6dca 100644
--- a/src/com/android/settings/ProxySelector.java
+++ b/src/com/android/settings/ProxySelector.java
@@ -58,12 +58,16 @@
     Button      mClearButton;
     Button      mDefaultButton;
 
+    // Allows underscore char to supports proxies that do not
+    // follow the spec
+    private static final String HC = "a-zA-Z0-9\\_";
+
     // Matches blank input, ips, and domain names
     private static final String HOSTNAME_REGEXP =
-            "^$|^[a-zA-Z0-9]+(\\-[a-zA-Z0-9]+)*(\\.[a-zA-Z0-9]+(\\-[a-zA-Z0-9]+)*)*$";
+            "^$|^[" + HC + "]+(\\-[" + HC + "]+)*(\\.[" + HC + "]+(\\-[" + HC + "]+)*)*$";
     private static final Pattern HOSTNAME_PATTERN;
     private static final String EXCLUSION_REGEXP =
-            "$|^[a-zA-Z0-9]+(\\-[a-zA-Z0-9]+)*(\\.[a-zA-Z0-9]+(\\-[a-zA-Z0-9]+)*)*$";
+            "$|^[" + HC + "]+(\\-[" + HC + "]+)*(\\.[" + HC + "]+(\\-[" + HC + "]+)*)*$";
     private static final Pattern EXCLUSION_PATTERN;
     static {
         HOSTNAME_PATTERN = Pattern.compile(HOSTNAME_REGEXP);
