diff --git a/core/java/android/app/ActivityManager.java b/core/java/android/app/ActivityManager.java
index a0132b1..d97554e 100644
--- a/core/java/android/app/ActivityManager.java
+++ b/core/java/android/app/ActivityManager.java
@@ -16,6 +16,12 @@
 
 package android.app;
 
+import static android.app.WindowConfiguration.WINDOWING_MODE_DOCKED;
+import static android.app.WindowConfiguration.WINDOWING_MODE_FREEFORM;
+import static android.app.WindowConfiguration.WINDOWING_MODE_FULLSCREEN;
+import static android.app.WindowConfiguration.WINDOWING_MODE_PINNED;
+import static android.app.WindowConfiguration.WINDOWING_MODE_UNDEFINED;
+
 import android.Manifest;
 import android.annotation.IntDef;
 import android.annotation.NonNull;
@@ -852,6 +858,32 @@
                     || stackId == ASSISTANT_STACK_ID
                     || isDynamicStack(stackId);
         }
+
+        /** Returns the windowing mode that should be used for this input stack id. */
+        // TODO: To be removed once we are not using stack id for stuff...
+        public static int getWindowingModeForStackId(int stackId) {
+            final int windowingMode;
+            switch (stackId) {
+                case FULLSCREEN_WORKSPACE_STACK_ID:
+                case HOME_STACK_ID:
+                case RECENTS_STACK_ID:
+                case ASSISTANT_STACK_ID:
+                    windowingMode = WINDOWING_MODE_FULLSCREEN;
+                    break;
+                case PINNED_STACK_ID:
+                    windowingMode = WINDOWING_MODE_PINNED;
+                    break;
+                case DOCKED_STACK_ID:
+                    windowingMode = WINDOWING_MODE_DOCKED;
+                    break;
+                case FREEFORM_WORKSPACE_STACK_ID:
+                    windowingMode = WINDOWING_MODE_FREEFORM;
+                    break;
+                default :
+                    windowingMode = WINDOWING_MODE_UNDEFINED;
+            }
+            return windowingMode;
+        }
     }
 
     /**
diff --git a/core/java/android/app/WindowConfiguration.java b/core/java/android/app/WindowConfiguration.java
index d5d7107..11922ec 100644
--- a/core/java/android/app/WindowConfiguration.java
+++ b/core/java/android/app/WindowConfiguration.java
@@ -24,9 +24,6 @@
 import android.os.Parcelable;
 import android.view.DisplayInfo;
 
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-
 /**
  * Class that contains windowing configuration/state for other objects that contain windows directly
  * or indirectly. E.g. Activities, Task, Displays, ...
@@ -65,7 +62,6 @@
             WINDOWING_MODE_DOCKED,
             WINDOWING_MODE_FREEFORM,
     })
-    @Retention(RetentionPolicy.SOURCE)
     public @interface WindowingMode {}
 
     /** Bit that indicates that the {@link #mAppBounds} changed. */
@@ -78,7 +74,6 @@
                     WINDOW_CONFIG_APP_BOUNDS,
                     WINDOW_CONFIG_WINDOWING_MODE,
             })
