--- modules/forum/forum.module.orig	Tue Jul 14 20:58:04 2009
+++ modules/forum/forum.module	Tue Jul 14 20:58:13 2009
@@ -284,9 +284,29 @@ function forum_node_presave($node) {
       foreach ($tree as $term) {
         $forum_terms[] = $term->tid;
       }
-      foreach ($node->taxonomy as $term_id) {
-        if (in_array($term_id, $forum_terms)) {
-          $node->tid = $term_id;
+      // $node->taxonomy can be one of 3 types:
+      // Array of term objects keyed by tid, term object, or a single tid
+      // This code, based on Drupal 7's taxonomy save function, handles all 3
+      // See issue at: http://drupal.org/user/28680
+      if (is_array($node->taxonomy)) {
+        // Array of term objects keyed by tid
+        foreach ($node->taxonomy as $term_id => $term) {
+          if ($term_id && in_array($term_id, $forum_terms)) {
+            $node->tid = $term_id;
+          }
+        }
+      }
+      elseif (is_object($node->taxonomy)) {
+        // Single term object
+          $term = $node->taxonomy;
+          if ($term->tid && in_array($term->tid, $forum_terms)) {
+            $node->tid = $term->tid;
+          }
+      }
+      elseif ($node->taxonomy) {
+        // Single numeric tid
+        if (in_array($node->taxonomy, $forum_terms)) {
+          $node->tid = $node->taxonomy;
         }
       }
       $old_tid = db_query_range("SELECT t.tid FROM {taxonomy_term_node} t INNER JOIN {node} n ON t.vid = n.vid WHERE n.nid = :nid ORDER BY t.vid DESC", array(':nid' => $node->nid), 0, 1)->fetchField();
