diff --git a/.htaccess b/.htaccess
index 442a5bd95f55461395a53567961f77fed39122d4..a42729b76bf6127ea21832c4c652a0575458586f 100644
--- a/.htaccess
+++ b/.htaccess
@@ -3,7 +3,7 @@
 #
 
 # Protect files and directories from prying eyes:
-<Files ~ "(\.(conf|inc|module|pl|sh|sql|theme)|Entries|Repositories|Root|scripts|updates)$">
+<Files ~ "(\.(conf|inc|module|pl|sh|sql|theme|engine|xtmpl)|Entries|Repositories|Root|scripts|updates)$">
   order deny,allow
   deny from all
 </Files>
diff --git a/database/database.mysql b/database/database.mysql
index f5c3cc9673960982dc08658b8f9e2a18699bde09..2964018fc5f8192965201ebf1031998245e78091 100644
--- a/database/database.mysql
+++ b/database/database.mysql
@@ -732,7 +732,8 @@ INSERT INTO system VALUES ('modules/node.module','node','module','',1,0,0);
 INSERT INTO system VALUES ('modules/page.module','page','module','',1,0,0);
 INSERT INTO system VALUES ('modules/story.module','story','module','',1,0,0);
 INSERT INTO system VALUES ('modules/taxonomy.module','taxonomy','module','',1,0,0);
-INSERT INTO system VALUES ('themes/xtemplate/xtemplate.theme','xtemplate','theme','Internet explorer, Netscape, Opera',1,0,0);
+INSERT INTO system VALUES ('themes/bluemarine/xtemplate.xtmpl','bluemarine','theme','themes/engines/xtemplate/xtemplate.engine',1,0,0);
+INSERT INTO system VALUES ('themes/engines/xtemplate/xtemplate.engine','xtemplate','theme_engine','',1,0,0);
 INSERT INTO users (uid, name, mail) VALUES ('0', '', '');
 INSERT INTO users_roles (uid, rid) VALUES (0, 1);
 
@@ -743,7 +744,7 @@ INSERT INTO role (rid, name) VALUES (2, 'authenticated user');
 INSERT INTO permission VALUES (2,'access comments, access content, post comments, post comments without approval',0);
 
 REPLACE variable SET name='update_start', value='s:10:"2004-02-21;"';
-REPLACE variable SET name='theme_default', value='s:9:"xtemplate";';
+REPLACE variable SET name='theme_default', value='s:10:"bluemarine";';
 
 REPLACE blocks SET module = 'user', delta = '0', status = '1';
 REPLACE blocks SET module = 'user', delta = '1', status = '1';
diff --git a/database/database.pgsql b/database/database.pgsql
index e1103013fe98aa07e1c5462cbdfc2e04a79bee77..0eaa8f0a1443d1c7d79994037c6ee96b48bb3faa 100644
--- a/database/database.pgsql
+++ b/database/database.pgsql
@@ -717,10 +717,11 @@ INSERT INTO system VALUES ('modules/node.module','node','module','',1,0,0);
 INSERT INTO system VALUES ('modules/page.module','page','module','',1,0,0);
 INSERT INTO system VALUES ('modules/story.module','story','module','',1,0,0);
 INSERT INTO system VALUES ('modules/taxonomy.module','taxonomy','module','',1,0,0);
-INSERT INTO system VALUES ('themes/xtemplate/xtemplate.theme','xtemplate','theme','Internet explorer, Netscape, Opera',1,0,0);
+INSERT INTO system VALUES ('themes/bluemarine/xtemplate.xtmpl','bluemarine','theme','themes/engines/xtemplate/xtemplate.engine',1,0,0);
+INSERT INTO system VALUES ('themes/engines/xtemplate/xtemplate.engine','xtemplate','theme_engine','',1,0,0);
 
 INSERT INTO variable(name,value) VALUES('update_start', 's:10:"2004-02-21";');
-INSERT INTO variable(name,value) VALUES('theme_default','s:9:"xtemplate";');
+INSERT INTO variable(name,value) VALUES('theme_default','s:10:"bluemarine";');
 INSERT INTO users(uid,name,mail) VALUES(0,'','');
 INSERT INTO users_roles(uid,rid) VALUES(0, 1);
 
diff --git a/database/updates.inc b/database/updates.inc
index f7922c4aebcdb784b8f793247eb1be7def1e7469..61186b6a194b859f0e9586ea5e710c4007a0c7dd 100644
--- a/database/updates.inc
+++ b/database/updates.inc
@@ -74,7 +74,8 @@
   "2004-08-10" => "update_100",
   "2004-08-11" => "update_101",
   "2004-08-12" => "update_102",