-    @Retention(RetentionPolicy.SOURCE)
     public @interface WindowConfig {}
 
     public WindowConfiguration() {
diff --git a/services/core/java/com/android/server/am/ActivityStack.java b/services/core/java/com/android/server/am/ActivityStack.java
index a9a06d0..64bd667 100644
--- a/services/core/java/com/android/server/am/ActivityStack.java
+++ b/services/core/java/com/android/server/am/ActivityStack.java
@@ -24,6 +24,8 @@
 import static android.app.ActivityManager.StackId.INVALID_STACK_ID;
 import static android.app.ActivityManager.StackId.PINNED_STACK_ID;
 import static android.app.ActivityManager.StackId.RECENTS_STACK_ID;
+import static android.app.ActivityManager.StackId.getWindowingModeForStackId;
+import static android.app.WindowConfiguration.WINDOWING_MODE_UNDEFINED;
 import static android.content.pm.ActivityInfo.CONFIG_SCREEN_LAYOUT;
 import static android.content.pm.ActivityInfo.FLAG_RESUME_WHILE_PAUSING;
 import static android.content.pm.ActivityInfo.FLAG_SHOW_FOR_ALL_USERS;
@@ -460,24 +462,32 @@
         mTaskPositioner = mStackId == FREEFORM_WORKSPACE_STACK_ID
                 ? new LaunchingTaskPositioner() : null;
         mTmpRect2.setEmpty();
-        final Configuration overrideConfig = getOverrideConfiguration();
+        updateOverrideConfiguration();
         mWindowContainerController = createStackWindowController(display.mDisplayId, onTop,
-                mTmpRect2, overrideConfig);
-        onOverrideConfigurationChanged(overrideConfig);
+                mTmpRect2, getOverrideConfiguration());
         mStackSupervisor.mStacks.put(mStackId, this);
         postAddToDisplay(display, mTmpRect2.isEmpty() ? null : mTmpRect2, onTop);
     }
 
     T createStackWindowController(int displayId, boolean onTop, Rect outBounds,
-            Configuration outOverrideConfig) {
+            Configuration overrideConfig) {
         return (T) new StackWindowController(mStackId, this, displayId, onTop, outBounds,
-                outOverrideConfig);
+                overrideConfig);
     }
 
     T getWindowContainerController() {
         return mWindowContainerController;
     }
 
+    // TODO: Not needed once we are no longer using stack ids as the override config. can be passed
+    // in.
+    private void updateOverrideConfiguration() {
+        final int windowingMode = getWindowingModeForStackId(mStackId);
+        if (windowingMode != WINDOWING_MODE_UNDEFINED) {
+            setWindowingMode(windowingMode);
+        }
+    }
+
     /** Adds the stack to specified display and calls WindowManager to do the same. */
     void reparent(ActivityStackSupervisor.ActivityDisplay activityDisplay, boolean onTop) {
         removeFromDisplay();
diff --git a/services/core/java/com/android/server/am/PinnedActivityStack.java b/services/core/java/com/android/server/am/PinnedActivityStack.java
index c825b314..a1b95f9 100644
--- a/services/core/java/com/android/server/am/PinnedActivityStack.java
+++ b/services/core/java/com/android/server/am/PinnedActivityStack.java
@@ -39,9 +39,9 @@
 
     @Override
     PinnedStackWindowController createStackWindowController(int displayId, boolean onTop,
-            Rect outBounds, Configuration outOverrideConfig) {
+            Rect outBounds, Configuration overrideConfig) {
         return new PinnedStackWindowController(mStackId, this, displayId, onTop, outBounds,
-                outOverrideConfig);
+                overrideConfig);
     }
 
     Rect getDefaultPictureInPictureBounds(float aspectRatio) {
diff --git a/services/core/java/com/android/server/wm/ConfigurationContainer.java b/services/core/java/com/android/server/wm/ConfigurationContainer.java
index 1d3f198..a682a1e 100644
--- a/services/core/java/com/android/server/wm/ConfigurationContainer.java
+++ b/services/core/java/com/android/server/wm/ConfigurationContainer.java
@@ -120,8 +120,7 @@
     }
 
     /** Sets the windowing mode for the configuration container. */
