diff --git a/core/core.libraries.yml b/core/core.libraries.yml
index 3d5fcef..5a2f6ac 100644
--- a/core/core.libraries.yml
+++ b/core/core.libraries.yml
@@ -199,8 +199,6 @@ drupal.dropbutton:
   css:
     component:
       misc/dropbutton/dropbutton.css: {}
-    theme:
-      misc/dropbutton/dropbutton.theme.css: {}
   dependencies:
     - core/jquery
     - core/drupal
diff --git a/core/lib/Drupal/Core/Extension/ThemeHandler.php b/core/lib/Drupal/Core/Extension/ThemeHandler.php
index a723087..e763ad6 100644
--- a/core/lib/Drupal/Core/Extension/ThemeHandler.php
+++ b/core/lib/Drupal/Core/Extension/ThemeHandler.php
@@ -206,7 +206,7 @@ public function addTheme(Extension $theme) {
     if (isset($theme->info['engine'])) {
       $theme->engine = $theme->info['engine'];
     }
-    if (isset($theme->info['base theme'])) {
+    if (!empty($theme->info['base theme'])) {
       $theme->base_theme = $theme->info['base theme'];
     }
     $this->list[$theme->getName()] = $theme;
@@ -252,6 +252,7 @@ public function rebuildThemeData() {
     // Set defaults for theme info.
     $defaults = array(
       'engine' => 'twig',
+      'base theme' => 'stable',
       'regions' => array(
         'sidebar_first' => 'Left sidebar',
         'sidebar_second' => 'Right sidebar',
diff --git a/core/modules/quickedit/quickedit.module b/core/modules/quickedit/quickedit.module
index 9a34105..72bae26 100644
--- a/core/modules/quickedit/quickedit.module
+++ b/core/modules/quickedit/quickedit.module
@@ -80,7 +80,7 @@ function quickedit_library_info_alter(&$libraries, $extension) {
       if (isset($theme) && $theme_path = drupal_get_path('theme', $theme)) {
         $info = system_get_info('theme', $theme);
         // Recurse to process base theme(s) first.
-        if (isset($info['base theme'])) {
+        if (!empty($info['base theme'])) {
           $alter_library($library, $info['base theme']);
         }
         if (isset($info['quickedit_stylesheets'])) {
diff --git a/core/modules/system/src/Controller/SystemController.php b/core/modules/system/src/Controller/SystemController.php
index 8f6b58a..9fbc41e 100644
--- a/core/modules/system/src/Controller/SystemController.php
+++ b/core/modules/system/src/Controller/SystemController.php
@@ -247,7 +247,7 @@ public function themesPage() {
         $theme->incompatible_region = !isset($theme->info['regions']['content']);
         $theme->incompatible_php = version_compare(phpversion(), $theme->info['php']) < 0;
         // Confirmed that the base theme is available.
-        $theme->incompatible_base = isset($theme->info['base theme']) && !isset($themes[$theme->info['base theme']]);
+        $theme->incompatible_base = !empty($theme->info['base theme']) && !isset($themes[$theme->info['base theme']]);
         // Confirm that the theme engine is available.
         $theme->incompatible_engine = isset($theme->info['engine']) && !isset($theme->owner);
       }
diff --git a/core/modules/toolbar/js/toolbar.js b/core/modules/toolbar/js/toolbar.js
index 9a19205..53bd135 100644
--- a/core/modules/toolbar/js/toolbar.js
+++ b/core/modules/toolbar/js/toolbar.js
@@ -235,7 +235,7 @@
    *   A string representing a DOM fragment.
    */
   Drupal.theme.toolbarOrientationToggle = function () {
-    return '<div class="toolbar-toggle-orientation"><div class="toolbar-lining">' +
+    return '<div class="toolbar-toggle-orientation-test"><div class="toolbar-lining">' +
       '<button class="toolbar-icon" type="button"></button>' +
       '</div></div>';
   };
diff --git a/core/themes/classy/classy.info.yml b/core/themes/classy/classy.info.yml
index bd61ce0..8a1e69d 100644
--- a/core/themes/classy/classy.info.yml
+++ b/core/themes/classy/classy.info.yml
@@ -4,6 +4,7 @@ description: 'A base theme with sensible default CSS classes added. Learn how to
 package: Core
 version: VERSION
 core: 8.x
+base theme: false
 
 libraries:
   - classy/base
diff --git a/core/themes/classy/classy.theme b/core/themes/classy/classy.theme
new file mode 100644
index 0000000..724c9c4
--- /dev/null
+++ b/core/themes/classy/classy.theme
@@ -0,0 +1,28 @@
+<?php
+
+/**
+ * @file
+ * Classy theme stuff, temporary for testing BC layer.
+ */
+
+/**
+ * Implements hook_library_info_alter().
+ */
+function classy_library_info_alter(&$libraries, $extension) {
+  switch ($extension) {
+    case 'core':
+      if (isset($libraries['drupal.dropbutton'])) {
+        $libraries['drupal.dropbutton']['css']['theme'][base_path() . drupal_get_path('theme', 'classy') . '/css/system/dropbutton.theme.css'] = [];
+      }
+      break;
+    case 'toolbar':
+      if (isset($libraries['toolbar']['js']['js/toolbar.js'])) {
+        unset($libraries['toolbar']['js']['js/toolbar.js']);
+        // @todo Make less ugly. Use weight instead?
+        $libraries['toolbar']['js'] = array_reverse($libraries['toolbar']['js'], TRUE);
+        $libraries['toolbar']['js'][base_path() . drupal_get_path('theme', 'classy') . '/js/toolbar/toolbar.js'] = [];
+        $libraries['toolbar']['js'] = array_reverse($libraries['toolbar']['js'], TRUE);
+      }
+      break;
+  }
+}
diff --git a/core/misc/dropbutton/dropbutton.theme.css b/core/themes/classy/css/system/dropbutton.theme.css
similarity index 100%
copy from core/misc/dropbutton/dropbutton.theme.css
copy to core/themes/classy/css/system/dropbutton.theme.css
diff --git a/core/modules/toolbar/js/toolbar.js b/core/themes/classy/js/toolbar/toolbar.js
similarity index 100%
copy from core/modules/toolbar/js/toolbar.js
copy to core/themes/classy/js/toolbar/toolbar.js
diff --git a/core/misc/dropbutton/dropbutton.theme.css b/core/themes/stable/css/system/dropbutton.theme.css
similarity index 100%
rename from core/misc/dropbutton/dropbutton.theme.css
rename to core/themes/stable/css/system/dropbutton.theme.css
diff --git a/core/modules/toolbar/js/toolbar.js b/core/themes/stable/js/toolbar/toolbar.js
similarity index 100%
copy from core/modules/toolbar/js/toolbar.js
copy to core/themes/stable/js/toolbar/toolbar.js
diff --git a/core/themes/stable/stable.info.yml b/core/themes/stable/stable.info.yml
new file mode 100644
index 0000000..50e7e3a
--- /dev/null
+++ b/core/themes/stable/stable.info.yml
@@ -0,0 +1,7 @@
+name: Stable
+type: theme
+description: 'Shelter from the Wild Wild West.'
+package: Core
+version: VERSION
+core: 8.x
+base theme: false
diff --git a/core/themes/stable/stable.theme b/core/themes/stable/stable.theme
new file mode 100644
index 0000000..b9effc2
--- /dev/null
+++ b/core/themes/stable/stable.theme
@@ -0,0 +1,41 @@
+<?php
+
+/**
+ * @file
+ * Functions to provide backwards compatibility for themes.
+ */
+
+/**
+ * Implements hook_library_info_alter().
+ */
+function stable_library_info_alter(&$libraries, $extension) {
+  switch ($extension) {
+    case 'core':
+      if (isset($libraries['drupal.dropbutton'])) {
+        $libraries['drupal.dropbutton']['css']['theme'][base_path() . drupal_get_path('theme', 'stable') . '/css/system/dropbutton.theme.css'] = [];
+      }
+      break;
+    case 'toolbar':
+      if (isset($libraries['toolbar']['js']['js/toolbar.js'])) {
+        unset($libraries['toolbar']['js']['js/toolbar.js']);
+        // @todo Make less ugly. Use weight instead?
+        $libraries['toolbar']['js'] = array_reverse($libraries['toolbar']['js'], TRUE);
+        $libraries['toolbar']['js'][base_path() . drupal_get_path('theme', 'stable') . '/js/toolbar/toolbar.js'] = [];
+        $libraries['toolbar']['js'] = array_reverse($libraries['toolbar']['js'], TRUE);
+      }
+      break;
+  }
+}
+
+/**
+ * Implements hook_theme().
+ */
+function stable_theme($existing, $type, $theme, $path) {
+  return [];
+}
+
+/**
+ * Implements hook_theme_registry_alter().
+ */
+function stable_theme_registry_alter(&$theme_registry) {
+}
diff --git a/core/themes/stark/stark.info.yml b/core/themes/stark/stark.info.yml
index 70609c1..f6c9ba5 100644
--- a/core/themes/stark/stark.info.yml
+++ b/core/themes/stark/stark.info.yml
@@ -4,3 +4,4 @@ description: 'An intentionally plain theme with no styling to demonstrate defaul
 package: Core
 version: VERSION
 core: 8.x
+base theme: false
