diff --git a/src/com/android/settings/wifi/WifiSettings.java b/src/com/android/settings/wifi/WifiSettings.java
index 1503f22..57f4690 100644
--- a/src/com/android/settings/wifi/WifiSettings.java
+++ b/src/com/android/settings/wifi/WifiSettings.java
@@ -321,8 +321,7 @@
 
         prepareWifiAssistantCard();
 
-        mEmptyView = (TextView) getView().findViewById(android.R.id.empty);
-        getListView().setEmptyView(mEmptyView);
+        mEmptyView = initEmptyView();
         registerForContextMenu(getListView());
         setHasOptionsMenu(true);
     }
@@ -773,6 +772,12 @@
         editor.apply();
     }
 
+    protected TextView initEmptyView() {
+        TextView emptyView = (TextView) getActivity().findViewById(android.R.id.empty);
+        getListView().setEmptyView(emptyView);
+        return emptyView;
+    }
+
     private void setOffMessage() {
         if (mEmptyView != null) {
             mEmptyView.setCompoundDrawablesWithIntrinsicBounds(0,
diff --git a/src/com/android/settings/wifi/WifiSettingsForSetupWizard.java b/src/com/android/settings/wifi/WifiSettingsForSetupWizard.java
index b52aaa7..c4a5c96 100644
--- a/src/com/android/settings/wifi/WifiSettingsForSetupWizard.java
+++ b/src/com/android/settings/wifi/WifiSettingsForSetupWizard.java
@@ -18,18 +18,19 @@
 
 import android.content.Intent;
 import android.content.res.TypedArray;
+import android.database.DataSetObserver;
 import android.net.wifi.WifiConfiguration;
 import android.os.Bundle;
+import android.view.Gravity;
 import android.view.LayoutInflater;
 import android.view.Menu;
 import android.view.MenuItem;
 import android.view.View;
 import android.view.View.OnClickListener;
 import android.view.ViewGroup;
-import android.widget.ImageButton;
+import android.widget.AbsListView.LayoutParams;
+import android.widget.ListAdapter;
 import android.widget.ListView;
-import android.widget.PopupMenu;
-import android.widget.PopupMenu.OnMenuItemClickListener;
 import android.widget.TextView;
 
 import com.android.settings.R;
@@ -47,6 +48,11 @@
     // show a text regarding data charges when wifi connection is required during setup wizard
     protected static final String EXTRA_SHOW_WIFI_REQUIRED_INFO = "wifi_show_wifi_required_info";
 
+    private View mAddOtherNetworkItem;
+    private ListAdapter mAdapter;
+    private TextView mEmptyFooter;
+    private boolean mListLastEmpty = false;
+
     @Override
     public View onCreateView(final LayoutInflater inflater, ViewGroup container,
             Bundle savedInstanceState) {
@@ -60,9 +66,9 @@
             list.addHeaderView(header, null, false);
         }
 
-        final View other = inflater.inflate(R.layout.setup_wifi_add_network, list, false);
-        list.addFooterView(other, null, true);
-        other.setOnClickListener(new OnClickListener() {
+        mAddOtherNetworkItem = inflater.inflate(R.layout.setup_wifi_add_network, list, false);
+        list.addFooterView(mAddOtherNetworkItem, null, true);
+        mAddOtherNetworkItem.setOnClickListener(new OnClickListener() {
             @Override
             public void onClick(View v) {
                 if (mWifiManager.isWifiEnabled()) {
@@ -92,6 +98,15 @@
         if (hasNextButton()) {
             getNextButton().setVisibility(View.GONE);
         }
+
+        mAdapter = getPreferenceScreen().getRootAdapter();
+        mAdapter.registerDataSetObserver(new DataSetObserver() {
+            @Override
+            public void onChanged() {
+                super.onChanged();
+                updateFooter();
+            }
+        });
     }
 
     @Override
@@ -133,4 +148,30 @@
         activity.networkSelected();
         super.connect(networkId);
     }
+
+    @Override
+    protected TextView initEmptyView() {
+        mEmptyFooter = new TextView(getActivity());
+        mEmptyFooter.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT,
+                LayoutParams.MATCH_PARENT));
+        mEmptyFooter.setGravity(Gravity.CENTER);
+        mEmptyFooter.setCompoundDrawablesWithIntrinsicBounds(0,
+                R.drawable.ic_wifi_emptystate, 0,0);
+        return mEmptyFooter;
+    }
+
+    protected void updateFooter() {
+        final boolean isEmpty = mAdapter.isEmpty();
+        if (isEmpty != mListLastEmpty) {
+            final ListView list = getListView();
+            if (isEmpty) {
+                list.removeFooterView(mAddOtherNetworkItem);
+                list.addFooterView(mEmptyFooter, null, false);
+            } else {
+                list.removeFooterView(mEmptyFooter);
+                list.addFooterView(mAddOtherNetworkItem, null, true);
+            }
+            mListLastEmpty = isEmpty;
+        }
+    }
 }
