diff -ruN old/archive.module new/archive.module
--- old/archive.module	2004-05-02 17:45:30.000000000 +0200
+++ new/archive.module	2004-06-05 15:48:58.000000000 +0200
@@ -71,7 +71,7 @@
   $next = mktime(23, 59, 59, $month + 1, min(date("t", $nextmonth), $day), $year);
 
 
-  $result = db_query("SELECT created FROM {node} WHERE status = 1 AND created > $start_of_month AND created < $end_of_month");
+  $result = db_query("SELECT n.created FROM {node} n INNER JOIN {term_node} t ON n.nid = t.nid WHERE t.tid IN (". groups_get_terms() .") AND n.status = 1 AND n.created > $start_of_month AND n.created < $end_of_month");
 
   $days_with_posts = array();
   while ($day_with_post = db_fetch_object($result)) {
@@ -236,12 +236,11 @@
   ** Fetch nodes for the selected date, or current date if none
   ** selected.
   */
-
   if ($year && $month && $day) {
-    $result = db_query_range("SELECT nid FROM {node} WHERE status = '1' AND created > %d AND created < %d ORDER BY created", $date, $date_end, 0, 20);
-
-    while ($nid = db_fetch_object($result)) {
-      $output .= node_view(node_load(array("nid" => $nid->nid)), 1);
+	$result = db_query_range("SELECT n.nid FROM {node} n INNER JOIN {term_node} t ON n.nid = t.nid WHERE t.tid IN (". groups_get_terms() .") AND n.status = '1' AND n.created > %d ORDER BY n.created", $date, 0, 20);
+ 
+       while ($nid = db_fetch_object($result)) {
+         node_view(node_load(array("nid" => $nid->nid)), 1);
     }
   }
   print theme("page", $output);
diff -ruN old/blog.module new/blog.module
--- old/blog.module	2004-05-02 17:45:30.000000000 +0200
+++ new/blog.module	2004-06-05 16:58:00.000000000 +0200
@@ -84,18 +84,19 @@
     $account = $user;
   }
 
-  $result = db_query_range("SELECT n.nid, n.title, n.teaser, n.created, u.name, u.uid FROM {node} n INNER JOIN {users} u ON n.uid = u.uid WHERE n.type = 'blog' AND u.uid = %d AND n.status = 1 ORDER BY n.nid DESC", $uid, 0, 15);
-  $channel["title"] = $account->name ."'s blog";
-  $channel["link"] = url("blog/view/$uid", NULL, NULL, TRUE);
-  $channel["description"] = $term->description;
+	$result = db_query_range("SELECT n.nid, n.title, n.teaser, n.created, u.name, u.uid FROM {node} n INNER JOIN {users} u ON n.uid = u.uid INNER JOIN {term_node} t ON n.nid = t.nid WHERE t.tid IN (". groups_get_terms() .") AND n.type = 'blog' AND u.uid = %d AND n.status = 1 ORDER BY n.nid DESC", $uid, 0, 15);
+   $channel["title"] = $account->name ."'s blog";
+   $channel["link"] = url("blog/view/$uid");
+   $channel["description"] = $term->description;
+
   node_feed($result, $channel);
 }
 
 function blog_feed_last() {
-  $result = db_query_range("SELECT n.nid, n.title, n.teaser, n.created, u.name, u.uid FROM {node} n INNER JOIN {users} u ON n.uid = u.uid WHERE n.type = 'blog' AND n.status = 1 ORDER BY n.nid DESC", 0, 15);
-  $channel["title"] = variable_get("site_name", "drupal") ." blogs";
-  $channel["link"] = url("blog");
-  $channel["description"] = $term->description;
+	$result = db_query_range("SELECT n.nid, n.title, n.teaser, n.created, u.name, u.uid FROM {node} n INNER JOIN {users} u ON n.uid = u.uid INNER JOIN {term_node} t ON n.nid = t.nid WHERE t.tid IN (". groups_get_terms() .") AND n.type = 'blog' AND n.status = 1 ORDER BY n.nid DESC", 0, 15);
+   $channel["title"] = variable_get("site_name", "drupal") ." blogs";
+   $channel["link"] = url("blog");
+   $channel["description"] = $term->description;
   node_feed($result, $channel);
 }
 
@@ -105,10 +106,12 @@
   $title = t("%name's blog", array("%name" => $account->name));
   $output = "";
 
-  $result = pager_query("SELECT nid FROM {node} WHERE type = 'blog' AND uid = '$account->uid' AND status = 1 ORDER BY nid DESC", variable_get("default_nodes_main", 10));
-  while ($node = db_fetch_object($result)) {
-    $output .= node_view(node_load(array("nid" => $node->nid)), 1);
-  }
+	$result = pager_query("SELECT n.nid FROM {node} n INNER JOIN {term_node} t ON n.nid = t.nid WHERE t.tid IN (". groups_get_terms() .") AND n.type = 'blog' AND n.uid = '$account->uid' AND n.status = 1 GROUP BY n.nid ORDER BY n.nid DESC", variable_get("default_nodes_main", 10));
+
+   while ($node = db_fetch_object($result)) {
+     node_view(node_load(array("nid" => $node->nid)), 1);
+   }
+
   $output .= theme('pager', NULL, variable_get("default_nodes_main", 10));
   $output .= theme('xml_icon', url("blog/feed/$account->uid"));
 
