diff --git a/boot b/boot
index 1d7a01f3dbfbe6b91be64151120bfabbaa9a97cd..fc5dd29336ee76002089a2a3f0695af089b5b375 100755
--- a/boot
+++ b/boot
@@ -16,6 +16,11 @@ parser.add_argument('--validate', action='store_true', help='Run in validate mod
 parser.add_argument('--hadrian', action='store_true', help='Do not assume the make base build system')
 args = parser.parse_args()
 
+# Packages whose libraries aren't in the submodule root
+EXCEPTIONS = {
+    'libraries/containers/': 'libraries/containers/containers/'
+}
+
 def print_err(s):
     print(dedent(s), file=sys.stderr)
 
@@ -78,7 +83,7 @@ def check_boot_packages():
             # but in an lndir tree we avoid making .git directories,
             # so it doesn't exist. We therefore require that every repo
             # has a LICENSE file instead.
-            license_path = os.path.join(dir_, 'LICENSE')
+            license_path = os.path.join(EXCEPTIONS.get(dir_+'/', dir_), 'LICENSE')
             if not os.path.isfile(license_path):
                 die("""\
                     Error: %s doesn't exist
@@ -91,9 +96,12 @@ def boot_pkgs():
 
     for package in glob.glob("libraries/*/"):
         packages_file = os.path.join(package, 'ghc-packages')
+        print(package)
         if os.path.isfile(packages_file):
             for subpkg in open(packages_file, 'r'):
                 library_dirs.append(os.path.join(package, subpkg.strip()))
+        elif package in EXCEPTIONS:
+            library_dirs.append(EXCEPTIONS[package])
         else:
             library_dirs.append(package)
 
diff --git a/docs/users_guide/8.10.1-notes.rst b/docs/users_guide/8.10.1-notes.rst
index dfbb8f9224a832d3c6191cf79ab0fbcd5b5a3a5e..ea9a5d850863f720848014a4bcf7cbf1db3fe07c 100644
--- a/docs/users_guide/8.10.1-notes.rst
+++ b/docs/users_guide/8.10.1-notes.rst
@@ -164,7 +164,7 @@ for further change information.
     libraries/binary/binary.cabal:           Dependency of ``ghc`` library
     libraries/bytestring/bytestring.cabal:   Dependency of ``ghc`` library
     libraries/Cabal/Cabal/Cabal.cabal:       Dependency of ``ghc-pkg`` utility
-    libraries/containers/containers.cabal:   Dependency of ``ghc`` library
+    libraries/containers/containers/containers.cabal:   Dependency of ``ghc`` library
     libraries/deepseq/deepseq.cabal:         Dependency of ``ghc`` library
     libraries/directory/directory.cabal:     Dependency of ``ghc`` library
     libraries/filepath/filepath.cabal:       Dependency of ``ghc`` library
diff --git a/docs/users_guide/8.6.1-notes.rst b/docs/users_guide/8.6.1-notes.rst
index 13f5b4df5d8595ad12f31d3abc60a65e2c04fa6f..341f3b8955c74d10c8b0d9818961e9baa6adb1ff 100644
--- a/docs/users_guide/8.6.1-notes.rst
+++ b/docs/users_guide/8.6.1-notes.rst
@@ -268,7 +268,7 @@ for further change information.
     libraries/binary/binary.cabal:           Dependency of ``ghc`` library
     libraries/bytestring/bytestring.cabal:   Dependency of ``ghc`` library
     libraries/Cabal/Cabal/Cabal.cabal:       Dependency of ``ghc-pkg`` utility
-    libraries/containers/containers.cabal:   Dependency of ``ghc`` library
+    libraries/containers/containers/containers.cabal:   Dependency of ``ghc`` library
     libraries/deepseq/deepseq.cabal:         Dependency of ``ghc`` library
     libraries/directory/directory.cabal:     Dependency of ``ghc`` library
     libraries/filepath/filepath.cabal:       Dependency of ``ghc`` library
diff --git a/docs/users_guide/8.8.1-notes.rst b/docs/users_guide/8.8.1-notes.rst
index 972e4c04461185df82361e0af74559c1fe4a43da..59b8bf6b747774139abff398f9f96b25b49aa61a 100644
--- a/docs/users_guide/8.8.1-notes.rst
+++ b/docs/users_guide/8.8.1-notes.rst
@@ -241,7 +241,7 @@ for further change information.
     libraries/binary/binary.cabal:           Dependency of ``ghc`` library
     libraries/bytestring/bytestring.cabal:   Dependency of ``ghc`` library
     libraries/Cabal/Cabal/Cabal.cabal:       Dependency of ``ghc-pkg`` utility
-    libraries/containers/containers.cabal:   Dependency of ``ghc`` library
+    libraries/containers/containers/containers.cabal:   Dependency of ``ghc`` library
     libraries/deepseq/deepseq.cabal:         Dependency of ``ghc`` library
     libraries/directory/directory.cabal:     Dependency of ``ghc`` library
     libraries/filepath/filepath.cabal:       Dependency of ``ghc`` library
diff --git a/ghc.mk b/ghc.mk
index 7cddfa76d7cf6b77e707ef7bea3e092f9969f7f6..21cb0a2397e7835773b4398179e61d047fa5eb81 100644
--- a/ghc.mk
+++ b/ghc.mk
@@ -426,7 +426,7 @@ PACKAGES_STAGE1 += filepath
 PACKAGES_STAGE1 += array
 PACKAGES_STAGE1 += deepseq
 PACKAGES_STAGE1 += bytestring
-PACKAGES_STAGE1 += containers
+PACKAGES_STAGE1 += containers/containers
 
 ifeq "$(Windows_Target)" "YES"
 PACKAGES_STAGE1 += Win32
diff --git a/hadrian/src/Packages.hs b/hadrian/src/Packages.hs
index 8bb86a63332825191fdc617ad1891a8de3146782..53ecb6897e48a307fd8a3abf568f05e929877664 100644
--- a/hadrian/src/Packages.hs
+++ b/hadrian/src/Packages.hs
@@ -54,7 +54,7 @@ checkApiAnnotations = util "check-api-annotations"
 checkPpr            = util "check-ppr"
 compareSizes        = util "compareSizes"    `setPath` "utils/compare_sizes"
 compiler            = top  "ghc"             `setPath` "compiler"
-containers          = lib  "containers"
+containers          = lib  "containers"      `setPath` "libraries/containers/containers"
 deepseq             = lib  "deepseq"
 deriveConstants     = util "deriveConstants"
 directory           = lib  "directory"
diff --git a/libraries/containers b/libraries/containers
index 03dcb287c96613ceb1f64d5d5a82f7b94b879268..aaeda192b34a66b1c5359a85271adf8fed26dd12 160000
--- a/libraries/containers
+++ b/libraries/containers
@@ -1 +1 @@
-Subproject commit 03dcb287c96613ceb1f64d5d5a82f7b94b879268
+Subproject commit aaeda192b34a66b1c5359a85271adf8fed26dd12
diff --git a/testsuite/tests/backpack/should_run/bkprun05.bkp b/testsuite/tests/backpack/should_run/bkprun05.bkp
index de2374f5693a9f9c8210572381b2bb3734556403..6db2daa9635816f42012c0de0ef7cab2c4fa1fda 100644
--- a/testsuite/tests/backpack/should_run/bkprun05.bkp
+++ b/testsuite/tests/backpack/should_run/bkprun05.bkp
@@ -133,7 +133,7 @@ unit app where
         app = do
             let x = insert 0 "foo"
                   . delete 1
-                  . insert 1 undefined
+                  . insert 1 (errorWithoutStackTrace "this is an error")
                   . insert (6 :: Int) "foo"
                   $ empty
             print (member 1 x)
diff --git a/testsuite/tests/backpack/should_run/bkprun05.stderr b/testsuite/tests/backpack/should_run/bkprun05.stderr
index 12d7d92d2d55e201361dc57d8ac1dec0b097284d..7f5f1a544f63f4c38079786b1413ff5739738bbb 100644
--- a/testsuite/tests/backpack/should_run/bkprun05.stderr
+++ b/testsuite/tests/backpack/should_run/bkprun05.stderr
@@ -1,4 +1,2 @@
-bkprun05: Prelude.undefined
-CallStack (from HasCallStack):
-  error, called at libraries/base/GHC/Err.hs:78:14 in base:GHC.Err
-  undefined, called at bkprun05.bkp:136:30 in app+app-18HBpsO5TPxCVSTvBQxSrq:App
+bkprun05: this is an error
+
diff --git a/testsuite/tests/driver/T10970.stdout b/testsuite/tests/driver/T10970.stdout
index bf26c89bd81c1448952fcf9f367880457046240d..697781145f5c255e08550a84f60b651b866bfe90 100644
--- a/testsuite/tests/driver/T10970.stdout
+++ b/testsuite/tests/driver/T10970.stdout
@@ -1,2 +1,2 @@
-0.6.0.1
+0.6.2.1
 OK
diff --git a/utils/ghc-cabal/Main.hs b/utils/ghc-cabal/Main.hs
index 0782ead535bfef291ceb138c91a2f20f7941660f..7f2cf91bb8df1575ba76972047c51dab3780f7fe 100644
--- a/utils/ghc-cabal/Main.hs
+++ b/utils/ghc-cabal/Main.hs
@@ -388,10 +388,11 @@ generate directory distdir config_args
           libraryDirs = forDeps Installed.libraryDirs
           -- The mkLibraryRelDir function is a bit of a hack.
           -- Ideally it should be handled in the makefiles instead.
-          mkLibraryRelDir "rts"   = "rts/dist/build"
-          mkLibraryRelDir "ghc"   = "compiler/stage2/build"
-          mkLibraryRelDir "Cabal" = "libraries/Cabal/Cabal/dist-install/build"
-          mkLibraryRelDir l       = "libraries/" ++ l ++ "/dist-install/build"
+          mkLibraryRelDir "rts"        = "rts/dist/build"
+          mkLibraryRelDir "ghc"        = "compiler/stage2/build"
+          mkLibraryRelDir "Cabal"      = "libraries/Cabal/Cabal/dist-install/build"
+          mkLibraryRelDir "containers" = "libraries/containers/containers/dist-install/build"
+          mkLibraryRelDir l            = "libraries/" ++ l ++ "/dist-install/build"
           libraryRelDirs = map mkLibraryRelDir transitiveDepNames
 
           -- this is a hack to accommodate Cabal 2.2+ more hygenic