diff --git a/res/values/strings.xml b/res/values/strings.xml
index 3bcb0e1..e6b8864 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -4387,11 +4387,6 @@
     <string name="show_all_anrs_summary">Show App Not Responding dialog
         for background apps</string>
 
-    <!-- UI debug setting: use experimental WebView [CHAR LIMIT=25] -->
-    <string name="experimental_webview">Use Experimental WebView</string>
-    <!-- UI debug setting: use experimental WebView summary [CHAR LIMIT=50] -->
-    <string name="experimental_webview_summary">Apps will use the newest (beta) WebView</string>
-
     <!-- Activity title for network data usage summary. [CHAR LIMIT=25] -->
     <string name="data_usage_summary_title">Data usage</string>
     <!-- Title for option to pick visible time range from a list available usage periods. [CHAR LIMIT=25] -->
diff --git a/res/xml/development_prefs.xml b/res/xml/development_prefs.xml
index e8dbc03..5989c90 100644
--- a/res/xml/development_prefs.xml
+++ b/res/xml/development_prefs.xml
@@ -263,11 +263,6 @@
             android:title="@string/show_all_anrs"
             android:summary="@string/show_all_anrs_summary"/>
 
-        <CheckBoxPreference
-            android:key="experimental_webview"
-            android:title="@string/experimental_webview"
-            android:summary="@string/experimental_webview_summary"/>
-
      </PreferenceCategory>
 
 </PreferenceScreen>
diff --git a/src/com/android/settings/DevelopmentSettings.java b/src/com/android/settings/DevelopmentSettings.java
index 52706a1..f3a22ca 100644
--- a/src/com/android/settings/DevelopmentSettings.java
+++ b/src/com/android/settings/DevelopmentSettings.java
@@ -59,7 +59,6 @@
 import android.view.HardwareRenderer;
 import android.view.IWindowManager;
 import android.view.View;
-import android.webkit.WebViewFactory;
 import android.widget.CompoundButton;
 import android.widget.Switch;
 import android.widget.TextView;
@@ -140,8 +139,6 @@
 
     private static final String SHOW_ALL_ANRS_KEY = "show_all_anrs";
 
-    private static final String WEBVIEW_EXPERIMENTAL_KEY = "experimental_webview";
-
     private static final String TAG_CONFIRM_ENFORCE = "confirm_enforce";
 
     private static final String PACKAGE_MIME_TYPE = "application/vnd.android.package-archive";
@@ -200,7 +197,6 @@
     private ListPreference mAppProcessLimit;
 
     private CheckBoxPreference mShowAllANRs;
-    private CheckBoxPreference mExperimentalWebView;
 
     private final ArrayList<Preference> mAllPrefs = new ArrayList<Preference>();
     private final ArrayList<CheckBoxPreference> mResetCbPrefs
@@ -312,17 +308,6 @@
         mAllPrefs.add(mShowAllANRs);
         mResetCbPrefs.add(mShowAllANRs);
 
-        if (WebViewFactory.isExperimentalWebViewAvailable()) {
-            mExperimentalWebView = findAndInitCheckboxPref(WEBVIEW_EXPERIMENTAL_KEY);
-        } else {
-            Preference experimentalWebView = findPreference(WEBVIEW_EXPERIMENTAL_KEY);
-            PreferenceGroup debugApplicationsCategory = (PreferenceGroup)
-                    findPreference(DEBUG_APPLICATIONS_CATEGORY_KEY);
-            if (debugApplicationsCategory != null) {
-                debugApplicationsCategory.removePreference(experimentalWebView);
-            }
-        }
-
         Preference selectRuntime = findPreference(SELECT_RUNTIME_KEY);
         if (selectRuntime != null) {
             mAllPrefs.add(selectRuntime);
@@ -508,7 +493,6 @@
         updateImmediatelyDestroyActivitiesOptions();
         updateAppProcessLimitOptions();
         updateShowAllANRsOptions();
-        updateExperimentalWebViewOptions();
         updateVerifyAppsOverUsbOptions();
         updateBugreportOptions();
         updateForceRtlOptions();
@@ -1131,27 +1115,6 @@
             getActivity().getContentResolver(), Settings.Secure.ANR_SHOW_BACKGROUND, 0) != 0);
     }
 
-    private void writeExperimentalWebViewOptions() {
-        if (mExperimentalWebView != null) {
-            if (!WebViewFactory.isUseExperimentalWebViewSet()) {
-                    mEnableDialog = new AlertDialog.Builder(getActivity())
-                            .setTitle("KLP WebView broke an app?")
-                            .setMessage("Don't forget to raise a bug!\ngo/klp-webview-bug")
-                            .setIconAttribute(android.R.attr.alertDialogIcon)
-                            .setPositiveButton(android.R.string.ok, this)
-                            .show();
-            }
-            WebViewFactory.setUseExperimentalWebView(mExperimentalWebView.isChecked());
-            pokeSystemProperties();
-        }
-    }
-
-    private void updateExperimentalWebViewOptions() {
-        if (mExperimentalWebView != null) {
-            updateCheckBox(mExperimentalWebView, WebViewFactory.useExperimentalWebView());
-        }
-    }
-
     @Override
     public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
         if (buttonView == mEnabledSwitch) {
@@ -1266,8 +1229,6 @@
             writeImmediatelyDestroyActivitiesOptions();
         } else if (preference == mShowAllANRs) {
             writeShowAllANRsOptions();
-        } else if (preference == mExperimentalWebView) {
-            writeExperimentalWebViewOptions();
         } else if (preference == mForceHardwareUi) {
             writeHardwareUiOptions();
         } else if (preference == mForceMsaa) {
