diff --git a/src/com/android/settings/wifi/WifiSettings.java b/src/com/android/settings/wifi/WifiSettings.java
index 9405e8c..8a3c8ac 100644
--- a/src/com/android/settings/wifi/WifiSettings.java
+++ b/src/com/android/settings/wifi/WifiSettings.java
@@ -48,7 +48,6 @@
 import android.view.ContextMenu;
 import android.view.ContextMenu.ContextMenuInfo;
 import android.view.Menu;
-import android.view.MenuInflater;
 import android.view.MenuItem;
 import android.view.View;
 import android.widget.ProgressBar;
@@ -93,7 +92,6 @@
 
     /* package */ static final int MENU_ID_WPS_PBC = Menu.FIRST;
     private static final int MENU_ID_WPS_PIN = Menu.FIRST + 1;
-    private static final int MENU_ID_SCAN = Menu.FIRST + 5;
     private static final int MENU_ID_CONNECT = Menu.FIRST + 6;
     private static final int MENU_ID_FORGET = Menu.FIRST + 7;
     private static final int MENU_ID_MODIFY = Menu.FIRST + 8;
@@ -166,8 +164,6 @@
     private Preference mSavedNetworksPreference;
     private LinkablePreference mStatusMessagePreference;
 
-    private MenuItem mScanMenuItem;
-
     // For Search
     private static final String DATA_KEY_REFERENCE = "main_toggle_wifi";
 
@@ -372,26 +368,6 @@
     }
 
     @Override
-    public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
-        // If the user is not allowed to configure wifi, do not show the menu.
-        if (isUiRestricted()) return;
-
-        addOptionsMenuItems(menu);
-        super.onCreateOptionsMenu(menu, inflater);
-    }
-
-    /**
-     * @param menu
-     */
-    void addOptionsMenuItems(Menu menu) {
-        final boolean wifiIsEnabled = mWifiTracker.isWifiEnabled();
-        mScanMenuItem = menu.add(Menu.NONE, MENU_ID_SCAN, 0, R.string.menu_stats_refresh)
-                .setIcon(com.android.internal.R.drawable.ic_menu_refresh);
-        mScanMenuItem.setEnabled(wifiIsEnabled)
-                .setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM);
-    }
-
-    @Override
     public int getMetricsCategory() {
         return MetricsEvent.WIFI;
     }
@@ -443,10 +419,6 @@
             case MENU_ID_WPS_PIN:
                 showDialog(WPS_PIN_DIALOG_ID);
                 return true;
-            case MENU_ID_SCAN:
-                mMetricsFeatureProvider.action(getActivity(), MetricsEvent.ACTION_WIFI_FORCE_SCAN);
-                mWifiTracker.forceScan();
-                return true;
         }
         return super.onOptionsItemSelected(item);
     }
@@ -719,9 +691,6 @@
                     mAccessPointsPreferenceCategory.addPreference(mSeeAllNetworksPreference);
                 }
                 setConfigureWifiSettingsVisibility();
-                if (mScanMenuItem != null) {
-                    mScanMenuItem.setEnabled(true);
-                }
                 break;
 
             case WifiManager.WIFI_STATE_ENABLING:
@@ -739,9 +708,6 @@
                 setOffMessage();
                 setConfigureWifiSettingsVisibility();
                 setProgressBarVisible(false);
-                if (mScanMenuItem != null) {
-                    mScanMenuItem.setEnabled(false);
-                }
                 break;
         }
     }
