diff --git a/res/layout-xlarge/wifi_settings_for_setup_wizard_xl.xml b/res/layout-xlarge/wifi_settings_for_setup_wizard_xl.xml
index e44b09c..3e59faa 100644
--- a/res/layout-xlarge/wifi_settings_for_setup_wizard_xl.xml
+++ b/res/layout-xlarge/wifi_settings_for_setup_wizard_xl.xml
@@ -116,17 +116,6 @@
             android:visibility="gone" />
     </FrameLayout>
 
-    <!-- TODO: should be removed -->
-    <Button android:id="@+id/wifi_setup_detail"
-            android:layout_width="wrap_content"
-            android:layout_height="wrap_content"
-            android:layout_below="@id/wifi_config_ui"
-            android:layout_alignLeft="@id/wifi_config_ui"
-            android:gravity="left|center_vertical"
-            android:text="@string/wifi_setup_detail"
-            android:textAppearance="?android:attr/textAppearanceMedium"
-            android:visibility="gone" />
-
     <LinearLayout
         android:id="@+id/right_buttons"
         android:layout_width="wrap_content"
diff --git a/src/com/android/settings/wifi/WifiSettings.java b/src/com/android/settings/wifi/WifiSettings.java
index 510292a..7bdc6e6 100644
--- a/src/com/android/settings/wifi/WifiSettings.java
+++ b/src/com/android/settings/wifi/WifiSettings.java
@@ -356,15 +356,6 @@
         mDialog.show();
     }
 
-    /**
-     * Called from {@link WifiSettingsForSetupWizardXL} when the object wants to open
-     * {@link WifiDialog} anyway, though usually it prepares its own simplified UI for
-     * configuring a wifi network.
-     */
-    /* package */ void showDialogForSelectedPreference() {
-        showDialog(mSelectedAccessPoint, mEdit);
-    }
-
     private boolean requireKeyStore(WifiConfiguration config) {
         if (WifiConfigController.requireKeyStore(config) &&
                 KeyStore.getInstance().test() != KeyStore.NO_ERROR) {
diff --git a/src/com/android/settings/wifi/WifiSettingsForSetupWizardXL.java b/src/com/android/settings/wifi/WifiSettingsForSetupWizardXL.java
index 5e0b104..d55cbe4 100644
--- a/src/com/android/settings/wifi/WifiSettingsForSetupWizardXL.java
+++ b/src/com/android/settings/wifi/WifiSettingsForSetupWizardXL.java
@@ -77,9 +77,6 @@
     private Button mForgetButton;
     private Button mBackButton;
 
-    // Not used now.
-    private Button mDetailButton;
-
     // true when a user already pressed "Connect" button and waiting for connection.
     // Also true when the device is already connected to a wifi network on launch.
     private boolean mAfterConnectAction;
@@ -98,6 +95,7 @@
     // To let users exit this Activity, we enable the button after waiting for a moment.
     private final int DELAYED_SKIP_ENABLE_TIME = 10000;  // Unit: millis
     private final Runnable mSkipButtonEnabler = new Runnable() {
+        @Override
         public void run() {
             if (DEBUG) Log.d(TAG, "Delayed skip enabler starts running.");
             mSkipOrNextButton.setEnabled(true);
@@ -145,8 +143,6 @@
         mForgetButton.setOnClickListener(this);
         mBackButton = (Button)findViewById(R.id.wifi_setup_cancel);
         mBackButton.setOnClickListener(this);
-        mDetailButton = (Button)findViewById(R.id.wifi_setup_detail);
-        mDetailButton.setOnClickListener(this);
 
         // At first, Wifi module doesn't return SCANNING state (it's too early), so we manually
         // show it.
@@ -161,7 +157,6 @@
         mConnectButton.setVisibility(View.GONE);
         mForgetButton.setVisibility(View.GONE);
         mBackButton.setVisibility(View.GONE);
-        mDetailButton.setVisibility(View.GONE);
     }
 
     @Override
@@ -191,9 +186,6 @@
         } else if (view == mBackButton) {
             if (DEBUG) Log.d(TAG, "Back button pressed");
             onBackButtonPressed();
-        } else if (view == mDetailButton) {
-            if (DEBUG) Log.d(TAG, "Detail button pressed");
-            mWifiSettings.showDialogForSelectedPreference();
         }
     }
 
@@ -292,8 +284,6 @@
         // onConfigUiShown() will be called.
         mWifiSettings.onAddNetworkPressed();
 
-        // We don't need detail button since all the details are in the main screen.
-        mDetailButton.setVisibility(View.GONE);
     }
 
     /**
@@ -338,8 +328,6 @@
         mRefreshButton.setVisibility(View.GONE);
         mSkipOrNextButton.setVisibility(View.GONE);
         mBackButton.setVisibility(View.VISIBLE);
-        // TODO: remove this after UI fix.
-        // mDetailButton.setVisibility(View.VISIBLE);
     }
 
     // May be called when user press "connect" button in WifiDialog
@@ -366,7 +354,6 @@
         mConnectButton.setVisibility(View.GONE);
         mAddNetworkButton.setVisibility(View.GONE);
         mRefreshButton.setVisibility(View.GONE);
-        mDetailButton.setVisibility(View.GONE);
     }
 
     // May be called when user press "forget" button in WifiDialog
