diff --git a/src/com/android/settings/Settings.java b/src/com/android/settings/Settings.java
index 2b8bde2..e93fa18 100644
--- a/src/com/android/settings/Settings.java
+++ b/src/com/android/settings/Settings.java
@@ -81,6 +81,7 @@
 import com.android.settings.location.LocationSettings;
 import com.android.settings.nfc.AndroidBeam;
 import com.android.settings.nfc.PaymentSettings;
+import com.android.settings.print.PrintJobSettingsFragment;
 import com.android.settings.print.PrintServiceSettingsFragment;
 import com.android.settings.print.PrintSettingsFragment;
 import com.android.settings.tts.TextToSpeechSettings;
@@ -347,6 +348,7 @@
         NotificationAccessSettings.class.getName(),
         ManageAccountsSettings.class.getName(),
         PrintSettingsFragment.class.getName(),
+        PrintJobSettingsFragment.class.getName(),
         TrustedCredentialsSettings.class.getName(),
         PaymentSettings.class.getName(),
         KeyboardLayoutPickerFragment.class.getName()
@@ -1108,4 +1110,5 @@
     public static class TrustedCredentialsSettingsActivity extends Settings { /* empty */ }
     public static class PaymentSettingsActivity extends Settings { /* empty */ }
     public static class PrintSettingsActivity extends Settings { /* empty */ }
+    public static class PrintJobSettingsActivity extends Settings { /* empty */ }
 }
diff --git a/src/com/android/settings/print/PrintJobSettingsFragment.java b/src/com/android/settings/print/PrintJobSettingsFragment.java
index c15bc06..cfb4cb2 100644
--- a/src/com/android/settings/print/PrintJobSettingsFragment.java
+++ b/src/com/android/settings/print/PrintJobSettingsFragment.java
@@ -19,6 +19,7 @@
 import android.app.ActivityManager;
 import android.content.Context;
 import android.graphics.drawable.Drawable;
+import android.net.Uri;
 import android.os.Bundle;
 import android.preference.Preference;
 import android.print.PrintJob;
@@ -45,6 +46,8 @@
     private static final int MENU_ITEM_ID_CANCEL = 1;
     private static final int MENU_ITEM_ID_RESTART = 2;
 
+    private static final String EXTRA_PRINT_JOB_ID = "EXTRA_PRINT_JOB_ID";
+
     private static final String PRINT_JOB_PREFERENCE = "print_job_preference";
     private static final String PRINT_JOB_MESSAGE_PREFERENCE = "print_job_message_preference";
 
@@ -53,7 +56,7 @@
     private final PrintJobStateChangeListener mPrintJobStateChangeListener =
             new PrintJobStateChangeListener() {
         @Override
-        public void onPrintJobsStateChanged(PrintJobId printJobId) {
+        public void onPrintJobStateChanged(PrintJobId printJobId) {
             updateUi();
         }
     };
@@ -141,8 +144,8 @@
     }
 
     private void processArguments() {
-        mPrintJobId = (PrintJobId) getArguments().getParcelable(
-                PrintSettingsFragment.EXTRA_PRINT_JOB_ID);
+        String printJobId = getArguments().getString(EXTRA_PRINT_JOB_ID);
+        mPrintJobId = PrintJobId.unflattenFromString(printJobId);
         if (mPrintJobId == null) {
             finish();
         }
diff --git a/src/com/android/settings/print/PrintSettingsFragment.java b/src/com/android/settings/print/PrintSettingsFragment.java
index 8d080ce..391d505 100644
--- a/src/com/android/settings/print/PrintSettingsFragment.java
+++ b/src/com/android/settings/print/PrintSettingsFragment.java
@@ -112,8 +112,6 @@
 
     private PrintJobsController mPrintJobsController;
 
-    private String mPrintJobPreferenceToActivate;
-
     @Override
     public void onCreate(Bundle icicle) {
         super.onCreate(icicle);
@@ -268,19 +266,6 @@
             if (prereference != null) {
                 prereference.performClick(getPreferenceScreen());
             }
-        } else {
-            String printJobId = getArguments().getString(EXTRA_PRINT_JOB_ID);
-            if (printJobId != null) {
-                getArguments().remove(EXTRA_PRINT_JOB_ID);
-                Preference preference = findPreference(printJobId);
-                if (preference != null) {
-                    preference.performClick(getPreferenceScreen());
-                } else {
-                    // The preference not being present may mean the the print job
-                    // loader has not completed so make a note and wait for the load.
-                    mPrintJobPreferenceToActivate = printJobId;
-                }
-            }
         }
     }
 
@@ -427,20 +412,10 @@
                     }
 
                     Bundle extras = preference.getExtras();
-                    extras.putParcelable(EXTRA_PRINT_JOB_ID, printJob.getId());
+                    extras.putString(EXTRA_PRINT_JOB_ID, printJob.getId().flattenToString());
 
                     mActivePrintJobsCategory.addPreference(preference);
                 }
-
-                // If were waiting for creating a preference for a print
-                // job so we can start it - do that.
-                if (mPrintJobPreferenceToActivate != null) {
-                    Preference preference = findPreference(mPrintJobPreferenceToActivate);
-                    mPrintJobPreferenceToActivate = null;
-                    if (preference != null) {
-                        preference.performClick(getPreferenceScreen());
-                    }
-                }
             }
         }
 
@@ -454,7 +429,7 @@
 
         private static final String LOG_TAG = "PrintJobsLoader";
 
-        private static final boolean DEBUG = true;
+        private static final boolean DEBUG = false;
 
         private List <PrintJobInfo> mPrintJobs = new ArrayList<PrintJobInfo>();
 
@@ -489,7 +464,7 @@
             if (mPrintJobStateChangeListener == null) {
                 mPrintJobStateChangeListener = new PrintJobStateChangeListener() {
                     @Override
-                    public void onPrintJobsStateChanged(PrintJobId printJobId) {
+                    public void onPrintJobStateChanged(PrintJobId printJobId) {
                         onForceLoad();
                     }
                 };