-    void setWindowingMode(/*@WindowConfiguration.WindowingMode TODO: causes build error...why?*/
-            int windowingMode) {
+    public void setWindowingMode(@WindowConfiguration.WindowingMode int windowingMode) {
         mOverrideConfiguration.windowConfiguration.setWindowingMode(windowingMode);
         onOverrideConfigurationChanged(mOverrideConfiguration);
     }
diff --git a/services/core/java/com/android/server/wm/PinnedStackWindowController.java b/services/core/java/com/android/server/wm/PinnedStackWindowController.java
index 3f81b38..135f400 100644
--- a/services/core/java/com/android/server/wm/PinnedStackWindowController.java
+++ b/services/core/java/com/android/server/wm/PinnedStackWindowController.java
@@ -40,8 +40,8 @@
     private Rect mTmpToBounds = new Rect();
 
     public PinnedStackWindowController(int stackId, PinnedStackWindowListener listener,
-            int displayId, boolean onTop, Rect outBounds, Configuration outOverrideConfig) {
-        super(stackId, listener, displayId, onTop, outBounds, outOverrideConfig,
+            int displayId, boolean onTop, Rect outBounds, Configuration overrideConfig) {
+        super(stackId, listener, displayId, onTop, outBounds, overrideConfig,
                 WindowManagerService.getInstance());
     }
 
diff --git a/services/core/java/com/android/server/wm/StackWindowController.java b/services/core/java/com/android/server/wm/StackWindowController.java
index 3f6378a..aaacef5 100644
--- a/services/core/java/com/android/server/wm/StackWindowController.java
+++ b/services/core/java/com/android/server/wm/StackWindowController.java
@@ -58,14 +58,14 @@
     private final Rect mTmpDisplayBounds = new Rect();
 
     public StackWindowController(int stackId, StackWindowListener listener,
-            int displayId, boolean onTop, Rect outBounds, Configuration outOverriderConfig) {
-        this(stackId, listener, displayId, onTop, outBounds, outOverriderConfig,
+            int displayId, boolean onTop, Rect outBounds, Configuration overriderConfig) {
+        this(stackId, listener, displayId, onTop, outBounds, overriderConfig,
                 WindowManagerService.getInstance());
     }
 
     @VisibleForTesting
     public StackWindowController(int stackId, StackWindowListener listener,
-            int displayId, boolean onTop, Rect outBounds, Configuration outOverrideConfig,
+            int displayId, boolean onTop, Rect outBounds, Configuration overrideConfig,
             WindowManagerService service) {
         super(listener, service);
         mStackId = stackId;
@@ -79,9 +79,11 @@
             }
 
             final TaskStack stack = dc.addStackToDisplay(stackId, onTop);
+            if (overrideConfig != null) {
+                stack.onOverrideConfigurationChanged(overrideConfig);
+            }
             stack.setController(this);
             getRawBounds(outBounds);
-            outOverrideConfig.setTo(mContainer.getOverrideConfiguration());
         }
     }
 
diff --git a/services/core/java/com/android/server/wm/TaskStack.java b/services/core/java/com/android/server/wm/TaskStack.java
index 8a4a49a..1a6e2c8 100644
--- a/services/core/java/com/android/server/wm/TaskStack.java
+++ b/services/core/java/com/android/server/wm/TaskStack.java
@@ -163,32 +163,6 @@
         mDockedStackMinimizeThickness = service.mContext.getResources().getDimensionPixelSize(
                 com.android.internal.R.dimen.docked_stack_minimize_thickness);
         EventLog.writeEvent(EventLogTags.WM_STACK_CREATED, stackId);
-
-        // TODO: Remove once we are no longer using Stacks for windowing mode or grouping tasks.
-        final int windowingMode;
-        switch (stackId) {
-            case FULLSCREEN_WORKSPACE_STACK_ID:
-            case HOME_STACK_ID:
-            case RECENTS_STACK_ID:
-            case ASSISTANT_STACK_ID:
-                windowingMode = WINDOWING_MODE_FULLSCREEN;
-                break;
-            case PINNED_STACK_ID:
-                windowingMode = WINDOWING_MODE_PINNED;
-                break;
-            case DOCKED_STACK_ID:
-                windowingMode = WINDOWING_MODE_DOCKED;
-                break;
-            case FREEFORM_WORKSPACE_STACK_ID:
-                windowingMode = WINDOWING_MODE_FREEFORM;
-                break;
-            default :
-                windowingMode = WINDOWING_MODE_UNDEFINED;
-        }
-
-        if (windowingMode != WINDOWING_MODE_UNDEFINED) {
-            setWindowingMode(windowingMode);
-        }
     }
 
     DisplayContent getDisplayContent() {
diff --git a/services/tests/servicestests/src/com/android/server/am/ActivityTestsBase.java b/services/tests/servicestests/src/com/android/server/am/ActivityTestsBase.java
index f64de00..55a1c2a 100644
--- a/services/tests/servicestests/src/com/android/server/am/ActivityTestsBase.java
+++ b/services/tests/servicestests/src/com/android/server/am/ActivityTestsBase.java
@@ -272,7 +272,7 @@
 
         @Override
         protected T createStackWindowController(int displayId, boolean onTop, Rect outBounds,
-                Configuration outOverrideConfig) {
+                Configuration overrideConfig) {
             mContainerController = (T) WindowTestUtils.createMockStackWindowContainerController();
             return mContainerController;
         }
diff --git a/services/tests/servicestests/src/com/android/server/wm/TaskStackContainersTests.java b/services/tests/servicestests/src/com/android/server/wm/TaskStackContainersTests.java
index efe7667..52f66ae 100644
--- a/services/tests/servicestests/src/com/android/server/wm/TaskStackContainersTests.java
+++ b/services/tests/servicestests/src/com/android/server/wm/TaskStackContainersTests.java
@@ -29,6 +29,7 @@
 import android.support.test.filters.SmallTest;
 import android.support.test.runner.AndroidJUnit4;
 
+import static android.app.ActivityManager.StackId.getWindowingModeForStackId;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertNotNull;
@@ -51,9 +52,12 @@
     @Before
     public void setUp() throws Exception {
         super.setUp();
+        final Configuration overrideConfig = new Configuration();
+        overrideConfig.windowConfiguration.setWindowingMode(
+                getWindowingModeForStackId(PINNED_STACK_ID));
         mPinnedStack = new StackWindowController(PINNED_STACK_ID, null,
-                mDisplayContent.getDisplayId(), true /* onTop */, new Rect(), new Configuration(),
-                sWm).mContainer;
+                mDisplayContent.getDisplayId(), true /* onTop */, new Rect(),
+                overrideConfig, sWm).mContainer;
 
         // Stack should contain visible app window to be considered visible.
         final Task pinnedTask = createTaskInStack(mPinnedStack, 0 /* userId */);
diff --git a/services/tests/servicestests/src/com/android/server/wm/WindowConfigurationTests.java b/services/tests/servicestests/src/com/android/server/wm/WindowConfigurationTests.java
index bd0e0df..a1ff2d7 100644
--- a/services/tests/servicestests/src/com/android/server/wm/WindowConfigurationTests.java
+++ b/services/tests/servicestests/src/com/android/server/wm/WindowConfigurationTests.java
@@ -197,8 +197,7 @@
                 false /*overrideHeight*/, mDisplayInfo.logicalDensityDpi, config, parentConfig);
         // Assert that both expected and actual are null or are equal to each other
 
