diff --git a/core/modules/system/system.module b/core/modules/system/system.module
index 200a335..430543f 100644
--- a/core/modules/system/system.module
+++ b/core/modules/system/system.module
@@ -2585,16 +2585,33 @@ function _system_rebuild_theme_data() {
   // Read info files for each theme
   foreach ($themes as $key => $theme) {
     $themes[$key]->filename = $theme->uri;
-    $themes[$key]->info = drupal_parse_info_file($theme->uri) + $defaults;
+    $themes[$key]->info = drupal_parse_info_file($theme->uri);
 
+    // If there is a base theme we need to pass its region and features info
+    // of the base theme to the sub-theme
+    if (!empty($themes[$key]->info['base theme'])) {
+      $base_theme = $themes[$key]->info['base theme'];
+      $sub_themes[] = $key;
+      // We don't want to override if the sub-theme has values
+      if (!empty($themes[$base_theme]->info['regions'])) {
+        $themes[$key]->info['regions'] = $themes[$base_theme]->info['regions'];
+      }
+      if (!empty($themes[$base_theme]->info['regions'])) {
+        $themes[$key]->info['features'] = $themes[$base_theme]->info['features'];
+      }
+      if (!empty($themes[$base_theme]->info['regions'])) {
+        $themes[$key]->info['settings'] = $themes[$base_theme]->info['settings'];
+      }    
+    }
+    
+    // Finally, add the defaults into the info file
+    $themes[$key]->info += $defaults;
+    
     // Invoke hook_system_info_alter() to give installed modules a chance to
     // modify the data in the .info files if necessary.
     $type = 'theme';
     drupal_alter('system_info', $themes[$key]->info, $themes[$key], $type);
 
-    if (!empty($themes[$key]->info['base theme'])) {
-      $sub_themes[] = $key;
-    }
     if ($themes[$key]->info['engine'] == 'theme') {
       $filename = dirname($themes[$key]->uri) . '/' . $themes[$key]->name . '.theme';
       if (file_exists($filename)) {