-  "2004-08-17" => "update_103"
+  "2004-08-17" => "update_103",
+  "2004-08-19" => "update_104"
 );
 
 function update_32() {
@@ -1522,6 +1523,34 @@ function update_103() {
   return $ret;
 }
 
+function update_104() {
+  $ret = array();
+  if (variable_get('theme_default', 'xtemplate') == 'chameleon') {
+    $ret[] = update_sql("DELETE FROM {system} WHERE name = 'chameleon'");
+    $ret[] = update_sql("INSERT INTO system VALUES ('themes/chameleon/chameleon.theme','chameleon','theme','',1,0,0)");
+    $ret[] = update_sql("INSERT INTO system VALUES ('themes/chameleon/marvin/style.css','marvin','theme','themes/chameleon/chameleon.theme',1,0,0)");
+    if (variable_get("chameleon_stylesheet", "themes/chameleon/pure/chameleon.css") == "themes/chameleon/marvin/chameleon.css") {
+      variable_set('theme_default', 'chameleon/marvin');
+    }
+   else {
+      variable_set('theme_default', 'chameleon');
+    }
+  }
+  elseif (variable_get('theme_default', 'xtemplate') == 'xtemplate') {
+    $ret[] = update_sql("DELETE FROM {system} WHERE name = 'xtemplate'");
+    $ret[] = update_sql("INSERT INTO system VALUES ('themes/bluemarine/bluemarine.theme','bluemarine','theme','themes/engines/xtemplate/xtemplate.engine',1,0,0)");
+    $ret[] = update_sql("INSERT INTO system VALUES ('themes/pushbutton/pushbutton.theme','pushbutton','theme','themes/engines/xtemplate/xtemplate.engine',1,0,0)");
+    $ret[] = update_sql("INSERT INTO system VALUES ('themes/engines/xtemplate/xtemplate.engine','xtemplate','theme_engine','',1,0,0)");
+    if (variable_get('xtemplate_template', 'default') == 'pushbutton') {
+      variable_set('theme_default', 'pushbutton');
+    }
+    else {
+      variable_set('theme_default', 'bluemarine');
+    }
+  }
+  return $ret;
+}
+
 function update_sql($sql) {
   $edit = $_POST["edit"];
   $result = db_query($sql);
diff --git a/includes/common.inc b/includes/common.inc
index f8e5654dd8f0e7d6f66e73a40b285fb99c7ee5aa..30ca12e08bbef2db4e850d29c8765942fcd56bd1 100644
--- a/includes/common.inc
+++ b/includes/common.inc
@@ -87,9 +87,7 @@ function drupal_get_html_head() {
 
   $output = "<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\" />\n";
   $output .= "<base href=\"$base_url/\" />\n";
-  $output .= "<style type=\"text/css\" media=\"all\">\n";
-  $output .= "@import url(misc/drupal.css);\n";
-  $output .= "</style>\n";
+  $output .= theme('stylesheet_import', 'misc/drupal.css');
 
   return $output . drupal_set_html_head();
 }
diff --git a/includes/file.inc b/includes/file.inc
index 6b8fbf7fb6bb1d22a03bb4ac249af41036449961..6eb0bfd3d72323cd640455284faf5de0494437dd 100644
--- a/includes/file.inc
+++ b/includes/file.inc
@@ -437,7 +437,7 @@ function file_scan_directory($dir, $mask, $nomask = array('.', '..', 'CVS'), $ca
         }
         elseif (ereg($mask, $file)) {
           $name = basename($file);
-          $files["$dir/$file"]->path = "$dir/$file";
+          $files["$dir/$file"]->filename = "$dir/$file";
           $files["$dir/$file"]->name = substr($name, 0, strrpos($name, '.'));
           if ($callback) {
             $callback("$dir/$file");
diff --git a/includes/theme.inc b/includes/theme.inc
index 87ed363e6e9d7c564e4bb995827ea3df945c5509..08b02bfcd0dfb150a0228e9f98f989db7f333bb9 100644
--- a/includes/theme.inc
+++ b/includes/theme.inc
@@ -33,16 +33,52 @@ function theme_help($section) {
  *   The name of the currently selected theme.
  */
 function init_theme() {
-  global $user;
+  global $user, $custom_theme, $theme_engine, $theme_key;
 
   $themes = list_themes();
 
   // Only select the user selected theme if it is available in the
   // list of enabled themes.
-  $theme = $user->theme && $themes[$user->theme] ? $user->theme : variable_get('theme_default', 0);
+  $theme = $user->theme && $themes[$user->theme] ? $user->theme : variable_get('theme_default', 'bluemarine');
 
-  include_once($themes[$theme]->filename);
+  // Allow modules to override the present theme... only select custom theme
+  // if it is available in the list of enabled themes.
+  $theme = $custom_theme && $themes[$custom_theme] ? $custom_theme : $theme;
 
+  // Store the identifier for retrieving theme settings with.
+  $theme_key = $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 drupal_set_html_head().
+  // Otherwise, load the theme.
+  if (strpos($themes[$theme]->filename, '.css')) {
+    // File is a style; put it in the html_head buffer
+    // Set theme to its template/theme
+    drupal_set_html_head(theme('stylesheet_import', $themes[$theme]->filename));
+    $theme = $themes[$theme]->description;
+  }
+  else {
+    // File is a template/theme
+    // Put the css with the same name in html_head, if it exists
+    if (file_exists($stylesheet = dirname($themes[$theme]->filename) .'/style.css')) {
+      drupal_set_html_head(theme('stylesheet_import', $stylesheet));
+    }
+  }
+
+  if (strpos($themes[$theme]->filename, '.theme')) {
+    // file is a theme; include it
+    include_once($themes[$theme]->filename);
+  }
+  elseif (strpos($themes[$theme]->description, '.engine')) {
+    // file is a template; include its engine
+    include_once($themes[$theme]->description);
+    $theme_engine = basename($themes[$theme]->description, '.engine');
+    if (function_exists($theme_engine .'_init')) {
+      call_user_func($theme_engine .'_init', $themes[$theme]);
+    }
+  }
+  
   return $theme;
 }
 
@@ -74,13 +110,42 @@ function list_themes($refresh = FALSE) {
   return $list;
 }
 
+/**
+ * Provides a list of currently available theme engines
+ *
+ * @param $refresh
+ *   Whether to reload the list of themes from the database.
+ * @return
+ *   An array of the currently available theme engines.
+ */
+function list_theme_engines($refresh = FALSE) {
+  static $list;
+
+  if ($refresh) {
+    unset($list);
+  }
+
+  if (!$list) {
+    $list = array();
+    $result = db_query("SELECT * FROM {system} where type = 'theme_engine' AND status = '1' ORDER BY name");
+    while ($engine = db_fetch_object($result)) {
+      if (file_exists($engine->filename)) {
+        $list[$engine->name] = $engine;
+      }
+    }
+  }
+
+  return $list;
+}
+
 /**
  * Generate the themed representation of a Drupal object.
  *
  * All requests for themed functions must go through this function. It examines
  * the request and routes it to the appropriate theme function. If the current
- * theme does not implement the requested function, then the base theme function
- * is called.
+ * theme does not implement the requested function, then the current theme
+ * engine is checked. If neither the engine nor theme implement the requested
+ * function, then the base theme function is called.
  *
  * For example, to retrieve the HTML that is output by theme_page($output), a
  * module should call theme('page', $output).
@@ -94,14 +159,21 @@ function list_themes($refresh = FALSE) {
  */
 function theme() {
   global $theme;
+  global $theme_engine;
 
   $args = func_get_args();
   $function = array_shift($args);
 
-  if (($theme != '') && (function_exists($theme .'_'. $function))) {
+  if (($theme != '') && function_exists($theme .'_'. $function)) {
+    // call theme function
     return call_user_func_array($theme .'_'. $function, $args);
   }
+  elseif (($theme != '') && isset($theme_engine) && function_exists($theme_engine .'_'. $function)) {
+    // call engine function
+    return call_user_func_array($theme_engine .'_'. $function, $args);
+  }
   elseif (function_exists('theme_'. $function)){
+    // call Drupal function
     return call_user_func_array('theme_'. $function, $args);
   }
 }
@@ -117,6 +189,113 @@ function path_to_theme() {
   return dirname($themes[$theme]->filename);
 }
 
+/**
+ * Retrieve an associative array containing the settings for a theme.
+ *
+ * The final settings are arrived at by merging the default settings, 
+ * the site-wide settings, and the settings defined for the specific theme.
+ * If no $key was specified, only the site-wide theme defaults are retrieved.
+ *
+ * The default values for each of settings are also defined in this function.
+ * To add new settings, add their default values here, and then add form elements
+ * to system_theme_settings() in system.module.
+ *
+ * @param $key
+ *  The template/style value for a given theme.
+ *
+ * @return
+ *   An associative array containing theme settings.
+ */
+function drupal_get_theme_settings($key = NULL) {
+  $defaults = array(
+    'primary_links'                 =>  '',
+    'secondary_links'               =>  l('edit secondary links', 'admin/themes/settings'),
+    'mission'                       =>  '',
+    'default_logo'                  =>  1,
+    'logo_path'                     =>  '',
+    'toggle_logo'                   =>  1,
+    'toggle_name'                   =>  1,
+    'toggle_search'                 =>  1,
+    'toggle_slogan'                 =>  0,
+    'toggle_mission'                =>  1,
+    'toggle_primary_links'          =>  1,
+    'toggle_secondary_links'        =>  1,
+    'toggle_node_user_picture'      =>  0,
+    'toggle_comment_user_picture'   =>  0,
+  );
+
+  foreach (node_list() as $type) {
+    $defaults['toggle_node_info_' . $type] = 1;
+  }
+  $settings = array_merge($defaults, variable_get('theme_settings', array()));
+
+  if ($key) {
+    $settings = array_merge($settings, variable_get(str_replace('/', '_', 'theme_'. $key .'_settings'), array()));
+  }
+
+  return $settings;
+}
+
+/**
+ * Retrieve a setting for the current theme.
+ * This function is designed for use from within themes & engines
+ * to determine theme settings made in the admin interface.
+ *
+ * Caches values for speed (use $refresh = TRUE to refresh cache)
+ *
+ * @param $setting_name
+ *  The name of the setting to be retrieved.
+ *
+ * @param $refresh
+ *  Whether to reload the cache of settings.
+ *
+ * @return
+ *   The value of the requested setting, NULL if the setting does not exist.
+ */
+function drupal_get_theme_setting($setting_name, $refresh = FALSE) {
+  global $theme_key;
+  static $settings;
+
+  if (empty($settings) || $refresh) {
+    $settings = drupal_get_theme_settings($theme_key);
+
+    $themes = list_themes();
+    $theme_object = $themes[$theme_key];
+
+    if ($settings['mission'] == '') {
+      $settings['mission'] = variable_get('site_mission', '');
+    }
+
+    if (!$settings['toggle_mission']) {
+      $settings['mission'] = '';
+    }
+
+    if ($settings['toggle_logo']) {
+      if ($settings['default_logo']) {
+        $settings['logo'] = dirname($theme_object->filename) .'/logo.png'; 
+      }
+      elseif ($settings['logo_path']) {
+        $settings['logo'] = $settings['logo_path'];
+      }
+    }
+
+    if ($settings['toggle_primary_links']) {
+      if (!$settings['primary_links']) {
+        $settings['primary_links'] = theme('links', link_page());
+      }
+    }
+    else {
+      $settings['primary_links'] = '';
+    }
+
+    if (!$settings['toggle_secondary_links']) {
+      $settings['secondary_links'] = '';
+    }
+  }
+
+  return isset($settings[$setting_name]) ? $settings[$setting_name] : NULL;
+}
+
 /**
  * @defgroup themeable Themeable functions
  * @{
@@ -476,6 +655,22 @@ function theme_mark() {
   return '<span class="marker">*</span>';
 }
 
+/**
+ * Import a stylesheet using @import.
+ * 
+ * @param $stylesheet
+ *  The filename to point the link at.
+ *
+ * @param $media
+ *  The media type to specify for the stylesheet
+ *
+ * @return
+ *  A string containing the HTML for the stylesheet import.
+ */
+function theme_stylesheet_import($stylesheet, $media = 'all') {
+  return '<style type="text/css" media="'. $media .'">@import "'. $stylesheet .'";</style>';
+}
+
 /**
  * Return a themed list of items.
  *
diff --git a/misc/drupal.css b/misc/drupal.css
index 1ac512ceebf930886d9999a533b037593a5b6c4f..33c48d3a5266f38c2f5065c6dae967591c856605 100644
--- a/misc/drupal.css
+++ b/misc/drupal.css
@@ -379,6 +379,11 @@ tr.light .form-item, tr.dark .form-item {
 .node-form .poll-form fieldset {
   display: block;
 }
+img.screenshot {
+  border: 1px solid #808080;
+  display: block;
+  margin: 2px;
+}
 #tracker td.replies {
   text-align: center;
 }
diff --git a/modules/system.module b/modules/system.module
index fc116064c08ce978b9f0e48d5e7d4dbd0c7084e1..aa8964095060ae477e140b5109d8edaf9f98e733 100644
--- a/modules/system.module
+++ b/modules/system.module
@@ -11,7 +11,12 @@ function system_help($section) {
     case 'admin/settings':
       return t('General configuration options for your site. Set up the name of the site, e-mail address used in mail-outs, clean URL options, caching, etc.');
     case 'admin/themes':
-      return t('Select which themes are available to your users and specify the default theme.');
+      return t('Select which themes are available to your users and specify the default theme. To configure site-wide display settings, click the "configure" task above. Alternately, to override these settings in a specific theme, click the "configure" link for the corresponding theme.');
+    case 'admin/themes/settings':
+      return t('These options control the default display settings for your entire site, across all themes. Unless they have been overridden by a specific theme, these settings will be used.');
+    case 'admin/themes/settings/'. arg(3):
+      $theme = array_pop(explode('.', arg(3), 2));
+      return t('These options control the display settings for the <code>%template</code> theme. When your site is displayed using this theme, these settings will be used. By clicking "Reset to defaults," you can choose to use the <a href="%global">global settings</a> for this theme.', array('%template' => $theme, '%global' => url('admin/themes/settings')));
     case 'admin/modules':
       return t("Modules are plugins for Drupal that extend its core functionality.  Here you can select which modules are enabled.  Click on the name of the module in the navigation menu for their individual configuration pages.  Once a module is enabled, new <a href=\"%permissions\">permissions</a> might be made available.  Modules can automatically be temporarily disabled to reduce server load when your site becomes extremely busy by checking throttle.  The auto-throttle functionality must be enabled on the <a href=\"%throttle\">throttle configuration page</a> after having enabled the throttle module.", array('%permissions' => url('admin/user/configure/permission'), '%throttle' => url('admin/settings/throttle')));
     case 'admin/help#system':
@@ -57,28 +62,35 @@ function system_menu() {
     'type' => MENU_CALLBACK);
 
   $access = user_access('administer site configuration');
+
   // Themes:
   $items[] = array('path' => 'admin/themes', 'title' => t('themes'),
     'callback' => 'system_themes', 'access' => $access);
+
+  $items[] = array('path' => 'admin/themes/select', 'title' => t('select'),
+    'callback' => 'system_themes', 'access' => $access,
+    'type' => MENU_DEFAULT_LOCAL_TASK, 'weight' => -1);
+
+  $items[] = array('path' => 'admin/themes/settings', 'title' => t('configure'),
+    'callback' => 'system_theme_settings', 'access' => $access,
+    'type' => MENU_LOCAL_TASK);
+
+  // Theme configuration subtabs
+  $items[] = array('path' => 'admin/themes/settings/global', 'title' => t('global settings'),
+    'callback' => 'system_theme_settings', 'access' => $access,
+    'type' => MENU_DEFAULT_LOCAL_TASK, 'weight' => -1);
+
   foreach (list_themes() as $theme) {
-    // TODO: reenable 'forced refresh' once we move the menu_build() later
-    //   in the request. It added overhead with no benefit.
-    // NOTE: refresh the list because some themes might have been enabled/disabled.
-    include_once $theme->filename;
-    $function = $theme->name .'_settings';
-    if (function_exists($function)) {
-      $items[] = array('path' => 'admin/themes/'. $theme->name, 'title' => $theme->name,
-        'callback' => 'system_configure_theme', 'access' => $access);
-    }
+     $path = str_replace('/', '.', $theme->name);
+     $items[] = array('path' => 'admin/themes/settings/'. $path, 'title' => basename($theme->name),
+     'callback' => 'system_theme_settings', 'access' => $access,
+     'type' => MENU_LOCAL_TASK);
   }
 
   // Modules:
   $items[] = array('path' => 'admin/settings', 'title' => t('settings'),
     'callback' => 'system_site_settings', 'access' => $access);
   foreach (module_list() as $name) {
-    // TODO: reenable 'forced refresh' once we move the menu_build() later
-    //   in the request. It added overhead with no benefit.
-    // NOTE: refresh the list because some modules might have been enabled/disabled.
     if (module_hook($name, 'settings')) {
       $items[] = array('path' => 'admin/settings/'. $name, 'title' => t($name));
     }
@@ -96,12 +108,34 @@ function system_menu() {
  */
 function system_user($type, $edit, &$user, $category = NULL) {
   if ($type == 'form' && $category == 'account') {
-    $options = '<option value="">'. t('Default theme') ."</option>\n";
     if (count($themes = list_themes()) > 1) {
+      $rows = array();
       foreach ($themes as $key => $value) {
-        $options .= "<option value=\"$key\"". (($edit['theme'] == $key) ? ' selected="selected"' : '') .">$key - $value->description</option>\n";
+        $row = array();
+
+        // Screenshot column.
+        $screenshot = dirname($value->filename) .'/screenshot.png';
+        $row[] = file_exists($screenshot) ? theme('image', $screenshot, t('Screenshot for %theme theme', array('%theme' => $value->name)), '', 'class="screenshot"') : t('no screenshot');
+
+        // Information field.
+        $field = '<strong>'. basename($value->name) .'</strong>';
+        $row[] = $field;
+
+        // Reset to follow site default theme if user selects the site default
+        if ($key == variable_get('theme_default', 'bluemarine')) {
+          $key = '';
+          if ($edit['theme'] == variable_get('theme_default', 'bluemarine')) {
+            $edit['theme'] = '';
+          }
+        }
+
+        // Selected column.
+        $row[] = array('data' => form_radio('', 'theme', $key, ($edit['theme'] == $key) ? 1 : 0), 'align' => 'center');
+
+        $rows[] = $row;
       }
-      $data[] = array('title' => t('Theme settings'), 'data' => form_item(t('Theme'), "<select name=\"edit[theme]\">$options</select>", t('Selecting a different theme will change the look and feel of the site.')), 'weight' => 2);
+      $header = array(t('Screenshot'), t('Name'), t('Selected'));
+      $data[] = array('title' => t('Theme settings'), 'data' => form_item('', theme('table', $header, $rows), t('Selecting a different theme will change the look and feel of the site.')), 'weight' => 2);
     }
 
     if (variable_get('configurable_timezones', 1)) {
@@ -199,25 +233,48 @@ function system_view_general() {
   return $output;
 }
 
-function system_listing($type) {
-  // Pick appropriate directory and filetype
-  switch ($type) {
-    case 'modules':
-      $directory = 'modules';
-      $type = 'module';
-      break;
-    case 'themes':
-    default:
-      $directory = 'themes';
-      $type = 'theme';
-      break;
+/**
+ * Inventory theme engines and insert entries for them into the system table
+ */
+function system_theme_engine_inventory($directory) {
+  $engines = array();
+
+  // Remove all theme engines from the system table
+  db_query('DELETE FROM {system} WHERE type = \'%s\'', 'theme_engine');
+
+  // Find theme engines in the directory and insert into database
+  $files = file_scan_directory($directory. '/engines', '\.engine$');
+
+  foreach ($files as $filename => $file) {
+    module_set_filename($file->name, $filename);
+    module_load($file->name);
+
+    $info->name = $file->name;
+    $info->filename = $file->filename;
+    $engines[$info->name] = $info;
+
+    db_query('INSERT INTO {system} (name, type, filename, status, throttle, bootstrap) VALUES (\'%s\', \'%s\', \'%s\', %d, %d, %d)', $info->name, 'theme_engine', $filename, 1, 0, 0);
   }
+  return $engines;
+}
 
+/**
+ * Retrieves an array of a particular type of files (specified by $type) in a particular $directory
+ * and their current status in the system table.
+ */
+function system_get_files($search, $type, $directory) {
   // Find files in the directory.
-  $files = file_scan_directory($directory, "\.$type$");
+  $files = file_scan_directory($directory, $search);
 
+  return $files;
+}
+
+/**
+ * Retrieves the current status of an array of files in the system table.
+ */
+function system_get_files_database(&$files, $type) {
   // Extract current files from database.
-  $result = db_query("SELECT filename, type, status, throttle FROM {system} WHERE type = '%s'", $type);
+  $result = db_query('SELECT filename, type, status, throttle FROM {system} WHERE type = \'%s\'', $type);
   while ($file = db_fetch_object($result)) {
     if (is_object($files[$file->filename])) {
       foreach ($file as $key => $value) {
@@ -225,64 +282,186 @@ function system_listing($type) {
       }
     }
   }
+}
 
-  ksort($files);
+/**
+ * Obtains information about each theme in the $files array
+ * Also updates the system table
+ */
+function system_obtain_theme_info($files, $directory) {
+  foreach ($files as $filename => $file) {
+    if ($file->theme) {
+      // file is a style
+      $info->description = $file->theme;
+      $info->style = TRUE;
+    }
+
+    if (strpos($filename, '.theme')) {
+      // file is a theme
+      module_set_filename($file->name, $filename);
+      module_load($file->name);
+      $info->description = '';
+      $info->prefix = basename($filename, '.theme');
+    }
+    elseif ($info->style && !$file->engine) {
+      $info->prefix = $info->description;
+    }
+    else {
+      // file is a template
+      $info->description = $info->style ? $info->description : $file->engine;
+      $info->template = TRUE;
+      $info->prefix = basename($file->engine, '.engine');
+    }
+
+    $info->filename = $filename;
+    $info->path = pathinfo($info->filename);
+    $info->name = str_replace(array($directory .'/'), '', $info->path['dirname']);
+    $info->shortname = basename($info->name);
+    $info->screenshot = dirname($info->filename) .'/screenshot.png';
+
+    $info->status = $file->status;
 
-  if ($type == 'module') {
-    $required = array('modules/admin.module', 'modules/block.module', 'modules/filter.module', 'modules/system.module', 'modules/user.module', 'modules/watchdog.module');
-    // the throttle mechanism requires additional modules always be enabled
-    $throttle_required = array_merge($required, array('modules/statistics.module', 'modules/throttle.module'));
+    $themes[$info->name] = $info;
 
-    $header = array(t('Name'), t('Description'), t('Status'), t('Throttle'));
+    // Update the contents of the system table:
+    db_query('DELETE FROM {system} WHERE filename = \'%s\' AND type = \'%s\'', $info->filename, 'theme');
+    db_query('INSERT INTO {system} (name, description, type, filename, status, throttle, bootstrap) VALUES (\'%s\', \'%s\', \'%s\', \'%s\', %d, %d, %d)', $info->name, $info->description, 'theme', $info->filename, $info->status, 0, 0);
   }
-  else {
-    $required = array();
-    $header = array(t('Name'), t('Description'), t('Enable'), t('Default'));
+  return $themes;
+}
+
+/**
+ * Collect data about all currently available themes
+ */
+function system_theme_data($directory) {
+  // Find theme engines
+  $engines = system_theme_engine_inventory($directory);
+
+  // Get current list of themes and their present status in the system table.
+  $files = system_get_files('\.theme$', 'theme', $directory);
+
+  // Add templates to the site listing
+  foreach ($engines as $engine) {
+    foreach (call_user_func($engine->name .'_templates', $directory) as $template) {
+      $template_files[$template->filename] = $template;
+      $template_files[$template->filename]->engine = $engine->filename;
+      foreach ($files as $file) {
+        // do not double-insert templates with theme files in their directory
+        if (dirname($template->filename) == dirname($file->filename)) {
+          unset($template_files[$template->filename]);
+        }
+      }
+    }
+  }
+  $files = array_merge($files, $template_files);
+
+  // Find styles in each theme's directory.
+  foreach ($files as $file) {
+    foreach (system_get_files("style.css$", 'theme', dirname($file->filename)) as $style) {
+      // do not double-insert themes with css files in their directory
+      if (dirname($style->filename) != dirname($file->filename)) {
+        $style_files[$style->filename] = $style;
+        $path = pathinfo($file->filename);
+        $style_files[$style->filename]->theme = str_replace(array($directory .'/'), '', $path['dirname']);
+        if ($file->engine) {
+          $style_files[$style->filename]->engine = $file->engine;
+        }
+      }
+    }
   }
+  $files = array_merge($files, $style_files);
+
+  // Extract current files from database.
+  system_get_files_database($files, 'theme');
+
+  // Build an array of information about each theme for use in displaying the selection table.
+  return system_obtain_theme_info($files, $directory);
+}
+
+/**
+ * Generate a list of all the available theme/style combinations.
+ */
+function system_theme_listing() {
+  $directory = 'themes';
+
+  $themes = system_theme_data($directory);
+  ksort($themes);
+
+  foreach ($themes as $key => $info) {
+    $row = array();
+
+    // Screenshot column.
+    $row[] = file_exists($info->screenshot) ? theme('image', $info->screenshot, t('Screenshot for %theme theme', array('%theme' => $info->shortname)), '', 'class="screenshot"') : t('no screenshot');
+
+    // Information field.
+    $field = '<strong>'. $info->shortname .'</strong>';
+    $field .= '<br /><em>themes/'. $key .'</em>';
+    $row[] = $field;
+
+    // enabled, default, and operations columns
+    $row[] = array('data' => form_checkbox('', 'status]['. $info->filename, 1, $info->status), 'align' => 'center');
+    $row[] = array('data' => form_radio('', 'theme_default', $info->filename, (variable_get('theme_default', 'bluemarine') == $key) ? 1 : 0), 'align' => 'center');
+    if (function_exists($info->prefix .'_settings') || function_exists($info->prefix .'_features')) {
+      $row[] = array('data' => l(t('configure'), 'admin/themes/settings/'. str_replace('/', '.', $key)), 'align' => 'center');
+    }
+    else {
+      $row[] = '';
+    }
+    $rows[] = $row;
+  }
+
+  $header = array(t('Screenshot'), t('Name'), t('Enabled'), t('Default'), t('Operations'));
+  $output = form_hidden('type', 'theme');
+  $output .= theme('table', $header, $rows);
+  return $output;
+}
+
+/**
+ * Generate a list of all the available modules, as well as update the system list.
+ */
+function system_module_listing() {
+  $directory = 'modules';
+
+  // Get current list of modules
+  $files = system_get_files('\.module$', 'module', $directory);
+
+  // Extract current files from database.
+  system_get_files_database($files, 'module');
+
+  ksort($files);
+
+  $required = array('modules/admin.module', 'modules/block.module', 'modules/filter.module', 'modules/system.module', 'modules/user.module', 'modules/watchdog.module');
+  // the throttle mechanism requires additional modules always be enabled
+  $throttle_required = array_merge($required, array('modules/statistics.module', 'modules/throttle.module'));
+
+  $header = array(t('Name'), t('Description'), t('Status'), t('Throttle'));
 
   foreach ($files as $filename => $file) {
     module_set_filename($file->name, $filename);
     module_load($file->name);
 
-    if ($type == 'module') {
-      $info->name = module_invoke($file->name, 'help', 'admin/modules#name') ? module_invoke($file->name, 'help', 'admin/modules#name') : $file->name;
-      $info->description = module_invoke($file->name, 'help', 'admin/modules#description');
-      // log the critical hooks implemented by this module
-      $bootstrap = 0;
-      foreach (bootstrap_hooks() as $hook) {
-        if (module_hook($file->name, $hook)) {
-          $bootstrap = 1;
-          break;
-        }
-      }
-    }
-    elseif ($type == 'theme') {
-      $info->name = $file->name;
-      $info->description = module_invoke($file->name, 'help', 'admin/themes#description');
-      $themes[] = $info->name;
-
-      // Enable the default theme:
-      if ($info->name == variable_get('theme_default', 0)) {
-        $file->status = 1;
+    $info->name = module_invoke($file->name, 'help', 'admin/modules#name') ? module_invoke($file->name, 'help', 'admin/modules#name') : $file->name;
+    $info->description = module_invoke($file->name, 'help', 'admin/modules#description');
+    // log the critical hooks implemented by this module
+    $bootstrap = 0;
+    foreach (bootstrap_hooks() as $hook) {
+      if (module_hook($file->name, $hook)) {
+        $bootstrap = 1;
+        break;
       }
     }
 
     // Update the contents of the system table:
-    db_query("DELETE FROM {system} WHERE filename = '%s' AND type = '%s'", $filename, $type);
-    db_query("INSERT INTO {system} (name, description, type, filename, status, throttle, bootstrap) VALUES ('%s', '%s', '%s', '%s', %d, %d, %d)", $info->name, $info->description, $type, $filename, $file->status, $file->throttle, $bootstrap);
+    db_query('DELETE FROM {system} WHERE filename = \'%s\' AND type = \'%s\'', $filename, 'module');
+    db_query('INSERT INTO {system} (name, description, type, filename, status, throttle, bootstrap) VALUES (\'%s\', \'%s\', \'%s\', \'%s\', %d, %d, %d)', $info->name, $info->description, 'module', $filename, $file->status, $file->throttle, $bootstrap);
 
-    $row = array($info->name, $info->description, array('data' => (in_array($filename, $required) ? form_hidden("status][$filename", 1) . t('required') : form_checkbox('', "status][$filename", 1, $file->status)), 'align' => 'center'));
-    if ($type == 'module') {
-      $row[] = array('data' => (in_array($filename, $throttle_required) ? form_hidden("throttle][$filename", 0) . t('required') : form_checkbox(NULL, "throttle][$filename", 1, $file->throttle, NULL, module_exist('throttle') ? NULL : array('disabled' => 'disabled'))), 'align' => 'center');
-    }
-    else if ($type == 'theme') {
-      $row[] = array('data' => form_radio('', 'theme_default', $info->name, (variable_get('theme_default', 0) == $info->name) ? 1 : 0), 'align' => 'center');
-    }
+    $row = array($info->name, $info->description, array('data' => (in_array($filename, $required) ? form_hidden('status]['. $filename, 1) . t('required') : form_checkbox('', 'status]['. $filename, 1, $file->status)), 'align' => 'center'));
+    $row[] = array('data' => (in_array($filename, $throttle_required) ? form_hidden('throttle]['. $filename, 0) . t('required') : form_checkbox(NULL, 'throttle]['. $filename, 1, $file->throttle, NULL, module_exist('throttle') ? NULL : array('disabled' => 'disabled'))), 'align' => 'center');
     $rows[] = $row;
   }
 
   $output  = theme('table', $header, $rows);
-  $output .= form_hidden('type', $type);
+  $output .= form_hidden('type', 'module');
 
   return $output;
 }
@@ -294,10 +473,17 @@ function system_listing_save($edit = array()) {
   if ($op == t('Save configuration')) {
     db_query("UPDATE {system} SET status = 0 WHERE type = '%s'", $edit['type']);
     foreach ($edit['status'] as $filename => $status) {
+      // Make certain that the default theme is enabled to avoid user error
+      if (($edit['type'] == 'theme') && ($edit['theme_default'] == $filename)) {
+        $status = 1;
+      }
+
       db_query("UPDATE {system} SET status = %d, throttle = %d WHERE filename = '%s'", $status, $edit['throttle'][$filename], $filename);
     }
     if ($edit['type'] == 'theme') {
-      variable_set('theme_default', $edit['theme_default']);
+      $path = pathinfo($edit['theme_default']);
+      $name = str_replace(array('themes/'), '', $path['dirname']);
+      variable_set('theme_default', $name);
     }
 
     cache_clear_all();
@@ -343,7 +529,7 @@ function system_settings_save() {
  */
 function system_themes() {
   system_listing_save();
-  $form = system_listing('themes');
+  $form = system_theme_listing();
   $form .= form_submit(t('Save configuration'));
   print theme('page', form($form));
 }
@@ -353,44 +539,102 @@ function system_themes() {
  */
 function system_modules() {
   system_listing_save();
-  $form = system_listing('modules');
+  $form = system_module_listing();
   $form .= form_submit(t('Save configuration'));
   print theme('page', form($form));
 }
 
 /**
- * Menu callback; displays a theme's settings page.
+ * Menu callback; displays a module's settings page.
  */
-function system_configure_theme() {
+function system_site_settings($module = NULL) {
   system_settings_save();
 
-  $name = arg(2);
-  $themes = list_themes();
-  $theme = $themes[$name];
-
-  if ($theme) {
-    include_once "$theme->filename";
-
-    $function = $theme->name .'_settings';
-    if (function_exists($function)) {
-      $form .= $function();
-    }
+  if ($module) {
+    $form = module_invoke($module, 'settings');
+  }
+  else {
+    $form = system_view_general();
   }
 
   print theme('page', system_settings_form($form));
 }
 
 /**
- * Menu callback; displays a module's settings page.
+ * Menu callback; display theme configuration for entire site and individual themes.
  */
-function system_site_settings($module = NULL) {
+function system_theme_settings() {
   system_settings_save();
-
-  if ($module) {
-    $form = module_invoke($module, 'settings');
+  // Default settings are defined in _theme_settings() in includes/theme.inc
+  $key = str_replace('.', '/', arg(3));
+  if ($key) {
+    $settings = drupal_get_theme_settings($key);
+    $var = str_replace('/', '_', 'theme_'. $key .'_settings');
+    $themes = system_theme_data('themes');
+    $features = function_exists($themes[$key]->prefix .'_features') ? call_user_func($themes[$key]->prefix .'_features') : array();
   }
   else {
-    $form = system_view_general();
+    $settings = drupal_get_theme_settings('');
+    $var = 'theme_settings';
+  }
+
+  $form = '';
+
+  // Logo settings
+  if ((!$key) || in_array('logo', $features)) {
+    $group = form_checkbox(t('Use the default logo'), "$var][default_logo", 1, $settings['default_logo'], t('Check here if you want the theme to use the logo supplied with it.'));
+    $group .= form_textfield(t('Path to custom logo'), "$var][logo_path", $settings['logo_path'], 50, 60, t('The path to the file you would like to use as your logo file instead of the default logo.'));
+    $form = form_group(t('Logo image settings'), $group);
+  }
+
+  // System wide only settings.
+  if (!$key) {
+    // Menu settings
+    $group = form_textarea(t('Primary links'), "$var][primary_links", $settings['primary_links'], 70, 8, t('The HTML code for the primary links. If this field is empty, Drupal will automatically generate a set of links based on which modules are enabled.'));
+    $group .= form_textarea(t('Secondary links'), "$var][secondary_links", $settings['secondary_links'], 70, 8, t('The HTML code for the secondary links.'));
+    $form .= form_group(t('Menu Settings'), $group, t('Customize the menus that are displayed at the top and/or bottom of the page. This configuration screen is only available in the site wide display configuration.'));
+
+    // Toggle node display.
+    $group = '';
+    foreach (node_list() as $type) {
+      $group .= form_checkbox($type, "$var][toggle_node_info_$type", 1, $settings["toggle_node_info_$type"]);
+    }
+    $form .= form_group(t('Display post information on'), $group, t('Enable or disable the "submitted by Username on date" text when displaying posts of the above type'));
+  }
+
+  $group = '';
+
+  // Toggle settings
+  $toggles = array('toggle_name' => t('Site name'),
+        'toggle_search' => t('Search box'),
+        'toggle_slogan' => t('Site slogan'),
+        'toggle_mission' => t('Mission statement'),
+        'toggle_primary_links' => t('Primary links'),
+        'toggle_secondary_links' => t('Secondary links'),
+        'toggle_node_user_picture' => t('User pictures in posts'),
+        'toggle_comment_user_picture' => t('User pictures in comments'));
+
+  foreach ($toggles as $name => $title) {
+    if ((!$key) || in_array($name, $features)) {
+      $group .= form_checkbox($title, "$var][$name", 1, $settings[$name]);
+    }
+  }
+  if ($group) {
+    $form .= form_group(t('Toggle display'), $group, t('Enable or disable the display of certain page elements.'));
+  }
+
+  if ($key) {
+    // Template-specific settings
+    $function = function_exists($themes[$key]->prefix .'_settings');
+    if (function_exists($function)) {
+      $group = $function();
+      if (strpos($themes[$key]->description, '.theme')) {
+        $form .= form_group(t('Theme-specific settings'), $group, t('These settings only exist for the %theme theme and all the styles based on it.', array('%theme' => $themes[$key]->prefix)));
+      }
+      else {
+        $form .= form_group(t('Engine-specific settings'), $group, t('These settings only exist for all the templates and styles based on the %engine theme engine.', array('%engine' => $themes[$key]->prefix)));
+      }
+    }
   }
 
   print theme('page', system_settings_form($form));
diff --git a/modules/system/system.module b/modules/system/system.module
index fc116064c08ce978b9f0e48d5e7d4dbd0c7084e1..aa8964095060ae477e140b5109d8edaf9f98e733 100644
--- a/modules/system/system.module
+++ b/modules/system/system.module
@@ -11,7 +11,12 @@ function system_help($section) {
     case 'admin/settings':
       return t('General configuration options for your site. Set up the name of the site, e-mail address used in mail-outs, clean URL options, caching, etc.');
     case 'admin/themes':
-      return t('Select which themes are available to your users and specify the default theme.');
+      return t('Select which themes are available to your users and specify the default theme. To configure site-wide display settings, click the "configure" task above. Alternately, to override these settings in a specific theme, click the "configure" link for the corresponding theme.');
+    case 'admin/themes/settings':
+      return t('These options control the default display settings for your entire site, across all themes. Unless they have been overridden by a specific theme, these settings will be used.');
+    case 'admin/themes/settings/'. arg(3):
+      $theme = array_pop(explode('.', arg(3), 2));
+      return t('These options control the display settings for the <code>%template</code> theme. When your site is displayed using this theme, these settings will be used. By clicking "Reset to defaults," you can choose to use the <a href="%global">global settings</a> for this theme.', array('%template' => $theme, '%global' => url('admin/themes/settings')));
     case 'admin/modules':
       return t("Modules are plugins for Drupal that extend its core functionality.  Here you can select which modules are enabled.  Click on the name of the module in the navigation menu for their individual configuration pages.  Once a module is enabled, new <a href=\"%permissions\">permissions</a> might be made available.  Modules can automatically be temporarily disabled to reduce server load when your site becomes extremely busy by checking throttle.  The auto-throttle functionality must be enabled on the <a href=\"%throttle\">throttle configuration page</a> after having enabled the throttle module.", array('%permissions' => url('admin/user/configure/permission'), '%throttle' => url('admin/settings/throttle')));
     case 'admin/help#system':
@@ -57,28 +62,35 @@ function system_menu() {
     'type' => MENU_CALLBACK);
 
   $access = user_access('administer site configuration');
+
   // Themes:
   $items[] = array('path' => 'admin/themes', 'title' => t('themes'),
     'callback' => 'system_themes', 'access' => $access);
+
+  $items[] = array('path' => 'admin/themes/select', 'title' => t('select'),
+    'callback' => 'system_themes', 'access' => $access,
+    'type' => MENU_DEFAULT_LOCAL_TASK, 'weight' => -1);
+
+  $items[] = array('path' => 'admin/themes/settings', 'title' => t('configure'),
+    'callback' => 'system_theme_settings', 'access' => $access,
+    'type' => MENU_LOCAL_TASK);
+
+  // Theme configuration subtabs
+  $items[] = array('path' => 'admin/themes/settings/global', 'title' => t('global settings'),
+    'callback' => 'system_theme_settings', 'access' => $access,
+    'type' => MENU_DEFAULT_LOCAL_TASK, 'weight' => -1);
+
   foreach (list_themes() as $theme) {
-    // TODO: reenable 'forced refresh' once we move the menu_build() later
-    //   in the request. It added overhead with no benefit.
-    // NOTE: refresh the list because some themes might have been enabled/disabled.
-    include_once $theme->filename;
-    $function = $theme->name .'_settings';
-    if (function_exists($function)) {
-      $items[] = array('path' => 'admin/themes/'. $theme->name, 'title' => $theme->name,
-        'callback' => 'system_configure_theme', 'access' => $access);
-    }
+     $path = str_replace('/', '.', $theme->name);
+     $items[] = array('path' => 'admin/themes/settings/'. $path, 'title' => basename($theme->name),
+     'callback' => 'system_theme_settings', 'access' => $access,
+     'type' => MENU_LOCAL_TASK);
   }
 
   // Modules:
   $items[] = array('path' => 'admin/settings', 'title' => t('settings'),
     'callback' => 'system_site_settings', 'access' => $access);
   foreach (module_list() as $name) {
-    // TODO: reenable 'forced refresh' once we move the menu_build() later
-    //   in the request. It added overhead with no benefit.
-    // NOTE: refresh the list because some modules might have been enabled/disabled.
     if (module_hook($name, 'settings')) {
       $items[] = array('path' => 'admin/settings/'. $name, 'title' => t($name));
     }
@@ -96,12 +108,34 @@ function system_menu() {
  */
 function system_user($type, $edit, &$user, $category = NULL) {
   if ($type == 'form' && $category == 'account') {
-    $options = '<option value="">'. t('Default theme') ."</option>\n";
     if (count($themes = list_themes()) > 1) {
+      $rows = array();
       foreach ($themes as $key => $value) {
-        $options .= "<option value=\"$key\"". (($edit['theme'] == $key) ? ' selected="selected"' : '') .">$key - $value->description</option>\n";
+        $row = array();
+
+        // Screenshot column.
+        $screenshot = dirname($value->filename) .'/screenshot.png';
+        $row[] = file_exists($screenshot) ? theme('image', $screenshot, t('Screenshot for %theme theme', array('%theme' => $value->name)), '', 'class="screenshot"') : t('no screenshot');
+
+        // Information field.
+        $field = '<strong>'. basename($value->name) .'</strong>';
+        $row[] = $field;
+
+        // Reset to follow site default theme if user selects the site default
+        if ($key == variable_get('theme_default', 'bluemarine')) {
+          $key = '';
+          if ($edit['theme'] == variable_get('theme_default', 'bluemarine')) {
+            $edit['theme'] = '';
+          }
+        }
+
+        // Selected column.
+        $row[] = array('data' => form_radio('', 'theme', $key, ($edit['theme'] == $key) ? 1 : 0), 'align' => 'center');
+
+        $rows[] = $row;
       }
-      $data[] = array('title' => t('Theme settings'), 'data' => form_item(t('Theme'), "<select name=\"edit[theme]\">$options</select>", t('Selecting a different theme will change the look and feel of the site.')), 'weight' => 2);
+      $header = array(t('Screenshot'), t('Name'), t('Selected'));
+      $data[] = array('title' => t('Theme settings'), 'data' => form_item('', theme('table', $header, $rows), t('Selecting a different theme will change the look and feel of the site.')), 'weight' => 2);
     }
 
     if (variable_get('configurable_timezones', 1)) {
@@ -199,25 +233,48 @@ function system_view_general() {
   return $output;
 }
 
-function system_listing($type) {
-  // Pick appropriate directory and filetype
-  switch ($type) {
-    case 'modules':
-      $directory = 'modules';
-      $type = 'module';
-      break;
-    case 'themes':
-    default:
-      $directory = 'themes';
-      $type = 'theme';
-      break;
+/**
+ * Inventory theme engines and insert entries for them into the system table
+ */
+function system_theme_engine_inventory($directory) {
+  $engines = array();
+
+  // Remove all theme engines from the system table
+  db_query('DELETE FROM {system} WHERE type = \'%s\'', 'theme_engine');
+
+  // Find theme engines in the directory and insert into database
+  $files = file_scan_directory($directory. '/engines', '\.engine$');
+
+  foreach ($files as $filename => $file) {
+    module_set_filename($file->name, $filename);
+    module_load($file->name);
+
+    $info->name = $file->name;
+    $info->filename = $file->filename;
+    $engines[$info->name] = $info;
+
+    db_query('INSERT INTO {system} (name, type, filename, status, throttle, bootstrap) VALUES (\'%s\', \'%s\', \'%s\', %d, %d, %d)', $info->name, 'theme_engine', $filename, 1, 0, 0);
   }
+  return $engines;
+}
 
+/**
+ * Retrieves an array of a particular type of files (specified by $type) in a particular $directory
+ * and their current status in the system table.
+ */
+function system_get_files($search, $type, $directory) {
   // Find files in the directory.
-  $files = file_scan_directory($directory, "\.$type$");
+  $files = file_scan_directory($directory, $search);
 
+  return $files;
+}
+
+/**
+ * Retrieves the current status of an array of files in the system table.
+ */
+function system_get_files_database(&$files, $type) {
   // Extract current files from database.
-  $result = db_query("SELECT filename, type, status, throttle FROM {system} WHERE type = '%s'", $type);
+  $result = db_query('SELECT filename, type, status, throttle FROM {system} WHERE type = \'%s\'', $type);
   while ($file = db_fetch_object($result)) {
     if (is_object($files[$file->filename])) {
       foreach ($file as $key => $value) {
@@ -225,64 +282,186 @@ function system_listing($type) {
       }
     }
   }
+}
 
-  ksort($files);
+/**
+ * Obtains information about each theme in the $files array
+ * Also updates the system table
+ */
+function system_obtain_theme_info($files, $directory) {
+  foreach ($files as $filename => $file) {
+    if ($file->theme) {
+      // file is a style
+      $info->description = $file->theme;
+      $info->style = TRUE;
+    }
+
+    if (strpos($filename, '.theme')) {
+      // file is a theme
+      module_set_filename($file->name, $filename);
+      module_load($file->name);
+      $info->description = '';
+      $info->prefix = basename($filename, '.theme');
+    }
+    elseif ($info->style && !$file->engine) {
+      $info->prefix = $info->description;
+    }
+    else {
+      // file is a template
+      $info->description = $info->style ? $info->description : $file->engine;
+      $info->template = TRUE;
+      $info->prefix = basename($file->engine, '.engine');
+    }
+
+    $info->filename = $filename;
+    $info->path = pathinfo($info->filename);
+    $info->name = str_replace(array($directory .'/'), '', $info->path['dirname']);
+    $info->shortname = basename($info->name);
+    $info->screenshot = dirname($info->filename) .'/screenshot.png';
+
+    $info->status = $file->status;
 
-  if ($type == 'module') {
-    $required = array('modules/admin.module', 'modules/block.module', 'modules/filter.module', 'modules/system.module', 'modules/user.module', 'modules/watchdog.module');
-    // the throttle mechanism requires additional modules always be enabled
-    $throttle_required = array_merge($required, array('modules/statistics.module', 'modules/throttle.module'));
+    $themes[$info->name] = $info;
 
-    $header = array(t('Name'), t('Description'), t('Status'), t('Throttle'));
+    // Update the contents of the system table:
+    db_query('DELETE FROM {system} WHERE filename = \'%s\' AND type = \'%s\'', $info->filename, 'theme');
+    db_query('INSERT INTO {system} (name, description, type, filename, status, throttle, bootstrap) VALUES (\'%s\', \'%s\', \'%s\', \'%s\', %d, %d, %d)', $info->name, $info->description, 'theme', $info->filename, $info->status, 0, 0);
   }
-  else {
-    $required = array();
-    $header = array(t('Name'), t('Description'), t('Enable'), t('Default'));
+  return $themes;
+}
+
+/**
+ * Collect data about all currently available themes
+ */
+function system_theme_data($directory) {
+  // Find theme engines
+  $engines = system_theme_engine_inventory($directory);
+
+  // Get current list of themes and their present status in the system table.
+  $files = system_get_files('\.theme$', 'theme', $directory);
+
+  // Add templates to the site listing
+  foreach ($engines as $engine) {
+    foreach (call_user_func($engine->name .'_templates', $directory) as $template) {
+      $template_files[$template->filename] = $template;
+      $template_files[$template->filename]->engine = $engine->filename;
+      foreach ($files as $file) {
+        // do not double-insert templates with theme files in their directory
+        if (dirname($template->filename) == dirname($file->filename)) {
+          unset($template_files[$template->filename]);
+        }
+      }
+    }
+  }
+  $files = array_merge($files, $template_files);
+
+  // Find styles in each theme's directory.
+  foreach ($files as $file) {
+    foreach (system_get_files("style.css$", 'theme', dirname($file->filename)) as $style) {
+      // do not double-insert themes with css files in their directory
+      if (dirname($style->filename) != dirname($file->filename)) {
+        $style_files[$style->filename] = $style;
+        $path = pathinfo($file->filename);
+        $style_files[$style->filename]->theme = str_replace(array($directory .'/'), '', $path['dirname']);
+        if ($file->engine) {
+          $style_files[$style->filename]->engine = $file->engine;
+        }
+      }
+    }
   }
+  $files = array_merge($files, $style_files);
+
+  // Extract current files from database.
+  system_get_files_database($files, 'theme');
+
+  // Build an array of information about each theme for use in displaying the selection table.
+  return system_obtain_theme_info($files, $directory);
+}
+
+/**
+ * Generate a list of all the available theme/style combinations.
+ */
+function system_theme_listing() {
+  $directory = 'themes';
+
+  $themes = system_theme_data($directory);
+  ksort($themes);
+
+  foreach ($themes as $key => $info) {
+    $row = array();
+
+    // Screenshot column.
+    $row[] = file_exists($info->screenshot) ? theme('image', $info->screenshot, t('Screenshot for %theme theme', array('%theme' => $info->shortname)), '', 'class="screenshot"') : t('no screenshot');
+
+    // Information field.
+    $field = '<strong>'. $info->shortname .'</strong>';
+    $field .= '<br /><em>themes/'. $key .'</em>';
+    $row[] = $field;
+
+    // enabled, default, and operations columns
+    $row[] = array('data' => form_checkbox('', 'status]['. $info->filename, 1, $info->status), 'align' => 'center');
+    $row[] = array('data' => form_radio('', 'theme_default', $info->filename, (variable_get('theme_default', 'bluemarine') == $key) ? 1 : 0), 'align' => 'center');
+    if (function_exists($info->prefix .'_settings') || function_exists($info->prefix .'_features')) {
+      $row[] = array('data' => l(t('configure'), 'admin/themes/settings/'. str_replace('/', '.', $key)), 'align' => 'center');
+    }
+    else {
+      $row[] = '';
+    }
+    $rows[] = $row;
+  }
+
+  $header = array(t('Screenshot'), t('Name'), t('Enabled'), t('Default'), t('Operations'));
+  $output = form_hidden('type', 'theme');
+  $output .= theme('table', $header, $rows);
+  return $output;
+}
+
+/**
+ * Generate a list of all the available modules, as well as update the system list.
+ */
+function system_module_listing() {
+  $directory = 'modules';
+
+  // Get current list of modules
+  $files = system_get_files('\.module$', 'module', $directory);
+
+  // Extract current files from database.
+  system_get_files_database($files, 'module');
+
+  ksort($files);
+
+  $required = array('modules/admin.module', 'modules/block.module', 'modules/filter.module', 'modules/system.module', 'modules/user.module', 'modules/watchdog.module');
+  // the throttle mechanism requires additional modules always be enabled
+  $throttle_required = array_merge($required, array('modules/statistics.module', 'modules/throttle.module'));
+
+  $header = array(t('Name'), t('Description'), t('Status'), t('Throttle'));
 
   foreach ($files as $filename => $file) {
     module_set_filename($file->name, $filename);
     module_load($file->name);
 
-    if ($type == 'module') {
-      $info->name = module_invoke($file->name, 'help', 'admin/modules#name') ? module_invoke($file->name, 'help', 'admin/modules#name') : $file->name;
-      $info->description = module_invoke($file->name, 'help', 'admin/modules#description');
-      // log the critical hooks implemented by this module
-      $bootstrap = 0;
-      foreach (bootstrap_hooks() as $hook) {
-        if (module_hook($file->name, $hook)) {
-          $bootstrap = 1;
-          break;
-        }
-      }
-    }
-    elseif ($type == 'theme') {
-      $info->name = $file->name;
-      $info->description = module_invoke($file->name, 'help', 'admin/themes#description');
-      $themes[] = $info->name;
-
-      // Enable the default theme:
-      if ($info->name == variable_get('theme_default', 0)) {
-        $file->status = 1;
+    $info->name = module_invoke($file->name, 'help', 'admin/modules#name') ? module_invoke($file->name, 'help', 'admin/modules#name') : $file->name;
+    $info->description = module_invoke($file->name, 'help', 'admin/modules#description');
+    // log the critical hooks implemented by this module
+    $bootstrap = 0;
+    foreach (bootstrap_hooks() as $hook) {
+      if (module_hook($file->name, $hook)) {
+        $bootstrap = 1;
+        break;
       }
     }
 
     // Update the contents of the system table:
-    db_query("DELETE FROM {system} WHERE filename = '%s' AND type = '%s'", $filename, $type);
-    db_query("INSERT INTO {system} (name, description, type, filename, status, throttle, bootstrap) VALUES ('%s', '%s', '%s', '%s', %d, %d, %d)", $info->name, $info->description, $type, $filename, $file->status, $file->throttle, $bootstrap);
+    db_query('DELETE FROM {system} WHERE filename = \'%s\' AND type = \'%s\'', $filename, 'module');
+    db_query('INSERT INTO {system} (name, description, type, filename, status, throttle, bootstrap) VALUES (\'%s\', \'%s\', \'%s\', \'%s\', %d, %d, %d)', $info->name, $info->description, 'module', $filename, $file->status, $file->throttle, $bootstrap);
 
-    $row = array($info->name, $info->description, array('data' => (in_array($filename, $required) ? form_hidden("status][$filename", 1) . t('required') : form_checkbox('', "status][$filename", 1, $file->status)), 'align' => 'center'));
-    if ($type == 'module') {
-      $row[] = array('data' => (in_array($filename, $throttle_required) ? form_hidden("throttle][$filename", 0) . t('required') : form_checkbox(NULL, "throttle][$filename", 1, $file->throttle, NULL, module_exist('throttle') ? NULL : array('disabled' => 'disabled'))), 'align' => 'center');
-    }
-    else if ($type == 'theme') {
-      $row[] = array('data' => form_radio('', 'theme_default', $info->name, (variable_get('theme_default', 0) == $info->name) ? 1 : 0), 'align' => 'center');
-    }
+    $row = array($info->name, $info->description, array('data' => (in_array($filename, $required) ? form_hidden('status]['. $filename, 1) . t('required') : form_checkbox('', 'status]['. $filename, 1, $file->status)), 'align' => 'center'));
+    $row[] = array('data' => (in_array($filename, $throttle_required) ? form_hidden('throttle]['. $filename, 0) . t('required') : form_checkbox(NULL, 'throttle]['. $filename, 1, $file->throttle, NULL, module_exist('throttle') ? NULL : array('disabled' => 'disabled'))), 'align' => 'center');
     $rows[] = $row;
   }
 
   $output  = theme('table', $header, $rows);
-  $output .= form_hidden('type', $type);
+  $output .= form_hidden('type', 'module');
 
   return $output;
 }
@@ -294,10 +473,17 @@ function system_listing_save($edit = array()) {
   if ($op == t('Save configuration')) {
     db_query("UPDATE {system} SET status = 0 WHERE type = '%s'", $edit['type']);
     foreach ($edit['status'] as $filename => $status) {
+      // Make certain that the default theme is enabled to avoid user error
+      if (($edit['type'] == 'theme') && ($edit['theme_default'] == $filename)) {
+        $status = 1;
+      }
+
       db_query("UPDATE {system} SET status = %d, throttle = %d WHERE filename = '%s'", $status, $edit['throttle'][$filename], $filename);
     }
     if ($edit['type'] == 'theme') {
-      variable_set('theme_default', $edit['theme_default']);
+      $path = pathinfo($edit['theme_default']);
+      $name = str_replace(array('themes/'), '', $path['dirname']);
+      variable_set('theme_default', $name);
     }
 
     cache_clear_all();
@@ -343,7 +529,7 @@ function system_settings_save() {
  */
 function system_themes() {
   system_listing_save();
-  $form = system_listing('themes');
+  $form = system_theme_listing();
   $form .= form_submit(t('Save configuration'));
   print theme('page', form($form));
 }
@@ -353,44 +539,102 @@ function system_themes() {
  */
 function system_modules() {
   system_listing_save();
-  $form = system_listing('modules');
+  $form = system_module_listing();
   $form .= form_submit(t('Save configuration'));
   print theme('page', form($form));
 }
 
 /**
- * Menu callback; displays a theme's settings page.
+ * Menu callback; displays a module's settings page.
  */
-function system_configure_theme() {
+function system_site_settings($module = NULL) {
   system_settings_save();
 
-  $name = arg(2);
-  $themes = list_themes();
-  $theme = $themes[$name];
-
-  if ($theme) {
-    include_once "$theme->filename";
-
-    $function = $theme->name .'_settings';
-    if (function_exists($function)) {
-      $form .= $function();
-    }
+  if ($module) {
+    $form = module_invoke($module, 'settings');
+  }
+  else {
+    $form = system_view_general();
   }
 
   print theme('page', system_settings_form($form));
 }
 
 /**
- * Menu callback; displays a module's settings page.
+ * Menu callback; display theme configuration for entire site and individual themes.
  */
-function system_site_settings($module = NULL) {
+function system_theme_settings() {
   system_settings_save();
-
-  if ($module) {
-    $form = module_invoke($module, 'settings');
+  // Default settings are defined in _theme_settings() in includes/theme.inc
+  $key = str_replace('.', '/', arg(3));
+  if ($key) {
+    $settings = drupal_get_theme_settings($key);
+    $var = str_replace('/', '_', 'theme_'. $key .'_settings');
+    $themes = system_theme_data('themes');
+    $features = function_exists($themes[$key]->prefix .'_features') ? call_user_func($themes[$key]->prefix .'_features') : array();
   }
   else {
-    $form = system_view_general();
+    $settings = drupal_get_theme_settings('');
+    $var = 'theme_settings';
+  }
+
+  $form = '';
+
+  // Logo settings
+  if ((!$key) || in_array('logo', $features)) {
+    $group = form_checkbox(t('Use the default logo'), "$var][default_logo", 1, $settings['default_logo'], t('Check here if you want the theme to use the logo supplied with it.'));
+    $group .= form_textfield(t('Path to custom logo'), "$var][logo_path", $settings['logo_path'], 50, 60, t('The path to the file you would like to use as your logo file instead of the default logo.'));
+    $form = form_group(t('Logo image settings'), $group);
+  }
+
+  // System wide only settings.
+  if (!$key) {
+    // Menu settings
+    $group = form_textarea(t('Primary links'), "$var][primary_links", $settings['primary_links'], 70, 8, t('The HTML code for the primary links. If this field is empty, Drupal will automatically generate a set of links based on which modules are enabled.'));
+    $group .= form_textarea(t('Secondary links'), "$var][secondary_links", $settings['secondary_links'], 70, 8, t('The HTML code for the secondary links.'));
+    $form .= form_group(t('Menu Settings'), $group, t('Customize the menus that are displayed at the top and/or bottom of the page. This configuration screen is only available in the site wide display configuration.'));
+
+    // Toggle node display.
+    $group = '';
+    foreach (node_list() as $type) {
+      $group .= form_checkbox($type, "$var][toggle_node_info_$type", 1, $settings["toggle_node_info_$type"]);
+    }
+    $form .= form_group(t('Display post information on'), $group, t('Enable or disable the "submitted by Username on date" text when displaying posts of the above type'));
+  }
+
+  $group = '';
+
+  // Toggle settings
+  $toggles = array('toggle_name' => t('Site name'),
+        'toggle_search' => t('Search box'),
+        'toggle_slogan' => t('Site slogan'),
+        'toggle_mission' => t('Mission statement'),
+        'toggle_primary_links' => t('Primary links'),
+        'toggle_secondary_links' => t('Secondary links'),
+        'toggle_node_user_picture' => t('User pictures in posts'),
+        'toggle_comment_user_picture' => t('User pictures in comments'));
+
+  foreach ($toggles as $name => $title) {
+    if ((!$key) || in_array($name, $features)) {
+      $group .= form_checkbox($title, "$var][$name", 1, $settings[$name]);
+    }
+  }
+  if ($group) {
+    $form .= form_group(t('Toggle display'), $group, t('Enable or disable the display of certain page elements.'));
+  }
+
+  if ($key) {
+    // Template-specific settings
+    $function = function_exists($themes[$key]->prefix .'_settings');
+    if (function_exists($function)) {
+      $group = $function();
+      if (strpos($themes[$key]->description, '.theme')) {
+        $form .= form_group(t('Theme-specific settings'), $group, t('These settings only exist for the %theme theme and all the styles based on it.', array('%theme' => $themes[$key]->prefix)));
+      }
+      else {
+        $form .= form_group(t('Engine-specific settings'), $group, t('These settings only exist for all the templates and styles based on the %engine theme engine.', array('%engine' => $themes[$key]->prefix)));
+      }
+    }
   }
 
   print theme('page', system_settings_form($form));
diff --git a/themes/bluemarine/logo.png b/themes/bluemarine/logo.png
new file mode 100644
index 0000000000000000000000000000000000000000..e72da094e31e974db9ae5b83fea7ea9903163a84
--- /dev/null
+++ b/themes/bluemarine/logo.png
@@ -0,0 +1,7 @@
+‰PNG
+
+���
IHDR���0���7���JÉ?���tIMEÔ	56{èºÔ���bKGD�f�™�̏!4v���	pHYs��
+ð��
+ðB¬4˜��tIDAThÞíZSWÞ¿T+*¢*Z[[¬ÓZ-¶¶ÚVEñ… "V´ŠïWUTP	¨@xš‚ €¼A2ŠXP| &kx¿Þ³¸1„ÝÍ&Hf¼3g&3¹»÷ûî={ž—[U…Ñ–ßÏ”Ú»¹ÑÿÇÙJ|õ§Ú}	üxè|¶^u_³·$aêºKîIৣ…ø|e<VŸÇŠ¿ËÜ‹Ào§Ëù'$ßïËq¿ž,Á¬àD3x’Ék¢yR.K€¬
©‰oX&Ö¼ t"ôQÓ\—!@€¾Ü‘ŠibEA‹	Í¥gèÙq!ðˉb|³;žƒ–zš£êÅÙçQ+0goU�W1	áYžÅ¯1*È3ë6ž¿+Q9‘¬ÕaêúKN!!¡µœF€>¸y¡)杞‡Y÷ñÜЍ&}7öªïaÒšN# lÐ×»Ò}ì²Ȫ'^왉ò†6茽üîû„$9¸µÐÚ¶ $å§JÍ–…t>4¾/ߘPÕÔŽ%‘Yðp’î+±X„Å.tt3ƒTÀŸCĵj´wö!¹¢³‚âǸ¥ÌÙvMR81ðsC®‚g»ÎÀëŒ&¦÷µð\3æà!¿¡ˆÀ¢ý¹æ‡ÖGÝÂ]}ˆÎ{„IþçÇ
¼ „M–�éÚ”µƒ»ì–Š&]2î¾Àô—Ç<	a³þ†øb{òïƒ÷ZQ×bÄÜm*—�/ˆuvÇYÇî$[/£­£þgo¹xÁ"Zžg½û^c¡}n„ºú…ÓÔhœ'$“üÁ†Ä—ñ»ï·/Í%Á“V!øã	P¶4¯Ç ¢±™Ú3!W!Ãã	ÙÓ’ý™00‡]èÒàIÈWñ(|¢Ì©Z.ô`öV•Ë “ÊøùX‘9ÔÜ{…ü:ݘÅ9#•eÇï€û!òæ þ¯fv¿'4Ý<¾
Ž² !îÙÁ,Ðw{ÔnC€°›	¸£|"ð‰À'Œ€FÈW	¢°ô`6®—6âîSjš
PW5#ðBs(FàŒ¢±þÜm$?FÞCá[p4]‹Ù
+Cø%ó?:2Iaáë)M-Þ
¼‡Øhh5"8¦€ÍSNd"‹³¶],DÃk£è;Û;MX­ ”'ìåÀB&&%Wá½8vó ¿ËXµbñþLóâì¿¥‘¨|b€W¢»o�KkdC	ÂÎsÞ›Ä'm¸C÷;(=ï[Pé›¯{—wpTwÃÄæ(em²•
+s4ºpÏ
ÑIL?­o{–T¯ Ìآ¾ë•Ð³Ê†½ƒNiNèUÛá4U¿ÄŠ´ÇÕÕÉ 5è±cÇÅƪ“9¢õÓ!	
‰P²”ð¤r‡ncyEzåÜ~ЂÞ~ÇI,?”%™!@5뉾{Òì^°³·§™Õšø±‚ç¡F#òށœ"Ò8!¬²eAÈ¢”°b®’1ÀLU^íKø†§Š›NfŽ70¿ÑÔÖ¥˜@BiÓ°÷Fɺ5ç¬sáÐk`£¾“Uñò;À{sÂTe¸¨Ñ"*«¬Âçñ¡Â1ÉNj «O^­ô]¬:0,™'Œ²¥Åo#²‡±ž¿3Eÿ¶¢ßÂ!ÐÏú×Øͬ‡E«ÉÙnÓÿšæv$”=Ejõ3¼0t¡òé›!æuÞö$$Õã­©ØI泓ôIkÅZµ¢Å]º æ=é46½‰@&÷¦c²µdjBaÆ‘ôxXœ¤×¦8²
8–vwØ{g²jwÀé\„&V"$®‹öª‡´°Ì„Y“E¬BÍI5©¥œ›-ñ¾‚	"�<YÊÓÁVa‘jrr
=¡G0žB䜭®¤’“ðbº=qµòJY$/‘pClçmu-9%­UÒ?©E>ógÕŒWFܼÿËŽ°àkt`8yP?–ç²¹ÚgYð´¦’–+§ô5¤®ø0‹_ôúoréUÞ€”âz¤”Ô#»¢õz#™ g*±¸A²AHkÐZJ¯#pö^â°vv–2cS,VûÌ´¿Q‹3¹u8“S‡£ÙµˆP•²ÿ4˜ÁÚ´rm${¯å8|Հ⩱·±MårËð`Ì.{i£´ŽÈP‚¡äÚÍ¡¹ô=;Ò+8N½/D»HJ¶Å„þst§¥äÈ4Ç8@(Qº����IEND®B`‚
\ No newline at end of file
diff --git a/themes/bluemarine/screenshot.png b/themes/bluemarine/screenshot.png
new file mode 100644
index 0000000000000000000000000000000000000000..9c6a9097db62122da32774476616a522964f36c6
--- /dev/null
+++ b/themes/bluemarine/screenshot.png
@@ -0,0 +1,8 @@
+‰PNG
+
+���
IHDR���–���Z���mõ_���tIMEÔ/³œy��PLTEÞÞÞÿÿÿïïï­­­÷÷÷½½½”””ÆÆÆÎÎÎœœœµµµ¥¥¥çççÖÖÖŒŒŒccc{{{ssskkk„„„ZZZRRRBBBJJJ999çÞÞïç眵ÆÖÞÞççÞÖï÷ï÷ÿ½Þï÷÷ÿ¥Öï÷ÿÿÞï÷ÆçïµÞïç÷ÿ¥Öç­ÖïÎç÷{œµ¥µÆ{”µŒ¥½Bs¥÷ïç½ÆÎs”µÎÎÖkŒ­ÆÎÖR­ÖcµÖÆç÷J¥ÖcµÞkµÞ”ÎçZ­Ös½Þ{½ÞsµÞïïçZ„­”­½R{¥ÿ÷ï„œ½c„­ŒÆçµÖï„Æççï÷B¥ÎJs¥œ­Æ„œµ­½ÎcŒ­œÎçµÆÎÎÖÖ”¥½ÖÖÞ���J{¥Z{¥„¥½”­Æ½ÎÖ½ÆÖ1cœkŒµïçÞ÷çÞµÎÞ”½Ö­ÎÞÆÖÞJ¥ÎsµÖ½ÎÞ!”ÎÎÖÞ”ÆÖÿïÞŒ½ÖR¥Î„½Ö1œÎ{µÖ­ÎÖc­ÖœÆÖµÎÖkµÖ¥ÆÖÿïçk­Ö½ÖÞZ­Î­ÆÖ)))BœÎ9œÎZ¥Îc­Îï÷÷„µÖÞçï{œ½Bkœ)Z””­ÎcŒµµÆÞR{­ÖÞïÎÖçÆÖ祽֜µÎ!Z”k”µZ„¥1kœÿÿﭽƵ½ÎZ{­Bsœïï÷ÆÎÞµÆÖ­½ÖŒ¥ÆÎÞïZ”ÎRŒÆcœÎkœÎkœÖRŒ½B{­Bs­J{µc”ÎJ„µ!ZŒ”µÎŒ­Î)c”k¥ÖRŒR„­JŒ)cœZŒÆ9k¥„­Æsœ½R„c”ÆJ„9kœÖçï!RŒZ”ÆJ{­RŒs¥Ö¥Æç1c”œ½ÞJŒÆ{­Ö”½ÞÖç÷ŒµÖ”µÞ­ÆçR„µÞç÷ŒµÞ„­ÖsœÎB„ƵÎçJ„Æ­ÎçÆÞï½Öç9s­¥ÆÞ¥½ÞÆÖï½Öï{¥Ö8©���	pHYs����ÒÝ~ü���+tEXtCreation Time�do 19 aug 2004 22:33:47 +0100¨Ð#��çIDAThÞíšû×yÆßçÌ™s™sÑì6ÌÂ�Fø	rb0ÆZdpªZÅE&Ô®—‘H¡"Qm§IêâPÒÔqm÷š&
Ú•âfC¬b‡Ö½$Ô÷¶$67iÓ¿¥?ˆ‹ `K¶,ÔËûùh4³»Ÿ™¯Þó¼ÏyÏÑRmVý?Öÿ*¬ÑçGgÖÈÈèNœ½V¿âÇë3‹5ú­–±±ÊÑÊwFGÎ=äJõ‘ÅýÙË?«T*¯­ÔFjµZ½úŸ8sª:<<|º^­×«Ã§êµÓÕÓõaüâôÌaþì»Ïœ¬T*•Jåõ×Gjµzý½÷pöìñŸÿôßÿ£þý·Þ:þÃ㯞:~üÃU¼;ƒX§Ž½|¢r.ÆZFkUà]œ}
ï½µÃ8sÿüøø¼ý“™Ä­¼{²r!ŽÖkÃx­Ž³oàôOÞF#êOñfG#ÞþñŒfëÅ'^ÄûÑÈ)¼ýξZµgqæük#ÞÁ–Î(V½¥2!Æž~
xë
Ô†ÿ	ÿŒ9ƒF¼Z»¡±ñø›øáðÌeëhåè+'V*¯Ÿx啱çGkÃÕjux¸Z¯
W«Õ꨽9\¯V«ÕZuxæbtìè‹èøÇ—N¼òUôœûöef_õµ‘™²ÑK°þá$�|ÿ�8öƒÓ—{f}x¦©jT«ÕFNý}€—_<`Ç÷fÃÌ8n§=ÖóôK/üÍsÇžzùoÿnd¶`Õþ깓'_|éä÷ZNž<5¨.LÕß9Qþîß{®>+¨.46££ßzþ/¿]Ÿ-×Å6pddt¤V›uX³«iþèQþ o|ô8>ýAÙGLÐ4ÄÇ…eílIJƐ³ÖZKçSÅzOO7–Mˆ\AÊH¦T`˜Ž¤"ÖŽ§Úÿbç‘·ëxæ›Ó•-¦ëQ&pId"é‘L«å'?÷'w>ùåg¾>]ÙÒ¤)±žBVŒTà\Âã©bAúÑñçøúôI^:KÊJgµJZgÝì¨Ä	G²³Æ &FJ”Î&ßʲ,M³´Ÿò]yFYví}Ë)KÙ`ÏЂÝCÝ}ùží½yïP6,'ååw–
+€sá•žj�uñ¯‰¢+Da§îÏoèÙ¸ûÀЁGïííÝŸO+Óˆd„†Ð:e)䀔PB	€WV’¡”ƒRÆ*Á!!!%»àò1£|àÀ }aw>xx÷À`ß‚{¦„å!©�Z8á�Ä	§/(ŠlÊ�<¼²¤´€q!Í$À+b2ArA[Œˆò<Ëve”åižçùÐÞtjÙ¢ÀÀ¸BƒSÄ9xp¥4BH<"ZC1¼’^ÀP#l$ð$Iy$—UbF”R‰R¢,£”ÒñbH©ôAXV: d`°HçŒI�.„Á`%8œc–˜…d°°pö#"r´=¥¬«mK©+£¬µ­µ´={°ÉR¶fÕ–i¬DÎ';'&sµµt}­³ý¹R{óŽ­åûî¾ï¡V4·—ïozökM+W¶L
+ËŽ·‚MpÆRÉfDd'?U'
ŒÚZjùã–ùM;W”·–W¯Zû'Ík7•ŸýÓæ?›ßÙ¹¶ìÒÉ`ÿŠ/ÞÝPD”YZµiÓv""5;eD”QFYʲŒR²ÛKTÊ2;þB6¹lðªÈµ°lçfj.7•´DnŠ“OšŽÏ;¥¥”QJiöb¿B¶>λ.Q(þhVÛ—6w6mÙ²rA:%,ÆÎ⢮ue­¥Öu¥k³)b5À;dVÖ4Ÿ6Ïïlí̦2ˆ,žÇhÕsåµ[W´¯Ú~oÓŽ®ö5÷­ØºvË3+ç·ÛÉaqø¥aÏõ߶dK¥Ò¹óÉÄÅJl/?°ý¶¶5?ÓܾúÙÕ;×n+·¯íœ¿#»vcD”Ù¬´¹D–¬=/øûõ[¥óê¿X“ǺÄ&9ÞÇ5'¾Å&¯dyžçY–åYÞÝ¿7Íó4ϳ¼ožNK‡sP–³0âR–s|åØïßû•§ú;Ž|µãé'À‰; b’q@‘SœGP’q"çH!0Þ![3Ê÷èÜwððÁC}¿Ó×=pxï£z‡ôõ¤“À²Š”bŠ9GDYç S@ùÈ“_ÚÒôwûòïÁ)Ç-QE¤$çÊArçȱh|.¯ÄâoqÊ?ÿð¿øpßÀ#?>ØÓ}h¨÷ðþô‹ƒíþí|rƒ8aØΟ2à	p<à‰«ÌŒœŸ?Nä‹nº+ÿÜnÚ—÷ROOÞÛ½_÷ÐîÇæƒC»Ók*ù”²4Í(£4¥ŒòìÜe–žëx®Ñ#ϳ<Ëó,ÍSJÇ{Álü‡ò|hüdXW)Aþ!–"°”ïïë´¿ïðÐ#.ÈÛ³ o`ß¡Gö÷öØóðãCŸí?<t¨/¿*Ö\ÌEæsà¤'�’‰	µ…‚´Ü)<$È‚C‚ρi(U�GâÆ%ï?Í)ß¿a߁þý=ŸÍvuïéë=xèPïàààÀ#îØppèÐþß¼z¶t!6‰çFCkr&1VËȈ#jÄ:>’j½0EhƒDÄC0O&Ñ"²Ð—¼
9QÚÓ“õf»ºwQ/¥»{»÷ôõfïî¬7ýÏ<Ü»»ï>Ú•^K(ˆ@z-„ŸÒIQþ:VpŠÚÆBÇ	i¯˜.^	÷Qr½òÞÏU>†ðÞ$Å@+‡âœ0˜°ØOSÊK)¥Y‰¨”S¾*ë7eišfW7üUò¶­ÔuÿªR[WçªU]m¥¦¶’m+}<«jþ>•À/‘¼m*ÿú}–WÞúPSyeÓêµk*[w®n_1Ù6P;@	K\Üj‡C–KO€„â Ë$ÖB&ð¼�uQòm;~큦æ-åæ›·”h]ÑZnÞ¼úÞ»'™-á„Ó‘–>B$(òD‰Ž£…¢MÄðZ°8=µ¶F‘g¡Ð0psã•Ò$Ÿmë,5¯Ù¶­uMë¶m­]÷Û­Û7Ù­Ùd±b㵉@�î…Ž¼0:, ôI!–Æ{íŠÚûD‰8+„‰0Æø‹Ã¤$
+ó”Ž!Œ¼¾(ù’%›eY–fY–e–lf)£®­pZ¯*yÛT²d-¥¥ÔN–çcÞH’‘¥¶{×4—š;KîW¨ië}›KkùMËîœpù«w�XºÀ�֏¿xÓò¥��^ÞøŸ?;çòñ\Fmåò¦M›Úï¾µisyKóšljXë6Þ¼ñž{–`ù§îYçÍïXÏ/­p;6l¼cñnÆúŽõ7m¸óæõŸZ·ñ——,ÿÄ"@�¢Dš|¤ƒ(,8$‚¤™#Ç7’F¥M+©¹eÕê[×4¯mm¶Súí–eŸøäíhüä²uëïX¶~ùí¸mCã"ÜŽ;×ݱ얅±nÉâ»îÚxËâ»6ඛ–/Y–€	›X#�ï¡5´q‰/š	MsÉ–Jó¤Y)+•²©n€/\„Å7`	-]x#nÂB,]xó"ÜxnXÖظXˆ%X¾K°K—7.ÚñˆqfáxNŠqÏaÁÂÁ¥°SÝ͝±æéÁºd_æjÜêÒ…¿²ÓŽ¥ˆ#&Gt½´ˆerN䜍| áY“·Î�((§ÃÐÄÖÃzaMÒ !ã`|‰¡>B¸s.o’ 4A„ÆØ@‡†4xÌ"Lø òz�e’¢Ð@c·±2zÚÑYÁ¤²‚IEBé€<07”ÐN'Ê!„TÒŠ0šç ƒBÄ"’&¢äC§¥P>$%¯Á_»’çÿíêÊÛ’ì}—Ó„ÅÞ78Y„†bˆ˜³0h°˜
+gs¸r!`Ý�ª‘d@"!9“—ûÖ‡Æ*²„™)XjèØ"®Ÿc �&q¬H…¢wF+n´–„8Ô�D8S !ŒKœ)ýte«èUbb#ub„Ò€q
+BXáŒb&ÐA�£#FDÒà8âb(B“hƒ�±p"Ñ0Ú8?MXòÃt[òæ÷ >>,ÍÞo^ÒW5‘éÔVì
â8	|
 ÒA šûÀÇ…A`$®àC­@ø¢6&‘ˆ´Læ(c®›&,Ác¦
m!0C›0²`…b`LäQ
Z aT0¼hÓÆhxïBƒAìx/¯½4Ó„Å€€s àœƒñŠs¦y�q0HËq®!Br8…�|Ì´
âÿ¥o$Í>¬ÿèí–!
8êC����IEND®B`‚
\ No newline at end of file
diff --git a/themes/xtemplate/default/xtemplate.css b/themes/bluemarine/style.css
similarity index 87%
rename from themes/xtemplate/default/xtemplate.css
rename to themes/bluemarine/style.css
index b165f348992ecaff3847ae6d280308f0c1785c18..c72ee52d89c250a608a499ca02c03cde7663d0af 100644
--- a/themes/xtemplate/default/xtemplate.css
+++ b/themes/bluemarine/style.css
@@ -1,336 +1,354 @@
-/* $Id$ */
-
-/*
-** HTML elements
-*/
-body {
-  margin: 0;
-  padding: 0;
-  color: #000;
-  background-color: #fff;
-  font: 76% Verdana, Arial, Helvetica, sans-serif;
-}
-tr.dark td, tr.light td {
-  padding: 0.3em;
-}
-h1, h2, h3, h4, h5, h6 {
-  margin: 0.5;
-}
-h1 {
-  font-size: 1.3em;
-}
-h2 {
-  font-size: 1.2em;
-}
-h3, h4, h5, h6 {
-  font-size: 1.1em;
-}
-a {
-  text-decoration: none;
-  font-weight: bold;
-}
-a:link {
-  color: #39c;
-}
-a:visited {
-  color: #369;
-}
-a:hover {
-  color: #39c;
-  text-decoration: underline;
-}
-fieldset {
-  border: 1px solid #ccc;
-}
-pre {
-  background-color: #eee;
-  padding: 0.75em 1.5em;
-  font-size: 12px;
-  border: 1px solid #ddd;
-}
-table {
-  /* make <td> sizes relative to body size! */
-  font-size: 1em;
-}
-.form-item label {
-  font-size: 1em;
-  color: #222;
-}
-.item-list .title {
-  font-size: 1em;
-  color: #222;
-}
-.links {
-  margin-bottom: 0em;
-}
-.comment .links {
-  margin-bottom: 0em;
-}
-
-/*
-** Page layout blocks / IDs
-*/
-#header, #content {
-  width: 100%;
-}
-#header {
-  background-color: #69c;
-}
-#logo {
-  vertical-align: bottom;
-  border: 0;
-  font-weight: bold;
-  font-size: 1.9em;
-  color: #fff;
-}
-#logo img {
-  display: block;
-}
-#menu {
-  padding: 0.5em 0.5em 0 0.5em;
-  text-align: right;
-  vertical-align: middle;
-}
-#primary {
-  font-size: 1.0em;
-  padding: 0em 0.8em 0.5em 0;
-  color: #9cf;
-}
-#primary a {
-  font-weight: bold;
-  color: #fff;
-}
-#secondary {
-  padding: 0 1em 0.5em 0;
-  font-size: 0.8em;
-  color: #9cf;
-}
-#secondary a {
-  font-weight: bold;
-  color: #9cf;
-}
-#search .form-text, #search .form-submit {
-  border: 1px solid #369;
-  font-size: 1.1em;
-}
-#search .form-text {
-  width: 8em;
-  height: 1.4em;
-  padding: 0 0.5em 0 0.5em;
-  margin: 0 0 0.5em 0;
-}
-#search .form-submit {
-  height: 1.5em;
-}
-#mission {
-  background-color: #369;
-  padding: 1.5em 2em;
-  color: #fff;
-}
-#mission a, #mission a:visited {
-  color: #9cf;
-  font-weight: bold;
-}
-#main {
-  /* padding in px not ex because IE messes up 100% width tables otherwise */
-  padding: 10px;
-}
-#mission, .node .content, .comment .content {
-  line-height: 1.4;
-}
-#help {
-  font-size: 0.9em;
-  margin-bottom: 1em;
-}
-.breadcrumb {
-  margin-bottom: .5em;
-}
-.messages {
-  background-color: #eee;
-  border: 1px solid #ccc;
-  padding: 0.3em;
-  margin-bottom: 1em;
-}
-.error {
-  border-color: red;
-}
-#sidebar-left, #sidebar-right {
-  background-color: #ddd;
-  width: 16em;
-  /* padding in px not ex because IE messes up 100% width tables otherwise */
-  padding: 10px;
-  vertical-align: top;
-}
-#footer {
-  background-color: #eee;
-  padding: 1em;
-  font-size: 0.8em;
-}
-
-/*
-** Common declarations for child classes of node, comment, block, box, etc.
-** If you want any of them styled differently for a specific parent, add
-** additional rules /with only the differing properties!/ to .parent .class.
-** See .comment .title for an example.
-*/
-.title, .title a {
-  font-weight: bold;
-  font-size: 1.3em;
-  color: #777;
-  margin: 0 auto 0 auto;  /* decrease default margins for h<x>.title */
-}
-.submitted {
-  color: #999;
-  font-size: 0.8em;
-}
-.links {
-  color: #999;
-}
-.links a {
-  font-weight: bold;
-}
-.block, .box {
-  padding: 0 0 1.5em 0;
-}
-.block {
-  border-bottom: 1px solid #bbb;
-  padding-bottom: 0.75em;
-  margin-bottom: 1.5em;
-}
-.block .title {
-  margin-bottom: .25em;
-}
-.box .title {
-  font-size: 1.1em;
-}
-.node {
-  margin: .5em 0 2em 0;
-}
-.sticky {
-  padding: .5em;
-  background-color: #eee;
-  border: solid 1px #ddd;
-}
-.node .content, .comment .content {
-  margin: .5em 0 .5em 0;
-}
-.node .taxonomy {
-  color: #999;
-  font-size: 0.8em;
-  padding: 1.5em;
-}
-.node .picture {
-  border: 1px solid #ddd;
-  float: right;
-  margin: 0.5em;
-}
-.comment {
-  border: 1px solid #abc;
-  padding: .5em;
-  margin-bottom: 1em;
-}
-.comment .title a {
-  font-size: 1.1em;
-  font-weight: normal;
-}
-.comment .new {
-  text-align: right;
-  font-weight: bold;
-  font-size: 0.8em;
-  float: right;
-  color: red;
-}
-.comment .picture {
-  border: 1px solid #abc;
-  float: right;
-  margin: 0.5em;
-}
-
-/*
-** Module specific styles
-*/
-#aggregator .feed {
-  background-color: #eee;
-  border: 1px solid #ccc;
-  padding: 1em;
-  margin: 1em 0 1em 0;
-}
-#aggregator .news-item .source, #aggregator .news-item .categories, #aggregator .source, #aggregator .age {
-  color: #999;
-  font-style: italic;
-  font-size: 0.9em;
-}
-#aggregator .title {
-  margin-bottom: 0.5em;
-  font-size: 1em;
-}
-#aggregator h3 {
-  margin-top: 1em;
-}
-#forum table {
-  width: 100%;
-}
-#forum td {
-  padding: 0.5em 0.5em 0.5em 0.5em;
-}
-#forum td.forum, #forum td.posts {
-  background-color: #eee;
-}
-#forum td.topics, #forum td.last-reply {
-  background-color: #ddd;
-}
-#forum td.container {
-  background-color: #ccc;
-}
-#forum td.container a {
-  color: #555;
-}
-#forum td.statistics, #forum td.settings, #forum td.pager {
-  height: 1.5em;
-  border: 1px solid #bbb;
-}
-#forum td .name {
-  color: #96c;
-}
-#forum td .links {
-  padding-top: 0.7em;
-  font-size: 0.9em;
-}
-#profile .profile {
-  clear: both;
-  border: 1px solid #abc;
-  padding: .5em;
-  margin: 1em 0em 1em 0em;
-}
-#profile .profile .name {
-  padding-bottom: 0.5em;
-}
-.block-forum h3 {
-  margin-bottom: .5em;
-}
-.calendar a {
-  text-decoration: none;
-}
-.calendar td, .calendar th {
-  padding: 0.4em 0;
-  border-color: #888;
-}
-.calendar .day-today {
-  background-color: #69c;
-}
-.calendar .day-today a {
-  color: #fff;
-}
-.calendar .day-selected {
-  background-color: #369;
-  color: #fff;
-}
-.calendar .header-week {
-  background-color: #ccc;
-}
-.calendar .day-blank {
-  background-color: #ccc;
-}
-.calendar .row-week td a:hover {
-  background-color: #fff; color: #000;
-}
+/* $Id$ */
+
+/*
+** HTML elements
+*/
+body {
+  margin: 0;
+  padding: 0;
+  color: #000;
+  background-color: #fff;
+  font: 76% Verdana, Arial, Helvetica, sans-serif;
+}
+tr.dark td, tr.light td {
+  padding: 0.3em;
+}
+h1, h2, h3, h4, h5, h6 {
+  margin: 0.5;
+}
+h1 {
+  font-size: 1.3em;
+}
+h2 {
+  font-size: 1.2em;
+}
+h3, h4, h5, h6 {
+  font-size: 1.1em;
+}
+a {
+  text-decoration: none;
+  font-weight: bold;
+}
+a:link {
+  color: #39c;
+}
+a:visited {
+  color: #369;
+}
+a:hover {
+  color: #39c;
+  text-decoration: underline;
+}
+fieldset {
+  border: 1px solid #ccc;
+}
+pre {
+  background-color: #eee;
+  padding: 0.75em 1.5em;
+  font-size: 12px;
+  border: 1px solid #ddd;
+}
+table {
+  /* make <td> sizes relative to body size! */
+  font-size: 1em;
+}
+.form-item label {
+  font-size: 1em;
+  color: #222;
+}
+.item-list .title {
+  font-size: 1em;
+  color: #222;
+}
+.links {
+  margin-bottom: 2em;
+}
+.comment .links {
+  margin-bottom: 0em;
+}
+
+/*
+** Page layout blocks / IDs
+*/
+#header, #content {
+  width: 100%;
+}
+#header {
+  background-color: #69c;
+}
+#logo {
+  vertical-align: middle;
+  border: 0;
+}
+#logo img {
+  float: left;
+  padding: 0em 1.0em 0em 1em;
+}
+#menu {
+  padding: 0.5em 0.5em 0 0.5em;
+  text-align: right;
+  vertical-align: middle;
+}
+#primary {
+  font-size: 1.0em;
+  padding: 0em 0.8em 0.5em 0;
+  color: #9cf;
+}
+#primary a {
+  font-weight: bold;
+  color: #fff;
+}
+#secondary {
+  padding: 0 1em 0.5em 0;
+  font-size: 0.8em;
+  color: #9cf;
+}
+#secondary a {
+  font-weight: bold;
+  color: #9cf;
+}
+#search .form-text, #search .form-submit {
+  border: 1px solid #369;
+  font-size: 1.1em;
+}
+#search .form-text {
+  width: 8em;
+  height: 1.4em;
+  padding: 0 0.5em 0 0.5em;
+  margin: 0 0 0.5em 0;
+}
+#search .form-submit {
+  height: 1.5em;
+}
+#mission {
+  background-color: #369;
+  padding: 1.5em 2em;
+  color: #fff;
+}
+#mission a, #mission a:visited {
+  color: #9cf;
+  font-weight: bold;
+}
+.site-name {
+  margin: 0.6em 0em 0em 0em;
+  padding: 0em;
+  font-size: 2em;
+}
+.site-name a:link, .site-name a:visited {
+  color: #fff;
+}
+.site-name a:hover {
+  color: #369;
+  text-decoration: none;
+}
+.site-slogan {
+  font-size: 1em;
+  color: #eee;
+  display: block;
+  margin: 0em 0em 0em 0em;
+  font-style: italic;
+  font-weight: bold;
+}
+#main {
+  /* padding in px not ex because IE messes up 100% width tables otherwise */
+  padding: 10px;
+}
+#mission, .node .content, .comment .content {
+  line-height: 1.4;
+}
+#help {
+  font-size: 0.9em;
+  margin-bottom: 1em;
+}
+.breadcrumb {
+  margin-bottom: .5em;
+}
+.messages {
+  background-color: #eee;
+  border: 1px solid #ccc;
+  padding: 0.3em;
+  margin-bottom: 1em;
+}
+.error {
+  border-color: red;
+}
+#sidebar-left, #sidebar-right {
+  background-color: #ddd;
+  width: 16em;
+  /* padding in px not ex because IE messes up 100% width tables otherwise */
+  padding: 10px;
+  vertical-align: top;
+}
+#footer {
+  background-color: #eee;
+  padding: 1em;
+  font-size: 0.8em;
+}
+
+/*
+** Common declarations for child classes of node, comment, block, box, etc.
+** If you want any of them styled differently for a specific parent, add
+** additional rules /with only the differing properties!/ to .parent .class.
+** See .comment .title for an example.
+*/
+.title, .title a {
+  font-weight: bold;
+  font-size: 1.3em;
+  color: #777;
+  margin: 0 auto 0 auto;  /* decrease default margins for h<x>.title */
+}
+.submitted {
+  color: #999;
+  font-size: 0.8em;
+}
+.links {
+  color: #999;
+}
+.links a {
+  font-weight: bold;
+}
+.block, .box {
+  padding: 0 0 1.5em 0;
+}
+.block {
+  border-bottom: 1px solid #bbb;
+  padding-bottom: 0.75em;
+  margin-bottom: 1.5em;
+}
+.block .title {
+  margin-bottom: .25em;
+}
+.box .title {
+  font-size: 1.1em;
+}
+.node {
+  margin: .5em 0 1em 0;
+}
+.sticky {
+  padding: .5em;
+  background-color: #eee;
+  border: solid 1px #ddd;
+}
+.node .content, .comment .content {
+  margin: .5em 0 .5em 0;
+}
+.node .taxonomy {
+  color: #999;
+  font-size: 0.8em;
+  padding: 1.5em;
+}
+.node .picture {
+  border: 1px solid #ddd;
+  float: right;
+  margin: 0.5em;
+}
+.comment {
+  border: 1px solid #abc;
+  padding: .5em;
+  margin-bottom: 1em;
+}
+.comment .title a {
+  font-size: 1.1em;
+  font-weight: normal;
+}
+.comment .new {
+  text-align: right;
+  font-weight: bold;
+  font-size: 0.8em;
+  float: right;
+  color: red;
+}
+.comment .picture {
+  border: 1px solid #abc;
+  float: right;
+  margin: 0.5em;
+}
+
+/*
+** Module specific styles
+*/
+#aggregator .feed {
+  background-color: #eee;
+  border: 1px solid #ccc;
+  padding: 1em;
+  margin: 1em 0 1em 0;
+}
+#aggregator .news-item .source, #aggregator .news-item .categories, #aggregator .source, #aggregator .age {
+  color: #999;
+  font-style: italic;
+  font-size: 0.9em;
+}
+#aggregator .title {
+  margin-bottom: 0.5em;
+  font-size: 1em;
+}
+#aggregator h3 {
+  margin-top: 1em;
+}
+#forum table {
+  width: 100%;
+}
+#forum td {
+  padding: 0.5em 0.5em 0.5em 0.5em;
+}
+#forum td.forum, #forum td.posts {
+  background-color: #eee;
+}
+#forum td.topics, #forum td.last-reply {
+  background-color: #ddd;
+}
+#forum td.container {
+  background-color: #ccc;
+}
+#forum td.container a {
+  color: #555;
+}
+#forum td.statistics, #forum td.settings, #forum td.pager {
+  height: 1.5em;
+  border: 1px solid #bbb;
+}
+#forum td .name {
+  color: #96c;
+}
+#forum td .links {
+  padding-top: 0.7em;
+  font-size: 0.9em;
+}
+#profile .profile {
+  clear: both;
+  border: 1px solid #abc;
+  padding: .5em;
+  margin: 1em 0em 1em 0em;
+}
+#profile .profile .name {
+  padding-bottom: 0.5em;
+}
+.block-forum h3 {
+  margin-bottom: .5em;
+}
+.calendar a {
+  text-decoration: none;
+}
+.calendar td, .calendar th {
+  padding: 0.4em 0;
+  border-color: #888;
+}
+.calendar .day-today {
+  background-color: #69c;
+}
+.calendar .day-today a {
+  color: #fff;
+}
+.calendar .day-selected {
+  background-color: #369;
+  color: #fff;
+}
+.calendar .header-week {
+  background-color: #ccc;
+}
+.calendar .day-blank {
+  background-color: #ccc;
+}
+.calendar .row-week td a:hover {
+  background-color: #fff; color: #000;
+}
diff --git a/themes/xtemplate/default/xtemplate.xtmpl b/themes/bluemarine/xtemplate.xtmpl
similarity index 85%
rename from themes/xtemplate/default/xtemplate.xtmpl
rename to themes/bluemarine/xtemplate.xtmpl
index b75d4812ab945a1293ee378b1d8eaf1d2a7c08e1..9de7b62a2facfc733d2914911e008e7f8ce1a16f 100644
--- a/themes/xtemplate/default/xtemplate.xtmpl
+++ b/themes/bluemarine/xtemplate.xtmpl
@@ -1,125 +1,137 @@
-<!-- BEGIN: header --><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
-
-<head>
-  <title>{head_title}</title>
-  {head}
-  <link type="text/css" rel="stylesheet" href="{directory}/xtemplate.css" />
-</head>
-
-<body{onload_attributes}>
-
-<table border="0" cellpadding="0" cellspacing="0" id="header">
-  <tr>
-    <td id="logo">
-      <a href="./">{logo}</a>
-    </td>
-    <td id="menu">
-      <div id="secondary">{secondary_links}</div>
-      <div id="primary">{primary_links}</div>
-      <!-- BEGIN: search_box -->
-      <form action="{search_url}" method="post">
-        <div id="search">
-          <input class="form-text" type="text" size="15" value="" name="keys" alt="{search_description}" />
-          <input class="form-submit" type="submit" value="{search_button_text}" />
-        </div>
-      </form>
-      <!-- END: search_box -->
-    </td>
-  </tr>
-</table>
-
-<table border="0" cellpadding="0" cellspacing="0" id="content">
-  <tr>
-    <!-- BEGIN: blocks -->
-    <td id="sidebar-left">
-      {blocks}
-    </td>
-    <!-- END: blocks -->
-    <td valign="top">
-      <!-- BEGIN: mission -->
-      <div id="mission">{mission}</div>
-      <!-- END: mission -->
-      <div id="main">
-        <!-- BEGIN: title -->
-        {breadcrumb}
-        <h1 class="title">{title}</h1>
-        <!-- BEGIN: tabs -->
-        <div class="tabs">{tabs}</div>
-        <!-- END: tabs -->
-        <!-- END: title -->
-        <!-- BEGIN: help -->
-        <div id="help">{help}</div>
-        <!-- END: help -->
-        <!-- BEGIN: message -->
-        {message}
-        <!-- END: message -->
-<!-- END: header -->
-
-<!-- BEGIN: node -->
-  <div class="node {sticky}">
-    <!-- BEGIN: picture -->
-    {picture}
-    <!-- END: picture -->
-    <!-- BEGIN: title -->
-    <h2 class="title"><a href="{link}">{title}</a></h2>
-    <!-- END: title -->
-    <span class="submitted">{submitted}</span>
-    <!-- BEGIN: taxonomy -->
-    <span class="taxonomy">{taxonomy}</span>
-    <!-- END: taxonomy -->
-    <div class="content">{content}</div>
-    <!-- BEGIN: links -->
-    <div class="links">&raquo; {links}</div>
-    <!-- END: links -->
-  </div>
-<!-- END: node -->
-
-<!-- BEGIN: comment -->
-  <div class="comment">
-    <!-- BEGIN: picture -->
-    {picture}
-    <!-- END: picture -->
-    <h3 class="title">{title}</h3><!-- BEGIN: new --><span class="new">{new}</span><!-- END: new -->
-    <div class="submitted">{submitted}</div>
-    <div class="content">{content}</div>
-    <!-- BEGIN: links -->
-    <div class="links">&raquo; {links}</div>
-    <!-- END: links -->
-  </div>
-<!-- END: comment -->
-
-<!-- BEGIN: box -->
-  <div class="box">
-    <h2 class="title">{title}</h2>
-    <div class="content">{content}</div>
- </div>
-<!-- END: box -->
-
-<!-- BEGIN: block -->
-  <div class="block block-{module}" id="block-{module}-{delta}">
-    <h2 class="title">{title}</h2>
-    <div class="content">{content}</div>
- </div>
-<!-- END: block -->
-
-<!-- BEGIN: footer -->
-      </div><!-- main -->
-    </td>
-    <!-- BEGIN: blocks -->
-    <td id="sidebar-right">
-      {blocks}
-    </td>
-    <!-- END: blocks -->
-  </tr>
-</table>
-
-<!-- BEGIN: message -->
-<div id="footer">
-  {footer_message}
-</div>
-<!-- END: message -->
-{footer}
-</body>
-</html>
-<!-- END: footer -->
+<!-- BEGIN: header --><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
+
+<head>
+  <title>{head_title}</title>
+  {head}
+</head>
+
+<body{onload_attributes}>
+
+<table border="0" cellpadding="0" cellspacing="0" id="header">
+  <tr>
+    <td id="logo">
+
+      <!-- BEGIN: logo -->
+        <a href="./" title="Home"><img src="{logo}" alt="Home" border="0" /></a>
+      <!-- END: logo -->
+      
+      <!-- BEGIN: site_name -->
+        <h1 class='site-name'><a href="./" title="Home">{site_name}</a></h1>
+      <!-- END: site_name -->
+ 
+      <!-- BEGIN: site_slogan -->
+        <div class='site-slogan'>{site_slogan}</div>
+      <!-- END: site_slogan -->
+
+
+    </td>
+    <td id="menu">
+      <div id="secondary">{secondary_links}</div>
+      <div id="primary">{primary_links}</div>
+      <!-- BEGIN: search_box -->
+      <form action="{search_url}" method="post">
+        <div id="search">
+          <input class="form-text" type="text" size="15" value="" name="keys" alt="{search_description}" />
+          <input class="form-submit" type="submit" value="{search_button_text}" />
+        </div>
+      </form>
+      <!-- END: search_box -->
+    </td>
+  </tr>
+</table>
+
+<table border="0" cellpadding="0" cellspacing="0" id="content">
+  <tr>
+    <!-- BEGIN: blocks -->
+    <td id="sidebar-left">
+      {blocks}
+    </td>
+    <!-- END: blocks -->
+    <td valign="top">
+      <!-- BEGIN: mission -->
+      <div id="mission">{mission}</div>
+      <!-- END: mission -->
+      <div id="main">
+        <!-- BEGIN: title -->
+        {breadcrumb}
+        <h1 class="title">{title}</h1>
+        <!-- BEGIN: tabs -->
+        <div class="tabs">{tabs}</div>
+        <!-- END: tabs -->
+        <!-- END: title -->
+        <!-- BEGIN: help -->
+        <div id="help">{help}</div>
+        <!-- END: help -->
+        <!-- BEGIN: message -->
+        {message}
+        <!-- END: message -->
+<!-- END: header -->
+
+<!-- BEGIN: node -->
+  <div class="node {sticky}">
+    <!-- BEGIN: picture -->
+    {picture}
+    <!-- END: picture -->
+    <!-- BEGIN: title -->
+    <h2 class="title"><a href="{link}">{title}</a></h2>
+    <!-- END: title -->
+    <span class="submitted">{submitted}</span>
+    <!-- BEGIN: taxonomy -->
+    <span class="taxonomy">{taxonomy}</span>
+    <!-- END: taxonomy -->
+    <div class="content">{content}</div>
+    <!-- BEGIN: links -->
+    <div class="links">&raquo; {links}</div>
+    <!-- END: links -->
+  </div>
+<!-- END: node -->
+
+<!-- BEGIN: comment -->
+  <div class="comment">
+    <!-- BEGIN: picture -->
+    {picture}
+    <!-- END: picture -->
+    <h3 class="title">{title}</h3><!-- BEGIN: new --><span class="new">{new}</span><!-- END: new -->
+    <div class="submitted">{submitted}</div>
+    <div class="content">{content}</div>
+    <!-- BEGIN: links -->
+    <div class="links">&raquo; {links}</div>
+    <!-- END: links -->
+  </div>
+<!-- END: comment -->
+
+<!-- BEGIN: box -->
+  <div class="box">
+    <h2 class="title">{title}</h2>
+    <div class="content">{content}</div>
+ </div>
+<!-- END: box -->
+
+<!-- BEGIN: block -->
+  <div class="block block-{module}" id="block-{module}-{delta}">
+    <h2 class="title">{title}</h2>
+    <div class="content">{content}</div>
+ </div>
+<!-- END: block -->
+
+<!-- BEGIN: footer -->
+      </div><!-- main -->
+    </td>
+    <!-- BEGIN: blocks -->
+    <td id="sidebar-right">
+      {blocks}
+    </td>
+    <!-- END: blocks -->
+  </tr>
+</table>
+
+<!-- BEGIN: message -->
+<div id="footer">
+  {footer_message}
+</div>
+<!-- END: message -->
+{footer}
+</body>
+</html>
+<!-- END: footer -->
diff --git a/themes/chameleon/background.png b/themes/chameleon/background.png
new file mode 100644
index 0000000000000000000000000000000000000000..194588a3a0e2116ccae2a59ea72e95d247267f1d
--- /dev/null
+++ b/themes/chameleon/background.png
@@ -0,0 +1,3 @@
+‰PNG
+
+���
IHDR������t���8VJ���sBIT,0þ ���IDATXÃí×É
€0DQÒ£ì;„„¨ÁXrdy|ÿzÇ‘]ýV¿ÏyNlQn8ñ¥Sn!ʝA¹×)ò`P!Ê'Ž:å² ¼”WN|C¦ÅdAy7(œ8A¦Å§AÙC¦Å¹Ø#ªTåhPfMì™'È‚r†,(¿¥âñhããíK–Ö����IEND®B`‚
\ No newline at end of file
diff --git a/themes/chameleon/chameleon.theme b/themes/chameleon/chameleon.theme
index 8af17edf0ce6755e79619ec2aa2cfcf9f0576cbd..9554325325d54ef0cd7884b3a6662c42457f7bf4 100644
--- a/themes/chameleon/chameleon.theme
+++ b/themes/chameleon/chameleon.theme
@@ -1,153 +1,153 @@
-<?php
-// $Id$
-
-function chameleon_help($section) {
-
-  $output = '';
-
-  switch ($section) {
-    case 'admin/themes#description':
-      $output = t('A fast PHP theme with different stylesheets.');
-      break;
-  }
-
-  return $output;
-}
-
-function chameleon_settings() {
-
-  /*
-  ** Compile a list of the available style sheets:
-  */
-
-  $fd = opendir('themes/chameleon');
-  while ($file = readdir($fd)) {
-    if (is_dir("themes/chameleon/$file") && !in_array($file, array('.', '..', 'CVS'))) {
-      $files["themes/chameleon/$file/chameleon.css"] = "themes/chameleon/$file/chameleon.css";
-    }
-  }
-  closedir($fd);
-
-  $output = form_select(t('CSS stylesheet'), 'chameleon_stylesheet', variable_get('chameleon_stylesheet', 'themes/chameleon/pure/chameleon.css'), $files, t('Selecting a different stylesheet will change the look and feel of your site.'));
-
-  return $output;
-}
-
-function chameleon_page($content, $title = NULL, $breadcrumb = NULL) {
-  if (isset($title)) {
-    drupal_set_title($title);
-  }
-
-  if (isset($breadcrumb)) {
-    drupal_set_breadcrumb($breadcrumb);
-  }
-
-  $output  = "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\">\n";
-  $output .= "<html xmlns=\"http://www.w3.org/1999/xhtml\" lang=\"en\" xml:lang=\"en\">\n";
-  $output .= "<head>\n";
-  $output .= " <title>". ($title ? $title ." | ". variable_get("site_name", "drupal") : variable_get("site_name", "drupal") ." | ". variable_get("site_slogan", "")) ."</title>\n";
-  $output .= drupal_get_html_head();
-  $output .= " <link rel=\"stylesheet\" type=\"text/css\" href=\"themes/chameleon/common.css\" />\n";
-  $output .= " <link rel=\"stylesheet\" type=\"text/css\" href=\"". variable_get("chameleon_stylesheet", "themes/chameleon/pure/chameleon.css") ."\" />\n";
-  $output .= "</head>";
-  $output .= "<body". theme_onload_attribute() .">\n";
-  $output .= " <div id=\"header\">";
-  $output .= "  <h1 class=\"title\">". l(variable_get("site_name", "drupal"), ""). "</h1>";
-  $output .= " </div>\n";
-
-  $output .= " <table>\n";
-  $output .= "  <tr>\n";
-
-  if ($blocks = theme_blocks("left")) {
-    $output .= "   <td id=\"sidebar-left\">$blocks</td>\n";
-  }
-
-  $output .= "   <td id=\"main\">\n";
-
-  if ($title = drupal_get_title()) {
-    $output .= theme("breadcrumb", drupal_get_breadcrumb());
-    $output .= "<h2>$title</h2>";
-  }
-
-  if ($tabs = theme('menu_local_tasks')) {
-    $output .= $tabs;
-  }
-
-  if ($help = menu_get_active_help()) {
-    $output .= "<div id=\"help\">$help</div><hr />";
-  }
-
-  $output .= theme_status_messages();
-
-  $output .= "\n<!-- begin content -->\n";
-  $output .= $content;
-  $output .= "\n<!-- end content -->\n";
-
-  if ($footer = variable_get('site_footer', '')) {
-    $output .= " <div id=\"footer\">$footer</div>\n";
-  }
-
-  $output  .= "   </td>\n";
-
-  if ($blocks = theme_blocks("right")) {
-    $output .= "   <td id=\"sidebar-right\">$blocks</td>\n";
-  }
-
-  $output .= "  </tr>\n";
-  $output .= " </table>\n";
-
-  $output .=  theme_closure();
-  $output .= " </body>\n";
-  $output .= "</html>\n";
-
-  return $output;
-}
-
-function chameleon_node($node, $main = 0, $page = 0) {
-
-  $output  = "<div class=\"node\">\n";
-
-  if (!$page) {
-    $output .= " <h2 class=\"title\">". ($main ? l($node->title, "node/$node->nid") : $node->title) ."</h2>\n";
-  }
-
-  $output .= " <div class=\"content\">\n";
-
-  if ($main && $node->teaser) {
-    $output .= $node->teaser;
-  }
-  else {
-    $output .= $node->body;
-  }
-
-  $output .= " </div>\n";
-
-  $submitted = array(t("By %author at %date", array('%author' => format_name($node), '%date' => format_date($node->created, 'small'))));
-
-  if (module_exist('taxonomy')) {
-    $terms = taxonomy_link("taxonomy terms", $node);
-  }
-
-  if ($links = link_node($node, $main)) {
-    $output .= " <div class=\"links\">". theme('links', array_merge($submitted, $terms, $links)) ."</div>\n";
-  }
-
-  $output .= "</div>\n";
-
-  return $output;
-}
-
-function chameleon_comment($comment, $link = "") {
-
-  $submitted = array(t('By %author at %date', array('%author' => format_name($comment), '%date' => format_date($comment->timestamp. 'small'))));
-  $links = array($link);
-
-  $output  = "<div class=\"comment\">\n";
-  $output .= " <h3 class=\"title\">". l($comment->subject, $_GET['q'], NULL, NULL, "comment-$comment->cid") ."</h3>\n";
-  $output .= " <div class=\"content\">". $comment->comment ."</div>\n";
-  $output .= " <div class=\"links\">". theme('links', array_merge($submitted, $links)) ."</div>\n";
-  $output .= "</div>\n";
-
-  return $output;
-}
-?>
+<?php
+// $Id$
+
+function chameleon_features() {
+  return array(
+       'logo',
+       'toggle_name',
+       'toggle_search',
+       'toggle_slogan',
+       'toggle_primary_links',
+       'toggle_secondary_links');
+}
+
+function chameleon_page($content, $title = NULL, $breadcrumb = NULL) {
+  if (isset($title)) {
+    drupal_set_title($title);
+  }
+
+  if (isset($breadcrumb)) {
+    drupal_set_breadcrumb($breadcrumb);
+  }
+
+  $output  = "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\">\n";
+  $output .= "<html xmlns=\"http://www.w3.org/1999/xhtml\" lang=\"en\" xml:lang=\"en\">\n";
+  $output .= "<head>\n";
+  $output .= " <title>". ($title ? $title ." | ". variable_get("site_name", "drupal") : variable_get("site_name", "drupal") ." | ". variable_get("site_slogan", "")) ."</title>\n";
+  $output .= drupal_get_html_head();
+  $output .= " <link rel=\"stylesheet\" type=\"text/css\" href=\"themes/chameleon/common.css\" />\n";
+  $output .= "</head>";
+  $output .= "<body". theme_onload_attribute() .">\n";
+  $output .= " <div id=\"header\">";
+
+  if ($logo = drupal_get_theme_setting('logo')) {
+    $output .= "  <a href=\"./\" title=\"Home\"><img src=\"$logo\" alt=\"Home\" /></a>";
+  } 
+  if (drupal_get_theme_setting('toggle_name')) {
+    $output .= "  <h1 class=\"site-name title\">". l(variable_get('site_name', 'drupal'), ""). "</h1>";
+  } 
+  if (drupal_get_theme_setting('toggle_slogan')) {
+    $output .= "  <div class=\"site-slogan\">". variable_get('site_slogan', '') ."</div>";
+  }
+
+  $output .= "</div>\n";
+
+  $primary_links = drupal_get_theme_setting('primary_links');
+  $secondary_links = drupal_get_theme_setting('secondary_links');
+  if ($primary_links || $secondary_links) {
+    $output .= ' <div class="navlinks">';
+    if ($primary_links) {
+      $output .= '<div class="primary">'. $primary_links .'</div>';
+    }
+    if ($secondary_links) {
+      $output .= '<div class="secondary">'. $secondary_links .'</div>';
+    }
+    $output .= " </div>\n"; 
+  }
+
+  $output .= " <table>\n";
+  $output .= "  <tr>\n";
+
+  if ($blocks = theme_blocks("left")) {
+    $output .= "   <td id=\"sidebar-left\">$blocks</td>\n";
+  }
+
+  $output .= "   <td id=\"main\">\n";
+
+  if ($title = drupal_get_title()) {
+    $output .= theme("breadcrumb", drupal_get_breadcrumb());
+    $output .= "<h2>$title</h2>";
+  }
+
+  if ($tabs = theme('menu_local_tasks')) {
+    $output .= $tabs;
+  }
+
+  if ($help = menu_get_active_help()) {
+    $output .= "<div id=\"help\">$help</div><hr />";
+  }
+
+  $output .= theme_status_messages();
+
+  $output .= "\n<!-- begin content -->\n";
+  $output .= $content;
+  $output .= "\n<!-- end content -->\n";
+
+  if ($footer = variable_get('site_footer', '')) {
+    $output .= " <div id=\"footer\">$footer</div>\n";
+  }
+
+  $output  .= "   </td>\n";
+
+  if ($blocks = theme_blocks("right")) {
+    $output .= "   <td id=\"sidebar-right\">$blocks</td>\n";
+  }
+
+  $output .= "  </tr>\n";
+  $output .= " </table>\n";
+
+  $output .=  theme_closure();
+  $output .= " </body>\n";
+  $output .= "</html>\n";
+
+  return $output;
+}
+
+function chameleon_node($node, $main = 0, $page = 0) {
+
+  $output  = "<div class=\"node\">\n";
+
+  if (!$page) {
+    $output .= " <h2 class=\"title\">". ($main ? l($node->title, "node/$node->nid") : $node->title) ."</h2>\n";
+  }
+
+  $output .= " <div class=\"content\">\n";
+
+  if ($main && $node->teaser) {
+    $output .= $node->teaser;
+  }
+  else {
+    $output .= $node->body;
+  }
+
+  $output .= " </div>\n";
+
+  $submitted = drupal_get_theme_setting("toggle_node_info_$node->type") ? array(t("By %author at %date", array('%author' => format_name($node), '%date' => format_date($node->created, 'small')))) : array();
+
+  if (module_exist('taxonomy')) {
+    $terms = taxonomy_link("taxonomy terms", $node);
+  }
+
+  if ($links = link_node($node, $main)) {
+    $output .= " <div class=\"links\">". theme('links', array_merge($submitted, $terms, $links)) ."</div>\n";
+  }
+
+  $output .= "</div>\n";
+
+  return $output;
+}
+
+function chameleon_comment($comment, $link = "") {
+
+  $submitted = array(t('By %author at %date', array('%author' => format_name($comment), '%date' => format_date($comment->timestamp. 'small'))));
+  $links = array($link);
+
+  $output  = "<div class=\"comment\">\n";
+  $output .= " <h3 class=\"title\">". l($comment->subject, $_GET['q'], NULL, NULL, "comment-$comment->cid") ."</h3>\n";
+  $output .= " <div class=\"content\">". $comment->comment ."</div>\n";
+  $output .= " <div class=\"links\">". theme('links', array_merge($submitted, $links)) ."</div>\n";
+  $output .= "</div>\n";
+
+  return $output;
+}
+?>
diff --git a/themes/chameleon/common.css b/themes/chameleon/common.css
index 7ed4e4ff89ae862e37fb774afaa616da921b9f87..057a0c15b389f7340854f333be555bd5dff94be6 100644
--- a/themes/chameleon/common.css
+++ b/themes/chameleon/common.css
@@ -1,124 +1,147 @@
-/* $Id$ */
-
-/*
-** HTML elements
-*/
-a, a:link, a:active {
-  font-weight: bold;
-  text-decoration: none;
-}
-a:hover {
-  text-decoration: underline;
-}
-body {
-  margin: 0;
-  padding: 3em;
-  font-family: arial, helvetica, sans-serif;
-  font-size: .9em;
-  line-height: 1.3em;
-}
-blockquote {
-  font-style: italic;
-}
-table {
-  margin: 0;
-  padding: .5em;
-  border-collapse: collapse;
-}
-code, pre {
- font-size: 1em;
-}
-pre {
- font-size: 0.8em;
- padding: 1em;
- background: #eee;
-}
-li {
- padding-bottom: .3em;
-}
-h1, h2, h3, h4, h5, h6 {
-  margin-bottom: .25em;
-}
-h1 {
-  font-size: 1.3em;
-}
-h2 {
-  font-size: 1.2em;
-}
-h3 {
-  font-size: 1.1em;
-}
-h4, h5, h6 {
-  font-size: 1em;
-}
-p {
-  margin: 0 0 .5em 0;
-}
-br {
-  line-height: 0.6em;
-}
-
-/*
-** Page layout blocks / IDs
-*/
-#header {
-  margin-bottom: 2em;
-}
-#help {
-  font-size: 0.8em;
-}
-#sidebar-left, #sidebar-right {
-  vertical-align: top;
-  padding: 10px;
-}
-#main {
-  padding-left: 1em;
-  padding-right: 1em;
-  vertical-align: top;
-  width: 60%;
-}
-#footer {
- font-size: 0.8em;
- padding-top: 2em;
- text-align: center;
-}
-
-/*
-** Common declarations for child classes of node, comment, block, box etc
-*/
-.title {
-  margin: 0 0 .25em 0;
-}
-.content {
-  margin: 0 0 .5em 0;
-}
-.links {
-  font-size: 0.8em;
-  line-height: 1.25em;
-}
-.block {
-  width: 180px;
-}
-.messages {
-  padding: 0.3em;
-  margin: 0.5em 0em 0.5em 0em;
-}
-.status {
-  border: 1px solid #3a3;
-  color: #3a3;
-}
-.error, form-item input.error {
-  border: 1px solid red;
-  color: red;
-}
-
-/*
-** Module specific styles
-*/
-.form-item textarea {
-  font-size: 1em;
-}
-#aggregator .feed {
-  border: 1px solid gray;
-  padding: 1em;
-}
+/* $Id$ */
+
+/*
+** HTML elements
+*/
+a, a:link, a:active {
+  font-weight: bold;
+  text-decoration: none;
+}
+a:hover {
+  text-decoration: underline;
+}
+body {
+  margin: 0;
+  padding: 3em;
+  font-size: .9em;
+  line-height: 1.3em;
+}
+blockquote {
+  font-style: italic;
+}
+table {
+  margin: 0;
+  padding: .5em;
+  border-collapse: collapse;
+}
+code, pre {
+ font-size: 1em;
+}
+pre {
+ font-size: 0.8em;
+ padding: 1em;
+ background: #eee;
+}
+li {
+ padding-bottom: .3em;
+}
+h1, h2, h3, h4, h5, h6 {
+  margin-bottom: .25em;
+}
+h1 {
+  font-size: 1.3em;
+}
+h2 {
+  font-size: 1.2em;
+}
+h3 {
+  font-size: 1.1em;
+}
+h4, h5, h6 {
+  font-size: 1em;
+}
+p {
+  margin: 0 0 .5em 0;
+}
+br {
+  line-height: 0.6em;
+}
+
+/*
+** Page layout blocks / IDs
+*/
+#header {
+  margin-bottom: 2em;
+}
+#help {
+  font-size: 0.8em;
+}
+#sidebar-left, #sidebar-right {
+  vertical-align: top;
+  padding: 10px;
+}
+#main {
+  padding-left: 1em;
+  padding-right: 1em;
+  vertical-align: top;
+}
+#footer {
+ font-size: 0.8em;
+ padding-top: 2em;
+ text-align: center;
+}
+
+/*
+** Common declarations for child classes of node, comment, block, box etc
+*/
+.title {
+  margin: 0 0 .25em 0;
+}
+.content {
+  margin: 0 0 .5em 0;
+}
+.links {
+  font-size: 0.8em;
+  line-height: 1.25em;
+}
+.block {
+  width: 180px;
+}
+.messages {
+  padding: 0.3em;
+  margin: 0.5em 0em 0.5em 0em;
+}
+.status {
+  border: 1px solid #3a3;
+  color: #3a3;
+}
+.error, form-item input.error {
+  border: 1px solid red;
+  color: red;
+}
+
+/*
+** Common navigation links added on the admin/themes/settings page
+*/
+.navlinks {
+  padding: 0em 0.5em 1.5em 0em;
+}
+.primary a {
+  font-size: 1.0em;
+  padding: 0em 0.5em 0em 0em;
+}
+.secondary a {
+  font-size: 0.9em;
+  padding: 0em 0.5em 0em 0em;
+}
+
+/*
+** Logo Image Positioning
+*/
+#header img {
+	float: left;
+	padding: 0em 2em 0em 0em;
+}
+#header {
+	clear: both;
+}
+/*
+** Module specific styles
+*/
+.form-item textarea {
+  font-size: 1em;
+}
+#aggregator .feed {
+  border: 1px solid gray;
+  padding: 1em;
+}
diff --git a/themes/chameleon/logo.png b/themes/chameleon/logo.png
new file mode 100644
index 0000000000000000000000000000000000000000..320fa96ce60ef2727a8539d76886970c54deef08
--- /dev/null
+++ b/themes/chameleon/logo.png
@@ -0,0 +1,12 @@
+‰PNG
+
+���
IHDR���1���9���¨3C���tIMEÔ*9æ¥��ýPLTEßçùûýÁÝàW¤Ô3‘Ì„Å|ÂzÁ3‘ËX¥Õ‡¿àÁÝîýþþ·×ìY¥Õ
|Â�wÀ}ÂZ§Õ¸ØìýýþûûþÊæ%‰ÈxÀyÀ'‹ÉžÊæüýþ½Ûî*ŒÊyÁS£Ô£ÎèÖéõóøüñøûÖéô¦ÏéZ§Ö{Á+É¿Üîöùüh­Ùv¿D›ÐÜìöð÷û¡Ìçe¬Ø6”Í6“ÍFœÑœÊæëôúâï÷wÀj®Ùßìö.Êˆ¿á„½à
~Ã	|‚»ß†¾á0ËÐåò‚Ä„ÆÒæóÑåô€Ä€Ä„Æ-Ë„Å÷ùü2Ëj°Úl°ÚJžÒ|¹Þ!ˆÈLžÒùüý%ŠÉh®Ùƒ¼à}ºßNŸÒyÁ4’Ìøúým°Ù?˜ÏþþþŒÁâ°Ôëõúü·ØíªÑêÉâñu´Ü¸ÙíÙëõp²ÛÃßïw¿øûýïöûÂâv¶Ý*Ê¢ÍèxÀÆßðçòùÒçô=˜Ïo²ÛÑæówÀ¥Ïè^¨Ö:•ÎÏåó¨Ïè,Ê•Æå²Öì½Üî“ÅäÂÝï`©Öx·Ýèòød«ØÃ\¨ÖÂâ~ÐÄã€ÃÇàðÅàð0Ì´ÖìÊâñ‹Àá<—ÎôùüaªØ`ª×æñøÚëö[¦Ö3’Ì
}Ã}ÃãðøƒÅ8”Í…ÆzÁ|ÂxÀ~Ã…ÊLªåxÁ*ŒÉHœÑ/–ׁÎÿ…Ês³Û‡ËwµÜxÀyÈûP¬ç®ÓêV±êvÆùìôù*“Ô'‘ӐÂâyÁtÅù^¶î•Åä
+{Á= Þ€Íþ‹Îïõúk¯Ú{ÃuÆùdºñn°Ú1˜Ø6›Úåð÷|¸Ý|Êü†Ë€ºß÷úü
€ÆnÁö
+}Ä)ŒÉyÀ‹ÏÌãò–ÆäÌþ	}ÄšÈåt³Û+”ÕnÁõŒÏ{Êü5›Úw¿p±Û€Ç`¸ï„¼ß¬Òé3™Ù> Þg¼òJÑ+ÊB™Ïàíö
+{Âúüý@˜Ïêòø!‡Çúüþ~¹ÞÙéô¶×ìT£ÔÖèóàî÷`œ0���tRNS�@æØf���	pHYs��
+ð��
+ðB¬4˜���*tEXtCreation Time�do 6 sep 2001 21:54:58 +01009Xî��5IDATHÇc`Àdÿ1Dþ’ªã'‰~­øM¢ŽÁŸ¤i¸óLðûR4Z!((˜I´ò/S¿
+‚€^Ç7b”ê{ß/Ÿƒ÷YâWÎûúc *Èûøš·†7±)8Ô[šé	ž|û÷XÝöz¥ à›]GÞÃfMkœô_¼Üpú˜ v`õ
+]C‚ àã]Ož
+âÏž£jx (øðâ£U‚ø@'JšÐÜs÷ô=¼õî#4L»)xëâé“‚ÀÍÛ0
W¤¯žºv] ¸ÕqAPðàÅK‚D€ËИ[&xvÃ9b4²Ÿë8!xòÔiAâÀ†Ý‡=F¤Žåǁ:ö	î?pPXp¨c‰àž
{‰Ö1ƒ¡+Opç®5Dë°Ú͐.¸uÛvAâÁ†M‚›7¬'Adžu‚ë7l$AGƒ´àªÕkHб–a¥ iÀ›a‰:8òHÔ±‚a‰:–3¸“¨c)Cœ]cÚ[7#C‰¤o°þbw	Ã<s~Ct…,@Q¿°sPT¶Ö&PÇ0–Äf&A@ù,DÑ[3{Tt®T¨a„¡i™“§@e]&#§BŦ1ˆõ€½IH@¶T!ôOEô«›(ËÀÐf•$¡€òNý.T¡"°ºn`ŽÒ³Z“6p)×ÊèM ¦ª´JsBšŽh2[pYR4Y#7 P}ŠX%HY#¤*s2Ër•`)­2DVƒÂ< 	RÄå‚R£Y>Tª GÈ‹*,*ô)á…9”6Jː*AÁDŒa²70rRRÓÒ3d3¢&Y`
Ù¦ %9ð²Ý?�ÄWÐ
+f±BBAù3‘QÑ1àäTiº¡$&H‚öU@õC©>=½gWÔjÍՍ€wôªÓÆ*egï�WæèäK”Xjt]=°œ¾¡‘±¾‰©‰™±¹…¥>¤ì´ÖÁÚh“K+(*)«Èòʪª©kh‚E´´qµKÄÄ%àyUJÆ”–‘Å×øáã@ñ°°ˆ(¡#3+;;'7#†<�ñ§v™§5°£����IEND®B`‚
\ No newline at end of file
diff --git a/themes/chameleon/marvin/logo.png b/themes/chameleon/marvin/logo.png
new file mode 100644
index 0000000000000000000000000000000000000000..320fa96ce60ef2727a8539d76886970c54deef08
--- /dev/null
+++ b/themes/chameleon/marvin/logo.png
@@ -0,0 +1,12 @@
+‰PNG
+
+���
IHDR���1���9���¨3C���tIMEÔ*9æ¥��ýPLTEßçùûýÁÝàW¤Ô3‘Ì„Å|ÂzÁ3‘ËX¥Õ‡¿àÁÝîýþþ·×ìY¥Õ
|Â�wÀ}ÂZ§Õ¸ØìýýþûûþÊæ%‰ÈxÀyÀ'‹ÉžÊæüýþ½Ûî*ŒÊyÁS£Ô£ÎèÖéõóøüñøûÖéô¦ÏéZ§Ö{Á+É¿Üîöùüh­Ùv¿D›ÐÜìöð÷û¡Ìçe¬Ø6”Í6“ÍFœÑœÊæëôúâï÷wÀj®Ùßìö.Êˆ¿á„½à
~Ã	|‚»ß†¾á0ËÐåò‚Ä„ÆÒæóÑåô€Ä€Ä„Æ-Ë„Å÷ùü2Ëj°Úl°ÚJžÒ|¹Þ!ˆÈLžÒùüý%ŠÉh®Ùƒ¼à}ºßNŸÒyÁ4’Ìøúým°Ù?˜ÏþþþŒÁâ°Ôëõúü·ØíªÑêÉâñu´Ü¸ÙíÙëõp²ÛÃßïw¿øûýïöûÂâv¶Ý*Ê¢ÍèxÀÆßðçòùÒçô=˜Ïo²ÛÑæówÀ¥Ïè^¨Ö:•ÎÏåó¨Ïè,Ê•Æå²Öì½Üî“ÅäÂÝï`©Öx·Ýèòød«ØÃ\¨ÖÂâ~ÐÄã€ÃÇàðÅàð0Ì´ÖìÊâñ‹Àá<—ÎôùüaªØ`ª×æñøÚëö[¦Ö3’Ì
}Ã}ÃãðøƒÅ8”Í…ÆzÁ|ÂxÀ~Ã…ÊLªåxÁ*ŒÉHœÑ/–ׁÎÿ…Ês³Û‡ËwµÜxÀyÈûP¬ç®ÓêV±êvÆùìôù*“Ô'‘ӐÂâyÁtÅù^¶î•Åä
+{Á= Þ€Íþ‹Îïõúk¯Ú{ÃuÆùdºñn°Ú1˜Ø6›Úåð÷|¸Ý|Êü†Ë€ºß÷úü
€ÆnÁö
+}Ä)ŒÉyÀ‹ÏÌãò–ÆäÌþ	}ÄšÈåt³Û+”ÕnÁõŒÏ{Êü5›Úw¿p±Û€Ç`¸ï„¼ß¬Òé3™Ù> Þg¼òJÑ+ÊB™Ïàíö
+{Âúüý@˜Ïêòø!‡Çúüþ~¹ÞÙéô¶×ìT£ÔÖèóàî÷`œ0���tRNS�@æØf���	pHYs��
+ð��
+ðB¬4˜���*tEXtCreation Time�do 6 sep 2001 21:54:58 +01009Xî��5IDATHÇc`Àdÿ1Dþ’ªã'‰~­øM¢ŽÁŸ¤i¸óLðûR4Z!((˜I´ò/S¿
+‚€^Ç7b”ê{ß/Ÿƒ÷YâWÎûúc *Èûøš·†7±)8Ô[šé	ž|û÷XÝöz¥ à›]GÞÃfMkœô_¼Üpú˜ v`õ
+]C‚ àã]Ož
+âÏž£jx (øðâ£U‚ø@'JšÐÜs÷ô=¼õî#4L»)xëâé“‚ÀÍÛ0
W¤¯žºv] ¸ÕqAPðàÅK‚D€ËИ[&xvÃ9b4²Ÿë8!xòÔiAâÀ†Ý‡=F¤Žåǁ:ö	î?pPXp¨c‰àž
{‰Ö1ƒ¡+Opç®5Dë°Ú͐.¸uÛvAâÁ†M‚›7¬'Adžu‚ë7l$AGƒ´àªÕkHб–a¥ iÀ›a‰:8òHÔ±‚a‰:–3¸“¨c)Cœ]cÚ[7#C‰¤o°þbw	Ã<s~Ct…,@Q¿°sPT¶Ö&PÇ0–Äf&A@ù,DÑ[3{Tt®T¨a„¡i™“§@e]&#§BŦ1ˆõ€½IH@¶T!ôOEô«›(ËÀÐf•$¡€òNý.T¡"°ºn`ŽÒ³Z“6p)×ÊèM ¦ª´JsBšŽh2[pYR4Y#7 P}ŠX%HY#¤*s2Ër•`)­2DVƒÂ< 	RÄå‚R£Y>Tª GÈ‹*,*ô)á…9”6Jː*AÁDŒa²70rRRÓÒ3d3¢&Y`
Ù¦ %9ð²Ý?�ÄWÐ
+f±BBAù3‘QÑ1àäTiº¡$&H‚öU@õC©>=½gWÔjÍՍ€wôªÓÆ*egï�WæèäK”Xjt]=°œ¾¡‘±¾‰©‰™±¹…¥>¤ì´ÖÁÚh“K+(*)«Èòʪª©kh‚E´´qµKÄÄ%àyUJÆ”–‘Å×øáã@ñ°°ˆ(¡#3+;;'7#†<�ñ§v™§5°£����IEND®B`‚
\ No newline at end of file
diff --git a/themes/chameleon/marvin/screenshot.png b/themes/chameleon/marvin/screenshot.png
new file mode 100644
index 0000000000000000000000000000000000000000..b46b21cf5f3540f2646ce914102d3ab0b5594742
--- /dev/null
+++ b/themes/chameleon/marvin/screenshot.png
@@ -0,0 +1,10 @@
+‰PNG
+
+���
IHDR���–���[���¦©Œº���tIMEÔ/*å/½>���äPLTEÿÿÿÆÆÆ„„„µµµ¥¥¥­­­”””ççç{{{½½½œœœkkkŒŒŒÞÞÞÖÖÖïïïssscccÎÎÎBBB÷÷÷JJJÞÖÞƽÆçÞçÎÆÎÖÎÖ���”„”kZkµ­µscs½µ½œŒœsks„{„µ¥µ{k{­¥­cRc!!!„s„ïçœ¥”¥¥œ¥RBRZJZRRR÷ï÷ZZZ)))Œ{Œ”Œ”{s{­œ­½­½ÿ÷ÿkRksZsŒ„Œ111999ZBZÖÞÖcJckck÷ÿ÷J9Jï÷ïÞçÞR9RJ1J'=Ž���	pHYs����ÒÝ~ü���+tEXtCreation Time�do 19 aug 2004 22:45:10 +0100¬Ê…
��	hIDAThÞíšk[ÛH²€_][’ûbäÂ’|‘匣Ā
›9$™
»ç,»ÿÿÿì’	$°†@rfSÏc[w=¯»ëÒU2ü”ŸòèÒ©¦úx¼ùì^¡Î&OKdæÈd*Õ¿žÓ¼h9÷Ó5g#&Ì;GK;lªvËL™Ã½Ã'ÃÚŸåfe»€Íáêè=³´Z¼ž’¾W¶eC[.Ve§~]°,Š'ÚŽÔ†iÙÎ`bVL™5æ”éðlZ®8_@ksÚrÚ’V˧[Ä	2é\5*˜t5­=¬é˜¦`8ÊÕ¹k©7ò=¿ýâÊìg4øR„ÿ¼:øë·/£^@¼ú¬›w뢽Zϧ$›Ìéfåó÷¨eÙm™î:mŠ¶­ÜB¦­ÛÐŒms¶m›­y™jÝjfš)´«ÓV´£{¦ÛÕre¼²4Õ³¶Ü›lT×=–¡*Q%BÁaEÎH#§*ñ”ËK±Uü0ÎP•¿nh~D¬}~aÒ±h÷Ä-äÇÁzöOÕtåæÜ´‹Éò‡ÁzÅ>ÏNY.Í‹fc~¬ë9Cø)?å§üÿ–Ô{˜Ø›¹?Jƒ‡ÈoŠ¼þ¬›ã÷y,,ëþôXýq*Þ7ÃBøb%‘o·±8'ò%–¹¤¿3fzyj¢ë~�Ù‡ŠÉqŒ`¬
8÷áâ‡[ιŸ¥Pð.c/Æ3¾ðÞ1~ppÁ»ÝK'ôÆ)Ñ8Ø=áàØž¼SŽõ%ãwpÉú"çd|í䃱¿\W+Þå½ÌO¬¹Œdüp¬(3É%'ùøÒ¼Ã9.e|iŽÍq_‰_æ$i ý^Šsî„‹¾¿/9¸¡6(zô<rK¾CBò ¬u_Þš1îÍš“A$Œ9Yón7"ov“¿y£v×™s2îõÓwk=æâñ<Qò0ELNŠ'&IÅIŠÉñr§<œS©ˆµ"}å\ž’;£¬wMÙ·"âœ'îʽäÃëúÁǧÜ'7'?zÜJ¦Ç}‘|$Ÿ°ÔÃä&–Ê‚1U3y,¹kn;R<Ö]¢8ÀØO¢ŒùLJÃßS[sŸ>Âï`½½ëJ”3êï‹<XýŸ1Ƙ۰ 2öu©„}ÇŒ*õP¬²5oýÔ¬mò9–jO]ºxo»ÿ]©;°ú;!¸ÉÌ6«9ÌÚÃóÕ¨YÍC±v}¹0ã±Ñ';ë/°^ý’Îø›×>ûû]³•ù¸ÉlXw{ðþŒEÞªº}0V4fìÖ1ãà ÷Ö¬6ËâWïljî\Äߤ«>… •y°m¥ÄDžûkÔ*ÓÖÖó
+eŒ1æ?©ýýyíþ˜É‹ö.OT"|ôBc­1Öþõê,çF”ÿÖBnæ¶Ï›µÎ9w{ÞyÌãQ£üð6C±OŽ¥z�gÍF5sì&ŸÙ­p´+N_Ë|ˬþz/,ùd¬î–8ÖSwùM­Œ£sfL[™oÊÕ2Q8mÕfcÚE}4kÍé×c½#ÓžOØÏòÒ<IHœÒ¢r|ì(9	Ñž	òÈ'<¦7Ôº (jÊç­4Ò
+´CåQ7¤G-måê¯ÇJ‚0Œ%ŠSkбÑD½˜Ü‹M¢€ÎÃÀÙAF?†ž¯R³›¦;»jòqbâX 2WX&ÃÏèÅxöXètÚžFkб
+"DöqwÖ`<rQnÀä‘Â’(§Éúä /
+ОÁZ°F$
+Ùç6ð)°¬»ïøìÆYxG¿/¼
C÷…ÚÐÏÁ.ëªëŽ03^Ô¶Sg«²›UÝjSÜKqÞOìÛ(NÒ,ä&¾ß×QœÀ@{¾
+ƒ,ô
~G±(E^âÝT›ø!¸ù³²^m`¹2{lL¶e;«òY[ÞËfYF”:Й—±&ŽÑ1 Ñ™DAæõ=´Ëü˜TÂ,"?Sk�Gªy¶x=ôx.e‰MS1÷^Ä,Žtbç‡V§Iî[¿Ÿ‘E}Ðdºç¥¡îçÄA¬£Ä%ë(P~t‡Ú×õ£˜|ð_ä‰,mפŽœ�zÆyRDì‚Êɬ#‚}#×6ô æÊ®¡qåˆÂ4ç=¡adUê$²Ú÷l é“¤éNdÖúØÅ}ž>2Ä·Zek—i¢u¤é-bSžŸ×†éòp»(kÚᲵݞ·*&æ¾³•…±&Ê|´„iH¦Ñ¾Î 6QlCp!	:FÇD™‰¼ð–pºäܪm¹jÜdê¶Ô]cºa±éª®½'Vàùyx:"ˆB_<ü5Ilöobtœøé›€ JLO+ÿ¾m]«Í¾…m†_‘~¹ý‚üÎw«ª €ܦ¶ÛCdD5¼ê-–Fâ:Á-i˜7‚QŒFSÛü¬â«±^“z¹1ó†£ÕB/™Nå•šTK`Ag–e³°SÇÑj^×íŒÍòõK·_ÎÏo¨5»€[n˜4s×u“3.8›Òþ’¯†[Ótµ[”/Õüpê¾kŸÓvÙÚ.ÅmådÃþÄMY—",̆ÿéŠ)Í·7m3“ÉæhÁ¾l䳂LÀÍgnÙÊËne÷„ÍÜl7ª=­ª®šf{V.Úa;ýªÙj(ø‹ã/‚Œ<)†¸†Z*G¾Rä•*è^#9-Ñ)™ÑÍbß@ª€tH£TÙ@Þˆš¡¦ÎP‹Ôµ)\AAýý=±ðhFWå~ûç
+wýËF]ëo(s[øQvá1¡OÆýÜ¿ÚG‰J}¢ŒžKµ9ñHÃŒ ö¬öóÜ7âiKêôj¯~ÞÑÍܽ±üK¥ë,ÒÐÇ'ÖYàîö"MìC‚ÖÄ™&PY¡ï̉¯�¤V ª?:[­mE‘Õ(“�	Úw‰ó31IbéiHбK2mR»Î·«>k$�Œ¦´‹¦YÎW³t¸xQ×];çåÀrg"œH$1¹ÂI*Ö£2B"q pâ$%RŽP]+0=À™L]=kÊÙÜÌŸ•õLí=/-ûß/U_=p”•’|(Ã\TEÁˆ‚âûa}ëñ:AyX”ÃJ„,Jȯž$„XÁ@þ18ØëêÇÀJˆt¿ïÅq`ôNžYüt Uª³Ðõ<è«ÊÚ|ÄYÇ!.t½¨=n#É'£˜8F%)A†O–©¨‡V&¶AøÄYL¬§8öBèßu¸ïåGæ£����IEND®B`‚
\ No newline at end of file
diff --git a/themes/chameleon/marvin/chameleon.css b/themes/chameleon/marvin/style.css
similarity index 88%
rename from themes/chameleon/marvin/chameleon.css
rename to themes/chameleon/marvin/style.css
index e0c4a15a57a941a828df0f5fc3c01578473047ec..56587aef8e0024ef3fd60c6a98040c905055d4bf 100644
--- a/themes/chameleon/marvin/chameleon.css
+++ b/themes/chameleon/marvin/style.css
@@ -1,114 +1,118 @@
-/* $Id$ */
-
-/*
-** HTML elements
-*/
-body {
-  background: #fff url(druplicon-watermark.png) no-repeat top right;
-}
-a:link {
-  color: #656
-}
-a:visited {
-  color: #656
-}
-a:active {
-  color: #ccc
-}
-h2 {
-  background-color: #eaeaea;
-  border: solid 1px #777;
-  font-size: 1.1em;
-  margin: 0.5em 0em 0.5em 0em;
-  padding: 0.5em;
-}
-h2.title {
-  background-color: #fff;
-  border: solid 1px #888;
-  margin-top: 1em;
-}
-p {
-  margin: 0 1em 1em 0;
-  padding: 0;
-}
-table {
-  font-size: 1em;
-}
-
-/*
-** Page layout blocks / IDs
-*/
-#main {
-  width: 80%;
-}
-
-/*
-** Common declarations for child classes of node, comment, block, box etc
-*/
-.node .submitted {
-  color: #7c7c7c;
-  font-size: 0.9em;
-  float: left;
-  padding: 0.5em 0em 0.5em 1em;
-}
-.node .taxonomy {
-  color: #7c7c7c;
-  font-size: 0.9em;
-  float: right;
-}
-.node .content {
-  clear: both;
-  padding-left: 1em;
-}
-.node .links {
-  padding: 1em;
-}
-.comment {
-  border: solid 1px #777;
-  margin: 0.5em 0 0.5em 0;
-  padding: 0.5em;
-}
-.block {
-  margin-bottom: 10px;
-  font-size: 0.9em;
-}
-.block .content {
-  border: solid 1px #888;
-  border-top: none;
-  margin: 0;
-  padding: 5px;
-}
-.block h2.title {
-  margin: 0;
-}
-
-/*
-** Module specific styles
-*/
-.item-list ul li {
-  list-style-image: url(bullet.png);
-}
-.calendar .day-today {
-  background-color: #ccc;
-}
-.calendar .day-selected {
-  background-color: #bbb;
-}
-.calendar .header-month {
-  background-color: #ddd;
-}
-.calendar .header-week {
-  background-color: #ccc;
-}
-.calendar .day-blank {
-  background-color: #ddd;
-}
-.calendar .day-link a {
-  color: #000;
-}
-.calendar .row-week {
-  color: #aaa;
-}
-.path, .path a, .path a:visited {
-  color: #888;
+/* $Id$ */
+
+/*
+** HTML elements
+*/
+body {
+  background: #fff url(druplicon-watermark.png) no-repeat top right;
+  font-family: arial, helvetica, sans-serif;
+}
+a:link {
+  color: #656
+}
+a:visited {
+  color: #656
+}
+a:active {
+  color: #ccc
+}
+h2 {
+  background-color: #eaeaea;
+  border: solid 1px #777;
+  font-size: 1.1em;
+  margin: 0.5em 0em 0.5em 0em;
+  padding: 0.5em;
+}
+h2.title {
+  background-color: #fff;
+  border: solid 1px #888;
+  margin-top: 1em;
+}
+p {
+  margin: 0 1em 1em 0;
+  padding: 0;
+}
+table {
+  font-size: 1em;
+}
+
+/*
+** Page layout blocks / IDs
+*/
+#main {
+  width: 80%;
+}
+#header .title {
+  padding-top: .75em;
+}
+
+/*
+** Common declarations for child classes of node, comment, block, box etc
+*/
+.node .submitted {
+  color: #7c7c7c;
+  font-size: 0.9em;
+  float: left;
+  padding: 0.5em 0em 0.5em 1em;
+}
+.node .taxonomy {
+  color: #7c7c7c;
+  font-size: 0.9em;
+  float: right;
+}
+.node .content {
+  clear: both;
+  padding-left: 1em;
+}
+.node .links {
+  padding: 1em;
+}
+.comment {
+  border: solid 1px #777;
+  margin: 0.5em 0 0.5em 0;
+  padding: 0.5em;
+}
+.block {
+  margin-bottom: 10px;
+  font-size: 0.9em;
+}
+.block .content {
+  border: solid 1px #888;
+  border-top: none;
+  margin: 0;
+  padding: 5px;
+}
+.block h2.title {
+  margin: 0;
+}
+
+/*
+** Module specific styles
+*/
+.item-list ul li {
+  list-style-image: url(bullet.png);
+}
+.calendar .day-today {
+  background-color: #ccc;
+}
+.calendar .day-selected {
+  background-color: #bbb;
+}
+.calendar .header-month {
+  background-color: #ddd;
+}
+.calendar .header-week {
+  background-color: #ccc;
+}
+.calendar .day-blank {
+  background-color: #ddd;
+}
+.calendar .day-link a {
+  color: #000;
+}
+.calendar .row-week {
+  color: #aaa;
+}
+.path, .path a, .path a:visited {
+  color: #888;
 }
\ No newline at end of file
diff --git a/themes/chameleon/pure/background.png b/themes/chameleon/pure/background.png
deleted file mode 100644
index da99813fd1ebf9797b31289f0e7b8eeca68dfbf1..0000000000000000000000000000000000000000
--- a/themes/chameleon/pure/background.png
+++ /dev/null
@@ -1,3 +0,0 @@
-‰PNG
-
-���
IHDR������t���8VJ���sBIT,0þ ���šIDATxœíÑ]€ `ÐÝÿœ¾ú¢ gÐ&4˶÷æK»8=á÷Å„eþŸU+/ˆœi!™×Ù¢¼”7òI[’yyòîrGù@äBëɼÎådPΈ|Ñ:+•yk[”OƒrAä›ÖY©Ì[›'_.“«ËßäÛåŽrd‘0On@86ÖÚZedm°EøTèr¿0òæð_›š/›ju�����IEND®B`‚
\ No newline at end of file
diff --git a/themes/chameleon/screenshot.png b/themes/chameleon/screenshot.png
new file mode 100644
index 0000000000000000000000000000000000000000..7c8bdee4ffd93f1205ccde73730b79baffbf3e24
--- /dev/null
+++ b/themes/chameleon/screenshot.png
@@ -0,0 +1,13 @@
+‰PNG
+
+���
IHDR���–���Z���mõ_���tIMEÔ/Í- ��:PLTEÿÿÿçÞÞ½¥ŒÞÞÞïïïÖÖÖÎÎΔ””çç猌Œccc¥¥¥„„„½½½sssœœœµµµJJJ{{{­­­ZZZBBBÆÆÆ÷÷÷ν­­”s­”{½­”Ƶ¥­ŒsœsR”kJRRRÖƵ”sRµœ„ŒkB„Z1ÞÖÆœ{Z”kBçÞÖŒcBν¥çÖÎ÷ïïÆ­œÎ½µÞÖÎsB÷÷ïïççïÖÎïÞÖ÷çç÷ïçÿÿ÷ÿ÷÷÷çÞ”!�½{ZÞ½­Îœ„½sRÖ­”çƵœ1�¥B­R)¥J!Œ�µkBïÞÎÆŒkµkJÖ¥ŒµcBÖµœÎ”s¥B¥JÞ½¥µc9Þ½µÆ„cΔ{Îœ{­Z1¥„ck9­ŒkÆ­”„Z9{Jïïç½¥”ε¥¥Œkœ9Ö¥”Œ�­R!œB½sJkkk999���ÖνsJ„c9çƽÞƵïçÞÞÎÆƵœŒc9çÎÆ111Æ„kÞµ¥Æ”s¥R!ïÖÆçÖÆçν!!!µsJ­Z9)))½{RÆŒsÖ­œÿ÷ï­Z)½„cçÞÎR�œ{R„R)œ„c”sJµ”{s9ÎƽÖÎÎƽµÞÞçÞÖÖÞçç{R)”{Zçïï{J!¥ŒsŒkJk1�µ­”k9ÎÆÆsJ!ï÷ÿœ„kR�c1�ÎƵ¥„kÞνïï÷çï÷÷ÿÿÖÎÆk9�sBï÷÷ççïççÞc)�Z!�„c1{R!µ¥ŒÖƽµœ{Ö½µkBZ)�J�OÍfº���	pHYs����ÒÝ~ü���+tEXtCreation Time�do 19 aug 2004 22:43:14 +0100U›ÑY��
+œIDAThÞí™û[×yÇ?a.眝33gg–™ ±Ë²¬EHBY dI‘äK\;è‚%#°ÛfYpºc5‰q¨ÕD²Çi¨i´i+i£¶vê:½üoýɶnrxíÃ÷§³gæ™ù<ç¼ï;ß÷,ljS›ÚXzäJ郛ãÙÛ®5Œ/\]_¢–¥úôh}Ëÿ´²¥¼Ìû¥ÅkKí•
+/t1Z§æübC×U–óÅütúa}ôBÃu·ŸY‚Ê®ñâÑ[Ì·1JÃÕÎ.Ê-4—š¾2žÿïQš¶æ×
k©¹óLóGW¶-w2Qù˜«ü6?ÞÎhç¹éí³”~
ùéç;›ó½Å©¦†ÞõÛÅG!¿3ÝÉoåëä)öuP¤¸«ÞÁï' Þ?Õ9°»¿ÈJàOíº}¦´Y
îT¾ÿ“;ævï¼9ªwžþs}‘vÍÀõ±–Þ]ä{ÈCžqvv@iË@ù"×È—~ß3Ãl}l=Cëz¹gñÜö¦iêo_+·×—ÒùÖ¶O*³ÅR½µsôÊŽm|õìÇ
Ÿ,mù¸³½¸~Xíç©LwL¼�¥Ö­ÿÁbKG©ÔÞÑÞT*•+Wy³Èx©·ÔÑ[ÙÒÒ°¸ŽËÕ�ôÃncûØÇ.HÙÇ4À>ØìÞ0ÉÐ9°Y6µ©M})¥˲70VÚ²Á|Ù
+ÖØ¿ó>½Åk—Þæ|yã¬ÖïʳoÑ›/.7u¾9za£`í.óQÿhÓŽG{':+mkøøŒÀÙx!gc]““Aª]ã-07§7F&ªî4ãÖj²ÔæU7µ
•^ž£Fw€7I´@mƒ`ýÿ,§›X›X«ì²KLl,'Š!ÿÃÅ•YdùüìÎJg©wõXsþ—²€'£»—I úé/myîÝï9
+òç§w”z;wµµ·¾µ³RyyÕXr9Iée €(îyr®¢j®òȁ6�Ê£FÕ±âDÝÒ«y D‚!nÇ•™RGÿ›ü¨³fv,¯«_e9w2ÎT粞֐5™¹BäNf"Á¤È1éL:@6nL»-Q39¡'­ËNõÃj²F6ôîöžÏÎ>¶×W•¥*ç™O4…9GEŽ9{ÞQUwÎ1ó0çkmè¦o`’HvQ3¡¬ÎÑíF5.Ë æÖÎo]®)dÍqÃ4àC‡y
ÚJ?´”Sµ»
Ðíz	VÍb.`¢ÆY¢ØXÊîž´D¨ ‘F‚r©@Xÿ÷ë–Pü·–±úÍõ«4ÃØ8;¸°»k¼^ŸÙ>3z,iÝC+坲î×ÐÕ˜ÙÂU~»\ÿÕb¹Ôz†ë4Ï,оûúÒ#S­³÷Dz¾h×ÜÏaþË¿þ콕‘¼V¤­SW©üªÔpniªTg±¡ck±·Ò6õÁµÙŽòÒƒ`îÄrV8~ýë7ÿtµéŸøëUa­El­`™X¸ö¼)P£ñv¬÷–Û~ÙU.ÿCåß•ë‹E¡Àdf~Ò×Ý‘¸
Kþüý_üÝËü}Û;­¿´Ö«Ê|hjÔìÛ°~ö“¥¿~oùo¦ÿöÝ÷åzc¥).>87{¼Ï…¼|ç'ÒyçÝw~úî_ý¡XSˆu÷L´l)¥”¶-í­ü\µ±iåÑrÇ™úÖRGeªR~䶯ëž%ëSÉ»ëUîNcs…3½­Œµ3»ó­3owužk{Èîô†±¡e+éøYšÉ—šwŸÝ�¦¹øeB>…OsÎA¦Hn;ÒH£È¶­»}ðnLi­Y&Êy.£½DÚòql1ÚhÂÐÇ8:cc/$–v¼0çàêÀ³u¢R8Úv][{D9©]PYgÍ°,ê8
¥ðcK€B„‚å
+À­j<ÇÖ„Aœ‰U¹"
IV¡ð2˜4×ËI
+¾ñ•"c	oL#(íí
+» ý$Å÷%UʪHd„@‰XæÂÐv,ß„™ÄÏyvÁ“9’¤pV
+ì½È0ýæé½O]âR—Øóc÷ºoȧ)‰LÁÇ&Å•¦Ò"	¾ÁO1+a˜’¦Ä¤Ä)>ŽE"‰SØŸ÷:a.€Á“ïÿàûœz}äè«ÇúxñÄ«ß:päÒÈÞ£O>¬L´°àâ{Nö|òµ“‡ü|÷gŸ;qhðèFjö¿ÿ‡˜fß¿¥X7ot¥\ùÊÏ2Î	ôZ¯òJÈE†0ÔžØTµ+Ã0VÂR±Hãã1©ŽŒ¯8dµð´E)„ âÈÊi;Òv`Ö.0&h”@x¡*4a HoŒÇXåã�ZxK%*”@…˜F‘¸¬aÐV”Uè8°	ÐJ!´Ðh#2qdWMì+ˆ86	‰¯biSU¸xA$U”h⪰3þüeßš…¼Xý­Àà‘Áo¾rè/†‡Fzxöôk'Gž|æXßðÁ¡gzž{îK'N½±Þ™X308üíÓC}|½ï©ãŒ>pü‰¯Ÿþ/

yõä÷^;=ôÄ¡º_˜®nîø+§ö
ñêÀðþ¡.þyßÉSƒß~šý/
<}ú;Ã߬z­ï‹QŽ%@ÛV•$±ÝÈwQ	…ç¡ÒùÄ“‘
¸Uç`œ*ÆIK3Ÿê„txßõä•žƒû„¼U`dªQ<áÆÒ™ƒ\êãÒ3&PÙÀD 2hs*ŽQF§¨µsq聾¥q›8Œ'ZÆ&¶ÐaŒ äÐ!Ò¥P‚T£mªDk‰¢ÄáÆ&ºHÛ±‘(Nšz^‘m¢_ã€ãàø>U©žÔ.Up¿à/± ÿ°ìê«’UÌÜb`[êLLÌtÎÌ\˜ê™àBË,-êAR-¦¦»ò]ͽÍmíçËå­ÏO•^î:³e5XÃ�}}�ßø¬’üÙÍß¹ŸÛ/ûÞ'6gFž/Ÿí=[>wö…Þ±¶ó•RËøÄ*°z^z‰‘ã{†Áa†NðÇ#ôü	/üÓLJùæb9Æv‚HƒQ萪L’DŽ"™´itâÛÖÚ™æþƒ<s?|ö¹oÀ‘¾‘“û÷
åȁ¾S}§N÷ íØÇÁóü4Ô BB„NßU(¶Y»³ÓžÇ|lpøÐãýæÈQ¾vìø‰'ž|jàéGøúãؘÄH-b£Gø¾ö,K)K¥D(í%d¨’P	ã­ÝÑÈž>ØÛ¿o` öÃ�{{ ~ØßÏ~8H‹4l‡D“¦¶6©´ð‰±-m[¬]C¶fºk¡ÙµûacÝé½mx´©¸½gG‘¯îlèÙÖû@X$7ºô»™^/°Âþ-ûv‹E�ŶR{¹c•Gʝ]•óò¶ÎÆV`	ŒeÄÈ\V'R8ÚºQ!^!²…0ÊÍh©´ÌF©+ÚÎú*,ø·Øò[šš[ššØÚÐа­õÁ¼¼‡çiÐÄa˜&qŒãx~œ
+”„Â/
¤¡x‰@BÇ7˜‚·r âùFÝ£×ÿJ׈-ÇRe<GK¥}On(pÜÐ8*‹ð-P¶
+…Ú~C„J…P¡mŒ+ržš�•Ká‹äÜÞ™øÄ;:Ì����IEND®B`‚
\ No newline at end of file
diff --git a/themes/chameleon/pure/chameleon.css b/themes/chameleon/style.css
similarity index 88%
rename from themes/chameleon/pure/chameleon.css
rename to themes/chameleon/style.css
index c399944ab358eceebfa36e857acad0c2f5bec3f0..9f65ccc82c21a49c3d779af94734155b8d2ad6f3 100644
--- a/themes/chameleon/pure/chameleon.css
+++ b/themes/chameleon/style.css
@@ -1,90 +1,95 @@
-/* $Id$ */
-
-/*
-** HTML elements
-*/
-a, a:link, a:active {
-  color: #930;
-}
-a:visited {
-  color: #630;
-}
-body {
-  padding: 5em 0 0 3em;
-  background-image: url(background.png);
-  background-repeat: repeat-x;
-  font-family: trebuchet ms, tahoma, verdana, arial, helvetica;
-  border-top: 10px solid gray;
-}
-ul {
-  list-style-type: disc;
-}
-
-/*
-** Page layout blocks / IDs
-*/
-#main {
-  width: 500px;
-}
-#sidebar-left {
-  border-right: 1px solid gray;
-}
-#sidebar-right {
-  border-left: 1px solid gray;
-}
-
-/*
-** Common declarations for child classes of node, comment, block, box etc
-*/
-#header .title {
-  font-size: 2em;
-  font-weight: bold;
-}
-#header .title a,
-#header .title a:link,
-#header .title a:visited,
-#header .title a:active {
-  text-decoration: none;
-  color: #aaa;
-}
-#header .title a:hover {
-  color: #930;
-}
-.node .title {
-  font-size: 1.2em;
-}
-.node .title a,
-.node .title a:link,
-.node .title a:active,
-.node .title a:visited {
-  text-decoration: none;
-  font-weight: normal;
-}
-.node .title a:hover {
-  text-decoration: underline;
-}
-.links {
-  margin: 1em 0 3em 0;
-  text-align: right;
- }
-.comment .content, .block .content, .menu {
-  font-size: 0.9em;
-}
-.block {
-  padding-bottom: 1em;
-}
-.block .title {
-  font-size: 1em;
-}
-
-/*
-** Module specific styles
-*/
-.item-list ul li {
-  list-style: square;
-}
-#aggregator .source {
-  color: gray;
-  font-style: italic;
-  font-size: 0.9em;
-}
+/* $Id$ */
+
+/*
+** HTML elements
+*/
+a, a:link, a:active {
+  color: #930;
+}
+a:visited {
+  color: #630;
+}
+body {
+  padding: 5em 0 0 3em;
+  background-image: url(background.png);
+  background-repeat: repeat-x;
+  font-family: trebuchet ms, tahoma, verdana, arial, helvetica;
+  border-top: 10px solid gray;
+}
+ul {
+  list-style-type: disc;
+}
+
+/*
+** Page layout blocks / IDs
+*/
+#main {
+  width: 500px;
+}
+#sidebar-left {
+  border-right: 1px solid gray;
+}
+#sidebar-right {
+  border-left: 1px solid gray;
+}
+
+/*
+** Common declarations for child classes of node, comment, block, box etc
+*/
+#header .title {
+  font-size: 2em;
+  font-weight: bold;
+  padding-top: .75em;
+}
+#header .title a,
+#header .title a:link,
+#header .title a:visited,
+#header .title a:active {
+  text-decoration: none;
+  color: #aaa;
+}
+#header .title a:hover {
+  color: #930;
+}
+#header .site-slogan {
+  margin-top: -0.1em;
+  font-size: 0.8em;
+}
+.node .title {
+  font-size: 1.2em;
+}
+.node .title a,
+.node .title a:link,
+.node .title a:active,
+.node .title a:visited {
+  text-decoration: none;
+  font-weight: normal;
+}
+.node .title a:hover {
+  text-decoration: underline;
+}
+.links {
+  margin: 1em 0 3em 0;
+  text-align: right;
+ }
+.comment .content, .block .content, .menu {
+  font-size: 0.9em;
+}
+.block {
+  padding-bottom: 1em;
+}
+.block .title {
+  font-size: 1em;
+}
+
+/*
+** Module specific styles
+*/
+.item-list ul li {
+  list-style: square;
+}
+#aggregator .source {
+  color: gray;
+  font-style: italic;
+  font-size: 0.9em;
+}
diff --git a/themes/xtemplate/xtemplate.theme b/themes/engines/xtemplate/xtemplate.engine
similarity index 58%
rename from themes/xtemplate/xtemplate.theme
rename to themes/engines/xtemplate/xtemplate.engine
index 1ef3a591ceacdf98f432aa0683c5096cbeb008d1..fa91aa9545d9d322b7cb3e3f68bacb9af3ba5308 100644
--- a/themes/xtemplate/xtemplate.theme
+++ b/themes/engines/xtemplate/xtemplate.engine
@@ -1,245 +1,233 @@
-<?php
-// $Id$
-
-if (!class_exists("XTemplate")) {
-  include_once("themes/xtemplate/xtemplate.inc");
-}
-$template_directory = variable_get('xtemplate_template', 'default');
-$GLOBALS["xtemplate"]->template = new XTemplate('xtemplate.xtmpl', 'themes/xtemplate/' . $template_directory);
-$GLOBALS["xtemplate"]->template->SetNullBlock(" ");  // "" doesnt work!
-
-function xtemplate_settings() {
-  /*
-  ** Compile a list of the available style sheets:
-  */
-
-  $fd = opendir('themes/xtemplate');
-  while ($file = readdir($fd)) {
-    if (is_dir("themes/xtemplate/$file") && !in_array($file, array('.', '..', 'CVS'))) {
-      $files[$file] = $file;
-    }
-  }
-  closedir($fd);
-
-  $template_directory = variable_get('xtemplate_template', 'default');
-  $group = form_select(t('Template'), 'xtemplate_template', variable_get('xtemplate_template', 'default'), $files, t('Selecting a different template will change the look and feel of your site.  To create a new template, create a new directory under <code>themes/xtemplate</code> and copy the contents of an existing template (e.g. <code>themes/xtemplate/default</code>) into it.  The new template will automatically become available in the selection menu and will be identified by its directory name.'));
-  $output = form_group(t('Template selection'), $group);
-
-  $group = form_textarea(t('Logo'), 'xtemplate_logo', variable_get('xtemplate_logo', "<img src=\"themes/xtemplate/$template_directory/logo.png\" alt=\"Logo\" />"), 70, 4, t('The HTML code for displaying the logo.'));
-  $group .= form_textarea(t('Primary links'), 'xtemplate_primary_links', variable_get('xtemplate_primary_links', l('edit primary links', 'admin/themes/xtemplate')), 70, 8, t('The HTML code for the primary links.'));
-  $group .= form_textarea(t('Secondary links'), 'xtemplate_secondary_links', variable_get('xtemplate_secondary_links', l('edit secondary links', 'admin/themes/xtemplate')), 70, 8, t('The HTML code for the secondary links.'));
-  $group .= form_textarea(t('Message on front page'), 'xtemplate_mission', variable_get('xtemplate_mission', 'edit mission'), 70, 6, t('This text will be displayed on the front page.  It can be used to display a mission statement, announcement or site description.'));
-  $group .= form_radios(t('Search box'), 'xtemplate_search_box', variable_get('xtemplate_search_box', 0), array(t('Disabled'), t('Enabled')), t('Show a search box in the upper right corner.'));
-  $output .= form_group(t('Header settings'), $group);
-
-  $group = form_checkbox(t('Display pictures with posts'), 'xtemplate_picture_node', 1, variable_get('xtemplate_picture_node', 0), t('Display individualized pictures identifying users with posts they start.'));
-  $group .= form_checkbox(t('Display pictures with comments'), 'xtemplate_picture_comment', 1, variable_get('xtemplate_picture_comment', 0), t('Display individualized pictures identifying users with their comments.'));
-  $output .= form_group(t('Avatar settings'), $group);
-
-  return $output;
-}
-
-function xtemplate_help($section) {
-
-  $output = '';
-
-  switch ($section) {
-    case 'admin/themes#description':
-      $output = t('A template driven theme');
-      break;
-  }
-
-  return $output;
-}
-
-function xtemplate_node($node, $main = 0, $page = 0) {
-  global $xtemplate;
-
-  $xtemplate->template->assign(array(
-        "submitted" => t("Submitted by %a on %b.",
-                      array("%a" => format_name($node),
-                            "%b" => format_date($node->created))),
-        "link"      => url("node/$node->nid"),
-        "title"     => $node->title,
-        "author"    => format_name($node),
-        "date"      => format_date($node->created),
-        "sticky"    => ($main && $node->sticky) ? 'sticky' : '',
-        "content"   => ($main && $node->teaser) ? $node->teaser : $node->body));
-
-  if ($page == 0) {
-    $xtemplate->template->parse("node.title");
-  }
-
-  if ($picture = theme('user_picture', $node)) {
-    $xtemplate->template->assign("picture", $picture);
-    $xtemplate->template->parse("node.picture");
-  }
-
-  if (module_exist("taxonomy") && ($taxonomy = taxonomy_link("taxonomy terms", $node))) {
-    $xtemplate->template->assign("taxonomy", theme_links($taxonomy));
-    $xtemplate->template->parse("node.taxonomy");
-  }
-
-  if ($links = link_node($node, $main)) {
-    $xtemplate->template->assign("links", theme_links($links));
-    $xtemplate->template->parse("node.links");
-  }
-
-  $xtemplate->template->parse("node");
-  $output = $xtemplate->template->text("node");
-  $xtemplate->template->reset("node");
-  return $output;
-}
-
-function xtemplate_comment($comment, $links = 0) {
-  global $xtemplate;
-
-  $xtemplate->template->assign(array (
-    "new"       => t("new"),
-    "submitted" => t("Submitted by %a on %b.",
-                      array("%a" => format_name($comment),
-                            "%b" => format_date($comment->timestamp))),
-    "title"     => l($comment->subject, $_GET['q'], NULL, NULL, "comment-$comment->cid"),
-    "author"    => format_name($comment),
-    "date"      => format_date($comment->timestamp),
-    "content"   => $comment->comment
-  ));
-
-  if ($comment->new) {
-    $xtemplate->template->parse("comment.new");
-  }
-
-  if ($picture = theme('user_picture', $comment)) {
-    $xtemplate->template->assign("picture", $picture);
-    $xtemplate->template->parse("comment.picture");
-  }
-
-  if ($links) {
-    $xtemplate->template->assign("links", $links);
-    $xtemplate->template->parse("comment.links");
-  }
-
-  $xtemplate->template->parse("comment");
-  $output = $xtemplate->template->text("comment");
-  $xtemplate->template->reset("comment");
-
-  return $output;
-}
-
-function xtemplate_page($content, $title = NULL, $breadcrumb = NULL) {
-  if (isset($title)) {
-    drupal_set_title($title);
-  }
-  if (isset($breadcrumb)) {
-    drupal_set_breadcrumb($breadcrumb);
-  }
-
-  global $xtemplate;
-  $template_directory = variable_get('xtemplate_template', 'default');
-
-  $xtemplate->template->assign(array(
-    "head_title" => (drupal_get_title() ? drupal_get_title() ." | ". variable_get("site_name", "drupal") : variable_get("site_name", "drupal") ." | ". variable_get("site_slogan", "")),
-    "site" => variable_get("site_name", "drupal"),
-    "head" => drupal_get_html_head(),
-    "directory" => "themes/xtemplate/$template_directory",
-    "onload_attributes" => theme_onload_attribute(),
-    "logo" => variable_get('xtemplate_logo', "<img src=\"themes/xtemplate/$template_directory/logo.png\" alt=\"Logo\" />"),
-    "primary_links" => variable_get("xtemplate_primary_links", l("edit primary links", "admin/themes/xtemplate")),
-    "secondary_links" => variable_get("xtemplate_secondary_links", l("edit secondary links", "admin/themes/xtemplate"))
-   ));
-
-  if ($tabs = theme('menu_local_tasks')) {
-    $xtemplate->template->assign("tabs", $tabs);
-    $xtemplate->template->parse("header.title.tabs");
-  }
-
-  if ($title = drupal_get_title()) {
-    $xtemplate->template->assign("title", $title);
-    $xtemplate->template->assign("breadcrumb", theme("breadcrumb", drupal_get_breadcrumb()));
-    $xtemplate->template->parse("header.title");
-  }
-
-  if ($help = menu_get_active_help()) {
-    $xtemplate->template->assign("help", $help);
-    $xtemplate->template->parse("header.help");
-  }
-
-  if ($message = theme_status_messages()) {
-    $xtemplate->template->assign("message", $message);
-    $xtemplate->template->parse("header.message");
-  }
-
-  if (variable_get("xtemplate_search_box", 1)) {
-    $xtemplate->template->assign(array(
-          //"search" => search_form(),
-          "search_url" => url("search"),
-          "search_button_text" => t("Search"),
-          "search_description" => t("Enter the terms you wish to search for.")
-          ));
-    $xtemplate->template->parse("header.search_box");
-  }
-
-  // only parse the mission block if we are on the frontpage ...
-  if ($_GET["q"] == variable_get("site_frontpage", "node") && ($mission = variable_get("xtemplate_mission", "edit mission"))) {
-    $xtemplate->template->assign("mission", $mission);
-    $xtemplate->template->parse("header.mission");
-  }
-
-  if ($blocks = theme("blocks", "left")) {
-    $xtemplate->template->assign("blocks", $blocks);
-    $xtemplate->template->parse("header.blocks");
-  }
-
-  $xtemplate->template->parse("header");
-  $output = $xtemplate->template->text("header");
-
-  $output .= "\n<!-- begin content -->\n";
-  $output .= $content;
-  $output .= "\n<!-- end content -->\n";
-
-  if ($blocks = theme("blocks", "right")) {
-    $xtemplate->template->assign("blocks", $blocks);
-    $xtemplate->template->parse("footer.blocks");
-  }
-
-  // only parse the footer block if site_footer is set
-  if ($footer_message = variable_get("site_footer", FALSE)) {
-    $xtemplate->template->assign("footer_message", $footer_message);
-    $xtemplate->template->parse("footer.message");
-  }
-
-  $xtemplate->template->assign("footer", theme_closure());
-  $xtemplate->template->parse("footer");
-
-  $output .= $xtemplate->template->text("footer");
-
-  return $output;
-}
-
-function xtemplate_block(&$block) {
-  global $xtemplate;
-
-  // create template variables for all block variables (module, delta, region, subject, content, ...)
-  foreach ($block as $key => $value) {
-    $xtemplate->template->assign($key == "subject" ? "title" : $key, $value); // TODO: standardize on 'title' (ie. rename all $block["subject"] to "title")
-  }
-  $xtemplate->template->parse("block");
-  $output = $xtemplate->template->text("block");
-  $xtemplate->template->reset("block");
-  return $output;
-}
-
-function xtemplate_box($title, $content, $region = "main") {
-  global $xtemplate;
-
-  $xtemplate->template->assign(array(
-        "title" => $title,
-        "content" => $content));
-
-  $xtemplate->template->parse("box");
-  $output = $xtemplate->template->text("box");
-  $xtemplate->template->reset("box");
-  return $output;
-}
-
-?>
+<?php
+// $Id$
+
+// Initialize the xtemplate engine.
+function xtemplate_init($template) {
+  // We cannot use the theme() or path_to_theme() functions here
+  if (!class_exists('XTemplate')) {
+    include_once('themes/engines/xtemplate/xtemplate.inc');
+  }
+  $GLOBALS['xtemplate']->template = new XTemplate(basename($template->filename), dirname($template->filename));
+  $GLOBALS['xtemplate']->template->SetNullBlock(' ');  // '' doesnt work!
+}
+
+function xtemplate_templates($directory) {
+  return file_scan_directory($directory, 'xtemplate.xtmpl$');
+}
+
+function xtemplate_features() {
+  return array(
+       'logo',
+       'toggle_name',
+       'toggle_search',
+       'toggle_slogan',
+       'toggle_mission',
+       'toggle_primary_links',
+       'toggle_secondary_links',
+       'toggle_node_user_picture',
+       'toggle_comment_user_picture');
+}
+
+function xtemplate_node($node, $main = 0, $page = 0) {
+  global $xtemplate;
+
+  $xtemplate->template->assign(array(
+        "submitted" => drupal_get_theme_setting("toggle_node_info_$node->type") ?
+                         t("Submitted by %a on %b.",
+                           array("%a" => format_name($node),
+                            "%b" => format_date($node->created))) : '',
+        "link"      => url("node/$node->nid"),
+        "title"     => $node->title,
+        "author"    => format_name($node),
+        "date"      => format_date($node->created),
+        "sticky"    => ($main && $node->sticky) ? 'sticky' : '',
+        "content"   => ($main && $node->teaser) ? $node->teaser : $node->body));
+
+  if ($page == 0) {
+    $xtemplate->template->parse("node.title");
+  }
+
+  if (drupal_get_theme_setting('toggle_node_user_picture') && $picture = theme('user_picture', $node)) {
+    $xtemplate->template->assign("picture", $picture);
+    $xtemplate->template->parse("node.picture");
+  }
+
+  if (module_exist("taxonomy") && ($taxonomy = taxonomy_link("taxonomy terms", $node))) {
+    $xtemplate->template->assign("taxonomy", theme_links($taxonomy));
+    $xtemplate->template->parse("node.taxonomy");
+  }
+
+  if ($links = link_node($node, $main)) {
+    $xtemplate->template->assign("links", theme_links($links));
+    $xtemplate->template->parse("node.links");
+  }
+
+  $xtemplate->template->parse("node");
+  $output = $xtemplate->template->text("node");
+  $xtemplate->template->reset("node");
+  return $output;
+}
+
+function xtemplate_comment($comment, $links = 0) {
+  global $xtemplate;
+
+  $xtemplate->template->assign(array (
+    "new"       => t("new"),
+    "submitted" => t("Submitted by %a on %b.",
+                      array("%a" => format_name($comment),
+                            "%b" => format_date($comment->timestamp))),
+    "title"     => l($comment->subject, $_GET['q'], NULL, NULL, "comment-$comment->cid"),
+    "author"    => format_name($comment),
+    "date"      => format_date($comment->timestamp),
+    "content"   => $comment->comment
+  ));
+
+  if ($comment->new) {
+    $xtemplate->template->parse("comment.new");
+  }
+
+  if (drupal_get_theme_setting('toggle_comment_user_picture') && $picture = theme('user_picture', $comment)) {
+    $xtemplate->template->assign("picture", $picture);
+    $xtemplate->template->parse("comment.picture");
+  }
+
+  if ($links) {
+    $xtemplate->template->assign("links", $links);
+    $xtemplate->template->parse("comment.links");
+  }
+
+  $xtemplate->template->parse("comment");
+  $output = $xtemplate->template->text("comment");
+  $xtemplate->template->reset("comment");
+
+  return $output;
+}
+
+function xtemplate_page($content, $title = NULL, $breadcrumb = NULL) {
+  if (isset($title)) {
+    drupal_set_title($title);
+  }
+  if (isset($breadcrumb)) {
+    drupal_set_breadcrumb($breadcrumb);
+  }
+
+  global $xtemplate;
+
+  $xtemplate->template->assign(array(
+    "head_title" => (drupal_get_title() ? drupal_get_title() ." | ". variable_get("site_name", "drupal") : variable_get("site_name", "drupal") ." | ". variable_get("site_slogan", "")),
+    "head" => drupal_get_html_head(),
+    "onload_attributes" => theme_onload_attribute(),
+    "primary_links" => drupal_get_theme_setting('primary_links'),
+    "secondary_links" => drupal_get_theme_setting('secondary_links')
+   ));
+
+  if ($logo = drupal_get_theme_setting('logo')) {
+    $xtemplate->template->assign('logo', $logo);
+    $xtemplate->template->parse('header.logo');
+  }
+
+  if (drupal_get_theme_setting('toggle_name')) {
+    $xtemplate->template->assign('site_name', variable_get('site_name', ''));
+    $xtemplate->template->parse('header.site_name');
+  }
+
+  if (drupal_get_theme_setting('toggle_slogan')) {
+    $xtemplate->template->assign('site_slogan', variable_get('site_slogan', ''));
+    $xtemplate->template->parse('header.site_slogan');
+  }
+
+  if ($tabs = theme('menu_local_tasks')) {
+    $xtemplate->template->assign("tabs", $tabs);
+    $xtemplate->template->parse("header.title.tabs");
+  }
+
+  if ($title = drupal_get_title()) {
+    $xtemplate->template->assign("title", $title);
+    $xtemplate->template->assign("breadcrumb", theme("breadcrumb", drupal_get_breadcrumb()));
+    $xtemplate->template->parse("header.title");
+  }
+
+  if ($help = menu_get_active_help()) {
+    $xtemplate->template->assign("help", $help);
+    $xtemplate->template->parse("header.help");
+  }
+
+  if ($message = theme_status_messages()) {
+    $xtemplate->template->assign("message", $message);
+    $xtemplate->template->parse("header.message");
+  }
+
+  if (drupal_get_theme_setting('toggle_search')) {
+    $xtemplate->template->assign(array(
+          //"search" => search_form(),
+          "search_url" => url("search"),
+          "search_button_text" => t("Search"),
+          "search_description" => t("Enter the terms you wish to search for.")
+          ));
+    $xtemplate->template->parse("header.search_box");
+  }
+
+  // only parse the mission block if we are on the frontpage ...
+  if ($_GET["q"] == variable_get("site_frontpage", "node") && drupal_get_theme_setting('toggle_mission') && ($mission = drupal_get_theme_setting('mission'))) {
+    $xtemplate->template->assign("mission", $mission);
+    $xtemplate->template->parse("header.mission");
+  }
+
+  if ($blocks = theme("blocks", "left")) {
+    $xtemplate->template->assign("blocks", $blocks);
+    $xtemplate->template->parse("header.blocks");
+  }
+
+  $xtemplate->template->parse("header");
+  $output = $xtemplate->template->text("header");
+
+  $output .= "\n<!-- begin content -->\n";
+  $output .= $content;
+  $output .= "\n<!-- end content -->\n";
+
+  if ($blocks = theme("blocks", "right")) {
+    $xtemplate->template->assign("blocks", $blocks);
+    $xtemplate->template->parse("footer.blocks");
+  }
+
+  // only parse the footer block if site_footer is set
+  if ($footer_message = variable_get("site_footer", FALSE)) {
+    $xtemplate->template->assign("footer_message", $footer_message);
+    $xtemplate->template->parse("footer.message");
+  }
+
+  $xtemplate->template->assign("footer", theme_closure());
+  $xtemplate->template->parse("footer");
+
+  $output .= $xtemplate->template->text("footer");
+
+  return $output;
+}
+
+function xtemplate_block(&$block) {
+  global $xtemplate;
+
+  // create template variables for all block variables (module, delta, region, subject, content, ...)
+  foreach ($block as $key => $value) {
+    $xtemplate->template->assign($key == "subject" ? "title" : $key, $value); // TODO: standardize on 'title' (ie. rename all $block["subject"] to "title")
+  }
+  $xtemplate->template->parse("block");
+  $output = $xtemplate->template->text("block");
+  $xtemplate->template->reset("block");
+  return $output;
+}
+
+function xtemplate_box($title, $content, $region = "main") {
+  global $xtemplate;
+
+  $xtemplate->template->assign(array(
+        "title" => $title,
+        "content" => $content));
+
+  $xtemplate->template->parse("box");
+  $output = $xtemplate->template->text("box");
+  $xtemplate->template->reset("box");
+  return $output;
+}
+
+?>
diff --git a/themes/xtemplate/xtemplate.inc b/themes/engines/xtemplate/xtemplate.inc
similarity index 96%
rename from themes/xtemplate/xtemplate.inc
rename to themes/engines/xtemplate/xtemplate.inc
index 6c89be93d25c2f86cac67aae67a82dcfe585d02a..611ec2c8c99c41bf7ee00b6fc89fcfde5a9548ee 100644
--- a/themes/xtemplate/xtemplate.inc
+++ b/themes/engines/xtemplate/xtemplate.inc
@@ -1,480 +1,480 @@
-<?php
-
-class XTemplate {
-
-/*
-  xtemplate class 0.3pre
-  html generation with templates - fast & easy
-  copyright (c) 2000-2001 Barnabas Debreceni [cranx@users.sourceforge.net]
-
-  contributors:
-  Ivar Smolin <okul@linux.ee> (14-march-2001)
-    - made some code optimizations
-  Bert Jandehoop <bert.jandehoop@users.info.wau.nl> (26-june-2001)
-    - new feature to substitute template files by other templates
-    - new method array_loop()
-
-  !!! {FILE {VAR}} file variable interpolation may still be buggy !!!
-
-  latest stable & CVS versions always available @
-  http://sourceforge.net/projects/xtpl/
-
-  This program is free software; you can redistribute it and/or
-  modify it under the terms of the GNU Lesser General Public License
-  version 2.1 as published by the Free Software Foundation.
-
-  This library is distributed in the hope that it will be useful,
-  but WITHOUT ANY WARRANTY; without even the implied warranty of
-  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-  GNU Lesser General Public License for more details at
-  http://www.gnu.org/copyleft/lgpl.html
-
-  You should have received a copy of the GNU General Public License
-  along with this program; if not, write to the Free Software
-  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
-
-  $Id$
-
-*/
-
-/***[ variables ]***********************************************************/
-
-var $filecontents="";               /* raw contents of template file */
-var $blocks=array();                /* unparsed blocks */
-var $parsed_blocks=array();         /* parsed blocks */
-var $preparsed_blocks=array();      /* preparsed blocks, for file includes */
-var $block_parse_order=array();     /* block parsing order for recursive parsing (sometimes reverse:) */
-var $sub_blocks=array();            /* store sub-block names for fast resetting */
-var $VARS=array();                  /* variables array */
-var $FILEVARS=array();              /* file variables array */
-var $filevar_parent=array();        /* filevars' parent block */
-var $filecache=array();             /* file caching */
-
-var $tpldir="";                     /* location of template files */
-var $FILES=null;                    /* file names lookup table */
-
-var $file_delim="/\{FILE\s*\"([^\"]+)\"\s*\}/m";  /* regexp for file includes */
-var $filevar_delim="/\{FILE\s*\{([A-Za-z0-9\._]+?)\}\s*\}/m";  /* regexp for file includes */
-var $filevar_delim_nl="/^\s*\{FILE\s*\{([A-Za-z0-9\._]+?)\}\s*\}\s*\n/m";  /* regexp for file includes w/ newlines */
-var $block_start_delim="<!-- ";     /* block start delimiter */
-var $block_end_delim="-->";         /* block end delimiter */
-var $block_start_word="BEGIN:";     /* block start word */
-var $block_end_word="END:";         /* block end word */
-
-/* this makes the delimiters look like: <!-- BEGIN: block_name --> if you use my syntax. */
-
-var $NULL_STRING=array(""=>"");     /* null string for unassigned vars */
-var $NULL_BLOCK=array(""=>"");      /* null string for unassigned blocks */
-var $mainblock="main";
-var $ERROR="";
-var $AUTORESET=1;                    /* auto-reset sub blocks */
-
-/***[ constructor ]*********************************************************/
-
-
-function XTemplate ($file,$tpldir="",$files=null,$mainblock="main") {
-  $this->tpldir = $tpldir;
-  if (gettype($files)=="array")
-    $this->FILES = $files;
-  $this->mainblock=$mainblock;
-  $this->filecontents=$this->r_getfile($file);  /* read in template file */
-  $this->blocks=$this->maketree($this->filecontents,"");  /* preprocess some stuff */
-  $this->filevar_parent=$this->store_filevar_parents($this->blocks);
-  $this->scan_globals();
-}
-
-
-/***************************************************************************/
-/***[ public stuff ]********************************************************/
-/***************************************************************************/
-
-/***[ assign ]**************************************************************/
-/*
-  assign a variable
-*/
-
-function assign ($name,$val="") {
-  if (gettype($name)=="array")
-    foreach ($name as $k=>$v)
-      $this->VARS[$k]=$v;
-  else
-    $this->VARS[$name]=$val;
-}
-
-/***[ assign_file ]*********************************************************/
-/*
-  assign a file variable
-*/
-
-function assign_file ($name,$val="") {
-  if (gettype($name)=="array")
-    foreach ($name as $k=>$v)
-      $this->assign_file_($k,$v);
-  else
-    $this->assign_file_($name,$val);
-}
-
-function assign_file_ ($name,$val) {
-  if (isset($this->filevar_parent[$name])) {
-    if ($val!="") {
-      $val=$this->r_getfile($val);
-      foreach($this->filevar_parent[$name] as $parent) {
-        if (isset($this->preparsed_blocks[$parent]) and !isset($this->FILEVARS[$name]))
-          $copy=$this->preparsed_blocks[$parent];
-        else if (isset($this->blocks[$parent]))
-          $copy=$this->blocks[$parent];
-        preg_match_all($this->filevar_delim,$copy,$res,PREG_SET_ORDER);
-        foreach ($res as $v) {
-          $copy=preg_replace("/".preg_quote($v[0])."/","$val",$copy);
-          $this->preparsed_blocks=array_merge($this->preparsed_blocks,$this->maketree($copy,$parent));
-          $this->filevar_parent=array_merge($this->filevar_parent,$this->store_filevar_parents($this->preparsed_blocks));
-        }
-      }
-    }
-  }
-  $this->FILEVARS[$name]=$val;
-}
-
-/***[ parse ]***************************************************************/
-/*
-  parse a block
-*/
-
-function parse ($bname) {
-
-  if (isset($this->preparsed_blocks[$bname])) {
-    $copy=$this->preparsed_blocks[$bname];
-  }
-  else if (isset($this->blocks[$bname]))
-    $copy=$this->blocks[$bname];
-  else
-    $this->set_error ("parse: blockname [$bname] does not exist");
-
-  /* from there we should have no more {FILE } directives */
-  $copy=preg_replace($this->filevar_delim_nl,"",$copy);
-
-  /* find & replace variables+blocks */
-  preg_match_all("/\{([A-Za-z0-9\._]+?)}/",$copy,$var_array);
-  $var_array=$var_array[1];
-  foreach ($var_array as $k=>$v) {
-    $sub=explode(".",$v);
-    if ($sub[0]=="_BLOCK_") {
-      unset($sub[0]);
-      $bname2=implode(".",$sub);
-      $var=$this->parsed_blocks[$bname2];
-      $nul=(!isset($this->NULL_BLOCK[$bname2])) ? $this->NULL_BLOCK[""] : $this->NULL_BLOCK[$bname2];
-      if ($var=="") {
-        if ($nul=="") {
-          $copy=preg_replace("/^\s*\{".$v."\}\s*\n*/m","",$copy);
-        } else {
-          $copy=preg_replace("/\{".$v."\}/","$nul",$copy);
-        }
-      } else {
-        $var=trim($var);
-        $copy=str_replace("\{$v}","$var",$copy);
-      }
-    } else {
-      $var=$this->VARS;
-      foreach ($sub as $v1)
-        $var=$var[$v1];
-      $nul=(!isset($this->NULL_STRING[$v])) ? ($this->NULL_STRING[""]) : ($this->NULL_STRING[$v]);
-      $var=(!isset($var))?$nul:$var;
-      if ($var=="")
-        $copy=preg_replace("/^\s*\{".$v."\}\s*\n/m","",$copy);
-      $copy=str_replace("\{$v}","$var",$copy);
-    }
-  }
-  if (empty($this->parsed_blocks[$bname])) $this->parsed_blocks[$bname] = null; // eliminates incremental assign error, when using E_ALL error reporting
-  $this->parsed_blocks[$bname].=$copy;
-
-  /* reset sub-blocks */
-  if ($this->AUTORESET && (!empty($this->sub_blocks[$bname]))) {
-    reset($this->sub_blocks[$bname]);
-    foreach ($this->sub_blocks[$bname] as $k=>$v)
-      $this->reset($v);
-  }
-}
-
-/***[ rparse ]**************************************************************/
-/*
-  returns the parsed text for a block, including all sub-blocks.
-*/
-
-function rparse($bname) {
-  if (!empty($this->sub_blocks[$bname])) {
-    reset($this->sub_blocks[$bname]);
-    foreach ($this->sub_blocks[$bname] as $k=>$v)
-      if (!empty($v))
-        $this->rparse($v);
-  }
-  $this->parse($bname);
-}
-
-/***[ insert_loop ]*********************************************************/
-/*
-  inserts a loop ( call assign & parse )
-*/
-
-function insert_loop($bname,$var,$value="") {
-  $this->assign($var,$value);
-  $this->parse($bname);
-}
-
-/***[ array_loop ]*********************************************************/
-/*
-  parses a block for every set of data in the values array
-*/
-
-function array_loop($bname, $var, &$values)
-{
-  if (gettype($values)=="array")
-  {
-    foreach($values as $v)
-    {
-      $this->assign($var, $v);
-      $this->parse($bname);
-    }
-  }
-}
-
-/***[ text ]****************************************************************/
-/*
-  returns the parsed text for a block
-*/
-
-function text($bname) {
-  return $this->parsed_blocks[isset($bname) ? $bname :$this->mainblock];
-}
-
-/***[ out ]*****************************************************************/
-/*
-  prints the parsed text
-*/
-
-function out ($bname) {
-  $length=strlen($this->text($bname));
-  header("Content-Length: ".$length);
-  echo $this->text($bname);
-}
-
-/***[ reset ]***************************************************************/
-/*
-  resets the parsed text
-*/
-
-function reset ($bname) {
-  $this->parsed_blocks[$bname]="";
-}
-
-/***[ parsed ]**************************************************************/
-/*
-  returns true if block was parsed, false if not
-*/
-
-function parsed ($bname) {
-  return (!empty($this->parsed_blocks[$bname]));
-}
-
-/***[ SetNullString ]*******************************************************/
-/*
-  sets the string to replace in case the var was not assigned
-*/
-
-function SetNullString($str,$varname="") {
-  $this->NULL_STRING[$varname]=$str;
-}
-
-/***[ SetNullBlock ]********************************************************/
-/*
-  sets the string to replace in case the block was not parsed
-*/
-
-function SetNullBlock($str,$bname="") {
-  $this->NULL_BLOCK[$bname]=$str;
-}
-
-/***[ set_autoreset ]*******************************************************/
-/*
-  sets AUTORESET to 1. (default is 1)
-  if set to 1, parse() automatically resets the parsed blocks' sub blocks
-  (for multiple level blocks)
-*/
-
-function set_autoreset() {
-  $this->AUTORESET=1;
-}
-
-/***[ clear_autoreset ]*****************************************************/
-/*
-  sets AUTORESET to 0. (default is 1)
-  if set to 1, parse() automatically resets the parsed blocks' sub blocks
-  (for multiple level blocks)
-*/
-
-function clear_autoreset() {
-  $this->AUTORESET=0;
-}
-
-/***[ scan_globals ]********************************************************/
-/*
-  scans global variables
-*/
-
-function scan_globals() {
-  reset($GLOBALS);
-  foreach ($GLOBALS as $k=>$v)
-    $GLOB[$k]=$v;
-  $this->assign("PHP",$GLOB);  /* access global variables as {PHP.HTTP_HOST} in your template! */
-}
-
-/******
-
-    WARNING
-    PUBLIC FUNCTIONS BELOW THIS LINE DIDN'T GET TESTED
-
-******/
-
-
-/***************************************************************************/
-/***[ private stuff ]*******************************************************/
-/***************************************************************************/
-
-/***[ maketree ]************************************************************/
-/*
-  generates the array containing to-be-parsed stuff:
-  $blocks["main"],$blocks["main.table"],$blocks["main.table.row"], etc.
-  also builds the reverse parse order.
-*/
-
-
-function maketree($con,$parentblock="") {
-  $blocks=array();
-  $con2=explode($this->block_start_delim,$con);
-  if (!empty($parentblock)) {
-    $block_names=explode(".",$parentblock);
-    $level=sizeof($block_names);
-  } else {
-    $block_names=array();
-    $level=0;
-  }
-  foreach ($con2 as $k=>$v) {
-    $patt="($this->block_start_word|$this->block_end_word)\s*(\w+)\s*$this->block_end_delim(.*)";
-    if (preg_match_all("/$patt/ims",$v,$res,PREG_SET_ORDER)) {
-      // $res[0][1] = BEGIN or END
-      // $res[0][2] = block name
-      // $res[0][3] = kinda content
-      if ($res[0][1]==$this->block_start_word) {
-        $parent_name=implode(".",$block_names);
-        $block_names[++$level]=$res[0][2];              /* add one level - array("main","table","row")*/
-        $cur_block_name=implode(".",$block_names);  /* make block name (main.table.row) */
-        $this->block_parse_order[]=$cur_block_name;  /* build block parsing order (reverse) */
-        if (empty($blocks[$cur_block_name])) $blocks[$cur_block_name] = null; // eliminates incremental assign error, when using E_ALL error reporting
-        $blocks[$cur_block_name].=$res[0][3];          /* add contents */
-        $blocks[$parent_name].="{_BLOCK_.$cur_block_name}";  /* add {_BLOCK_.blockname} string to parent block */
-        $this->sub_blocks[$parent_name][]=$cur_block_name;    /* store sub block names for autoresetting and recursive parsing */
-        $this->sub_blocks[$cur_block_name][]="";    /* store sub block names for autoresetting */
-      } else if ($res[0][1]==$this->block_end_word) {
-        unset($block_names[$level--]);
-        $parent_name=implode(".",$block_names);
-        $blocks[$parent_name].=$res[0][3];  /* add rest of block to parent block */
-      }
-    } else { /* no block delimiters found */
-      if ($k)
-        $blocks[implode(".",$block_names)].=$this->block_start_delim;
-      if (empty($blocks[implode(".",$block_names)])) $blocks[implode(".",$block_names)] = null; // eliminates incremental assign error, when using E_ALL error reporting
-      $blocks[implode(".",$block_names)].=$v;
-    }
-  }
-  return $blocks;
-}
-
-/***[ store_filevar_parents ]***********************************************/
-/*
-  store container block's name for file variables
-*/
-
-function store_filevar_parents($blocks){
-  $parents=array();
-  foreach ($blocks as $bname=>$con) {
-    preg_match_all($this->filevar_delim,$con,$res);
-    foreach ($res[1] as $k=>$v)
-      $parents[$v][]=$bname;
-  }
-  return $parents;
-}
-
-/***[ error stuff ]*********************************************************/
-/*
-  sets and gets error
-*/
-
-function get_error()  {
-  return ($this->ERROR=="")?0:$this->ERROR;
-}
-
-
-function set_error($str)  {
-  $this->ERROR="<strong>[XTemplate]</strong>&nbsp;<i>".$str."</i>";
-  trigger_error($this->get_error());
-}
-
-/***[ getfile ]*************************************************************/
-/*
-  returns the contents of a file
-*/
-
-function getfile($file) {
-  if (!isset($file)) {
-    $this->set_error("!isset file name!");
-    return "";
-  }
-
- // check if filename is mapped to other filename
-  if (isset($this->FILES))
-  {
-    if (isset($this->FILES[$file]))
-      $file = $this->FILES[$file];
-  }
-  // prepend template dir
-  if (!empty($this->tpldir))
-    $file = $this->tpldir."/".$file;
-
-  if (isset($this->filecache[$file]))
-    $file_text=$this->filecache[$file];
-  else {
-    if (is_file($file)) {
-      if (!($fh=fopen($file,"r"))) {
-        $this->set_error("Cannot open file: $file");
-        return "";
-      }
-
-      $file_text=fread($fh,filesize($file));
-      fclose($fh);
-    } else {
-      $this->set_error("[$file] does not exist");
-      $file_text="<strong>__XTemplate fatal error: file [$file] does not exist__</strong>";
-    }
-    $this->filecache[$file]=$file_text;
-  }
-  return $file_text;
-}
-
-/***[ r_getfile ]***********************************************************/
-/*
-  recursively gets the content of a file with {FILE "filename.tpl"} directives
-*/
-
-
-function r_getfile($file) {
-  $text=$this->getfile($file);
-  while (preg_match($this->file_delim,$text,$res)) {
-    $text2=$this->getfile($res[1]);
-    $text=preg_replace("'".preg_quote($res[0])."'",$text2,$text);
-  }
-
-  return $text;
-}
-
-
-} /* end of XTemplate class. */
-?>
+<?php
+
+class XTemplate {
+
+/*
+  xtemplate class 0.3pre
+  html generation with templates - fast & easy
+  copyright (c) 2000-2001 Barnabas Debreceni [cranx@users.sourceforge.net]
+
+  contributors:
+  Ivar Smolin <okul@linux.ee> (14-march-2001)
+    - made some code optimizations
+  Bert Jandehoop <bert.jandehoop@users.info.wau.nl> (26-june-2001)
+    - new feature to substitute template files by other templates
+    - new method array_loop()
+
+  !!! {FILE {VAR}} file variable interpolation may still be buggy !!!
+
+  latest stable & CVS versions always available @
+  http://sourceforge.net/projects/xtpl/
+
+  This program is free software; you can redistribute it and/or
+  modify it under the terms of the GNU Lesser General Public License
+  version 2.1 as published by the Free Software Foundation.
+
+  This library is distributed in the hope that it will be useful,
+  but WITHOUT ANY WARRANTY; without even the implied warranty of
+  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+  GNU Lesser General Public License for more details at
+  http://www.gnu.org/copyleft/lgpl.html
+
+  You should have received a copy of the GNU General Public License
+  along with this program; if not, write to the Free Software
+  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+
+  $Id$
+
+*/
+
+/***[ variables ]***********************************************************/
+
+var $filecontents="";               /* raw contents of template file */
+var $blocks=array();                /* unparsed blocks */
+var $parsed_blocks=array();         /* parsed blocks */
+var $preparsed_blocks=array();      /* preparsed blocks, for file includes */
+var $block_parse_order=array();     /* block parsing order for recursive parsing (sometimes reverse:) */
+var $sub_blocks=array();            /* store sub-block names for fast resetting */
+var $VARS=array();                  /* variables array */
+var $FILEVARS=array();              /* file variables array */
+var $filevar_parent=array();        /* filevars' parent block */
+var $filecache=array();             /* file caching */
+
+var $tpldir="";                     /* location of template files */
+var $FILES=null;                    /* file names lookup table */
+
+var $file_delim="/\{FILE\s*\"([^\"]+)\"\s*\}/m";  /* regexp for file includes */
+var $filevar_delim="/\{FILE\s*\{([A-Za-z0-9\._]+?)\}\s*\}/m";  /* regexp for file includes */
+var $filevar_delim_nl="/^\s*\{FILE\s*\{([A-Za-z0-9\._]+?)\}\s*\}\s*\n/m";  /* regexp for file includes w/ newlines */
+var $block_start_delim="<!-- ";     /* block start delimiter */
+var $block_end_delim="-->";         /* block end delimiter */
+var $block_start_word="BEGIN:";     /* block start word */
+var $block_end_word="END:";         /* block end word */
+
+/* this makes the delimiters look like: <!-- BEGIN: block_name --> if you use my syntax. */
+
+var $NULL_STRING=array(""=>"");     /* null string for unassigned vars */
+var $NULL_BLOCK=array(""=>"");      /* null string for unassigned blocks */
+var $mainblock="main";
+var $ERROR="";
+var $AUTORESET=1;                    /* auto-reset sub blocks */
+
+/***[ constructor ]*********************************************************/
+
+
+function XTemplate ($file,$tpldir="",$files=null,$mainblock="main") {
+  $this->tpldir = $tpldir;
+  if (gettype($files)=="array")
+    $this->FILES = $files;
+  $this->mainblock=$mainblock;
+  $this->filecontents=$this->r_getfile($file);  /* read in template file */
+  $this->blocks=$this->maketree($this->filecontents,"");  /* preprocess some stuff */
+  $this->filevar_parent=$this->store_filevar_parents($this->blocks);
+  $this->scan_globals();
+}
+
+
+/***************************************************************************/
+/***[ public stuff ]********************************************************/
+/***************************************************************************/
+
+/***[ assign ]**************************************************************/
+/*
+  assign a variable
+*/
+
+function assign ($name,$val="") {
+  if (gettype($name)=="array")
+    foreach ($name as $k=>$v)
+      $this->VARS[$k]=$v;
+  else
+    $this->VARS[$name]=$val;
+}
+
+/***[ assign_file ]*********************************************************/
+/*
+  assign a file variable
+*/
+
+function assign_file ($name,$val="") {
+  if (gettype($name)=="array")
+    foreach ($name as $k=>$v)
+      $this->assign_file_($k,$v);
+  else
+    $this->assign_file_($name,$val);
+}
+
+function assign_file_ ($name,$val) {
+  if (isset($this->filevar_parent[$name])) {
+    if ($val!="") {
+      $val=$this->r_getfile($val);
+      foreach($this->filevar_parent[$name] as $parent) {
+        if (isset($this->preparsed_blocks[$parent]) and !isset($this->FILEVARS[$name]))
+          $copy=$this->preparsed_blocks[$parent];
+        else if (isset($this->blocks[$parent]))
+          $copy=$this->blocks[$parent];
+        preg_match_all($this->filevar_delim,$copy,$res,PREG_SET_ORDER);
+        foreach ($res as $v) {
+          $copy=preg_replace("/".preg_quote($v[0])."/","$val",$copy);
+          $this->preparsed_blocks=array_merge($this->preparsed_blocks,$this->maketree($copy,$parent));
+          $this->filevar_parent=array_merge($this->filevar_parent,$this->store_filevar_parents($this->preparsed_blocks));
+        }
+      }
+    }
+  }
+  $this->FILEVARS[$name]=$val;
+}
+
+/***[ parse ]***************************************************************/
+/*
+  parse a block
+*/
+
+function parse ($bname) {
+
+  if (isset($this->preparsed_blocks[$bname])) {
+    $copy=$this->preparsed_blocks[$bname];
+  }
+  else if (isset($this->blocks[$bname]))
+    $copy=$this->blocks[$bname];
+  else
+    $this->set_error ("parse: blockname [$bname] does not exist");
+
+  /* from there we should have no more {FILE } directives */
+  $copy=preg_replace($this->filevar_delim_nl,"",$copy);
+
+  /* find & replace variables+blocks */
+  preg_match_all("/\{([A-Za-z0-9\._]+?)}/",$copy,$var_array);
+  $var_array=$var_array[1];
+  foreach ($var_array as $k=>$v) {
+    $sub=explode(".",$v);
+    if ($sub[0]=="_BLOCK_") {
+      unset($sub[0]);
+      $bname2=implode(".",$sub);
+      $var=$this->parsed_blocks[$bname2];
+      $nul=(!isset($this->NULL_BLOCK[$bname2])) ? $this->NULL_BLOCK[""] : $this->NULL_BLOCK[$bname2];
+      if ($var=="") {
+        if ($nul=="") {
+          $copy=preg_replace("/^\s*\{".$v."\}\s*\n*/m","",$copy);
+        } else {
+          $copy=preg_replace("/\{".$v."\}/","$nul",$copy);
+        }
+      } else {
+        $var=trim($var);
+        $copy=str_replace("\{$v}","$var",$copy);
+      }
+    } else {
+      $var=$this->VARS;
+      foreach ($sub as $v1)
+        $var=$var[$v1];
+      $nul=(!isset($this->NULL_STRING[$v])) ? ($this->NULL_STRING[""]) : ($this->NULL_STRING[$v]);
+      $var=(!isset($var))?$nul:$var;
+      if ($var=="")
+        $copy=preg_replace("/^\s*\{".$v."\}\s*\n/m","",$copy);
+      $copy=str_replace("\{$v}","$var",$copy);
+    }
+  }
+  if (empty($this->parsed_blocks[$bname])) $this->parsed_blocks[$bname] = null; // eliminates incremental assign error, when using E_ALL error reporting
+  $this->parsed_blocks[$bname].=$copy;
+
+  /* reset sub-blocks */
+  if ($this->AUTORESET && (!empty($this->sub_blocks[$bname]))) {
+    reset($this->sub_blocks[$bname]);
+    foreach ($this->sub_blocks[$bname] as $k=>$v)
+      $this->reset($v);
+  }
+}
+
+/***[ rparse ]**************************************************************/
+/*
+  returns the parsed text for a block, including all sub-blocks.
+*/
+
+function rparse($bname) {
+  if (!empty($this->sub_blocks[$bname])) {
+    reset($this->sub_blocks[$bname]);
+    foreach ($this->sub_blocks[$bname] as $k=>$v)
+      if (!empty($v))
+        $this->rparse($v);
+  }
+  $this->parse($bname);
+}
+
+/***[ insert_loop ]*********************************************************/
+/*
+  inserts a loop ( call assign & parse )
+*/
+
+function insert_loop($bname,$var,$value="") {
+  $this->assign($var,$value);
+  $this->parse($bname);
+}
+
+/***[ array_loop ]*********************************************************/
+/*
+  parses a block for every set of data in the values array
+*/
+
+function array_loop($bname, $var, &$values)
+{
+  if (gettype($values)=="array")
+  {
+    foreach($values as $v)
+    {
+      $this->assign($var, $v);
+      $this->parse($bname);
+    }
+  }
+}
+
+/***[ text ]****************************************************************/
+/*
+  returns the parsed text for a block
+*/
+
+function text($bname) {
+  return $this->parsed_blocks[isset($bname) ? $bname :$this->mainblock];
+}
+
+/***[ out ]*****************************************************************/
+/*
+  prints the parsed text
+*/
+
+function out ($bname) {
+  $length=strlen($this->text($bname));
+  header("Content-Length: ".$length);
+  echo $this->text($bname);
+}
+
+/***[ reset ]***************************************************************/
+/*
+  resets the parsed text
+*/
+
+function reset ($bname) {
+  $this->parsed_blocks[$bname]="";
+}
+
+/***[ parsed ]**************************************************************/
+/*
+  returns true if block was parsed, false if not
+*/
+
+function parsed ($bname) {
+  return (!empty($this->parsed_blocks[$bname]));
+}
+
+/***[ SetNullString ]*******************************************************/
+/*
+  sets the string to replace in case the var was not assigned
+*/
+
+function SetNullString($str,$varname="") {
+  $this->NULL_STRING[$varname]=$str;
+}
+
+/***[ SetNullBlock ]********************************************************/
+/*
+  sets the string to replace in case the block was not parsed
+*/
+
+function SetNullBlock($str,$bname="") {
+  $this->NULL_BLOCK[$bname]=$str;
+}
+
+/***[ set_autoreset ]*******************************************************/
+/*
+  sets AUTORESET to 1. (default is 1)
+  if set to 1, parse() automatically resets the parsed blocks' sub blocks
+  (for multiple level blocks)
+*/
+
+function set_autoreset() {
+  $this->AUTORESET=1;
+}
+
+/***[ clear_autoreset ]*****************************************************/
+/*
+  sets AUTORESET to 0. (default is 1)
+  if set to 1, parse() automatically resets the parsed blocks' sub blocks
+  (for multiple level blocks)
+*/
+
+function clear_autoreset() {
+  $this->AUTORESET=0;
+}
+
+/***[ scan_globals ]********************************************************/
+/*
+  scans global variables
+*/
+
+function scan_globals() {
+  reset($GLOBALS);
+  foreach ($GLOBALS as $k=>$v)
+    $GLOB[$k]=$v;
+  $this->assign("PHP",$GLOB);  /* access global variables as {PHP.HTTP_HOST} in your template! */
+}
+
+/******
+
+    WARNING
+    PUBLIC FUNCTIONS BELOW THIS LINE DIDN'T GET TESTED
+
+******/
+
+
+/***************************************************************************/
+/***[ private stuff ]*******************************************************/
+/***************************************************************************/
+
+/***[ maketree ]************************************************************/
+/*
+  generates the array containing to-be-parsed stuff:
+  $blocks["main"],$blocks["main.table"],$blocks["main.table.row"], etc.
+  also builds the reverse parse order.
+*/
+
+
+function maketree($con,$parentblock="") {
+  $blocks=array();
+  $con2=explode($this->block_start_delim,$con);
+  if (!empty($parentblock)) {
+    $block_names=explode(".",$parentblock);
+    $level=sizeof($block_names);
+  } else {
+    $block_names=array();
+    $level=0;
+  }
+  foreach ($con2 as $k=>$v) {
+    $patt="($this->block_start_word|$this->block_end_word)\s*(\w+)\s*$this->block_end_delim(.*)";
+    if (preg_match_all("/$patt/ims",$v,$res,PREG_SET_ORDER)) {
+      // $res[0][1] = BEGIN or END
+      // $res[0][2] = block name
+      // $res[0][3] = kinda content
+      if ($res[0][1]==$this->block_start_word) {
+        $parent_name=implode(".",$block_names);
+        $block_names[++$level]=$res[0][2];              /* add one level - array("main","table","row")*/
+        $cur_block_name=implode(".",$block_names);  /* make block name (main.table.row) */
+        $this->block_parse_order[]=$cur_block_name;  /* build block parsing order (reverse) */
+        if (empty($blocks[$cur_block_name])) $blocks[$cur_block_name] = null; // eliminates incremental assign error, when using E_ALL error reporting
+        $blocks[$cur_block_name].=$res[0][3];          /* add contents */
+        $blocks[$parent_name].="{_BLOCK_.$cur_block_name}";  /* add {_BLOCK_.blockname} string to parent block */
+        $this->sub_blocks[$parent_name][]=$cur_block_name;    /* store sub block names for autoresetting and recursive parsing */
+        $this->sub_blocks[$cur_block_name][]="";    /* store sub block names for autoresetting */
+      } else if ($res[0][1]==$this->block_end_word) {
+        unset($block_names[$level--]);
+        $parent_name=implode(".",$block_names);
+        $blocks[$parent_name].=$res[0][3];  /* add rest of block to parent block */
+      }
+    } else { /* no block delimiters found */
+      if ($k)
+        $blocks[implode(".",$block_names)].=$this->block_start_delim;
+      if (empty($blocks[implode(".",$block_names)])) $blocks[implode(".",$block_names)] = null; // eliminates incremental assign error, when using E_ALL error reporting
+      $blocks[implode(".",$block_names)].=$v;
+    }
+  }
+  return $blocks;
+}
+
+/***[ store_filevar_parents ]***********************************************/
+/*
+  store container block's name for file variables
+*/
+
+function store_filevar_parents($blocks){
+  $parents=array();
+  foreach ($blocks as $bname=>$con) {
+    preg_match_all($this->filevar_delim,$con,$res);
+    foreach ($res[1] as $k=>$v)
+      $parents[$v][]=$bname;
+  }
+  return $parents;
+}
+
+/***[ error stuff ]*********************************************************/
+/*
+  sets and gets error
+*/
+
+function get_error()  {
+  return ($this->ERROR=="")?0:$this->ERROR;
+}
+
+
+function set_error($str)  {
+  $this->ERROR="<strong>[XTemplate]</strong>&nbsp;<i>".$str."</i>";
+  trigger_error($this->get_error());
+}
+
+/***[ getfile ]*************************************************************/
+/*
+  returns the contents of a file
+*/
+
+function getfile($file) {
+  if (!isset($file)) {
+    $this->set_error("!isset file name!");
+    return "";
+  }
+
+ // check if filename is mapped to other filename
+  if (isset($this->FILES))
+  {
+    if (isset($this->FILES[$file]))
+      $file = $this->FILES[$file];
+  }
+  // prepend template dir
+  if (!empty($this->tpldir))
+    $file = $this->tpldir."/".$file;
+
+  if (isset($this->filecache[$file]))
+    $file_text=$this->filecache[$file];
+  else {
+    if (is_file($file)) {
+      if (!($fh=fopen($file,"r"))) {
+        $this->set_error("Cannot open file: $file");
+        return "";
+      }
+
+      $file_text=fread($fh,filesize($file));
+      fclose($fh);
+    } else {
+      $this->set_error("[$file] does not exist");
+      $file_text="<strong>__XTemplate fatal error: file [$file] does not exist__</strong>";
+    }
+    $this->filecache[$file]=$file_text;
+  }
+  return $file_text;
+}
+
+/***[ r_getfile ]***********************************************************/
+/*
+  recursively gets the content of a file with {FILE "filename.tpl"} directives
+*/
+
+
+function r_getfile($file) {
+  $text=$this->getfile($file);
+  while (preg_match($this->file_delim,$text,$res)) {
+    $text2=$this->getfile($res[1]);
+    $text=preg_replace("'".preg_quote($res[0])."'",$text2,$text);
+  }
+
+  return $text;
+}
+
+
+} /* end of XTemplate class. */
+?>
diff --git a/themes/example/example.theme b/themes/example/example.theme
deleted file mode 100644
index d9a040f3ed63110af602c61761cd87fb6007d5bc..0000000000000000000000000000000000000000
--- a/themes/example/example.theme
+++ /dev/null
@@ -1,18 +0,0 @@
-<?php
-// $Id$
-
-function example_help($section) {
-
-  $output = "";
-
-  switch ($section) {
-    case 'admin/themes#description':
-      $output = t("Internet explorer, Netscape, Opera, Lynx");
-      break;
-  }
-
-  return $output;
-}
-
-
-?>
diff --git a/themes/pushbutton/arrow-next-hover.png b/themes/pushbutton/arrow-next-hover.png
new file mode 100644
index 0000000000000000000000000000000000000000..e134d942f117796543e83071a12b2eb6e288b600
--- /dev/null
+++ b/themes/pushbutton/arrow-next-hover.png
@@ -0,0 +1,3 @@
+‰PNG
+
+���
IHDR���������íf0â���PLTEÿÿÿÿ¢€ÿº ÿh0ÿèàÿQÿôðÿÑÀÿ—pÿE�‘J¢)���tRNS�@æØf���8IDATxœc```	U`�Æ™“À4›åLˆ@2²€£  `'P r&0Ì„Ò…Pq$É¨\˜¹ì .�ñ5,�[k����IEND®B`‚
\ No newline at end of file
diff --git a/themes/pushbutton/arrow-next.png b/themes/pushbutton/arrow-next.png
new file mode 100644
index 0000000000000000000000000000000000000000..87bb67e50969cfad10e5f8aa40f25f37a0656535
--- /dev/null
+++ b/themes/pushbutton/arrow-next.png
@@ -0,0 +1,3 @@
+‰PNG
+
+���
IHDR���������íf0â���PLTEÿÿÿÿøðÿ¢0ÿÔ ÿŒ�ÿ“ÿÆ€ÿãÀÿ¿pÿñàŠ£õ���tRNS�@æØf���8IDATxœc``à5`�6g0ͨâB˜–––Öq(]GÒ(„Ê…™Ëâ�K³ý]Â@����IEND®B`‚
\ No newline at end of file
diff --git a/themes/pushbutton/arrow-prev-hover.png b/themes/pushbutton/arrow-prev-hover.png
new file mode 100644
index 0000000000000000000000000000000000000000..2a3e05c4b8098d1de6d6f267f4fc4234e607267d
--- /dev/null
+++ b/themes/pushbutton/arrow-prev-hover.png
@@ -0,0 +1,5 @@
+‰PNG
+
+���
IHDR���������íf0â���'PLTEÿÿÿÿ¢€ÿº ÿh0ÿÝÐÿèàÿQÿ®ÿôðÿÑÀÿPÿ—pÿE�a4›±���tRNS�@æØf���GIDATxœc```I›À�ng@Kα�7Êu€pO	
+
+J2䜁cg €AçÌi°8Ó™Ã
`ctÎX€i$¨�Ð�L² š´…����IEND®B`‚
\ No newline at end of file
diff --git a/themes/pushbutton/arrow-prev.png b/themes/pushbutton/arrow-prev.png
new file mode 100644
index 0000000000000000000000000000000000000000..96b3fe2606bccfa88f65125bbf9c1dfaec3d7567
--- /dev/null
+++ b/themes/pushbutton/arrow-prev.png
@@ -0,0 +1,4 @@
+‰PNG
+
+���
IHDR���������íf0â���'PLTEÿÿÿÿøðÿ͐ÿ¢0ÿÔ ÿ°PÿŒ�ÿ“ÿÆ€ÿãÀÿêÐÿ¿pÿñàR¯J���tRNS�@æØf���FIDATxœc``à*ŸÀ�ËÓ@WYú·
+Ê]�á¦vttt2”¥@:C0¸¥eƒÅYÒ’ÀƸ¥‚i$¨�Ð�²!u|����IEND®B`‚
\ No newline at end of file
diff --git a/themes/pushbutton/arrow-up-hover.png b/themes/pushbutton/arrow-up-hover.png
new file mode 100644
index 0000000000000000000000000000000000000000..daf01310886495213657d7e042723f359148640d
--- /dev/null
+++ b/themes/pushbutton/arrow-up-hover.png
@@ -0,0 +1,3 @@
+‰PNG
+
+���
IHDR���������íf0â���!PLTEÿÿÿÿ¢€ÿº ÿÅ°ÿÝÐÿèàÿQÿôðÿÑÀÿPÿE�½Rz~���tRNS�@æØf���MIDATxœc```Js`�­U) ŠiÕªe`î*�ÐZ•¹jP k™ã*‘¬e«RW	¸­bh,�Ò¬Â@
@l.š#«�C°>RDßÒ����IEND®B`‚
\ No newline at end of file
diff --git a/themes/pushbutton/arrow-up.png b/themes/pushbutton/arrow-up.png
new file mode 100644
index 0000000000000000000000000000000000000000..fce29251d4dc125588fda492ffdb77de95e46441
--- /dev/null
+++ b/themes/pushbutton/arrow-up.png
@@ -0,0 +1,4 @@
+‰PNG
+
+���
IHDR���������íf0â���!PLTEÿÿÿÿøðÿÔ ÿÛ°ÿ°PÿŒ�ÿ“ÿÆ€ÿãÀÿêÐÿñàx”MÏ���tRNS�@æØf���LIDATxœc```J›À�ª¡™ Š)44l˜
+�rÁª¡)¡n@Ô°é¡•©a¡™ì¡ÓBÚ€4W1P›ƒ‹æHm``��ÛH»>ƒ4����IEND®B`‚
\ No newline at end of file
diff --git a/themes/xtemplate/pushbutton/background.png b/themes/pushbutton/background.png
similarity index 100%
rename from themes/xtemplate/pushbutton/background.png
rename to themes/pushbutton/background.png
diff --git a/themes/xtemplate/pushbutton/forum-container.jpg b/themes/pushbutton/forum-container.jpg
similarity index 100%
rename from themes/xtemplate/pushbutton/forum-container.jpg
rename to themes/pushbutton/forum-container.jpg
diff --git a/themes/xtemplate/pushbutton/forum-link.png b/themes/pushbutton/forum-link.png
similarity index 100%
rename from themes/xtemplate/pushbutton/forum-link.png
rename to themes/pushbutton/forum-link.png
diff --git a/themes/xtemplate/pushbutton/header-a.jpg b/themes/pushbutton/header-a.jpg
similarity index 100%
rename from themes/xtemplate/pushbutton/header-a.jpg
rename to themes/pushbutton/header-a.jpg
diff --git a/themes/xtemplate/pushbutton/header-b.jpg b/themes/pushbutton/header-b.jpg
similarity index 100%
rename from themes/xtemplate/pushbutton/header-b.jpg
rename to themes/pushbutton/header-b.jpg
diff --git a/themes/xtemplate/pushbutton/icon-block.png b/themes/pushbutton/icon-block.png
similarity index 100%
rename from themes/xtemplate/pushbutton/icon-block.png
rename to themes/pushbutton/icon-block.png
diff --git a/themes/xtemplate/pushbutton/icon-comment.png b/themes/pushbutton/icon-comment.png
similarity index 100%
rename from themes/xtemplate/pushbutton/icon-comment.png
rename to themes/pushbutton/icon-comment.png
diff --git a/themes/xtemplate/pushbutton/logo-active.jpg b/themes/pushbutton/logo-active.jpg
similarity index 100%
rename from themes/xtemplate/pushbutton/logo-active.jpg
rename to themes/pushbutton/logo-active.jpg
diff --git a/themes/xtemplate/pushbutton/logo-background.jpg b/themes/pushbutton/logo-background.jpg
similarity index 100%
rename from themes/xtemplate/pushbutton/logo-background.jpg
rename to themes/pushbutton/logo-background.jpg
diff --git a/themes/xtemplate/pushbutton/logo-hover.jpg b/themes/pushbutton/logo-hover.jpg
similarity index 100%
rename from themes/xtemplate/pushbutton/logo-hover.jpg
rename to themes/pushbutton/logo-hover.jpg
diff --git a/themes/xtemplate/pushbutton/logo.png b/themes/pushbutton/logo.png
similarity index 100%
rename from themes/xtemplate/pushbutton/logo.png
rename to themes/pushbutton/logo.png
diff --git a/themes/pushbutton/screenshot.png b/themes/pushbutton/screenshot.png
new file mode 100644
index 0000000000000000000000000000000000000000..139e1a7db3828173eb69e91c7bf924bd07b4ea74
--- /dev/null
+++ b/themes/pushbutton/screenshot.png
@@ -0,0 +1,37 @@
+‰PNG
+
+���
IHDR���–���Z���ÕI8z���tIMEÔ1äÃ���	pHYs����ÒÝ~ü���+tEXtCreation Time�do 19 aug 2004 22:48:27 +01007Ð��IDATxÚí\	TœEžÇ·ïÍî۝Ýuœ·›uM<â¨3Þ:®ÇuuFg4“sh&c4Çä6æNL 	IÈA¸B€p_áw¸!ÜÐœ
Msö	4ÍÝÐôQû«¯š†@ÆQ!´ëÕû^}õUUwׯþU¿ÿñµÝó/ÙòLåÇÿêùÔç^ÜÕ{úC=³ÞçëÛüzíE|œmÞ§“1ƒ¿Zs×g×ûÜ¿Âõ oÆ{{ƒíý³ÞØá÷ðjç6ø°‰~쯞h0±1
+¨z7
+O~æÈÑæ±5žÖ¡_É|mÛT¢k¿ð/J®Ý7»$þùP˜
Âiá÷ænÑ¿ßôÀJW˜Âiç{ûB¶¹%k4*ÇÀ ôħ×:ÅžÎ}z½÷¢þÖÆ©¼­nIϬó¾’\†.oï<ä›q>2ß:T›\ñ¿›}·¸&¸EÌ_åv<(Û?µü€OÚk;®º”þÜzo êW¼þì5„ß=ÿr¹KïÀÀ©¼ ë<žPüóÅg"2*—;D¥òJêÚ~¾ø,d偮ÊÞ^�ðÐ*7e_ŸµñüU®/mòm‘uýôÝS­rÅŠ£‘Ái•O}æ—W[Þ ÂPÑÙÕ/o¹¼á\|R‘`“s‚´SùÆ΀/=SŽdÕ4Ë ˆW{¸D¬uŠ³AøÝóü•n
âö…«ÝßÛšSÙˆý‘YÕ$é¸÷Cçg¹ínÙ‘ˆ¨œê]ž©B‰µñ+[®@:Ë…âG>qo”´âíSÌâoð“ŠêØP«£SK6ŸOØáž¡œ·ÔùÁÝJêZó‚Unþå‚w|ÉFçx„ß=ãˆzâSOì~/möýï%Îg#n,=þòÖËËì#ž]ïíSøô:zÈýiȱÀ¬û—»Nlì™ÿÞ¾à«\Qóägqv¾¿?ä¹
Þ+GÞ³ø,†úðHøŸ^XwæšC@Ö+[.ï߬½ä2ËW¢Df÷B_ßágƒpº(>ÎQÆ!ó™×3ë½!C8qËèÌS\yjcÔCL9æéÌnÑ×:b”1ðC=NÖ½Þ×þÄÝr¯£mα'ÕØa¥ØòœÎv¬vÿaä…\~ä·[¶óÎhýad¯‘gºÈ;KúcËv„h(YCL#äÇ—ìÈèà#›õjµÖ¡
B„6mÚ ´AhƒÐ¡
B„6mÚ üQChDVe„sB“
+ªAU¿JÕDzFÝOMVF„sBÓ V;ø‰ïýÓÅKK—œ+ÅõNE[ýj¨íÑÀÍ‘Ae)Ø œí:ï*ÔFÎX¬#&5³Xs2®Ê"Q³Ú<2@Q$Ct›µA8‹ 4àÇ«ß?SØÞ8^U(H‰å¢}!õZíÀ2—2Ü6‰ÅØã•‚§B²¢„ŒXà$ôÃöÃÜ­Š>¢å‘;†÷BÌøŸÏ–b
+ÚƒÏîÏNäɲ«ÅÂùƒª¾Un<À™Å{q“/ZË:Úí_éAˆé÷¤+	EÀéÓ“Ñ„˜·œ´§ƒ32	½“Ô?}«kûŽ hƒ°T§Ñu÷kŸ)Ú|¹Ò1V0!6Ò‘‚jáÏ>8‡ÿöÞ)BŸŠFlÝÝïŸ)å7mwK(®iüà`H`Jñï¶û#ÄÑ?±hÉW¡9åõ;ÝÝ£ó¨DÎnµ=2VÐõwÎ͍tTµR8:x)£õRfë—A5KΉ¬ÓhúVº–ã©{äí}êÙÛ«ø—?8ÉÚÛwy&õK«oAÂTJ»7¶‰’‹×œˆl“Jú›;ý‹jø¤BéŽ:»!,»¸–j‚wãj6TBZ0G‡µjE3ʪö+̺é,“B“ú]§bv0¼@ì›Ñœ'
+Ìi«lU
+¥Ê=(„Zu÷î‹IUìÕ–sa9D¿¤’Ó¡Y†¡>ÙŸ|îðJ¸Q}ørša¸/(¥TÚ!Ï(åçU¨Ïny—6)ëó+|7›Í&A¬ã¨n°>ú¨FÑ&ˆ9¡éj­ÞcÕ׆”ÔŠó‚e%1Ò‚°YÅH5R—9—•7Ë+šä¼&ye³üFü-Ç´
+	%/Œ³€¦rô•²VÊ_t6wÎY·JVIÛë8Ê£½3øMÂ*ÿí¬ÐwRÝÑ"ÉA¹Ò›¶[ª¨J5›IS²+jøá[Ò½U2¶WŒg™jO†b‹EWkGóY¶¿Z›U#å°øÁ«ö%a¹WAÜ	e]nkº—JÖ +Œ0è‡ë"è~ëµV¯îm¾î©äg+ªÓgŸ¨§©ç
+~3ÈHÍsÕÀfœ³Ù¦TàÇ›ôý}ý½ƒƒs/÷
ôFúôûzŽEñÏ'ÔϹìÍ—+•Ìtð㶑9ý}næ1ӏÍ_hsùÚ ´A8÷ 4sê¼AML:„³	BÃÍ^³Žf#‡“QC3‡œY?Ø×û5Š²A1ŒpzêW¢Þc-�W„ß„Ôχd²â§’ðEeÆá^M¤WdPwö7ås^@M‰ûj¢A×ÝØ–áeîm/Ž &… “kRÞy§aTný¢/üÿ´?,6¿aƧøcÇèÝ^iSëójÄ孃׎4IzgBBîùùÏðGÂÉ,uá{ê³O×ïÑ)…âì+u‡èSƒª%Å¥ñÚ)mg]GYtuà—ÅA,ýí%‘šöš;¿»NÂsEË¢jZ:_Þ|åx`Þâ÷þPÿÔªFiÏÔG›]’ƒn `4›gN
+	Yöáâ½»¶[!¬	ڥ騕„TønB]ö‘Eý-…tÛ4¨+®lDÚk;ø’¼�aÜ	Q¶®³¾>ʾ9Ù¸Î-ÏFðÍdåyKϰºs	vOí^òU8»}øc·wöÙ½zØ;¡œ³Ã™_ÚrÙn‘ýÉЬÁ¯t»7ðBÖa[ä}ÿú{G»×í+š¨òdhþOÞ>ŽW«GF
\û4Ÿ^xßîÅÙ•"ƒÁðâß.ÙýîHJióÄï¶Õ-bºø åk ñî‹ió–PßmPZÕ]‹¦œ…,í«˜2ªâ,8øÚ
×NbÑЃʨë2é9:£§Q8ÑO-¯®´7õÌ­îÛëìÅÕ)<«
4q¾Z´Á9›»ƒðC¡p÷Ÿàô&¿Ýì[ÑØa0™–ŽÈäµEd×}dI”G~`¥‹XAkRJW6šL%þõ‡AˆÁQøýžàâz™KTñ&×d:‡ºñ]O‡¼L×Dù££t|¬!~[
+âÎþù+]¾#e솆¯1§’qÂ#p-Íô‘Ê‚ÈŽÒ[âg¾•ïžvWÏ
+½-ž‡û–;ã
+Yi”v£0 þŲót¦^8ÀÌ_áÒ;¨½çý3®öøŸ¥çðAÀïCû«|ÉÔ‘ïÿè|{e[\Sæ¯tÅP÷-;¿€›z@x6‚Bø޾дòºµº&¿³;xâ¶ú_>²Ú^ïî	™ø5œBŽøgß
+B
+ÀRÊB˜0dÔ’W3: ên«#DK/TµuZcଁˣ”åÒ‚IÝ^;S";ͳО›Ž}>é«OÄÒùõN;âF<ãÊ>=}mâÜ=°ü¼ndÿS`2™¬#8…æowOEA3¤Ÿ¡TI÷6¿”Ê-nÉmwO9E!|woHZ™eó¼”T±âX”µÍž×}Ëo:ùƾFu«â©Ï.N=MgOgl…á×#Ì‘—„ƒ—6%9K‚À\$¹Wè>+*k/WT%ÖE|¥ëÊò»ˆlÓÓª,¯n~ZoC¶8ÇרU¶^÷çùHŠœ—ô‰1H{ÉUmg½(ó@Æ:Š³.qËâû„ðtXÝóûqP­9g­„pØ=ºãwÛý,s÷Ë¿í´òn¶;üw“ݯw>ºæ«Ç©i÷ø—LÂÆg|‘C³ÜÂ67:'Úýï!»ßL.F¼'‰ÈæÿaO0
+ø3¡¤âÆÚ6¾Ã¼¥gå=ª‰#|p Ìî¹}8#q²NüH§Bóèd:³ð‘‡^|áY+©ò£ÔH€° P캪5ÃÇž0Þ©Ük®«¡§.Mz#|G”CCÜÔ²J…„ð¼×÷µu–ÇðÃtצB'©
ÙgÔ)ë#´¤¸ö6æ´•Ô†ì•GŒô‰f„û|¯z¡ù»ûÍÓuPN†pÛ–
të3r;ÑCÉk/‰èoÎeS`š“œ»ëÓÍÃý­kC÷[Hç@k‰$?@#Cè÷°I§lN<×S—ÑQÓ–é5< iL8
edsÒymG]kÚ…þæBÐÚAq¡†ƒ\oSígÎ:C…nÂÉDÍ.zîäµÐª×«¹¡ÆZ¦O™$Ôã58í¨±ÆD»Ð‚‘;¹§¯ôª·Yg戙û6kŠ3¡Ùl6Ì\šÈ}n·n&…”^ê)T˜FÇ•”©ØZâð©´i¹Û	-iÄ1yk½b¶BX[[«P(:þNíøÆ	ãTUUMB133“Çã•mâñ**øŠšzx•Õ“žVTTäææN:
¡¾Y‰‰^^‰Ü+ÌUTÄ©$•ÃÝ-m™ÞœV0¬–VÈ
+C$ׯGÙßT /½:ÜÓ&ËîªJд×jÛëdÁý-E’CÊF„ÛvóocXðŒC(‰¾æ髯¾ú­FŠÅ‰5ÀO"‘ˆ&&±X,ï”Èb±eI{—H*¯Þ[Ÿâ#–Êšk‹%íʉÍÑ+c2YùÑү†Ô¶ó¥ùՁ» HU;[®{pg˜RDZÂ*ξŒæ¥þŠ«JZÙ^ªÉ8'訬(ÆUaì‰Æx§ÉJç솰­­mRÍ_|Á
+¸x‘êdǏÇlfdd@jûûûCC±¬É®]»&õ…,N‚b„Žm“TQŸÀOñiKE2EmÒEaA|MÔ‰†’´6‘¤Ìu¹ /J$‘[›ñÊÊÊÉîݽÃËã¼ÅYAŒñ'©ó¡<Ve§…ç–꺚t‰çjC÷›†z…ñ§z볤ù¼X•´ª9ť庻Q£hNumˆ;¾Ð[®»B‰DžCR8Ã‡/_¾|þüù­­­÷ßÿÕ«Wïºë.<½÷Þ{³²² ‘‘‘€öÛB(’uòS¼kâ]r£ª£ùñ.ÍõÕ-­m5Ñ'«#D}~Û%JõDÄo¡ÅFjšpËh¤žÓuôí¥‘ã'%1ÝLJ
cv#Í&f—1s„–Qým}¹â@ˆ´`Á‚|ZJï¾;á¾}û¬žþù'žxÂßßßÎÎnjÇoa¼KSmpµ÷V]=Ö*¬k“H«¯­Ž8*êèáùløf~}þ{
+�Õþ<Vëù\>KKKlkÖ¬ÁuÿþýgΜٸq#ʍÉÉÔ„vîܹ[B8©fÒY<Äí]uÉÙá
¹RE_]‚‡ðFŒ0/²!+D,ël°:¬]¤R锳Ð"…æÉŽ‹Ét{t¬4¶¬øWHg!EÑúw’æ‘ɦŠÄ-ÓÈ,„P£Ñ`Fäc	3^WW7ƒBnÚÛÛÙø]]]`¤IJ›Ryy¿¼²¦¼²EK¹ª™ÞÒúš›[—Oe¤d˦õgO³ ˆð$	ø5)<B’W’ô
$k+Éý’HRIØËäòC¤=>Mbß#)«Iä´½üñOBŸ'ýM$üeú¨êIYC”UÄÑŽHÓÈå‡IGÑí@qš‚ñð§WàL7§Û£‚+¿üÒ–ÍëÇ)!^óèøeo'Â0ré>z<<ï!y{ˆ(‰T¸ŸûH©qfxy)=N¼Aj¼H[qý	­{‘:7\ÿ™–ó÷“‚ƒ·cSµYg,®¥Ê²-Âjúj§T"b"ƒ-$wé­#EKU+)q$
!¤§–HÒ¹6:’ʽ$Ï%ÿI„Ô³EÒ?'m	DQJe©Ì‰‚š€“Âa„·Ï:3lÁÏrk¦„èF�Ã&GMÙ-¥0¬†p~AB-5Cd°ÉR¶´»5[›†çhÛí3’Í&) 2~K[(ÈÑL€:›››AíÀ'2þ©Ít:”¾†~k²ZR‚
!½½½SÉ'­o*VÔfuððž°®W6}ä ¢€ÝŠ‘šµSéØêc"u)%Ÿ;{d­ŸZ°Œ04žÃ’0˜n¶“>èÎBX\\,“ɬÈñù|0=€
+kKBBf
+õjµZ(âV¥R¥§§'�‹@­©©©®®fÌT³°°°³³shhšûˆÆ$—Ϊëým•mY¾Í©Œú!aÂ9AŒãˆ¦nsü_ƒ¼4V˜pFYŸ-ÉƝRÔ¦×Ea}ëëa#åá12Aë!ËnJÛÒÅ£C½‘B_$	’æ’´‚r΁rùA’³ƒt–°ß’¬Í¤ð0é£8õ5ÿ ]e$ö”¿tRÖzé~ÒUNÜÿž ‘o‘	BL#^'g8å7a)mœü	ýˆb{÷=;ý’‹ÿõPœ„0¸ÐP†êj@‚¦©¡”ÂŽœ6(VfÀ�fTBÖ‹UöõõlVàÙ8HU)&ƒžç½®‹Ÿ¥UJ%u€P^"Œ×ù1Ç™‘²_\£äÕG9ÐîÞŸ³¾ÐpÅ’bŸŽ%ÅêGFFZZZ&CøðCÞyûÍq)†ÐYL²¶Pxj<©¸>IªÜé¤çl')Åi„÷ŸRSzŠxßKêü‰<\z€do!²ù:m€h¹bª>‚ø?C:
+HÎNÊxËΐî*º2zjHÆzrágw^
+¡±aºU\Ø±ðÙL)¹Ä°éîîÖjµÐêp(bîPÆz½&l ‹§ô‹ŽB¦›š(!€át\ïT´uT$öK(´øê)V&uT$Ñ4 ì¬¤|¾_T­¨NêëìªÏ¥
¸§4k`�c2ßÈD+´ |Õ)žŠ ßñD‚ÐË'‚ "Œ ÅÇȨ†”Ÿ!iŽ¢õmÉ]#ç¼…Ê‘½È2IC>i&©t%.ÿD5²Ót(×J7Jj ¸öœ¢}æFjøN[KJÚçtM0úúƒ`¤ls¾óŒÔ0ùh¤§—Áâ¦g^xƒ†ã C–£kTeá®,)+(äHÒ,"N7ºZŽ:#iŽ&]<ΉÈÖ’nüÈd'¥M©˜„&Íä8R“–|Žj:õƒrî-
¥0fZ^c¦
¨ww¤_‚<ææ%œu[o±ò°÷iÆ)¨Þ¦Þ6MšaM÷¸!ÛÃ=\\
ŸAìš²6Õ4Ô¨‹¨äEáh¦‘óM#}ji%2^ Ñ)¨ÈyƒMjI%šéeÃ=-7¡h{³é¶YgÈc¿z4æje;5醺„õQGºh¼èaEMÞ}MjK÷ìäÅ7§º5ÆŸFtaKš;?ì`_s>2ý÷$ý�œõˆmJ<'-¡/ÍleûÎH°èm‚ÐÞÞž?Æý&&777+³ŸT¸víÈ'
+ÎÎÎßêã „;v®GÆ~'Žù­tYPâ[@øÐCÜ]ÏŽ^æêÀØ-¥ùÁðî⧾¦ðÈË
+ÃðâKCŒ#|ñðÚCàðBSoc^WM2záßw”µ)¢RAÌQ8î‡zZx>o·§iš¾ùæ›Pã\]]á‹5Ý»w/*wïÞ
lP>qâÔö°0Ë?vÁ#ˆëÑ£Gßzë-pB”á¸ÇÕÑÑ>aöìÙsýúõÀÀ@æ%
+
+‚C
+:¥õãЗiuTf{ìƍqqqPFñAƒƒƒ}ôÑùóçOž<i]=‡:}ú4ê`§h[è-øªpoÝ¡YÛß%ŸnƒÚlrz•[e ›î“]B„f‡º‡º[QÀ-*
Ú.ƒNÙ#ÈU·ãë±0î:Iµ¨³B???xþ &_¾|™‰Pa¡Ìù‡Jë„¢päUºSRR „ pöìYÌ, Ý°aéS§X3à«‹‹$×I’˜˜ÈB4Ø°X=111_}õ°ÏÉɁ•Ö¡�'®€
W„`YlÛ¶
j>‚V¬X1…Θožk‚FùˆšzäÙ«0ŒÎXÞ‰QÓ[VFFvæ±Æ4dMuð›&„˜;¦ÕA’0³�;Û]7mÚŒJ<b!
+hìãã³hÑ"(…Lª 
@eÙ²efÈì^›7o†ü!ÊnyÁë·X7Ìi@bX‡øøø¨¨(t„Œ<xµgNfÜ¢qØ�!Zæåå¡åT¥bhÜÌMFä%‘f½Ê$}åE?!ðbÄÌE#BÁ}¾—W´gœÎ0cÍDoð-M”“jعH¹¸Þòf”ñI¬IË%«‘eé̐°Ž'¬Î&œ|@”¤·	'§QZÜÁ‹ãÂD‡pò)ù©Ø?E¼^A&Ÿ0™‡~�ÎmFúÂóÏn\¿Ö„TÔò*@,ñj„JZÁ^”1à¥$0R<Å›J`¤ý­E<œ©èz„ßÂM>wr´·BX¼K¯jÄ– -Ъü¶23
`ƒ¦aÒu7Ä:–y}ÊÃ?0G¥ðk8=øEAAˆâ-Ÿâ�Ãá‡
355õ–
@‘¬Töï%è8z™‚ñ­8Î×¾¨ÍÌf4œÐÌe“¢:IQqµ±wà,OÇlosóg0ƒ===žžžùùù ˆ]¿~=Ó’’’Àa°F°»»;kïØ 1b×Þ~ûm˜¿­2µÔwݺu 8°Œ£%TINÔ‰™ŽÁÈÖ
+ø'¾	ìÚŒBðu /cF†‘ð=/\¸�ômƒG¾Ç­òöAl0lÆ™RÁø'H&ƒò9ÅT²öà„Pû Y_¹rÓÍÔü©‚…†eaÁ`¹À¯Zµ
+}F<q±f¡;”D¹¡Œ/ðÊ+¯ /”æU¶²h\/]ºdû/.N/ �‹óBAÄ<©ëää-È¡%
+"4k¨}¨Åg¸nß¾šdÂÚ`Þ¼ylŠ!£˜î´´4Œ !Áèx –°–@+}±c3ÃBÓ€dÚ'—©†è»ë…=�ØCw´A8c	3ΔË9;cû6„ß„ð¹“fˆÅþš§±±±·'xê­�ØelNN &^^^8`Af§ŒÎ¼@¢.@÷%Y¸p!ŒdØ-AgXÈN#&ƒôÚk¯áÄBN/F…0 Î?Øç•õööF_Ø6q¬2ÒÞ2++;˜E18ÐRpÈYÙ33Èegg£€ïDÁtlZ¬ÌŒ/€Â!ÀBFßyçèP'XÈ!("# ˜e+N“ˆ%À�`lºQ;8–:B¿¢0œ²Õ�e6°›¥K—‚m¢ËΝ;ñéŒN<b6tkbd
+ÐâCa,Qb&x„4|2ä0}PÒ("
+ù�C€Bn0kØEÑq…ÐêÀ*ñP«‚Y¥™VÀ^`fh	“7Ô;t±Äj`HC°ñBÖAzñ)P1…5™Æ7ßZ,ìÖðT½99F&¸èˆà+ mƒ¦~.±ý
+W )„mÑl��›‹†ýnàÞcæï‰çë‹ÙGGæBx¬á0š³M.CŒÃ=hÆvEwX€!Sö3³’c“d‘sì:1Ú˜õEGv:Ú üiª“á›øÓï$#ý~äÛŒÿé ����IEND®B`‚
\ No newline at end of file
diff --git a/themes/xtemplate/pushbutton/xtemplate.css b/themes/pushbutton/style.css
similarity index 91%
rename from themes/xtemplate/pushbutton/xtemplate.css
rename to themes/pushbutton/style.css
index 0cb54e511d461657b1dc37e444be0fc7b79f9058..8888443fa6a80c094991cda4d680027e4ae15539 100644
--- a/themes/xtemplate/pushbutton/xtemplate.css
+++ b/themes/pushbutton/style.css
@@ -1,520 +1,539 @@
-/* $Id$ */
-
-/*
-** HTML elements
-*/
-body  {
-  color: #000;
-  background-color: #fff;
-  margin: 0;
-  padding: 0;
-}
-body, p, td, li, ul, ol  {
-  font-family: Verdana, Helvetica, Arial, sans-serif;
-}
-h1, h2, h3, h4, h5, h6 {
-  font-family: "Trebuchet MS", Geneva, Arial, Helvetica, SunSans-Regular, Verdana, sans-serif;
-  margin: 0;
-}
-h1 {
-  color: #369;
-  font-size: 1.6em;
-}
-img {
-  display: block;
-  border: 0;
-}
-tr.dark td, tr.light td {
-  padding: 0.3em;
-}
-a:link {
-  text-decoration: none;
-  font-weight: bold;
-  color: #ff8c00;
-}
-a:visited {
-  text-decoration: none;
-  font-weight: bold;
-  color: #c96;
-}
-a:hover, a:active {
-  font-weight: bold;
-  color: #ff4500;
-  text-decoration: underline;
-}
-fieldset {
-  border: 1px solid #ccc;
-}
-p {
-  margin: 0 0 1.3em 0;
-  padding: 0;
-}
-blockquote {
-  border-left: 4px solid #69c;
-  padding: 0 15px 0 15px;
-  margin: 25px 100px 25px 50px;
-  color: #696969;
-  text-align: left;
-  font-size: 1.2em;
-  line-height: 1.3em;
-  font-family: "Trebuchet MS", Geneva, Arial, Helvetica, SunSans-Regular, Verdana, sans-serif;
-}
-pre {
-  background-color: #eee;
-  padding: 0.75em 1.5em;
-  font-size: 1.2em;
-  border: 1px solid #ddd;
-}
-.form-item {
-  margin-top: 1em;
-}
-.form-item label {
-  color: #369;
-}
-.item-list .title {
-  color: #369;
-  font-size: 0.85em;
-}
-
-/*
-** Page layout blocks / IDs
-*/
-#primary-menu  {
-  background-color: #e0edfb;
-}
-#primary-menu tr {
-  background: transparent url(header-a.jpg) left bottom repeat;
-}
-td#home {
-  background: transparent url(logo-background.jpg) left top repeat;
-}
-td#home a:link img, td#home a:visited img {
-  background: transparent url(logo-active.jpg) repeat;
-  width: 144px;
-  height: 63px;
-}
-td#home a:hover img {
-  background: transparent url(logo-hover.jpg) repeat;
-  width: 144px;
-  height: 63px;
-}
-.primary-links, .primary-links a:link, .primary-links a:visited {
-  color: #369;
-}
-.primary-links a:hover {
-  color: #000;
-}
-#primary-menu .primary-links   {
-  background: transparent url(header-b.jpg) left top no-repeat;
-  font-size: 0.79em;
-}
-#primary-menu .primary-links h1, #primary-menu .primary-links h2, #primary-menu .primary-links h3 {
-  font-size: 2.3em;
-  color: #369;
-}
-#secondary-menu {
-  background-color: #369;
-  border-top: 3px solid #69c;
-  border-bottom: 3px solid #69c;
-}
-.secondary-links, .secondary-links a:link, .secondary-links a:visited  {
-  color: #e4e9eb;
-}
-.secondary-links a:hover {
-  color: #fff;
-  text-decoration: underline;
-}
-#secondary-menu .secondary-links {
-  font-size: 0.85em;
-}
-#content {
-  background-color: #fff;
-}
-#contentstart {
-  background-color: #fff;
-}
-#menu {
-  padding: 0.5em 0.5em 0 0.5em;
-  text-align: right;
-  vertical-align: middle;
-}
-#search .form-text, #search .form-submit {
-  border: 1px solid #369;
-  font-size: 0.85em;
-}
-#search .form-text {
-  width: 8em;
-  height: 1.4em;
-  padding: 0 0.5em 0 0.5em;
-  margin: 0 0 0.5em 0;
-}
-#search .form-submit {
-  height: 1.5em;
-}
-#mission {
-  background-color: #fff;
-  color: #696969;
-  border-top: 2px solid #dcdcdc;
-  border-bottom: 2px solid #dcdcdc;
-  padding: 10px 10px 10px 10px;
-  margin: 20px 35px 0px 35px;
-  font-family: "Trebuchet MS", Geneva, Arial, Helvetica, SunSans-Regular, Verdana, sans-serif;
-  font-size: 1.1em;
-  font-weight: normal;
-}
-#main {
-  /* padding in px not ex because IE messes up 100% width tables otherwise */
-  padding: 30px 35px 50px 35px;
-  background: transparent url(background.png) center center no-repeat;
-}
-#mission, .node .content, .comment .content {
-  line-height: 1.4;
-}
-#help {
-  font-size: 0.9em;
-  margin-bottom: 1em;
-}
-.breadcrumb {
-  margin-bottom: .5em;
-}
-.messages {
-  background-color: #eee;
-  border: 1px solid #ccc;
-  padding: 0.3em;
-  margin-bottom: 1em;
-}
-.error {
-  border-color: red;
-}
-.nav {
-  padding: 0px 0px 0px 0px;
-  margin: 0px 0px 0px 0px;
-}
-#sidebar-left, #sidebar-right {
-  font-size: 0.75em;
-  width: 175px;
-  /* padding in px not ex because IE messes up 100% width tables otherwise */
-  padding: 25px 10px 75px 10px;
-  vertical-align: top;
-  background: #FFFAF0;
-}
-#sidebar-left {
-  border-right: 3px solid #f5f5f5;
-}
-#sidebar-right {
-  border-left: 3px solid #f5f5f5;
-}
-#sidebar-left li, #sidebar-right li {
-  font-size: 1em;
-}
-.node .content {
-  text-align: left;
-  font-size: 0.85em;
-  line-height: 1.3;
-}
-.comment .content {
-  text-align: left;
-  font-size: 0.85em;
-  line-height: 1.3;
-}
-#footer-message {
-  padding: 15px 100px 30px 100px;
-  font-size: 0.85em;
-  text-align: center;
-  color: #aaa;
-}
-table#footer-menu {
-  border-top: 3px solid #6699cc;
-  border-bottom: 3px solid #6699cc;
-  background-color: #369;
-  color: #e4e9eb;
-}
-#footer-menu td {
-  padding: 5px;
-  font-size: 0.75em;
-}
-#footer-menu .primary-links, #footer-menu a:link, #footer-menu a:visited  {
-  color: #e4e9eb;
-}
-#footer-menu a:hover  {
-  color: #fff;
-  text-decoration: underline;
-}
-#footer-menu .primary-links h1, #footer-menu .primary-links h2, #footer-menu .primary-links h3 {
-  font-size: 1.3em;
-  color: #e4e9eb;
-}
-/*
-** Common declarations for child classes of node, comment, block, box, etc.
-** If you want any of them styled differently for a specific parent, add
-** additional rules /with only the differing properties!/ to .parent .class.
-** See .comment .title for an example.
-*/
-#content .title, #content .title a {
-  color: #369;
-}
-.content h1 {
-  color: #369;
-  font-size: 1.9em;
-}
-.content h2 {
-  color: #58b;
-  font-size: 1.7em;
-}
-.content h3 {
-  color: #69c;
-  font-size: 1.5em;
-}
-.content h4 {
-  color: #8be;
-  font-size: 1.3em;
-}
-.content h5 {
-  color: #96c6f6;
-  font-size: 1.15em;
-}
-.submitted {
-  color: #999;
-  font-size: 0.79em;
-}
-.links {
-  color: #ff8c00;
-  font-size: 0.8em;
-  padding: 0px 0px 0px 0px;
-  margin: 0px 0px 0px 0px;
-}
-.links a {
-  font-weight: bold;
-}
-.box {
-  padding: 0 0 1.5em 0;
-}
-.box {
-  padding: 0px 0px 0px 0px;
-  margin: 0px 0px 0px 0px;
-}
-.box h2 {
-  font-size: 9px;
-}
-.block .title h3 {
-  border-bottom: 2px solid #6699cc;
-  color: #369;
-  font-size: 18px;
-  font-weight: bold;
-  padding: 10px 5px 10px 30px;
-  margin-bottom: .25em;
-  background: transparent url(icon-block.png) left center no-repeat;
-}
-.block .content {
-  padding: 5px 5px 5px 5px;
-}
-.block {
-  margin-bottom: 1.5em;
-}
-.box .title {
-  font-size: 1.1em;
-}
-.node {
-  margin: .5em 0 2.5em 0;
-}
-.node .content, .comment .content {
-  margin: .5em 0 .5em 0;
-}
-.node .taxonomy {
-  color: #999;
-  font-size: 0.83em;
-  padding: 1.5em;
-}
-.node .picture {
-  border: 1px solid #fff;
-  float: right;
-  margin: 0.5em;
-}
-.comment {
-  border: 1px solid #abc;
-  padding: .5em;
-  margin-bottom: 1em;
-}
-.comment .title {
-  font-size: 1em;
-  padding: 10px 0px 12px 19px;
-  background: transparent url(icon-comment.png) left center no-repeat;
-}
-.comment .new {
-  font-weight: bold;
-  font-size: 1em;
-  margin-left: 2px;
-  color: red;
-}
-.comment .picture {
-  border: 1px solid #fff;
-  float: right;
-  margin: 10px;
-}
-.links {
-  font-size: 0.75em;
-}
-.links .prev, .links .next, .links .up {
-  font-size: 1.15em;
-}
-.titles .prev, .titles .next  {
-  font-size: 0.85em;
-  font-weight: bold;
-  color: #444;
-}
-.hide {
-  display: none
-}
-.nav .links .next a:link {
-  padding: 15px 15px 17px 0;
-  background: transparent url(arrow-next.png) right center no-repeat;
-}
-.nav .links .next a:hover {
-  padding: 15px 15px 17px 0;
-  background: transparent url(arrow-next-hover.png) right center no-repeat;
-}
-.nav .links .prev a:link {
-  padding: 15px 0 17px 15px;
-  background: transparent url(arrow-prev.png) left center no-repeat;
-}
-.nav .links .prev a:hover {
-  padding: 15px 0 17px 15px;
-  background: transparent url(arrow-prev-hover.png) left center no-repeat;
-}
-.nav .links .up a:link {
-  padding: 11px 0 15px 0;
-  background: transparent url(arrow-up.png) center top no-repeat;
-}
-.nav .links .up a:hover {
-  padding: 11px 0 15px 0;
-  background: transparent url(arrow-up-hover.png) center top no-repeat;
-}
-
-/*
-** Module specific styles
-*/
-.content .active {
-  color: #369;
-}
-#aggregator .feed {
-  background-color: #eee;
-  border: 1px solid #ccc;
-  padding: 1em;
-  margin: 1em 0 1em 0;
-}
-#aggregator .news-item .source {
-  color: #999;
-  font-style: italic;
-  font-size: 0.85em;
-}
-#aggregator .title {
-  font-size: 1em;
-}
-#aggregator h3 {
-  margin-top: 1em;
-}
-#tracker th {
-  text-align: center;
-  background-color: #f5f5f5;
-  border-bottom: 1px solid #ddd;
-  border-right: 1px solid #ddd;
-  border-left: 1px solid #fafafa;
-}
-#tracker th img {
-  float: right;
-}
-#tracker tr.light, #tracker tr.dark {
-  background-color: #fff;
-}
-#tracker td {
-  vertical-align: top;
-  padding: 1em 1em 1em 0;
-  border-bottom: 1px solid #bbb;
-}
-#forum {
-  margin: 15px 0 15px 0;
-  background-color: #fff;
-}
-#forum table {
-  width: 100%;
-  border: 2px solid #69c;
-}
-#forum table tr th {
-  text-align: center;
-  background: #69c;
-  color: #fff;
-  font-size: 0.75em;
-  border-bottom: 1px solid #aaa;
-}
-#forum table tr th a  {
-  color: #fff;
-  text-decoration: underline;
-}
-#forum table tr th img  {
-  margin: 0;
-}
-#forum tr.dark {
-  background: #e0edfb;
-}
-#forum tr.light {
-  background: #fff;
-}
-#forum td {
-  padding: 0.5em 0.5em 0.5em 0.5em;
-}
-#forum td.container {
-  color: #000;
-  background: #369 url(forum-container.jpg) right top no-repeat;
-  border: 2px solid #69c;
-}
-#forum td.container a {
-  color: #e4e9eb;
-  padding: 20px 0 20px 35px;
-  background: transparent url(forum-link.png) left center no-repeat;
-}
-#forum td.container a:visited {
-  color: #e4e9eb;
-}
-#forum td.statistics, #forum td.settings, #forum td.pager {
-  height: 1.5em;
-  border: 1px solid #bbb;
-}
-#forum td .name {
-  color: #96c;
-}
-#forum td .links {
-  padding-top: 0.7em;
-  font-size: 0.9em;
-}
-.block-forum h3 {
-  margin-bottom: .5em;
-}
-.calendar a {
-  text-decoration: none;
-}
-.calendar td, .calendar th {
-  padding: 0.4em 0;
-  border-color: #888;
-}
-.calendar .row-week td a {
-  padding: 0.4em 0;
-}
-.calendar .day-today {
-  background-color: #69c;
-}
-.calendar .day-today a {
-  color: #fff;
-}
-.calendar .day-selected {
-  background-color: #369;
-  color: #fff;
-}
-.calendar .header-week {
-  background-color: #ccc;
-}
-.calendar .day-blank {
-  background-color: #ccc;
-}
-.calendar .row-week td a:hover {
-  background-color: #fff; color: #000;
-}
+/* $Id$ */
+
+/*
+** HTML elements
+*/
+body  {
+  color: #000;
+  background-color: #fff;
+  margin: 0;
+  padding: 0;
+}
+body, p, td, li, ul, ol  {
+  font-family: Verdana, Helvetica, Arial, sans-serif;
+}
+h1, h2, h3, h4, h5, h6 {
+  font-family: "Trebuchet MS", Geneva, Arial, Helvetica, SunSans-Regular, Verdana, sans-serif;
+  margin: 0;
+}
+h1 {
+  color: #369;
+  font-size: 1.6em;
+}
+img {
+  display: block;
+  border: 0;
+}
+tr.dark td, tr.light td {
+  padding: 0.3em;
+}
+a:link {
+  text-decoration: none;
+  font-weight: bold;
+  color: #ff8c00;
+}
+a:visited {
+  text-decoration: none;
+  font-weight: bold;
+  color: #c96;
+}
+a:hover, a:active {
+  font-weight: bold;
+  color: #ff4500;
+  text-decoration: underline;
+}
+fieldset {
+  border: 1px solid #ccc;
+}
+p {
+  margin: 0 0 1.3em 0;
+  padding: 0;
+}
+blockquote {
+  border-left: 4px solid #69c;
+  padding: 0 15px 0 15px;
+  margin: 25px 100px 25px 50px;
+  color: #696969;
+  text-align: left;
+  font-size: 1.2em;
+  line-height: 1.3em;
+  font-family: "Trebuchet MS", Geneva, Arial, Helvetica, SunSans-Regular, Verdana, sans-serif;
+}
+pre {
+  background-color: #eee;
+  padding: 0.75em 1.5em;
+  font-size: 1.2em;
+  border: 1px solid #ddd;
+}
+.form-item {
+  margin-top: 1em;
+}
+.form-item label {
+  color: #369;
+}
+.item-list .title {
+  color: #369;
+  font-size: 0.85em;
+}
+
+/*
+** Page layout blocks / IDs
+*/
+#primary-menu  {
+  background-color: #e0edfb;
+}
+#primary-menu tr {
+  background: transparent url(header-a.jpg) left bottom repeat;
+}
+td#home {
+  background: transparent url(logo-background.jpg) left top repeat;
+}
+td#home a:link img, td#home a:visited img {
+  background: transparent url(logo-active.jpg) repeat;
+  width: 144px;
+  height: 63px;
+}
+td#home a:hover img {
+  background: transparent url(logo-hover.jpg) repeat;
+  width: 144px;
+  height: 63px;
+}
+.primary-links, .primary-links a:link, .primary-links a:visited {
+  color: #369;
+}
+.primary-links a:hover {
+  color: #000;
+}
+#primary-menu .primary-links   {
+  background: transparent url(header-b.jpg) left top no-repeat;
+  font-size: 0.79em;
+}
+#primary-menu .primary-links h1, #primary-menu .primary-links h2, #primary-menu .primary-links h3 {
+  font-size: 2.3em;
+  color: #369;
+}
+#secondary-menu {
+  background-color: #369;
+  border-top: 3px solid #69c;
+  border-bottom: 3px solid #69c;
+}
+.secondary-links, .secondary-links a:link, .secondary-links a:visited  {
+  color: #e4e9eb;
+}
+.secondary-links a:hover {
+  color: #fff;
+  text-decoration: underline;
+}
+#secondary-menu .secondary-links {
+  font-size: 0.85em;
+}
+#content {
+  background-color: #fff;
+}
+#contentstart {
+  background-color: #fff;
+}
+#menu {
+  padding: 0.5em 0.5em 0 0.5em;
+  text-align: right;
+  vertical-align: middle;
+}
+#search .form-text, #search .form-submit {
+  border: 1px solid #369;
+  font-size: 0.85em;
+}
+#search .form-text {
+  width: 8em;
+  height: 1.4em;
+  padding: 0 0.5em 0 0.5em;
+  margin: 0 0 0.5em 0;
+}
+#search .form-submit {
+  height: 1.5em;
+}
+#mission {
+  background-color: #fff;
+  color: #696969;
+  border-top: 2px solid #dcdcdc;
+  border-bottom: 2px solid #dcdcdc;
+  padding: 10px 10px 10px 10px;
+  margin: 20px 35px 0px 35px;
+  font-family: "Trebuchet MS", Geneva, Arial, Helvetica, SunSans-Regular, Verdana, sans-serif;
+  font-size: 1.1em;
+  font-weight: normal;
+}
+#site-info {
+  background-color: #bdd3ea;
+  background-image: none;
+  font-family: "Trebuchet MS", Geneva, Arial, Helvetica, SunSans-Regular, Verdana, sans-serif;
+}
+.site-name {
+  font-size: 1.2em;
+}
+.site-name a:link, .site-name a:visited {
+  color: #fff;
+}
+.site-name a:hover {
+  color: #ff8c00;
+  text-decoration: none;
+}
+.site-slogan {
+  font-size: 0.8em;
+  font-weight: bold;
+}
+#main {
+  /* padding in px not ex because IE messes up 100% width tables otherwise */
+  padding: 30px 35px 50px 35px;
+  background: transparent url(background.png) center center no-repeat;
+}
+#mission, .node .content, .comment .content {
+  line-height: 1.4;
+}
+#help {
+  font-size: 0.9em;
+  margin-bottom: 1em;
+}
+.breadcrumb {
+  margin-bottom: .5em;
+}
+.messages {
+  background-color: #eee;
+  border: 1px solid #ccc;
+  padding: 0.3em;
+  margin-bottom: 1em;
+}
+.error {
+  border-color: red;
+}
+.nav {
+  padding: 0px 0px 0px 0px;
+  margin: 0px 0px 0px 0px;
+}
+#sidebar-left, #sidebar-right {
+  font-size: 0.75em;
+  width: 175px;
+  /* padding in px not ex because IE messes up 100% width tables otherwise */
+  padding: 25px 10px 75px 10px;
+  vertical-align: top;
+  background: #FFFAF0;
+}
+#sidebar-left {
+  border-right: 3px solid #f5f5f5;
+}
+#sidebar-right {
+  border-left: 3px solid #f5f5f5;
+}
+#sidebar-left li, #sidebar-right li {
+  font-size: 1em;
+}
+.node .content {
+  text-align: left;
+  font-size: 0.85em;
+  line-height: 1.3;
+}
+.comment .content {
+  text-align: left;
+  font-size: 0.85em;
+  line-height: 1.3;
+}
+#footer-message {
+  padding: 15px 100px 30px 100px;
+  font-size: 0.85em;
+  text-align: center;
+  color: #aaa;
+}
+table#footer-menu {
+  border-top: 3px solid #6699cc;
+  border-bottom: 3px solid #6699cc;
+  background-color: #369;
+  color: #e4e9eb;
+}
+#footer-menu td {
+  padding: 5px;
+  font-size: 0.75em;
+}
+#footer-menu .primary-links, #footer-menu a:link, #footer-menu a:visited  {
+  color: #e4e9eb;
+}
+#footer-menu a:hover  {
+  color: #fff;
+  text-decoration: underline;
+}
+#footer-menu .primary-links h1, #footer-menu .primary-links h2, #footer-menu .primary-links h3 {
+  font-size: 1.3em;
+  color: #e4e9eb;
+}
+/*
+** Common declarations for child classes of node, comment, block, box, etc.
+** If you want any of them styled differently for a specific parent, add
+** additional rules /with only the differing properties!/ to .parent .class.
+** See .comment .title for an example.
+*/
+#content .title, #content .title a {
+  color: #369;
+}
+.content h1 {
+  color: #369;
+  font-size: 1.9em;
+}
+.content h2 {
+  color: #58b;
+  font-size: 1.7em;
+}
+.content h3 {
+  color: #69c;
+  font-size: 1.5em;
+}
+.content h4 {
+  color: #8be;
+  font-size: 1.3em;
+}
+.content h5 {
+  color: #96c6f6;
+  font-size: 1.15em;
+}
+.submitted {
+  color: #999;
+  font-size: 0.79em;
+}
+.links {
+  color: #ff8c00;
+  font-size: 0.8em;
+  padding: 0px 0px 0px 0px;
+  margin: 0px 0px 0px 0px;
+}
+.links a {
+  font-weight: bold;
+}
+.box {
+  padding: 0 0 1.5em 0;
+}
+.box {
+  padding: 0px 0px 0px 0px;
+  margin: 0px 0px 0px 0px;
+}
+.box h2 {
+  font-size: 9px;
+}
+.block .title h3 {
+  border-bottom: 2px solid #6699cc;
+  color: #369;
+  font-size: 18px;
+  font-weight: bold;
+  padding: 10px 5px 10px 30px;
+  margin-bottom: .25em;
+  background: transparent url(icon-block.png) left center no-repeat;
+}
+.block .content {
+  padding: 5px 5px 5px 5px;
+}
+.block {
+  margin-bottom: 1.5em;
+}
+.box .title {
+  font-size: 1.1em;
+}
+.node {
+  margin: .5em 0 2.5em 0;
+}
+.node .content, .comment .content {
+  margin: .5em 0 .5em 0;
+}
+.node .taxonomy {
+  color: #999;
+  font-size: 0.83em;
+  padding: 1.5em;
+}
+.node .picture {
+  border: 1px solid #fff;
+  float: right;
+  margin: 0.5em;
+}
+.comment {
+  border: 1px solid #abc;
+  padding: .5em;
+  margin-bottom: 1em;
+}
+.comment .title {
+  font-size: 1em;
+  padding: 10px 0px 12px 19px;
+  background: transparent url(icon-comment.png) left center no-repeat;
+}
+.comment .new {
+  font-weight: bold;
+  font-size: 1em;
+  margin-left: 2px;
+  color: red;
+}
+.comment .picture {
+  border: 1px solid #fff;
+  float: right;
+  margin: 10px;
+}
+.links {
+  font-size: 0.75em;
+}
+.links .prev, .links .next, .links .up {
+  font-size: 1.15em;
+}
+.titles .prev, .titles .next  {
+  font-size: 0.85em;
+  font-weight: bold;
+  color: #444;
+}
+.hide {
+  display: none
+}
+.nav .links .next a:link {
+  padding: 15px 15px 17px 0;
+  background: transparent url(arrow-next.png) right center no-repeat;
+}
+.nav .links .next a:hover {
+  padding: 15px 15px 17px 0;
+  background: transparent url(arrow-next-hover.png) right center no-repeat;
+}
+.nav .links .prev a:link {
+  padding: 15px 0 17px 15px;
+  background: transparent url(arrow-prev.png) left center no-repeat;
+}
+.nav .links .prev a:hover {
+  padding: 15px 0 17px 15px;
+  background: transparent url(arrow-prev-hover.png) left center no-repeat;
+}
+.nav .links .up a:link {
+  padding: 11px 0 15px 0;
+  background: transparent url(arrow-up.png) center top no-repeat;
+}
+.nav .links .up a:hover {
+  padding: 11px 0 15px 0;
+  background: transparent url(arrow-up-hover.png) center top no-repeat;
+}
+
+/*
+** Module specific styles
+*/
+.content .active {
+  color: #369;
+}
+#aggregator .feed {
+  background-color: #eee;
+  border: 1px solid #ccc;
+  padding: 1em;
+  margin: 1em 0 1em 0;
+}
+#aggregator .news-item .source {
+  color: #999;
+  font-style: italic;
+  font-size: 0.85em;
+}
+#aggregator .title {
+  font-size: 1em;
+}
+#aggregator h3 {
+  margin-top: 1em;
+}
+#tracker th {
+  text-align: center;
+  background-color: #f5f5f5;
+  border-bottom: 1px solid #ddd;
+  border-right: 1px solid #ddd;
+  border-left: 1px solid #fafafa;
+}
+#tracker th img {
+  float: right;
+}
+#tracker tr.light, #tracker tr.dark {
+  background-color: #fff;
+}
+#tracker td {
+  vertical-align: top;
+  padding: 1em 1em 1em 0;
+  border-bottom: 1px solid #bbb;
+}
+#forum {
+  margin: 15px 0 15px 0;
+  background-color: #fff;
+}
+#forum table {
+  width: 100%;
+  border: 2px solid #69c;
+}
+#forum table tr th {
+  text-align: center;
+  background: #69c;
+  color: #fff;
+  font-size: 0.75em;
+  border-bottom: 1px solid #aaa;
+}
+#forum table tr th a  {
+  color: #fff;
+  text-decoration: underline;
+}
+#forum table tr th img  {
+  margin: 0;
+}
+#forum tr.dark {
+  background: #e0edfb;
+}
+#forum tr.light {
+  background: #fff;
+}
+#forum td {
+  padding: 0.5em 0.5em 0.5em 0.5em;
+}
+#forum td.container {
+  color: #000;
+  background: #369 url(forum-container.jpg) right top no-repeat;
+  border: 2px solid #69c;
+}
+#forum td.container a {
+  color: #e4e9eb;
+  padding: 20px 0 20px 35px;
+  background: transparent url(forum-link.png) left center no-repeat;
+}
+#forum td.container a:visited {
+  color: #e4e9eb;
+}
+#forum td.statistics, #forum td.settings, #forum td.pager {
+  height: 1.5em;
+  border: 1px solid #bbb;
+}
+#forum td .name {
+  color: #96c;
+}
+#forum td .links {
+  padding-top: 0.7em;
+  font-size: 0.9em;
+}
+.block-forum h3 {
+  margin-bottom: .5em;
+}
+.calendar a {
+  text-decoration: none;
+}
+.calendar td, .calendar th {
+  padding: 0.4em 0;
+  border-color: #888;
+}
+.calendar .row-week td a {
+  padding: 0.4em 0;
+}
+.calendar .day-today {
+  background-color: #69c;
+}
+.calendar .day-today a {
+  color: #fff;
+}
+.calendar .day-selected {
+  background-color: #369;
+  color: #fff;
+}
+.calendar .header-week {
+  background-color: #ccc;
+}
+.calendar .day-blank {
+  background-color: #ccc;
+}
+.calendar .row-week td a:hover {
+  background-color: #fff; color: #000;
+}
diff --git a/themes/xtemplate/pushbutton/xtemplate.xtmpl b/themes/pushbutton/xtemplate.xtmpl
similarity index 82%
rename from themes/xtemplate/pushbutton/xtemplate.xtmpl
rename to themes/pushbutton/xtemplate.xtmpl
index 5e148eaac8b83ea53c4275b24e97420115b5980e..a6e9043323ec5572f764d841fa0769f69f7bc1b8 100644
--- a/themes/xtemplate/pushbutton/xtemplate.xtmpl
+++ b/themes/pushbutton/xtemplate.xtmpl
@@ -1,141 +1,163 @@
-<!-- BEGIN: header --><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
-  <title>{head_title}</title>
-  {head}
-  <style type="text/css" media="all">@import "{directory}/xtemplate.css";</style>
-</head>
-
-<body bgcolor="#ffffff" {onload_attributes}>
-
-<div class="hide"><a href="#content" title="Skip navigation." accesskey="2">Skip navigation</a>.</div>
-
-<table id="primary-menu" summary="Navigation elements." border="0" cellpadding="0" cellspacing="0" width="100%">
-  <tr>
-    <td id="home" width="10%"><a href="./" title="Home"><img src="{directory}/logo.png" alt="Home" width="144" height="63" border="0" /></a></td>
-    <td class="primary-links" width="90%"  align="center" valign="middle">{primary_links}</td>
-  </tr>
-</table>
-
-<table id="secondary-menu" summary="Navigation elements." border="0" cellpadding="0" cellspacing="0" width="100%">
-  <tr>
-    <td class="secondary-links" width="75%"  align="center" valign="middle">
-      {secondary_links}
-    </td>
-    <td  width="25%"  align="center" valign="middle">
-      <!-- BEGIN: search_box -->
-      <form action="{search_url}" method="post">
-        <div id="search">
-          <input class="form-text" type="text" size="15" value="" name="keys" alt="{search_description}" />
-          <input class="form-submit" type="submit" value="{search_button_text}" alt="submit" />
-        </div>
-      </form>
-      <!-- END: search_box -->
-    </td>
-    </tr>
-</table>
-
-<table id="content" border="0" cellpadding="15" cellspacing="0" width="100%">
-  <tr>
-    <!-- BEGIN: blocks -->
-    <td id="sidebar-left">
-      {blocks}
-    </td>
-      <!-- END: blocks -->
-    <td valign="top">
-      <!-- BEGIN: mission -->
-      <div id="mission">{mission}</div>
-      <!-- END: mission -->
-      <div id="main">
-        <!-- BEGIN: title -->
-        {breadcrumb}
-        <h1 class="title">{title}</h1>
-        <!-- BEGIN: tabs -->
-        <div class="tabs">{tabs}</div>
-        <!-- END: tabs -->
-
-        <!-- END: title -->
-          <!-- BEGIN: help -->
-        <div id="help">{help}</div>
-        <!-- END: help -->
-        <!-- BEGIN: message -->
-        {message}
-        <!-- END: message -->
-<!-- END: header -->
-
-<!-- BEGIN: node -->
-  <div class="node {sticky}">
-    <!-- BEGIN: picture -->
-    {picture}
-    <!-- END: picture -->
-    <!-- BEGIN: title -->
-    <h1 class="title"><a href="{link}">{title}</a></h1>
-    <!-- END: title -->
-    <span class="submitted">{submitted}</span>
-    <!-- BEGIN: taxonomy -->
-    <span class="taxonomy">{taxonomy}</span>
-    <!-- END: taxonomy -->
-    <div class="content">{content}</div>
-    <!-- BEGIN: links -->
-    <div class="links">&raquo; {links}</div>
-    <!-- END: links -->
-  </div>
-<!-- END: node -->
-
-<!-- BEGIN: comment -->
-  <div class="comment">
-    <!-- BEGIN: picture -->
-    {picture}
-    <!-- END: picture -->
-    <h3 class="title">{title}</h3>
-    <div class="submitted">{submitted}<!-- BEGIN: new --><span class="new"> *{new}</span><!-- END: new --></div>
-    <div class="content">{content}</div>
-    <!-- BEGIN: links -->
-    <div class="links">&raquo; {links}</div>
-    <!-- END: links -->
-  </div>
-<!-- END: comment -->
-
-<!-- BEGIN: box -->
-  <div class="box">
-    <h2 class="title">{title}</h2>
-    <div class="content">{content}</div>
- </div>
-<!-- END: box -->
-
-<!-- BEGIN: block -->
-  <div class="block block-{module}" id="block-{module}-{delta}">
-    <div class="title"><h3>{title}</h3></div>
-    <div class="content">{content}</div>
- </div>
-<!-- END: block -->
-
-<!-- BEGIN: footer -->
-      </div><!-- main -->
-    </td>
-    <!-- BEGIN: blocks -->
-    <td id="sidebar-right">
-      {blocks}
-    </td>
-    <!-- END: blocks -->
-  </tr>
-</table>
-
-<table id="footer-menu" summary="Navigation elements." border="0" cellpadding="0" cellspacing="0" width="100%">
-  <tr>
-    <td align="center" valign="middle">
-      <div class="primary-links">{primary_links}</div>
-      <div class="secondary-links">{secondary_links}</div>
-    </td>
-  </tr>
-</table>
-
-<!-- BEGIN: message -->
-<div id="footer-message">
-  {footer_message}
-</div>
-<!-- END: message -->
-{footer}
-</body>
-</html>
-<!-- END: footer -->
+<!-- BEGIN: header --><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+  <title>{head_title}</title>
+  {head}
+</head>
+
+<body bgcolor="#ffffff" {onload_attributes}>
+
+<div class="hide"><a href="#content" title="Skip navigation." accesskey="2">Skip navigation</a>.</div>
+
+<table id="primary-menu" summary="Navigation elements." border="0" cellpadding="0" cellspacing="0" width="100%">
+  <tr>
+    <td id="home" width="10%">
+    
+      <!-- BEGIN: logo -->
+        <a href="./" title="Home"><img src="{logo}" alt="Home" width="144" height="63" border="0" /></a>
+      <!-- END: logo -->
+           
+    </td>
+
+    <td id="site-info" width="20%">
+
+      <!-- BEGIN: site_name -->
+        <div class='site-name'><a href="./" title="Home">{site_name}</a></div>
+      <!-- END: site_name -->
+
+      <!-- BEGIN: site_slogan -->
+        <div class='site-slogan'>{site_slogan}</div>
+      <!-- END: site_slogan -->
+
+    </td>
+
+    <td class="primary-links" width="70%" align="center" valign="middle">
+         
+      {primary_links}
+    
+    </td>
+  </tr>
+</table>
+
+<table id="secondary-menu" summary="Navigation elements." border="0" cellpadding="0" cellspacing="0" width="100%">
+  <tr>
+    <td class="secondary-links" width="75%"  align="center" valign="middle">
+      {secondary_links}
+    </td>
+    <td  width="25%"  align="center" valign="middle">
+      <!-- BEGIN: search_box -->
+      <form action="{search_url}" method="post">
+        <div id="search">
+          <input class="form-text" type="text" size="15" value="" name="keys" alt="{search_description}" />
+          <input class="form-submit" type="submit" value="{search_button_text}" alt="submit" />
+        </div>
+      </form>
+      <!-- END: search_box -->
+    </td>
+    </tr>
+</table>
+
+<table id="content" border="0" cellpadding="15" cellspacing="0" width="100%">
+  <tr>
+    <!-- BEGIN: blocks -->
+    <td id="sidebar-left">
+      {blocks}
+    </td>
+      <!-- END: blocks -->
+    <td valign="top">
+      <!-- BEGIN: mission -->
+      <div id="mission">{mission}</div>
+      <!-- END: mission -->
+      <div id="main">
+        <!-- BEGIN: title -->
+        {breadcrumb}
+        <h1 class="title">{title}</h1>
+        <!-- BEGIN: tabs -->
+        <div class="tabs">{tabs}</div>
+        <!-- END: tabs -->
+
+        <!-- END: title -->
+          <!-- BEGIN: help -->
+        <div id="help">{help}</div>
+        <!-- END: help -->
+        <!-- BEGIN: message -->
+        {message}
+        <!-- END: message -->
+<!-- END: header -->
+
+<!-- BEGIN: node -->
+  <div class="node {sticky}">
+    <!-- BEGIN: picture -->
+    {picture}
+    <!-- END: picture -->
+    <!-- BEGIN: title -->
+    <h1 class="title"><a href="{link}">{title}</a></h1>
+    <!-- END: title -->
+    <span class="submitted">{submitted}</span>
+    <!-- BEGIN: taxonomy -->
+    <span class="taxonomy">{taxonomy}</span>
+    <!-- END: taxonomy -->
+    <div class="content">{content}</div>
+    <!-- BEGIN: links -->
+    <div class="links">&raquo; {links}</div>
+    <!-- END: links -->
+  </div>
+<!-- END: node -->
+
+<!-- BEGIN: comment -->
+  <div class="comment">
+    <!-- BEGIN: picture -->
+    {picture}
+    <!-- END: picture -->
+    <h3 class="title">{title}</h3>
+    <div class="submitted">{submitted}<!-- BEGIN: new --><span class="new"> *{new}</span><!-- END: new --></div>
+    <div class="content">{content}</div>
+    <!-- BEGIN: links -->
+    <div class="links">&raquo; {links}</div>
+    <!-- END: links -->
+  </div>
+<!-- END: comment -->
+
+<!-- BEGIN: box -->
+  <div class="box">
+    <h2 class="title">{title}</h2>
+    <div class="content">{content}</div>
+ </div>
+<!-- END: box -->
+
+<!-- BEGIN: block -->
+  <div class="block block-{module}" id="block-{module}-{delta}">
+    <div class="title"><h3>{title}</h3></div>
+    <div class="content">{content}</div>
+ </div>
+<!-- END: block -->
+
+<!-- BEGIN: footer -->
+      </div><!-- main -->
+    </td>
+    <!-- BEGIN: blocks -->
+    <td id="sidebar-right">
+      {blocks}
+    </td>
+    <!-- END: blocks -->
+  </tr>
+</table>
+
+<table id="footer-menu" summary="Navigation elements." border="0" cellpadding="0" cellspacing="0" width="100%">
+  <tr>
+    <td align="center" valign="middle">
+      <div class="primary-links">{primary_links}</div>
+      <div class="secondary-links">{secondary_links}</div>
+    </td>
+  </tr>
+</table>
+
+<!-- BEGIN: message -->
+<div id="footer-message">
+  {footer_message}
+</div>
+<!-- END: message -->
+{footer}
+</body>
+</html>
+<!-- END: footer -->
diff --git a/themes/xtemplate/default/logo.png b/themes/xtemplate/default/logo.png
deleted file mode 100644
index 9df6543ea9ad83d207654ab285896e69a5a3201a..0000000000000000000000000000000000000000
--- a/themes/xtemplate/default/logo.png
+++ /dev/null
@@ -1,15 +0,0 @@
-‰PNG
-
-���
IHDR���¾���7���…�¿���tIMEÔ: ùJù��ƒPLTEçe˜Ëf™Ìd–Éb•È`’Å\ÂZŒ¿WŠ½Uˆ»R…¸OƒµM€³K~±†©Ìÿÿÿ\Š¸b”ÄH{®a‘Á‚£ÄFy¬Dwªàéò¡¹ÑBu¨d•Ç¸ÊÞÉÖã@s¦?nž8\Œ6Y…9\ˆ4W‚?hœAs¨š¶Ôéîó^Œ»:d’7Z‰:_;a“3T~Y‡¹z£ÌgºQ~¹r–Æ“°Ò£»ÙHv´>fšNz¨W«X…²_¿_Ž½[ˆµm“ÅÈÖéôöù×ãð²È৾ÛÕàëGt°Jt£EnCk—@g“d‰¬s“²|™¶”­ÅS{¤}›¸§ºÍ‡¢¼™²ÊFpŸ<aXƒ¼¬ÑBl£‚¤ÍvšÉÞæíÇÓàÓÝç<b•@i :bŽyÀÁÒã½ÎátžÇŠ¥Á=d—L{·EqªËÙèÎÜìcŽ¸ÄÕèëñö­ÄÜeÁ|žÊ^‡¾ª¿Ôœ¸×n›ÊöùüFs­q™¿ûüýž·Ø‡«Ñ«Éj—Äf˜Ìp—½Cn¦•¶Ø‹°Öž¾Ýk–Èz�Â=���tRNS�@æØf���	pHYs��N ��N }™Þ��	”IDAThÞÕ˜û[Ú؆‰á"T…©6¶Be
-SE¹ ¨õ~l´ÀŒ8[
-Ø"§ÓÓ9vêŸ>û–dïHª}žöQ×O!$;ï^ù¾µ×ŽÉtÓènºÇÁGâ÷ÿr~éÓKgr,p_á;—-Y–—¥{ˆnæ;­ýˆcyЖ¼_ð–ËöÙ†—/d¹v±”àî;×¹lGŠÅ®LâF配¿µ²“ÙÝýk¿Bå/•J¾Û}ÐMy72W¨gºE•áƒð-Üy]¶çgöI·XTù/
Äòçïdæ÷
-ÑHÒC~*ýß÷òNówZÅh¡ŒÙ™ôü»Ío™¾É¨ôjúµìûbwW?|»8ÇÐiñc|ßqâ®ÒïÏ·û4}¯ìû¦ÄÛY¾æaüc\tÎ"§s½èüXìvzPéÜ	ã“Ñâiží.ŽŸÜ�ÿ•ë6ð½sÆ_Š´N3ôßñ—oC;ÏýAÀ rp™n´)w™²Ã¬º*~õ­þOÍFnÔé|—«ù™5IGøu#ãYÎvOA{ßíö g´s\
/¨sοsjñî'N@( GŒ	FÆ•÷šó2äWCj5¼¢Ü4íd£ñÓøEü€£½SFÎïAØ®|•^«úÿÉ?§Ãwæ?I”Ëȹ'‘|FéðUt5÷ŒvÂA²tñM4¦g}}ۏǟþIkqnÊè‚n«‘{„$?ìY`ù8žN'â˜ÿ¿çšäHÛ˜¾F%ŸÂ'‚|Ÿäy!°ßÑÕô×z.‡í@¯—:ÌãwÔù’‡ET­¦î¥M7ßÀ›Ïs¯øa¾#âƒ
ÕEx*÷JòCž%F#pPá-þq¤+HC’„|€ï¥ƒO–EþyC›¦ÞÑJø§ýOnZKÔ’1>ÚÓÒSÉy^Ò‚Ä+! ¸œ
-‰Ôêâ?ã£6x47„³)ÎÄ7XӏvÔb¬+G`Ä¡kœ³'pAmÐz´âBzŸҏWÂÁçH"‡ËS>šx½’Tåà¬Tˆé#Ó:¨T²Ú\£øZCçšð~ö‚’J¯UM|"ŹØOŸU|y°º¹º‘–(dåŽ÷¢*‡µÍøæU´}vœßVo”qY6nv/j˜Ó–Tx’ûà®bú'¸À8
ª¤à§ø|:…lqBÿ'¨rH$ÅT¼Ž› ýÜL¿–NŠíFáàçš &‚-ׇs'µ;–Ëùzt7®BzO0~ŹªþË+à<Çs4²Ò6‚k(9pâ:.€+ˆÍÿt	&jåÍþ_ú&~­T+â̝GO|5%óÇÅg¸Ù^Œ… t<“hÙ"ÄOÄN`¶·ÕMŠ
À5ä
!9H#_4q°ìÒÓ"+Ž¯é],ñ‚â9ÿP͇S+û•“‹!˜|ÏSã�Á!½+V’HâhÒé¢G<jýšø!_ßHrê\á0´}b¡¶©‚UhÅ|@7gt}Þ…ôÁácAÖ“´sóbŸ)ÒåIïÜÏT!—š
->Iø[IëHà0Š™¾±MM”@²cl1nFb‘æGúÌ"Â_àyÀŸÄ§Æ°sñkï£½Ê Ó¦Òª©òÇEò¦*è½ÑUʯ٧÷fÅÄ¿µ±–Ó-çºß¹ª'|j5ó †T炧I8AÙ4ßGYŽêtÍë3<+µ®0õ‘ºñ³f|Ž[€¥½ÀÒšºµ`0¸b†a!ÎMK@HÊê)îïiƹÔ/Rœüšsñ:Rê
-³'™¾©s9×Çq"À¯6™u¼)•4ß"9|ïsŒdì>yp7ɦ󁆄
-^Ô~<ÖÉAÛÆ’³hOÂk›[ÊñF¹çx~Á;Žh¤Ùh¤T…¾»¨û˜	ƒä[aXl~â\èƒLh™ím‰•äŠL55I£¤½Pô2ij-2k&z³e9+û§‡-¹Ùû«Ü
…wÕÚ•ò6›Õfµ’stˁtŽˆú])ã\Í,s”>ácPn’t¸Ç³›[ÖL=à!½YH€ô‡Û0çö¼/=oäçm°TÍþ†¶âs] %»½¿¿ßf!	ͼ™¼ fš×ïJE‚/0>Z¼Ð¾™øoy$vsûíO<Ð9/€Ž²*·ö÷[ÅZ5Ôòï˱ꬬ´Ç‘ýrû
-ÿ…Ãá°;ìvû{2¾åè©WoÅ+»R‚Ûa¥“K1ïdKç &(ìí�3»^¶EôV«m	àWQgY
û"¥0ØYÈh©
CoÐûûÀÀǃ×úmº&Å©^Uv¥$¡ ä*5ª™Èá4Ÿ'ºÌÎÀ…Vz‹Ï;ßäïÔaØe°‡x@ò@oµõ/¯Â€ýe¢&
¬U0&„æ0è×Ѭ$Í«Ê®TÑϪùH?óµ�Úò¤þÔýA9wL4ÔI~¿Ý±ü
-#WkžP¢vo5¬Ð»ÝÃ0ÀÜìs²Ûñ€™ÓÖ å{ïÚց>Ó}`y½êÂN‘ÒÙ+s¥¾«ô}¨ê`z»ãÁKÄïÙÝ+!fo0V݇‡ÞÉ©‡ Üh
-ƒîÍ
m;؉'’æžß“„Ä–&³ìëUg~œßŠÈÕœ^W'PÙYMK×|âÁøf’ü§PÊ3¿esùÅèb¾Íͼ×;ñšÁð°{iyåÅêÚúØÆÚúÒfÂ%pØYb|D< <Œ\ñÍ­õííÿ¬oÅ7㉔¤Êa{uk}l·\¢JÆ	øæÚú¸z
^,€%5‰G
k>ÒŽ
ãO„‚žP0™‹F£Ï†fçcAï¯Þ©'Ožüòž�֐{E<ñ< šQ
-Õ"&AˆÔÆ‚S®t"‘N»à<G½¡´Ëå
-¤D&­¼€ÏFiøºØ$áù›â»'¦&ƒTmàÖ68ùk³ø@ÿ°=ï·Y-f3¯à÷þHÆK‚–7ö‹ß8Å÷¸‰ã%Iâoö¹ñŠx¿ûÉ„ÇûÔ;99éõNz}�ýBWŃʏÃà=l|¾ó‹Ÿ?ð>ˆê­‹ó&à†>}øˆŽ‡”uQîíßò}øTëöø™Â	ùñÐP(Ô(”‰”£ÐCü›§’ì+Ç~>µlÙÕ	’9èCY¶ <¢·ZDsüoò獵š[?š€ö0Ù@çpÓ�áAãF’F¹é#¯ýâw]ü1ß~àš2����IEND®B`‚
\ No newline at end of file
diff --git a/themes/xtemplate/pushbutton/arrow-next-hover.png b/themes/xtemplate/pushbutton/arrow-next-hover.png
deleted file mode 100644
index 63ee4b62c03f2e45acf42e7a9a5f131b64deca88..0000000000000000000000000000000000000000
--- a/themes/xtemplate/pushbutton/arrow-next-hover.png
+++ /dev/null
@@ -1,4 +0,0 @@
-‰PNG
-
-���
IHDR���
-������ÝQós���tIMEÔ�,ì6ýL���$PLTEÿÿÿÿÝÐÿt@ÿ¢€ÿE�ÿ‹`ÿPÿôðÿh0ÿº ÿÅ°ÿQô°Ð*���tRNS�@æØf���	pHYs��N ��N }™Þ���7IDATWc(žÀ�)®`Ò%�HJ»€8Œ[09".^@²ÄÅ“½$R’EbBMP›&d�$�ÅåAšs’����IEND®B`‚
\ No newline at end of file
diff --git a/themes/xtemplate/pushbutton/arrow-next.png b/themes/xtemplate/pushbutton/arrow-next.png
deleted file mode 100644
index 93586270d8159ddef08d8dfdec38446221d85406..0000000000000000000000000000000000000000
--- a/themes/xtemplate/pushbutton/arrow-next.png
+++ /dev/null
@@ -1,4 +0,0 @@
-‰PNG
-
-���
IHDR���
-������ÝQós���tIMEÔ�,|‰àÝ���$PLTEÿÿÿÿêÐÿ©@ÿÆ€ÿŒ�ÿ·`ÿ°Pÿøðÿ¢0ÿÔ ÿÛ°ÿ“š¥’2���tRNS�@æØf���	pHYs��N ��N }™Þ���7IDATWc(žÀ�)®`Ò%�HJ»€8Œ[09".^@²ÄÅ“½$R’EbBMP›&d�$�ÅåAšs’����IEND®B`‚
\ No newline at end of file
diff --git a/themes/xtemplate/pushbutton/arrow-prev-hover.png b/themes/xtemplate/pushbutton/arrow-prev-hover.png
deleted file mode 100644
index ad681de2c34f14a493359cfdc137775966047c33..0000000000000000000000000000000000000000
--- a/themes/xtemplate/pushbutton/arrow-prev-hover.png
+++ /dev/null
@@ -1,4 +0,0 @@
-‰PNG
-
-���
IHDR���
-������ÝQós���tIMEÔ�+;…®['���*PLTEÿÿÿÿÝÐÿPÿ—pÿQÿE�ÿÑÀÿº ÿt@ÿ‹`ÿôðÿh0ÿÅ°ÿ¢€œIØ���tRNS�@æØf���	pHYs��N ��N }™Þ���<IDAT•c```X[�$¸¶Æ�ÉÕ¡1 fè3…É Ú�$[A"¡á@’Ñ5´�“æ„I!�ªD!ñ*×����IEND®B`‚
\ No newline at end of file
diff --git a/themes/xtemplate/pushbutton/arrow-prev.png b/themes/xtemplate/pushbutton/arrow-prev.png
deleted file mode 100644
index a808494ab513a84d54bb7e4d5bdc4fa542dc70b8..0000000000000000000000000000000000000000
--- a/themes/xtemplate/pushbutton/arrow-prev.png
+++ /dev/null
@@ -1,4 +0,0 @@
-‰PNG
-
-���
IHDR���
-������ÝQós���tIMEÔ�+5bv ���*PLTEÿÿÿÿêÐÿ°Pÿ¿pÿ“ÿŒ�ÿãÀÿÔ ÿ©@ÿ·`ÿøðÿ¢0ÿÛ°ÿÆ€ …'���tRNS�@æØf���	pHYs��N ��N }™Þ���<IDAT•c```X[�$¸¶Æ�ÉÕ¡1 fè3…É Ú�$[A"¡á@’Ñ5´�“æ„I!�ªD!ñ*×����IEND®B`‚
\ No newline at end of file
diff --git a/themes/xtemplate/pushbutton/arrow-up-hover.png b/themes/xtemplate/pushbutton/arrow-up-hover.png
deleted file mode 100644
index 5ee595f113824f3eae8a8bbbe26921967a84ebf7..0000000000000000000000000000000000000000
--- a/themes/xtemplate/pushbutton/arrow-up-hover.png
+++ /dev/null
@@ -1,4 +0,0 @@
-‰PNG
-
-���
IHDR������
-���OÃ¯���tIMEÔ�+/ŸtZ���-PLTEÿÿÿÿÝÐÿ‹`ÿ®ÿPÿt@ÿE�ÿQÿº ÿÑÀÿôðÿh0ÿ\ ÿ¢€ÿÅ°<’µ\���tRNS�@æØf���	pHYs��N ��N }™Þ���HIDAT•c```Xû€¸¶e@«ÓÒ ii°P@A$´:-‰±(ä–¦ÀÀ ž–É–TÇX–Á d�Ò!¢��NX$)aÂ����IEND®B`‚
\ No newline at end of file
diff --git a/themes/xtemplate/pushbutton/arrow-up.png b/themes/xtemplate/pushbutton/arrow-up.png
deleted file mode 100644
index 80f005bb8e2fec6655d00f142281fb9324a2cbbc..0000000000000000000000000000000000000000
--- a/themes/xtemplate/pushbutton/arrow-up.png
+++ /dev/null
@@ -1,4 +0,0 @@
-‰PNG
-
-���
IHDR������
-���OÃ¯���tIMEÔ�+'‘¯h���-PLTEÿÿÿÿêÐÿ·`ÿ͐ÿ°Pÿ©@ÿŒ�ÿ“ÿÔ ÿãÀÿøðÿ¢0ÿš ÿÆ€ÿÛ°
%ò¨���tRNS�@æØf���	pHYs��N ��N }™Þ���HIDAT•c```Xû€¸¶e@«ÓÒ ii°P@A$´:-‰±(ä–¦ÀÀ ž–É–TÇX–Á d�Ò!¢��NX$)aÂ����IEND®B`‚
\ No newline at end of file