diff --git a/src/com/android/settings/SettingsActivity.java b/src/com/android/settings/SettingsActivity.java
index d68b480..dc0b222 100644
--- a/src/com/android/settings/SettingsActivity.java
+++ b/src/com/android/settings/SettingsActivity.java
@@ -385,7 +385,6 @@
     private boolean mIsShowingDashboard;
     private boolean mIsShortcut;
 
-    private int mMainContentId = R.id.main_content;
     private ViewGroup mContent;
 
     private SearchView mSearchView;
@@ -558,7 +557,7 @@
         setContentView(mIsShowingDashboard ?
                 R.layout.settings_main_dashboard : R.layout.settings_main_prefs);
 
-        mContent = (ViewGroup) findViewById(mMainContentId);
+        mContent = (ViewGroup) findViewById(R.id.main_content);
 
         getFragmentManager().addOnBackStackChangedListener(this);
 
@@ -687,14 +686,6 @@
                 + " ms");
     }
 
-    /**
-     * Sets the id of the view containing the main content. Should be called before calling super's
-     * onCreate.
-     */
-    protected void setMainContentId(int contentId) {
-        mMainContentId = contentId;
-    }
-
     private void setTitleFromIntent(Intent intent) {
         final int initialTitleResId = intent.getIntExtra(EXTRA_SHOW_FRAGMENT_TITLE_RESID, -1);
         if (initialTitleResId > 0) {
@@ -975,7 +966,7 @@
      */
     public void startPreferenceFragment(Fragment fragment, boolean push) {
         FragmentTransaction transaction = getFragmentManager().beginTransaction();
-        transaction.replace(mMainContentId, fragment);
+        transaction.replace(R.id.main_content, fragment);
         if (push) {
             transaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
             transaction.addToBackStack(BACK_STACK_PREFS);
@@ -996,7 +987,7 @@
         }
         Fragment f = Fragment.instantiate(this, fragmentName, args);
         FragmentTransaction transaction = getFragmentManager().beginTransaction();
-        transaction.replace(mMainContentId, f);
+        transaction.replace(R.id.main_content, f);
         if (withTransition) {
             TransitionManager.beginDelayedTransition(mContent);
         }
@@ -1193,7 +1184,7 @@
         if (mSearchResultsFragment != null) {
             return;
         }
-        Fragment current = getFragmentManager().findFragmentById(mMainContentId);
+        Fragment current = getFragmentManager().findFragmentById(R.id.main_content);
         if (current != null && current instanceof SearchResultsSummary) {
             mSearchResultsFragment = (SearchResultsSummary) current;
         } else {
diff --git a/src/com/android/settings/accessibility/AccessibilitySettingsForSetupWizardActivity.java b/src/com/android/settings/accessibility/AccessibilitySettingsForSetupWizardActivity.java
index edc0282..0ccf6d8 100644
--- a/src/com/android/settings/accessibility/AccessibilitySettingsForSetupWizardActivity.java
+++ b/src/com/android/settings/accessibility/AccessibilitySettingsForSetupWizardActivity.java
@@ -42,46 +42,11 @@
 
     @Override
     protected void onCreate(Bundle savedState) {
-        // Main content frame id should be set before calling super as that is where the first
-        // Fragment is inflated.
-        setMainContentId(R.id.suw_main_content);
         super.onCreate(savedState);
 
         // Finish configuring the content view.
-        FrameLayout parentLayout = (FrameLayout) findViewById(R.id.main_content);
-        LayoutInflater.from(this)
-                .inflate(R.layout.accessibility_settings_for_suw, parentLayout);
-
         getActionBar().setDisplayHomeAsUpEnabled(true);
         setIsDrawerPresent(false);
-
-        // Hide System Nav Bar.
-        SystemBarHelper.hideSystemBars(getWindow());
-        LinearLayout parentView = (LinearLayout) findViewById(R.id.content_parent);
-        parentView.setFitsSystemWindows(false);
-        // Adjust for the Status Bar.
-        parentView.setOnApplyWindowInsetsListener(new View.OnApplyWindowInsetsListener() {
-                @Override
-                public WindowInsets onApplyWindowInsets(View v, WindowInsets insets) {
-                    parentView.setPadding(0, insets.getSystemWindowInsetTop(), 0, 0);
-                    return insets;
-                }
-            });
-
-        // Show SUW Nav Bar.
-        NavigationBar navigationBar = (NavigationBar) findViewById(R.id.suw_navigation_bar);
-        navigationBar.getNextButton().setVisibility(View.GONE);
-        navigationBar.setNavigationBarListener(new NavigationBar.NavigationBarListener() {
-            @Override
-            public void onNavigateBack() {
-                onNavigateUp();
-            }
-
-            @Override
-            public void onNavigateNext() {
-                // Do nothing. We don't show this button.
-            }
-        });
     }
 
     @Override
