diff --git a/includes/omega.inc b/includes/omega.inc
index e248be8..c5f061c 100644
--- a/includes/omega.inc
+++ b/includes/omega.inc
@@ -467,54 +467,120 @@ function omega_layouts_info($theme = NULL) {
 
   if (!isset($layouts[$theme])) {
     $layouts[$theme] = omega_discovery('layout', $theme);
-
+    
     // A theme or base theme can explicitly restrict the available layouts to
     // a subset defined through the .info file.
     if ($filter = omega_theme_trail_info('layouts', TRUE, $theme)) {
       $layouts[$theme] = array_intersect_key($layouts[$theme], array_flip($filter));
     }
-
+    
     foreach ($layouts[$theme] as $layout => &$info) {
-      $info['attached'] = array();
-
-      // Look up possible CSS and JS file overrides.
-      if (isset($info['info']['stylesheets'])) {
-        foreach ($info['info']['stylesheets'] as $media => $files) {
-          foreach ($files as $key => $file) {
-            $info['attached']['css'][$key] = array(
-              'media' => $media,
-              'data' => $info['path'] . '/' . $file,
-              'group' => CSS_THEME,
-              'every_page' => TRUE,
-              'weight' => -10,
-            );
+      
+      if (!empty($info['info']['base layout'])) {
+        // Make a list of the layout's base layouts.
+        $info['info']['base_layouts'] = omega_find_base_layouts($layouts[$theme], $layout);
+        
+        // Don't proceed if there was a problem with the root base layout.
+        if (!current($info['info']['base_layouts'])) {
+          continue;
+        }
+        // Determine the root base layout.
+        $base_key = key($info['info']['base_layouts']);
+        
+        // Add regions of base layouts.
+        foreach (array_keys($info['info']['base_layouts']) as $base_layout) {
+          $layouts[$theme][$base_layout]['sub_layouts'][$layout] = $layouts[$theme][$layout]['name'];
+          
+          if (empty($info['info']['regions'])) {
+            $info['info']['regions'] = array();
+          }
+          
+          // merge the layout regions from base layout.
+          if (!empty($layouts[$theme][$base_layout]['info']['regions'])) {
+            $info['info']['regions'] += $layouts[$theme][$base_layout]['info']['regions'];
           }
+          
         }
+        
       }
-
-      // Look up possible CSS and JS file overrides.
-      if (isset($info['info']['scripts'])) {
-        foreach ($info['info']['scripts'] as $key => $file) {
-          $info['attached']['js'][$key] = array(
-            'data' => $info['path'] . '/' . $file,
-            'group' => JS_THEME,
-            'every_page' => TRUE,
-            'weight' => -10,
-          );
+      
+    }
+    
+    foreach ($layouts[$theme] as $layout => &$info) {
+      $info['attached'] = array();
+      
+      // Look up possible CSS and JS file overrides from base layout.
+      
+      if (isset($info['info']['base_layouts'])) {
+        foreach (array_keys($info['info']['base_layouts']) as $base_layout) {
+          if (isset($layouts[$theme][$base_layout])) {
+            $base_info = $layouts[$theme][$base_layout];
+            
+            // add CSS and JS files from bse layout.
+            _omega_set_layout_attached_files($info, $base_info);
+            
+          }
         }
       }
+      
+      // add CSS and JS files from bse layout.
+      _omega_set_layout_attached_files($info);
+      
     }
 
     $context = $theme;
-
+    
     // Give modules and themes a chance to alter the layout info array.
     drupal_alter('omega_layouts_info', $layouts[$theme], $context);
   }
-
+  
   return $layouts[$theme];
 }
 
 /**
+ * Helper function to add CSS and JS files from layout info.
+ * 
+ * @param $info
+ *   The array of layout info to add the CSS and JS files.
+ * 
+ * @param $base_info
+ *   (Optional) The array of layout info to add from. Defaults to $info.
+ */ 
+function _omega_set_layout_attached_files(&$info, $base_info = NULL) {
+  
+  if (empty($base_info)) {
+    $base_info = $info;
+  }
+  
+  // add base layout CSS.
+  if (isset($base_info['info']['stylesheets'])) {              
+    foreach ($base_info['info']['stylesheets'] as $media => $files) {
+      foreach ($files as $key => $file) {
+        $info['attached']['css'][$base_info['name'] . '-' . $key] = array(
+          'media' => $media,
+          'data' => $base_info['path'] . '/' . $file,
+          'group' => CSS_THEME,
+          'every_page' => TRUE,
+          'weight' => -10,
+        );
+      }
+    }
+  }
+  
+  // add base layout JS.
+  if (isset($base_info['info']['scripts'])) {
+    foreach ($base_info['info']['scripts'] as $key => $file) {
+      $info['attached']['js'][$base_info['name'] . '-' . $key] = array(
+        'data' => $base_info['path'] . '/' . $file,
+        'group' => JS_THEME,
+        'every_page' => TRUE,
+        'weight' => -10,
+      );
+    }
+  }
+}
+
+/**
  * Retrieves the active layout for the current page.
  *
  * @return array|bool
@@ -670,3 +736,42 @@ function omega_check_incompatibility($dependency, $current) {
 
   return drupal_check_incompatibility($dependency, $current);
 }
+/**
+ * Find all the base layouts for the specified layout.
+ *
+ * Layouts can inherit templates, css, js and function implementations from earlier layouts.
+ *
+ * @param $layouts
+ *   An array of available layouts.
+ * @param $key
+ *   The name of the theme whose base we are looking for.
+ * @param $used_keys
+ *   A recursion parameter preventing endless loops.
+ *
+ */
+function omega_find_base_layouts($layouts, $key, $used_keys = array()) {
+  
+  $base_key = $layouts[$key]['info']['base layout'];
+  // Does the base layout exist?
+  if (!isset($layouts[$base_key])) {
+    return array($base_key => NULL);
+  }
+
+  $current_base_layout = array($base_key => $layouts[$base_key]['name']);
+
+  // Is the base theme itself a child of another layout?
+  if (isset($layouts[$base_key]['info']['base layout'])) {
+    // Do we already know the base layouts of this layout?
+    if (isset($layouts[$base_key]['base_layouts'])) {
+      return $layouts[$base_key]['base_layouts'] + $current_base_layout;
+    }
+    // Prevent loops.
+    if (!empty($used_keys[$base_key])) {
+      return array($base_key => NULL);
+    }
+    $used_keys[$base_key] = TRUE;
+    return omega_find_base_layouts($layouts, $base_key, $used_keys) + $current_base_layout;
+  }
+  // If we get here, then this is our parent layout.
+  return $current_base_layout;
+}