@@ -120,11 +123,10 @@
   global $user;
 
   $output = "";
-
-  $result = pager_query("SELECT nid FROM {node} WHERE type = 'blog' AND status = 1 ORDER BY nid DESC", variable_get("default_nodes_main", 10));
-
-  while ($node = db_fetch_object($result)) {
-    $output .= node_view(node_load(array("nid" => $node->nid)), 1);
+	$result = pager_query("SELECT n.nid FROM {node} n INNER JOIN {term_node} t ON n.nid = t.nid WHERE t.tid IN (". groups_get_terms() .") AND n.type = 'blog' AND n.status = 1 GROUP BY n.nid ORDER BY n.nid DESC", variable_get("default_nodes_main", 10));
+ 
+   while ($node = db_fetch_object($result)) {
+     node_view(node_load(array("nid" => $node->nid)), 1);
   }
   $output .= theme('pager', NULL, variable_get("default_nodes_main", 10));
   $output .= theme('xml_icon', url('blog/feed'));
@@ -254,10 +256,10 @@
   }
   else {
     if (user_access("access content")) {
-      $block["content"] = node_title_list(db_query_range("SELECT n.title, n.nid FROM {node} n WHERE n.type = 'blog' AND n.status = 1 ORDER BY n.nid DESC", 0, 10));
-      $block["content"] .= "<div class=\"more-link\">". l(t("more"), "blog", array("title" => t("Read the latest blog entries."))) ."</div>";
-      $block["subject"] = t("Blogs");
-    }
+		$block["content"] = node_title_list(db_query_range("SELECT n.title, n.nid FROM {node} n INNER JOIN {term_node} t ON n.nid = t.nid WHERE t.tid IN (". groups_get_terms() .") AND n.type = 'blog' AND n.status = 1 ORDER BY n.nid DESC", 0, 10));
+       $block["content"] .= "<div class=\"more-link\">". l(t("more"), "blog", array("title" => t("Read the latest blog entries."))) ."</div>";
+       $block["subject"] = t("Blogs");
+     }
     return $block;
   }
 }
diff -ruN old/book.module new/book.module
--- old/book.module	2004-05-02 17:45:30.000000000 +0200
+++ new/book.module	2004-06-05 17:00:30.000000000 +0200
@@ -73,8 +73,8 @@
       menu("admin/node/book/orphan", t("orphan pages"), "book_admin_orphan", 8);
       menu("admin/node/book/help", t("help"), "book_help_page", 9);
 
-      $result = db_query("SELECT n.nid, n.title FROM {node} n INNER JOIN {book} b ON n.nid = b.nid WHERE b.parent = 0 ORDER BY b.weight, n.title");
-      while ($book = db_fetch_object($result)) {
+ $result = db_query("SELECT n.nid, n.title FROM {node} n INNER JOIN {book} b ON n.nid = b.nid INNER JOIN {term_node} t ON n.nid = t.nid WHERE t.tid IN (". groups_get_terms("update") .") AND b.parent = 0 ORDER BY b.weight, n.title"); 
+     while ($book = db_fetch_object($result)) {
         menu("admin/node/book/$book->nid", t("'%title' book", array("%title" => $book->title)), "book_admin");
       }
     }
@@ -173,6 +173,11 @@
     $node->weight = 0;
     $node->revision = 1;
   }
+  if (module_exist("groups") && $node->parent) {
+    $ngroups = groups_get_foreign_tids($node->taxonomy);
+    $pgroups = groups_get_node_tids($node->parent);
+    $node->taxonomy = array_merge($ngroups, $pgroups);
+  }
 }
 
 function book_form(&$node, &$error) {
@@ -219,11 +224,19 @@
     }
 
     if ($op == t("Add to book outline")) {
+      if(module_exist("groups") && $edit["parent"]) {
+        groups_delete_groups_tids($node->nid);
+        groups_insert_parent_tids($edit["parent"], $node->nid);
+      }
       db_query("INSERT INTO {book} (nid, parent, weight) VALUES (%d, %d, %d)", $node->nid, $edit["parent"], $edit["weight"]);
       drupal_set_message(t("added the node to the book."));
     }
 
     if ($op == t("Update book outline")) {
+      if(module_exist("groups") && $edit["parent"]) {
+        groups_delete_groups_tids($node->nid);
+        groups_insert_parent_tids($edit["parent"], $node->nid);
+      }
       db_query("UPDATE {book} SET parent = %d, weight = %d WHERE nid = %d", $edit["parent"], $edit["weight"], $node->nid);
       drupal_set_message(t("updated the book outline."));
     }
