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 fde14512502f83aaf66a9d4757dee5eea872e335..99de6973791399c07f564f1e8b6a6f659f877406 100644
--- a/docs/users_guide/8.10.1-notes.rst
+++ b/docs/users_guide/8.10.1-notes.rst
@@ -157,7 +157,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 3e024acc85361824852f5845ba77a853183267f4..e7cbb218bcb359180bcfc12cb177ce8471d8805b 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 f5e3a64df5e5fa1ac7a1e0bee75a5236c72266d4..6cb6c77ed5a21219c3764f8df900ff7679f3869c 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..36f78a6f98ed5305ed480cacdf08dd6c1a61d506 160000
--- a/libraries/containers
+++ b/libraries/containers
@@ -1 +1 @@
-Subproject commit 03dcb287c96613ceb1f64d5d5a82f7b94b879268
+Subproject commit 36f78a6f98ed5305ed480cacdf08dd6c1a61d506
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..6d6928d23745d79fb6f118c019a9c90a26d11436 100644
--- a/testsuite/tests/driver/T10970.stdout
+++ b/testsuite/tests/driver/T10970.stdout
@@ -1,2 +1,2 @@
-0.6.0.1
+0.6.1.1
 OK