-        assertTrue((expectedConfigBounds == null && winConfig.getAppBounds() == null)
-                || expectedConfigBounds.equals(winConfig.getAppBounds()));
+        assertEquals(expectedConfigBounds, winConfig.getAppBounds());
     }
 
 }
diff --git a/services/tests/servicestests/src/com/android/server/wm/WindowTestsBase.java b/services/tests/servicestests/src/com/android/server/wm/WindowTestsBase.java
index eb8cf91..bce740b 100644
--- a/services/tests/servicestests/src/com/android/server/wm/WindowTestsBase.java
+++ b/services/tests/servicestests/src/com/android/server/wm/WindowTestsBase.java
@@ -16,6 +16,7 @@
 
 package com.android.server.wm;
 
+import static android.app.ActivityManager.StackId.getWindowingModeForStackId;
 import static android.view.Display.DEFAULT_DISPLAY;
 import static android.view.View.VISIBLE;
 
@@ -238,8 +239,10 @@
 
     StackWindowController createStackControllerOnStackOnDisplay(int stackId,
             DisplayContent dc) {
+        final Configuration overrideConfig = new Configuration();
+        overrideConfig.windowConfiguration.setWindowingMode(getWindowingModeForStackId(stackId));
         return new StackWindowController(stackId, null, dc.getDisplayId(),
-                true /* onTop */, new Rect(), new Configuration(), sWm);
+                true /* onTop */, new Rect(), overrideConfig, sWm);
     }
 
     /** Creates a {@link Task} and adds it to the specified {@link TaskStack}. */