@@ -301,8 +314,8 @@
 function book_location($node, $nodes = array()) {
   // TODO: eliminate the recursion
 
-  $parent = db_fetch_object(db_query("SELECT n.nid, n.title, b.parent FROM {node} n INNER JOIN {book} b ON n.nid = b.nid WHERE n.nid = %d", $node->parent));
-  if ($parent->title) {
+	$parent = db_fetch_object(db_query("SELECT n.nid, n.title, b.parent FROM {node} n INNER JOIN {book} b ON n.nid = b.nid INNER JOIN {term_node} t ON n.nid = t.nid WHERE t.tid IN (". groups_get_terms() .") AND n.nid = %d", $node->parent)); 
+ if ($parent->title) {
     $nodes = book_location($parent, $nodes);
     array_push($nodes, $parent);
   }
@@ -312,8 +325,8 @@
 function book_location_down($node, $nodes = array()) {
   // TODO: eliminate the recursion
 
-  $last_direct_child = db_fetch_object(db_query("SELECT n.nid, n.title, b.parent FROM {node} n INNER JOIN {book} b ON n.nid = b.nid WHERE b.parent = %d ORDER BY b.weight DESC, n.title DESC", $node->nid));
-  if ($last_direct_child) {
+$last_direct_child = db_fetch_object(db_query("SELECT n.nid, n.title, b.parent FROM {node} n INNER JOIN {book} b ON n.nid = b.nid INNER JOIN {term_node} t ON n.nid = t.nid WHERE t.tid IN (". groups_get_terms() .") AND b.parent = %d ORDER BY b.weight DESC, n.title DESC", $node->nid));  
+if ($last_direct_child) {
     array_push($nodes, $last_direct_child);
     $nodes = book_location_down($last_direct_child, $nodes);
   }
@@ -327,7 +340,7 @@
   }
 
   // previous on the same level
-  $direct_above = db_fetch_object(db_query("SELECT n.nid, n.title FROM {node} n INNER JOIN {book} b ON n.nid = b.nid WHERE b.parent = %d AND n.status = 1 AND (n.moderate = 0 OR n.revisions != '') AND (b.weight < %d OR (b.weight = %d AND n.title < '%s')) ORDER BY b.weight DESC, n.title DESC", $node->parent, $node->weight, $node->weight, $node->title));
+  $direct_above = db_fetch_object(db_query("SELECT n.nid, n.title FROM {node} n INNER JOIN {book} b ON n.nid = b.nid INNER JOIN {term_node} t ON n.nid = t.nid WHERE t.tid IN (". groups_get_terms() .") AND b.parent = %d AND n.status = 1 AND (n.moderate = 0 OR n.revisions != '') AND (b.weight < %d OR (b.weight = %d AND n.title < '%s')) ORDER BY b.weight DESC, n.title DESC", $node->parent, $node->weight, $node->weight, $node->title));
   if ($direct_above) {
     // get last leaf of $above
     $path = book_location_down($direct_above);
@@ -336,14 +349,14 @@
   }
   else {
     // direct parent
-    $prev = db_fetch_object(db_query("SELECT n.nid, n.title FROM {node} n INNER JOIN {book} b ON n.nid = b.nid WHERE n.nid = %d AND n.status = 1 AND (n.moderate = 0 OR n.revisions != '')", $node->parent));
+    $prev = db_fetch_object(db_query("SELECT n.nid, n.title FROM {node} n INNER JOIN {book} b ON n.nid = b.nid INNER JOIN {term_node} t ON n.nid = t.nid WHERE t.tid IN (". groups_get_terms() .") AND n.nid = %d AND n.status = 1 AND (n.moderate = 0 OR n.revisions != '')", $node->parent));
     return $prev;
   }
 }
 
 function book_next($node) {
   // get first direct child
-  $child = db_fetch_object(db_query("SELECT n.nid, n.title FROM {node} n INNER JOIN {book} b ON n.nid = b.nid WHERE b.parent = %d AND n.status = 1 AND (n.moderate = 0 OR n.revisions != '') ORDER BY b.weight ASC, n.title ASC", $node->nid));
+  $child = db_fetch_object(db_query("SELECT n.nid, n.title FROM {node} n INNER JOIN {book} b ON n.nid = b.nid INNER JOIN {term_node} t ON n.nid = t.nid WHERE t.tid IN (". groups_get_terms() .") AND b.parent = %d AND n.status = 1 AND (n.moderate = 0 OR n.revisions != '') ORDER BY b.weight ASC, n.title ASC", $node->nid));
   if ($child) {
     return $child;
   }
@@ -352,7 +365,7 @@
   array_push($path = book_location($node), $node); // path to root node including this one
   // loop through nodes to book root, starting with this node
   while (($leaf = array_pop($path)) && count($path)) {
-    $next = db_fetch_object(db_query("SELECT n.nid, n.title FROM {node} n INNER JOIN {book} b ON n.nid = b.nid WHERE b.parent = %d AND n.status = 1 AND (n.moderate = 0 OR n.revisions != '') AND (b.weight > %d OR (b.weight = %d AND n.title > '%s')) ORDER BY b.weight ASC, n.title ASC", $leaf->parent, $leaf->weight, $leaf->weight, $leaf->title));
+    $next = db_fetch_object(db_query("SELECT n.nid, n.title FROM {node} n INNER JOIN {book} b ON n.nid = b.nid INNER JOIN {term_node} t ON n.nid = t.nid WHERE t.tid IN (". groups_get_terms() .") AND b.parent = %d AND n.status = 1 AND (n.moderate = 0 OR n.revisions != '') AND (b.weight > %d OR (b.weight = %d AND n.title > '%s')) ORDER BY b.weight ASC, n.title ASC", $leaf->parent, $leaf->weight, $leaf->weight, $leaf->title));
     if ($next) {
       return $next;
     }
@@ -562,9 +575,9 @@
 
 function book_toc($parent = 0, $indent = "", $toc = array()) {
 
-  $result = db_query("SELECT n.nid, n.title, b.parent FROM {node} n INNER JOIN {book} b ON n.nid = b.nid WHERE n.status = '1' ORDER BY b.weight, n.title");
-
-  while ($node = db_fetch_object($result)) {
+	$result = db_query("SELECT n.nid, n.title, b.parent FROM {node} n INNER JOIN {book} b ON n.nid = b.nid INNER JOIN {term_node} t ON n.nid = t.nid WHERE t.tid IN (". groups_get_terms() .") AND n.status = '1' ORDER BY b.weight, n.title");
+ 
+ while ($node = db_fetch_object($result)) {
     if (!$children[$node->parent]) {
       $children[$node->parent] = array();
     }
@@ -623,8 +636,7 @@
 
 function book_tree($parent = 0, $depth = 3, $unfold = array()) {
 
-  $result = db_query("SELECT n.nid, n.title, b.parent FROM {node} n INNER JOIN {book} b ON n.nid = b.nid WHERE n.status = '1' AND n.moderate = '0' ORDER BY b.weight, n.title");
-
+ 	$result = db_query("SELECT n.nid, n.title, b.parent FROM {node} n INNER JOIN {book} b ON n.nid = b.nid INNER JOIN {term_node} t ON n.nid = t.nid WHERE t.tid IN (". groups_get_terms() .") AND n.status = '1' AND n.moderate = '0' ORDER BY b.weight, n.title");
   while ($node = db_fetch_object($result)) {
     $list = $children[$node->parent] ? $children[$node->parent] : array();
     array_push($list, $node);
@@ -639,7 +651,7 @@
 
 function book_render() {
 
-  $result = db_query("SELECT n.nid FROM {node} n INNER JOIN {book} b ON n.nid = b.nid WHERE b.parent = 0 AND n.status = 1 AND (n.moderate = 0 OR n.revisions IS NOT NULL) ORDER BY b.weight, n.title");
+  $result = db_query("SELECT n.nid FROM {node} n INNER JOIN {book} b ON n.nid = b.nid INNER JOIN {term_node} t ON n.nid = t.nid WHERE t.tid IN (". groups_get_terms() .") AND b.parent = 0 AND n.status = 1 AND (n.moderate = 0 OR n.revisions IS NOT NULL) GROUP BY n.nid ORDER BY b.weight, n.title");
 
   while ($page = db_fetch_object($result)) {
     // load the node:
@@ -683,7 +695,7 @@
 
 function book_print($id = "", $depth = 1) {
   global $base_url;
-  $result = db_query("SELECT n.nid FROM {node} n INNER JOIN {book} b ON n.nid = b.nid WHERE n.status = 1 AND n.nid = %d AND (n.moderate = 0 OR n.revisions IS NOT NULL) ORDER BY b.weight, n.title", $id);
+  $result = db_query("SELECT n.nid FROM {node} n INNER JOIN {book} b ON n.nid = b.nid INNER JOIN {term_node} t ON n.nid = t.nid WHERE t.tid IN (". groups_get_terms("update") .") AND n.status = 1 AND n.nid = %d AND (n.moderate = 0 OR n.revisions IS NOT NULL) ORDER BY b.weight, n.title", $id);
 
   while ($page = db_fetch_object($result)) {
     // load the node:
@@ -713,7 +725,7 @@
 }
 
 function book_print_recurse($parent = "", $depth = 1) {
-  $result = db_query("SELECT n.nid FROM {node} n INNER JOIN {book} b ON n.nid = b.nid WHERE n.status = 1 AND b.parent = '$parent' AND (n.moderate = 0 OR n.revisions IS NOT NULL) ORDER BY b.weight, n.title");
+  $result = db_query("SELECT n.nid FROM {node} n INNER JOIN {book} b ON n.nid = b.nid INNER JOIN {term_node} t ON n.nid = t.nid WHERE t.tid IN (". groups_get_terms() .") AND b.parent = '$parent' AND n.status = 1 AND (n.moderate = 0 OR n.revisions IS NOT NULL) GROUP BY n.nid ORDER BY b.weight, n.title");
 
   while ($page = db_fetch_object($result)) {
     // load the node:
@@ -750,7 +762,8 @@
 }
 
 function book_admin_view_book($nid, $depth = 1) {
-  $result = db_query("SELECT n.nid FROM {node} n INNER JOIN {book} b ON n.nid = b.nid WHERE b.parent = %d ORDER BY b.weight, n.title", $nid);
+
+  $result = db_query("SELECT n.nid FROM {node} n INNER JOIN {book} b ON n.nid = b.nid INNER JOIN {term_node} t ON n.nid = t.nid WHERE t.tid IN (". groups_get_terms() .") AND b.parent = %d GROUP BY n.nid ORDER BY b.weight, n.title", $nid);
 
   while ($node = db_fetch_object($result)) {
     $node = node_load(array("nid" => $node->nid));
@@ -813,8 +826,7 @@
 
 function book_admin_orphan() {
 
-  $result = db_query("SELECT n.nid, n.title, n.status, b.parent FROM {node} n INNER JOIN {book} b ON n.nid = b.nid");
-
+	$result = db_query("SELECT n.nid, n.title, n.status, b.parent FROM {node} n INNER JOIN {book} b ON n.nid = b.nid INNER JOIN {term_node} t ON n.nid = t.nid WHERE t.tid IN (". groups_get_terms() .") AND n.type = 'book' GROUP BY n.nid, n.title");
   while ($page = db_fetch_object($result)) {
     $pages[$page->nid] = $page;
   }
diff -ruN old/node.module new/node.module
--- old/node.module	2004-05-02 17:45:30.000000000 +0200
+++ new/node.module	2004-06-05 17:05:44.000000000 +0200
@@ -340,8 +340,8 @@
   ** Retrieve the node:
   */
 
-  $node = db_fetch_object(db_query('SELECT n.*, u.uid, u.name, u.data FROM {node} n INNER JOIN {users} u ON u.uid = n.uid WHERE '. implode(' AND ', $cond)));
-  $node = drupal_unpack($node);
+ $node = db_fetch_object(db_query("SELECT n.*, u.uid, u.name FROM {node} n INNER JOIN {users} u ON u.uid = n.uid INNER JOIN {term_node} t ON n.nid = t.nid WHERE t.tid IN (". groups_get_terms() .") AND ". implode(" AND ", $cond))); 
+ $node = drupal_unpack($node);
 
   /*
   ** Unserialize the revisions and user data fields:
@@ -1001,8 +1001,8 @@
   */
 
   if (!$nodes) {
-    $nodes = db_query_range('SELECT nid FROM {node} WHERE promote = 1 AND status = 1 ORDER BY created DESC', 0, 15);
-  }
+  $nodes = db_query_range("SELECT n.nid FROM {node} n INNER JOIN {term_node} t ON n.nid = t.nid WHERE t.tid IN (". groups_get_terms() .") AND promote = '1' AND status = '1' ORDER BY created DESC", 0, 15);
+   }
 
   while ($node = db_fetch_object($nodes)) {
     /*
@@ -1486,8 +1486,9 @@
 }
 
 function node_page_default() {
-  $result = pager_query('SELECT nid, type FROM {node} WHERE promote = 1 AND status = 1 ORDER BY static DESC, created DESC', variable_get('default_nodes_main', 10));
-
+  $count = db_num_rows(db_query("SELECT n.nid, n.type FROM {node} n INNER JOIN {term_node} t ON n.nid = t.nid WHERE t.tid IN (". groups_get_terms() .") AND n.promote = '1' AND n.status = '1' GROUP BY n.nid, n.type"));
+  $sql_count = "SELECT $count";
+  $result = pager_query("SELECT n.nid, n.type FROM {node} n INNER JOIN {term_node} t ON n.nid = t.nid WHERE t.tid IN (". groups_get_terms() .") AND n.promote = '1' AND n.status = '1' GROUP BY n.nid, n.type ORDER BY n.static DESC, n.created DESC", variable_get("default_nodes_main", 10), 0, $sql_count);
   if (db_num_rows($result)) {
     drupal_set_html_head('<link rel="alternate" type="application/rss+xml" title="RSS" href="'. url('node/feed') .'" />');
 
diff -ruN old/page.module new/page.module
--- old/page.module	2004-05-02 17:45:30.000000000 +0200
+++ new/page.module	2004-06-05 10:03:46.000000000 +0200
@@ -101,7 +101,7 @@
   $links = array();
 
   if ($type == "page" && user_access("access content")) {
-    $result = db_query("SELECT n.nid, n.title, p.link, p.description FROM {page} p INNER JOIN {node} n ON p.nid = n.nid WHERE n.status = '1' AND p.link != '' ORDER BY p.link");
+    $result = db_query("SELECT n.nid, n.title, p.link, p.description FROM {page} p INNER JOIN {node} n ON p.nid = n.nid INNER JOIN {term_node} t ON n.nid = t.nid WHERE t.tid IN (". groups_get_terms() .") AND n.status = '1' AND p.link != '' ORDER BY p.link");
     while ($page = db_fetch_object($result)) {
       $links[] = l($page->link, "node/view/$page->nid", array("title" => $page->description));
     }
diff -ruN old/ping.module new/ping.module
--- old/ping.module	2004-05-02 17:45:30.000000000 +0200
+++ new/ping.module	2004-06-05 10:04:10.000000000 +0200
@@ -26,7 +26,7 @@
   global $base_url;
 
   if (variable_get("site_name", 0) && variable_get("site_slogan", 0)) {
-    if (db_num_rows(db_query("SELECT nid FROM {node} WHERE status = 1 AND moderate = 0 AND (created > '". variable_get("ping_cron_last", time()) ."' OR changed > '". variable_get("ping_cron_last", time()) ."')"), 1)) {
+    if (db_num_rows(db_query("SELECT n.nid FROM {node} n INNER JOIN {term_node} t ON n.nid = t.nid WHERE t.tid IN (". groups_get_terms() .") AND n.status = 1 AND n.moderate = 0 AND (n.created > '". variable_get("ping_cron_last", time()) ."' OR n.changed > '". variable_get("ping_cron_last", time()) ."')"), 1)) {
       _ping_notify(variable_get("site_name", "") ." - ". variable_get("site_slogan", ""), $base_url);
     }
 
diff -ruN old/poll.module new/poll.module
--- old/poll.module	2004-05-02 17:45:30.000000000 +0200
+++ new/poll.module	2004-06-05 17:07:30.000000000 +0200
@@ -46,7 +46,7 @@
     }
     else {
       // Retrieve latest poll
-      $timestamp = db_result(db_query("SELECT MAX(created) FROM {node} WHERE type = 'poll' AND status = '1' AND moderate = '0'"));
+      $timestamp = db_result(db_query("SELECT MAX(n.created) FROM {node} n INNER JOIN {term_node} t ON n.nid = t.nid WHERE t.tid IN (". groups_get_terms() .") AND n.type = 'poll' AND n.status = '1' AND n.moderate = '0'"));
       if ($timestamp) {
         $poll = node_load(array('type' => 'poll', 'created' => $timestamp, 'moderate' => 0, 'status' => 1));
 
@@ -237,7 +237,7 @@
 
 function poll_page() {
   // List all polls
-  $result = pager_query("SELECT n.nid, n.title, p.active, SUM(c.chvotes) AS votes FROM {node} n INNER JOIN {poll} p ON n.nid=p.nid INNER JOIN {poll_choices} c ON n.nid=c.nid WHERE type = 'poll' AND status = '1' AND moderate = '0' GROUP BY n.nid, n.title, p.active, n.created ORDER BY n.created DESC", 15);
+  $result = db_query("SELECT n.nid, n.title, p.active, SUM(c.chvotes) AS votes FROM {node} n INNER JOIN {poll} p ON n.nid=p.nid INNER JOIN {poll_choices} c ON n.nid=c.nid INNER JOIN {term_node} t ON n.nid = t.nid WHERE t.tid IN (". groups_get_terms() .") AND type = 'poll' AND status = '1' AND moderate = '0' GROUP BY n.nid, n.title, p.active, n.created ORDER BY n.created DESC");  
   $output = '<ul>';
   while ($node = db_fetch_object($result)) {
     $output .= '<li>'. l($node->title, "node/view/$node->nid") .' - '. format_plural($node->votes, '1 vote', '%count votes') .' - '. ($node->active ? t('open') : t('closed')) .'</li>';
diff -ruN old/queue.module new/queue.module
--- old/queue.module	2004-05-02 17:45:30.000000000 +0200
+++ new/queue.module	2004-06-05 17:08:12.000000000 +0200
@@ -44,7 +44,7 @@
 }
 
 function queue_count() {
-  $result = db_query("SELECT COUNT(nid) FROM {node} WHERE moderate = 1");
+  $result = db_query("SELECT COUNT(n.nid) FROM {node} n INNER JOIN {term_node} t ON n.nid = t.nid WHERE t.tid IN (". groups_get_terms() .") AND n.moderate = 1");
   return ($result) ? db_result($result, 0) : 0;
 }
 
@@ -106,8 +106,7 @@
 
   $header = array(array("data" => t("subject")), array("data" => t("author")), array("data" => t("type")), array("data" => t("score")));
 
-  $sresult = pager_query("SELECT n.*, u.name, u.uid FROM {node} n INNER JOIN {users} u ON n.uid = u.uid WHERE n.moderate = 1", 10, 0);
-
+  $sresult = db_query("SELECT n.*, u.name, u.uid FROM {node} n INNER JOIN {users} u ON n.uid = u.uid INNER JOIN {term_node} t ON n.nid = t.nid WHERE t.tid IN (". groups_get_terms() .") AND n.moderate = 1");
   while ($node = db_fetch_object($sresult)) {
     if ($user->uid == $node->uid || field_get($node->users, $user->uid)) {
       $rows[] = array(array("data" => l($node->title, "queue/$node->nid"), "class" => "title"), array("data" => format_name($node), "class" => "name"), array("data" => module_invoke($node->type, "node", "name"), "class" => "type"), array("data" => queue_score($node->nid), "class" => "score"));
diff -ruN old/taxonomy.module new/taxonomy.module
--- old/taxonomy.module	2004-05-02 17:45:30.000000000 +0200
+++ new/taxonomy.module	2004-06-05 17:09:04.000000000 +0200
@@ -668,16 +668,22 @@
   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 static DESC, created DESC";
-      $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'";
+    $found = "SELECT n.nid FROM {node} n INNER JOIN {term_node} t ON n.nid = t.nid WHERE t.tid IN (". groups_get_terms() .") AND n.status = '1' GROUP BY n.nid";
+    $result = db_query($found);
+    $nids = array();
+    while($nid = db_fetch_object($result)) {
+      $nids[] = $nid->nid;
     }
+ 
+    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 AND n.nid IN (". implode(", ", $nids) .") INNER JOIN {users} u ON n.uid = u.uid WHERE r.tid IN ($taxonomy->str_tids) AND n.status = '1' ORDER BY static DESC, created DESC"; 
+       $sql_count = "SELECT COUNT(DISTINCT(n.nid)) FROM {node} n INNER JOIN {term_node} r ON n.nid = r.nid AND n.nid IN (". implode(", ", $nids) .") 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 static DESC, created DESC";
-
+ 		$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 AND n.nid IN (". implode(", ", $nids) .") 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 static DESC, created DESC";
       // 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";
+		$count = db_num_rows(db_query("SELECT n.nid FROM {node} n INNER JOIN {term_node} r ON n.nid = r.nid AND n.nid IN (". implode(", ", $nids) .") 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) {
diff -ruN old/tracker.module new/tracker.module
--- old/tracker.module	2004-05-02 17:45:30.000000000 +0200
+++ new/tracker.module	2004-06-05 17:09:44.000000000 +0200
@@ -26,16 +26,16 @@
   );
 
   if ($id) {
-    $sql = "SELECT n.nid, n.title, n.type, n.changed, n.uid, u.name, MAX(GREATEST(n.changed, c.timestamp)) AS last_activity FROM {node} n LEFT JOIN {comments} c ON n.nid = c.nid INNER JOIN {users} u ON n.uid = u.uid WHERE n.uid = '". check_query($id) ."' AND n.status = 1 GROUP BY n.nid, n.title, n.type, n.changed, n.uid, u.name";
-    $sql .= tablesort_sql($header);
-    $sresult = pager_query($sql, 10, 0, "SELECT COUNT(nid) FROM {node} WHERE status = 1 AND uid = '". check_query($id) ."'");
-
-  }
+ 	$sql = "SELECT n.nid, n.title, n.type, n.changed, n.uid, u.name, MAX(GREATEST(n.changed, c.timestamp)) AS last_activity FROM {node} n LEFT JOIN {comments} c ON n.nid = c.nid INNER JOIN {users} u ON n.uid = u.uid INNER JOIN {term_node} t ON n.nid = t.nid WHERE t.tid IN (". groups_get_terms() .") AND n.uid = '". check_query($id) ."' AND n.status = 1 GROUP BY n.nid, n.title, n.type, n.changed, n.uid, u.name";
+     $sql .= tablesort_sql($header);
+     $sresult = pager_query($sql, 10, 0, "SELECT COUNT(nid) FROM {node} WHERE status = 1 AND uid = '". check_query($id) ."'");
+ 
+   }
   else {
-    $sql = "SELECT n.nid, n.title, n.type, n.changed, n.uid, u.name, MAX(GREATEST(n.changed, c.timestamp)) AS last_activity FROM {node} n LEFT JOIN {comments} c ON n.nid = c.nid INNER JOIN {users} u ON n.uid = u.uid WHERE n.status = 1 GROUP BY n.nid, n.title, n.type, n.changed, n.uid, u.name";
-    $sql .= tablesort_sql($header);
-    $sresult = pager_query($sql, 10, 0, "SELECT COUNT(nid) FROM {node} WHERE status = 1");
-  }
+     $sql = "SELECT n.nid, n.title, n.type, n.changed, n.uid, u.name, MAX(GREATEST(n.changed, c.timestamp)) AS last_activity FROM {node} n LEFT JOIN {comments} c ON n.nid = c.nid INNER JOIN {users} u ON n.uid = u.uid INNER JOIN {term_node} t ON n.nid = t.nid WHERE t.tid IN (". groups_get_terms() .") AND n.status = 1 GROUP BY n.nid, n.title, n.type, n.changed, n.uid, u.name";
+     $sql .= tablesort_sql($header);
+     $sresult = pager_query($sql, 10, 0, "SELECT COUNT(nid) FROM {node} WHERE status = 1"); 
+ }
 
   while ($node = db_fetch_object($sresult)) {
     if (node_hook($node, 'tracker_comments')) {
diff -ruN old/user.module new/user.module
--- old/user.module	2004-05-02 17:45:30.000000000 +0200
+++ new/user.module	2004-06-05 17:10:24.000000000 +0200
@@ -196,15 +196,19 @@
     return 1;
   }
 
-  /*
-  ** To reduce the number of SQL queries, we cache the user's permissions
-  ** in a static variable.
-  */
-
-  if ($perm === 0) {
-    $perm = db_result(db_query("SELECT p.perm FROM {role} r, {permission} p WHERE r.rid = p.rid AND r.rid = %d", $user->rid), 0);
+  if(module_exist("groups")) {
+    return groups_access($string, "permission", $user);
   }
-
+  else {
+      /*
+      ** To reduce the number of SQL queries, we cache the user's permissions
+      ** in a static variable.
+      */
+    
+      if ($perm === 0) {
+        $perm = db_result(db_query("SELECT p.perm FROM {role} r, {permission} p WHERE r.rid = p.rid AND r.rid = %d", $user->rid), 0);
+      }
+	}
   return strstr($perm, $string);
 }
 
@@ -455,8 +459,6 @@
       menu("admin/user/access", t("access rules"), "user_admin", 3);
       menu("admin/user/access/mail", t("e-mail rules"), "user_admin");
       menu("admin/user/access/user", t("name rules"), "user_admin");
-      menu("admin/user/role", t("roles"), "user_admin", 4);
-      menu("admin/user/permission", t("permissions"), "user_admin", 5);
       menu("admin/user/help", t("help"), "user_help_page", 9);
       menu("admin/user/edit", t("edit user account"), "user_admin", 0, MENU_HIDE);
       if (module_exist('search')) {
@@ -1455,7 +1457,7 @@
     $output .= form_textfield(t("E-mail address"), "mail", $account->mail, 30, 55, t("Insert a valid e-mail address.  All e-mails from the system will be sent to this address. The e-mail address is not made public and will only be used if you wish to receive a new password or wish to receive certain news or notifications by e-mail."));
     $output .= form_item(t("Password"), "<input type=\"password\" name=\"edit[pass1]\" size=\"12\" maxlength=\"24\" /> <input type=\"password\" name=\"edit[pass2]\" size=\"12\" maxlength=\"24\" />", t("Enter a new password twice if you want to change the current password for this user or leave it blank if you are happy with the current password."));
     $output .= form_radios(t("Status"), "status", $account->status, array(t("Blocked"), t("Active")));
-    $output .= form_radios(t("Role"), "rid", $account->rid, user_roles(1));
+//    $output .= form_radios(t("Role"), "rid", $account->rid, user_roles(1));
 
     $output  = form_group(t('Account information'), $output);
     $output .= _user_profile($edit, $account);
@@ -1477,7 +1479,7 @@
     array("data" => t("ID"), "field" => "u.uid"),
     array("data" => t("username"), "field" => "u.name"),
     array("data" => t("status"), "field" => "u.status"),
-    array("data" => t("role"), "field" => "u.rid"),
+ //   array("data" => t("role"), "field" => "u.rid"),
     array("data" => t("last access"), "field"  => "u.timestamp", "sort" => "desc"),
     t("operations")
   );
@@ -1487,8 +1489,9 @@
 
   $status = array(t("blocked"), t("active"));
   while ($account = db_fetch_object($result)) {
-    $rows[] = array($account->uid, format_name($account), $status[$account->status], $account->rolename, format_date($account->timestamp, "small"), l(t("edit account"), "admin/user/edit/$account->uid"));
-  }
+  //  $rows[] = array($account->uid, format_name($account), $status[$account->status], $account->rolename, format_date($account->timestamp, "small"), l(t("edit account"), "admin/user/edit/$account->uid"));
+ 	$rows[] = array($account->uid, format_name($account), $status[$account->status], format_date($account->timestamp, "small"), l(t("edit account"), "admin/user/edit/$account->uid"));  
+}
 
   $pager = theme("pager", NULL, 50, 0, tablesort_pager());
   if (!empty($pager)) {
