diff --git a/src/com/android/settings/wifi/WifiSettings.java b/src/com/android/settings/wifi/WifiSettings.java
index f46edac..c4f6e97 100644
--- a/src/com/android/settings/wifi/WifiSettings.java
+++ b/src/com/android/settings/wifi/WifiSettings.java
@@ -102,6 +102,7 @@
     // Instance state keys
     private static final String SAVE_DIALOG_EDIT_MODE = "edit_mode";
     private static final String SAVE_DIALOG_ACCESS_POINT_STATE = "wifi_ap_state";
+    private static final String SAVED_WIFI_NFC_DIALOG_STATE = "wifi_nfc_dlg_state";
 
     private static boolean savedNetworksExist;
 
@@ -133,6 +134,7 @@
     private boolean mDlgEdit;
     private AccessPoint mDlgAccessPoint;
     private Bundle mAccessPointSavedState;
+    private Bundle mWifiNfcDialogSavedState;
 
     private WifiTracker mWifiTracker;
 
@@ -200,6 +202,11 @@
                 mAccessPointSavedState =
                     savedInstanceState.getBundle(SAVE_DIALOG_ACCESS_POINT_STATE);
             }
+
+            if (savedInstanceState.containsKey(SAVED_WIFI_NFC_DIALOG_STATE)) {
+                mWifiNfcDialogSavedState =
+                    savedInstanceState.getBundle(SAVED_WIFI_NFC_DIALOG_STATE);
+            }
         }
 
         // if we're supposed to enable/disable the Next button based on our current connection
@@ -341,6 +348,12 @@
                 outState.putBundle(SAVE_DIALOG_ACCESS_POINT_STATE, mAccessPointSavedState);
             }
         }
+
+        if (mWifiToNfcDialog != null && mWifiToNfcDialog.isShowing()) {
+            Bundle savedState = new Bundle();
+            mWifiToNfcDialog.saveState(savedState);
+            outState.putBundle(SAVED_WIFI_NFC_DIALOG_STATE, savedState);
+        }
     }
 
     @Override
@@ -530,10 +543,15 @@
             case WRITE_NFC_DIALOG_ID:
                 if (mSelectedAccessPoint != null) {
                     mWifiToNfcDialog = new WriteWifiConfigToNfcDialog(
-                            getActivity(), mSelectedAccessPoint, mWifiManager);
-                    return mWifiToNfcDialog;
+                            getActivity(), mSelectedAccessPoint.getConfig().networkId,
+                            mSelectedAccessPoint.getSecurity(),
+                            mWifiManager);
+                } else if (mWifiNfcDialogSavedState != null) {
+                    mWifiToNfcDialog = new WriteWifiConfigToNfcDialog(
+                            getActivity(), mWifiNfcDialogSavedState, mWifiManager);
                 }
 
+                return mWifiToNfcDialog;
         }
         return super.onCreateDialog(dialogId);
     }
diff --git a/src/com/android/settings/wifi/WriteWifiConfigToNfcDialog.java b/src/com/android/settings/wifi/WriteWifiConfigToNfcDialog.java
index 97f45aa..00b2446 100644
--- a/src/com/android/settings/wifi/WriteWifiConfigToNfcDialog.java
+++ b/src/com/android/settings/wifi/WriteWifiConfigToNfcDialog.java
@@ -56,10 +56,11 @@
     private static final String PASSWORD_FORMAT = "102700%s%s";
     private static final int HEX_RADIX = 16;
     private static final char[] hexArray = "0123456789ABCDEF".toCharArray();
+    private static final String NETWORK_ID = "network_id";
+    private static final String SECURITY = "security";
 
     private final PowerManager.WakeLock mWakeLock;
 
-    private AccessPoint mAccessPoint;
     private View mView;
     private Button mSubmitButton;
     private Button mCancelButton;
@@ -71,16 +72,31 @@
     private WifiManager mWifiManager;
     private String mWpsNfcConfigurationToken;
     private Context mContext;
+    private int mNetworkId;
+    private int mSecurity;
 
-    WriteWifiConfigToNfcDialog(Context context, AccessPoint accessPoint,
+    WriteWifiConfigToNfcDialog(Context context, int networkId, int security,
             WifiManager wifiManager) {
         super(context);
 
         mContext = context;
         mWakeLock = ((PowerManager) context.getSystemService(Context.POWER_SERVICE))
                 .newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "WriteWifiConfigToNfcDialog:wakeLock");
-        mAccessPoint = accessPoint;
         mOnTextChangedHandler = new Handler();
+        mNetworkId = networkId;
+        mSecurity = security;
+        mWifiManager = wifiManager;
+    }
+
+    WriteWifiConfigToNfcDialog(Context context, Bundle savedState, WifiManager wifiManager) {
+        super(context);
+
+        mContext = context;
+        mWakeLock = ((PowerManager) context.getSystemService(Context.POWER_SERVICE))
+                .newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "WriteWifiConfigToNfcDialog:wakeLock");
+        mOnTextChangedHandler = new Handler();
+        mNetworkId = savedState.getInt(NETWORK_ID);
+        mSecurity = savedState.getInt(SECURITY);
         mWifiManager = wifiManager;
     }
 
@@ -120,7 +136,7 @@
 
         String password = mPasswordView.getText().toString();
         String wpsNfcConfigurationToken
-                = mWifiManager.getWpsNfcConfigurationToken(mAccessPoint.getConfig().networkId);
+                = mWifiManager.getWpsNfcConfigurationToken(mNetworkId);
         String passwordHex = byteArrayToHexString(password.getBytes());
 
         String passwordLength = password.length() >= HEX_RADIX
@@ -163,6 +179,11 @@
         }
     }
 
+    public void saveState(Bundle state) {
+        state.putInt(NETWORK_ID, mNetworkId);
+        state.putInt(SECURITY, mSecurity);
+    }
+
     private void handleWriteNfcEvent(Tag tag) {
         Ndef ndef = Ndef.get(tag);
 
@@ -223,9 +244,9 @@
     private void enableSubmitIfAppropriate() {
 
         if (mPasswordView != null) {
-            if (mAccessPoint.getSecurity() == AccessPoint.SECURITY_WEP) {
+            if (mSecurity == AccessPoint.SECURITY_WEP) {
                 mSubmitButton.setEnabled(mPasswordView.length() > 0);
-            } else if (mAccessPoint.getSecurity() == AccessPoint.SECURITY_PSK) {
+            } else if (mSecurity == AccessPoint.SECURITY_PSK) {
                 mSubmitButton.setEnabled(mPasswordView.length() >= 8);
             }
         } else {
