diff -Naurw third-party/macrotags/macros.inc macrotags/macros.inc
--- third-party/macrotags/macros.inc	2004-11-25 05:00:32.000000000 +0200
+++ macrotags/macros.inc	2005-02-10 21:32:59.000000000 +0200
@@ -63,7 +63,7 @@
                           $dsp_empties = false, $dsp_vocab_name = false, $dsp_count = false, $node_type = 0) {
 
   if ($order_by == "") {
-    $order_by = 'static DESC, n.title DESC, created DESC';
+    $order_by = 'sticky DESC, n.title DESC, n.created DESC';
   }
 
   $v = (is_numeric($vid)) ? taxonomy_get_vocabulary($vid) : taxonomy_get_vocabulary_by_name($vid);
@@ -107,7 +107,7 @@
 }
 
 // given a taxonomy tree, add nodes below all relevant terms
-function macrotags_taxonomy_inject_nodes($tree, $type = NULL, $order_by = 'static DESC, n.title DESC, created DESC') {
+function macrotags_taxonomy_inject_nodes($tree, $type = NULL, $order_by = 'sticky DESC, n.title DESC, n.created DESC') {
 
   // Rebuild the array index. The keys need to start at zero. Is this the fastest way?
   foreach ($tree as $term) {
@@ -127,7 +127,7 @@
       if (module_exist('comment')) {
         $detail = t("Author: %name, comments: %num", array ("%name" => strip_tags(format_name($node)), "%num" => comment_num_all($node->nid)));
       }
-      $link = l($node->title, "node/view/$node->nid", array ("title" => $detail));
+      $link = l($node->title, "node/$node->nid", array ("title" => $detail));
       $term_node = array2object(array ("nid" => $node->nid, "depth" => $term->depth+1, "link" => $link));
       $part1 = array_slice($tree_node, 0, $i+1);
       $part2 = array_slice($tree_node, $i+1, count($tree_node));
@@ -157,7 +157,7 @@
     $old_depth = $term->depth;      
     // if children exist, output with proper class and id attributes, else, output item with specified link or default link
     if ($term->depth < $tree[$curr+1]->depth) {
-      $link = l(t($term->name), "taxonomy/view/or/". $term->tid, array("title" => t($term->description)));
+      $link = l(t($term->name), "taxonomy/term/". $term->tid, array("title" => t($term->description)));
       $output .= '<li class="mt_menubar"><div class="mt_menubar_anchor">'.$link."</div>\n";
     }
     else if ($term->link) {
@@ -165,7 +165,7 @@
       $output .= "<li>$link</li>\n";  
     } 
     else {
-      $link = l(t($term->name), "taxonomy/view/or/". $term->tid, array("title" => t($term->description)));
+      $link = l(t($term->name), "taxonomy/term/". $term->tid, array("title" => t($term->description)));
       $output .= "<li>$link</li>\n";  
     }
     
@@ -189,52 +189,22 @@
   return $output;
 }
 
-function mt_taxonomy_term($tid, $order_by = '') {
+function mt_taxonomy_term($tid) {
 
+  $tids = array();
   foreach (explode(',', $tid) as $t) {
     $t = trim($t);
     if (!is_numeric($t)) {
       $term = taxonomy_get_term_by_name($t);
-      $tids_str .= $term[0]->tid. ',';
+      $tids[] = $term[0]->tid;
     }
     else {
-      $tids_str .= $t. ',';
+      $tids[] = $t;
     }
   }
-  $tids_str = substr($tids_str, 0, -1);
 
-  $taxonomy->operator = "or";
-  $taxonomy->tids = $tids_str;
-  $taxonomy->str_tids = $tids_str;
-
-  if ($order_by == "") {
-    $order_by = 'static DESC, n.title DESC, created DESC';
-  }
-
-  global $user;
-
-  if ($taxonomy->str_tids) {
-    if ($taxonomy->operator == "or") {
-      $sql = "SELECT DISTINCT(n.nid), n.title, n.type, n.created, n.changed, n.uid, n.static, n.created, u.name FROM {node} n INNER JOIN {term_node} r ON n.nid = r.nid INNER JOIN {users} u ON n.uid = u.uid WHERE r.tid IN ($taxonomy->str_tids) AND n.status = '1' ORDER BY $order_by";
-      $sql_count = "SELECT COUNT(DISTINCT(n.nid)) FROM {node} n INNER JOIN {term_node} r ON n.nid = r.nid INNER JOIN {users} u ON n.uid = u.uid WHERE r.tid IN ($taxonomy->str_tids) AND n.status = '1'";
-    }
-    else {
-      $sql = "SELECT n.nid, n.title, n.type, n.created, n.changed, n.uid, u.name FROM {node} n INNER JOIN {term_node} r ON n.nid = r.nid INNER JOIN {users} u ON n.uid = u.uid WHERE r.tid IN ($taxonomy->str_tids) AND n.status = '1' GROUP BY n.nid, n.title, n.type, n.created, n.changed, n.uid, u.name HAVING COUNT(n.nid) = ". count($taxonomy->tids) .$order_by;
-
-      // Special trick as we could not find anything better:
-      $count = db_num_rows(db_query("SELECT n.nid FROM {node} n INNER JOIN {term_node} r ON n.nid = r.nid WHERE r.tid IN ($taxonomy->str_tids) AND n.status = '1' GROUP BY n.nid HAVING COUNT(n.nid) = ". count($taxonomy->tids)));
-      $sql_count = "SELECT $count";
-    }
-
-    if ($pager) {
-      $result = pager_query($sql, variable_get("default_nodes_main", 10) , 0, $sql_count);
-    }
-    else {
-      $result = db_query_range($sql, 0, 15);
-    }
-  }
-
-  return node_title_list($result, "");
+  return taxonomy_render_nodes( taxonomy_select_nodes( $tids ));
+  //return node_title_list($result, "");
 }
 
 function mt_link_help($section = 'short-tip') {
@@ -283,12 +253,13 @@
   /*
   if (!module_exist('title')) {
     $nid = db_result(db_query("SELECT nid FROM {node} WHERE title = '%s'", $title));
-    $uri = "node/view/$nid";
+    $uri = "node/$nid";
   }
   else {
     $uri = "macrotags/title/".urlencode($title);
   }
   */
+
   $uri = "macrotags/title/".urlencode($title);
 
   if (!$linktext) {
@@ -312,7 +283,7 @@
 
     if (db_num_rows($result) == 0) {
       // No node with exact title found, try substring.
-      $result = db_query("SELECT n.*, u.name, u.uid FROM {node} n INNER JOIN {users} u ON n.uid = u.uid WHERE n.title LIKE '%". db_escape_string($title) ."%' AND n.status = 1 ORDER BY n.created DESC");
+      $result = db_query("SELECT n.*, u.name, u.uid FROM {node} n INNER JOIN {users} u ON n.uid = u.uid WHERE n.title LIKE '%". check_query($title) ."%' AND n.status = 1 ORDER BY n.created DESC");
     }
 
     if (db_num_rows($result) == 0 && module_exist("search")) {
diff -Naurw third-party/macrotags/macrotags.module macrotags/macrotags.module
--- third-party/macrotags/macrotags.module	2004-03-09 07:37:19.000000000 +0200
+++ macrotags/macrotags.module	2005-02-10 21:13:28.000000000 +0200
@@ -16,12 +16,18 @@
  *
  * @return string The text after this filter has been applied.
  */
-function macrotags_filter($op, $text) {
+function macrotags_filter($op, $delta = 0, $format = -1, $text = '') {
 
+  //drupal_set_message("macrotags_filter invoked with \$op=$op");
   switch ($op) {
+    case 'list':
+      return array(t("Macrotags Filter"));
     
     case 'name':
-      return t('Macrotags');
+      return t("Macrotags Filter");
+
+    case 'description':
+      return t("Allows you to create diverse meta tags.");
     
     case 'prepare':
       return $text;
@@ -32,6 +38,9 @@
     case 'settings':
       $output = form_radios(t("Parse Macrotags"), "macrotags_filter_link", variable_get("macrotags_filter_link", 0), array(t("Disabled"), t("Enabled")), t("Enable html tags that map to specific php functions."));
       return form_group(t("Macrotags filter"), $output);
+
+    default:
+      return $text;
   }
 }
 
@@ -45,10 +54,10 @@
 function macrotags_help($section = "admin/help#macrotags") {
 
   switch ($section) {
-    case "admin/system/modules#description":
+    case "admin/modules#description":
       $output = t("Enables users to execute dynamic content with minimal semantics.");
       break;
-    case 'admin/system/modules/macrotags':
+    case 'admin/settings/macrotags':
       $output = t('Assign macros users can execute if they belong to that role.  Anybody can call a macro, but it will only execute if the user viewing it is in a role that is allowed.  For each role form, please enter one macro per line.');
       break;
     case "admin/help#macrotags":
@@ -74,12 +83,27 @@
  *
  * @param string $type The type of links requested.
  */
+ /*
 function macrotags_link($type) {
   if ($type == "system") {
-    /* hidden link to macrotags */
+    // hidden link to macrotags
     menu("macrotags", t("macrotags"), "macrotags_page", 0, MENU_HIDE);
   }
 }
+*/
+
+function macrotags_menu($may_cache) {
+   $items = array();
+
+   if ($may_cache) {
+     $items[] = array('path' => 'macrotags', 'title' => t('Macrotags'),
+       'callback' => 'macrotags_page',
+       'access' => user_access('access content'),
+       'type' => MENU_CALLBACK);
+   }
+
+   return $items;
+ }
 
 /**
  * Drupal hook that returns an array of valid permissions for this
@@ -340,7 +364,7 @@
   
   $mt_perm = macrotags_to_array(variable_get("macrotags_role_$user->rid", ''));
   
-  $output = t("<p>List of available macrotags:</p>");
+  $output = t("List of available macrotags:<br />");
   
   $found_macro = false;
   foreach (get_defined_macros() as $name) {
@@ -354,11 +378,28 @@
         $tip = $help_func($section);
         $found_macro = true;
       }
+      if ( $section == 'short-tip' )
+        $buf .= "<code>" . preg_replace( '/\[([^|]*)/', '[<em>\1</em>',
+          preg_replace('/.*<pre>(.*)<\/pre>.*/', '\1', $tip)) . "</code> ";
+      else
       $buf .= "<li><strong>$nice_name</strong>: $tip</li>";
     }        
   }
-  $output .= ($found_macro) ? "<ul>$buf</ul>" : t("<p>You do not have access to any macrotags.</p>");
+  $output .= ($found_macro)
+     ? (($section == 'short-tip') ? $buf : "<ul>$buf</ul>")
+     : t("<p>You do not have access to any macrotags.</p>");
   
   return $output;
 }
+
+/**
+ * Implementation of hook_filter_tips().
+ */
+function macrotags_filter_tips($delta, $format, $long = false) {
+  if($long)
+    return macrotags_get_help( 'long-tip' );
+  else
+    return macrotags_get_help( 'short-tip' );
+}
+
 ?>
