Index: includes/common.inc
===================================================================
RCS file: /cvs/drupal/drupal/includes/common.inc,v
retrieving revision 1.550
diff -u -F^function -r1.550 common.inc
--- includes/common.inc	29 Jul 2006 17:56:41 -0000	1.550
+++ includes/common.inc	2 Aug 2006 13:12:08 -0000
@@ -115,7 +115,7 @@ function drupal_set_html_head($data = NU
  */
 function drupal_get_html_head() {
   $output = "<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\" />\n";
-  $output .= theme('stylesheet_import', base_path() .'misc/drupal.css');
+  drupal_add_css('misc/drupal.css', 'core');
   return $output . drupal_set_html_head();
 }
 
@@ -1204,6 +1204,53 @@ function drupal_add_link($attributes) {
 }
 
 /**
+ * Adds a CSS file to the stylesheet queue.
+ *
+ * @param $path
+ *   The path to the CSS file relative to the base_path(), e.g., /modules/devel/devel.css.
+ * @param $type
+ *   The type of stylesheet that is being added. Types are: core, module, and theme.
+ * @param $media
+ *   (optional) The media type for the stylesheet, e.g., all, print, screen.
+ * @return
+ *   An array of CSS files.
+ */
+function drupal_add_css($path = NULL, $type = 'module', $media = 'all') {
+  static $css = array('core' => array(), 'module' => array(), 'theme' => array());
+
+  if (!is_null($path)) {
+    $css[$type][$path] = array('path' => $path, 'media' => $media);
+  }
+  
+  return $css;
+} 
+
+/**
+ * Returns a themed representation of all stylesheets that should be attached to the page.
+ * It loads the CSS in order, with 'core' CSS first, then 'module' CSS, then 'theme' CSS files.
+ * This ensures proper cascading of styles for easy overriding in modules and themes.
+ *
+ * @param $css
+ *   (optional) An array of CSS files. If no array is provided, the default stylesheets array is used instead.
+ * @return
+ *   A string of XHTML CSS tags.
+ */
+function drupal_get_css($css = NULL) {
+  $output = '';
+  if (is_null($css)) {
+    $css = drupal_add_css();
+  }
+
+  foreach ($css as $type) {
+    foreach ($type as $file) {
+      $output .= '<style type="text/css" media="'. $file['media'] .'">@import "'. base_path() . $file['path'] ."\";</style>\n";
+    }
+  }
+  
+  return $output;
+}
+
+/**
  * Add a JavaScript file to the output.
  *
  * The first time this function is invoked per page request,
Index: includes/theme.inc
===================================================================
RCS file: /cvs/drupal/drupal/includes/theme.inc,v
retrieving revision 1.303
diff -u -F^function -r1.303 theme.inc
--- includes/theme.inc	13 Jul 2006 13:11:36 -0000	1.303
+++ includes/theme.inc	2 Aug 2006 13:12:10 -0000
@@ -53,19 +53,19 @@ function init_theme() {
 
   // If we're using a style, load its appropriate theme,
   // which is stored in the style's description field.
-  // Also load the stylesheet using theme_add_style().
+  // Also add the stylesheet using drupal_add_css().
   // Otherwise, load the theme.
   if (strpos($themes[$theme]->filename, '.css')) {
     // File is a style; loads its CSS.
     // Set theme to its template/theme
-    theme_add_style($themes[$theme]->filename);
+    drupal_add_css($themes[$theme]->filename, 'theme');
     $theme = basename(dirname($themes[$theme]->description));
   }
   else {
     // File is a template/theme
     // Load its CSS, if it exists
     if (file_exists($stylesheet = dirname($themes[$theme]->filename) .'/style.css')) {
-      theme_add_style($stylesheet);
+      drupal_add_css($stylesheet, 'theme');
     }
   }
 
@@ -325,33 +325,6 @@ function theme_get_setting($setting_name
 }
 
 /**
- * Add a theme stylesheet to be included later. This is handled separately from
- * drupal_set_html_head() to enforce the correct CSS cascading order.
- */
-function theme_add_style($path = '', $media = 'all') {
-  static $styles = array();
-
-  if ($path && !isset($styles["$media:$path"])) {
-    $style = new stdClass();
-    $style->path = base_path() . $path;
-    $style->media = $media;
-    $styles["$media:$path"] = $style;
-  }
-  return $styles;
-}
-
-/**
- * Return the HTML for a theme's stylesheets.
- */
-function theme_get_styles() {
-  $output = '';
-  foreach (theme_add_style() as $style) {
-    $output .= theme('stylesheet_import', $style->path, $style->media);
-  }
-  return $output;
-}
-
-/**
  * @defgroup themeable Themeable functions
  * @{
  * Functions that display HTML, and which can be customized by themes.
@@ -392,7 +365,7 @@ function theme_page($content) {
   $output .= '<head>';
   $output .= ' <title>'. (drupal_get_title() ? strip_tags(drupal_get_title()) : variable_get('site_name', 'drupal')) .'</title>';
   $output .= drupal_get_html_head();
-  $output .= theme_get_styles();
+  $output .= drupal_get_css();
 
   $output .= ' </head>';
   $output .= ' <body style="background-color: #fff; color: #000;">';
@@ -433,7 +406,7 @@ function theme_maintenance_page($content
   $output .= '<head>';
   $output .= ' <title>'. strip_tags(drupal_get_title()) .'</title>';
   $output .= drupal_get_html_head();
-  $output .= theme_get_styles();
+  $output .= drupal_get_css();
   $output .= '</head>';
   $output .= '<body>';
   $output .= '<h1>' . drupal_get_title() . '</h1>';
@@ -462,7 +435,7 @@ function theme_install_page($content) {
   $output .= '<head>';
   $output .= ' <title>'. strip_tags(drupal_get_title()) .'</title>';
   $output .= drupal_get_html_head();
-  $output .= theme_get_styles();
+  $output .= drupal_get_css();
   $output .= '</head>';
   $output .= '<body>';
   $output .= '<h1>' . drupal_get_title() . '</h1>';
@@ -856,22 +829,6 @@ function theme_mark($type = MARK_NEW) {
 }
 
 /**
- * Import a stylesheet using @import.
- *
- * @param $path
- *  The path to the stylesheet.
- *
- * @param $media
- *  The media type to specify for the stylesheet
- *
- * @return
- *  A string containing the HTML for the stylesheet import.
- */
-function theme_stylesheet_import($path, $media = 'all') {
-  return '<style type="text/css" media="'. $media .'">@import "'. $path .'";</style>';
-}
-
-/**
  * Return a themed list of items.
  *
  * @param $items
Index: themes/chameleon/chameleon.theme
===================================================================
RCS file: /cvs/drupal/drupal/themes/chameleon/chameleon.theme,v
retrieving revision 1.45
diff -u -F^function -r1.45 chameleon.theme
--- themes/chameleon/chameleon.theme	23 May 2006 02:07:36 -0000	1.45
+++ themes/chameleon/chameleon.theme	2 Aug 2006 13:12:10 -0000
@@ -27,6 +27,8 @@ function chameleon_page($content) {
   if (theme_get_setting('toggle_favicon')) {
     drupal_set_html_head('<link rel="shortcut icon" href="'. check_url(theme_get_setting('favicon')) .'" type="image/x-icon" />');
   }
+  
+  drupal_add_css(path_to_theme() .'/common.css', 'theme');
 
   $title = drupal_get_title();
 
@@ -35,8 +37,7 @@ function chameleon_page($content) {
   $output .= "<head>\n";
   $output .= " <title>". ($title ? strip_tags($title) ." | ". variable_get("site_name", "drupal") : variable_get("site_name", "drupal") ." | ". variable_get("site_slogan", "")) ."</title>\n";
   $output .= drupal_get_html_head();
-  $output .= theme('stylesheet_import', base_path() . path_to_theme() ."/common.css");
-  $output .= theme_get_styles();
+  $output .= drupal_get_css();
   $output .= "</head>";
   $output .= "<body>\n";
   $output .= " <div id=\"header\">";
Index: themes/engines/phptemplate/phptemplate.engine
===================================================================
RCS file: /cvs/drupal/drupal/themes/engines/phptemplate/phptemplate.engine,v
retrieving revision 1.38
diff -u -F^function -r1.38 phptemplate.engine
--- themes/engines/phptemplate/phptemplate.engine	29 Jul 2006 17:56:41 -0000	1.38
+++ themes/engines/phptemplate/phptemplate.engine	2 Aug 2006 13:12:11 -0000
@@ -210,7 +210,8 @@ function phptemplate_page($content) {
     'sidebar_right'       => $sidebar_right,
     'site_name'           => (theme_get_setting('toggle_name') ? variable_get('site_name', 'Drupal') : ''),
     'site_slogan'         => (theme_get_setting('toggle_slogan') ? variable_get('site_slogan', '') : ''),
-    'styles'              => theme_get_styles(),
+    'css'                 => drupal_add_css(),
+    'styles'              => drupal_get_css(),
     'tabs'                => theme('menu_local_tasks'),
     'title'               => drupal_get_title()
   );
