--- aggregator2/aggregator2_autotaxonomy.module	2006-11-20 10:41:33.359375000 -0500
+++ agg2-new/aggregator2_autotaxonomy.module	2006-11-13 06:53:19.000000000 -0500
@@ -34,23 +34,26 @@ function aggregator2_autotaxonomy_nodeap
       watchdog('aggregator2', t('No vocabulary has been set for autotaxonomy to use.'), WATCHDOG_WARNING, l('set', 'admin/settings/aggregator2_autotaxonomy'));
       return;
     }
-//[RSS:CATEGORY][][VALUE] && [RSS:CATEGORY][][DOMAIN] attrib
-//[ATOM:CATEGORY][][TERM][][VALUE]
-//[DC:SUBJECT][][VALUE]
-    if ($node->rss_item_data['CATEGORY'][0]['VALUE']) $categories = $node->rss_item_data['CATEGORY']; // RSS 0.92, 2.0
-    else if ($node->rss_item_data['CATEGORY'][0]['TERM'][0]['VALUE']) $categories = $node->rss_item_data['CATEGORY']; // ATOM 1.0
-    else if ($node->rss_item_data['ATOM:CATEGORY'][0]['TERM'][0]['VALUE']) $categories = $node->rss_item_data['ATOM:CATEGORY']; // ATOM 1.0
-    else if ($node->rss_item_data['SUBJECT']) $categories = $node->rss_item_data['SUBJECT']; // DublinCore
-    else if ($node->rss_item_data['DC:SUBJECT']) $categories = $node->rss_item_data['DC:SUBJECT']; // DublinCore
-
     switch($op) {
       case 'insert':
       case 'update':
+        //[RSS:CATEGORY][][VALUE] && [RSS:CATEGORY][][DOMAIN] attrib
+        //[ATOM:CATEGORY][][TERM][][VALUE]
+        //[DC:SUBJECT][][VALUE]
+        if ($node->rss_item_data['CATEGORY'][0]['VALUE']) $categories = $node->rss_item_data['CATEGORY']; // RSS 0.92, 2.0
+        else if ($node->rss_item_data['CATEGORY'][0]['TERM'][0]['VALUE']) $categories = $node->rss_item_data['CATEGORY']; // ATOM 1.0
+        else if ($node->rss_item_data['ATOM:CATEGORY'][0]['TERM'][0]['VALUE']) $categories = $node->rss_item_data['ATOM:CATEGORY']; // ATOM 1.0
+        else if ($node->rss_item_data['SUBJECT']) $categories = $node->rss_item_data['SUBJECT']; // DublinCore
+        else if ($node->rss_item_data['DC:SUBJECT']) $categories = $node->rss_item_data['DC:SUBJECT']; // DublinCore
+
         // If the RSS item has any category tags, add new ones to taxonomy if needed
         if (count($categories) > 0) {
           if (!isset($node->taxonomy) || !is_array($node->taxonomy)) {
-            $node->taxonomy = array();
+            $terms = array();
+          } else {
+            $terms = $node->taxonomy;
           }
+          $terms_orig_count = count($terms);
 
           foreach ($categories as $category_name) {
             if ($category_name['TERM']) { // ATOM 1.0
@@ -59,8 +62,9 @@ function aggregator2_autotaxonomy_nodeap
             else { // RSS 0.92, RSS 2.0, DublinCore
               $category_name = strtolower($category_name['VALUE']);
             }
-
-            if (trim($category_name) != '') {
+            $category_names = explode(',', preg_replace('/^[ ]*tags: /', '', strip_tags($category_name)));
+            foreach ($category_names as $category_name) {
+              $category_name = trim($category_name);
               if (!isset($cat_names[$category_name])) {
                 $cat_names[$category_name] = module_invoke('taxonomy', 'get_term_by_name', $category_name);
               }
@@ -72,18 +76,23 @@ function aggregator2_autotaxonomy_nodeap
                 $term['description'] = t('Auto generated by aggregator2 autotaxonomy');
                 $term['vid'] = $vocab;
                 $term['weight'] = 0;
-                $term = taxonomy_save_term($term);
-                $node->taxonomy[] = $term['tid'];
-                $cat_names[$category_name][0]->tid = $term['tid'];
+                if (taxonomy_save_term($term)) {
+                  $terms[] = $term['tid'];
+                  $cat_names[$category_name][0]->tid = $term['tid'];
+                }
               }
               else {
                 // Use the existing category term in the database
-                if (!in_array($cat_names[$category_name][0]->tid, $node->taxonomy)) {
-                  $node->taxonomy[] = $cat_names[$category_name][0]->tid;
+                if (!in_array($cat_names[$category_name][0]->tid, $terms)) {
+                  $terms[] = $cat_names[$category_name][0]->tid;
                 }
               }
             }
           }
+
+          if (count($terms) != $terms_orig_count) {
+            taxonomy_node_save($node->nid, $terms);
+          }
         }
         break;
     }
