diff --git a/modules/forum.module b/modules/forum.module
index 7437346c090fea45016dd1387be630689a2cbbf0..890b8ef40113fca0669e51c4cddd973615ece5d1 100644
--- a/modules/forum.module
+++ b/modules/forum.module
@@ -197,12 +197,20 @@ function forum_validate(&$node) {
   if ($node->taxonomy) {
     // Extract the node's proper topic ID.
     $vocabulary = variable_get('forum_nav_vocabulary', '');
+    $containers = variable_get('forum_containers', array());
     foreach ($node->taxonomy as $term) {
       if (db_result(db_query('SELECT COUNT(*) FROM {term_data} WHERE tid = %d AND vid = %d', $term, $vocabulary))) {
-        $node->tid = $term;
+        if (in_array($term, $containers)) {
+          $term = taxonomy_get_term($term);
+          $error['taxonomy'] = theme('error', t('The item \'%forum\' is only a container for forums. Please select one of the forums below it.', array('%forum' => $term->name)));
+        }
+        else {
+          $node->tid = $term;
+        }
       }
     }
   }
+  return $error;
 }
 
 function forum_form(&$node, &$error) {
@@ -211,7 +219,7 @@ function forum_form(&$node, &$error) {
     $node->taxonomy[] = arg(3);
   }
 
-  $output = implode('', taxonomy_node_form('forum', $node));
+  $output = implode('', taxonomy_node_form('forum', $node, $error));
 
   if ($node->nid) {
     // if editing, give option to leave shadows
diff --git a/modules/forum/forum.module b/modules/forum/forum.module
index 7437346c090fea45016dd1387be630689a2cbbf0..890b8ef40113fca0669e51c4cddd973615ece5d1 100644
--- a/modules/forum/forum.module
+++ b/modules/forum/forum.module
@@ -197,12 +197,20 @@ function forum_validate(&$node) {
   if ($node->taxonomy) {
     // Extract the node's proper topic ID.
     $vocabulary = variable_get('forum_nav_vocabulary', '');
+    $containers = variable_get('forum_containers', array());
     foreach ($node->taxonomy as $term) {
       if (db_result(db_query('SELECT COUNT(*) FROM {term_data} WHERE tid = %d AND vid = %d', $term, $vocabulary))) {
-        $node->tid = $term;
+        if (in_array($term, $containers)) {
+          $term = taxonomy_get_term($term);
+          $error['taxonomy'] = theme('error', t('The item \'%forum\' is only a container for forums. Please select one of the forums below it.', array('%forum' => $term->name)));
+        }
+        else {
+          $node->tid = $term;
+        }
       }
     }
   }
+  return $error;
 }
 
 function forum_form(&$node, &$error) {
@@ -211,7 +219,7 @@ function forum_form(&$node, &$error) {
     $node->taxonomy[] = arg(3);
   }
 
-  $output = implode('', taxonomy_node_form('forum', $node));
+  $output = implode('', taxonomy_node_form('forum', $node, $error));
 
   if ($node->nid) {
     // if editing, give option to leave shadows
diff --git a/modules/taxonomy.module b/modules/taxonomy.module
index 68639d4abe0a99351fef1b4aade1d7f80dd46eaa..0d32a606bfea2dc88172658340ac74f8094dd559 100644
--- a/modules/taxonomy.module
+++ b/modules/taxonomy.module
@@ -299,7 +299,7 @@ function taxonomy_overview() {
   return theme("table", $header, $rows);
 }
 
-function taxonomy_form($vocabulary_id, $value = 0) {
+function taxonomy_form($vocabulary_id, $value = 0, $error = array()) {
   $vocabulary = taxonomy_get_vocabulary($vocabulary_id);
   if ($vocabulary->required) {
     $descriptions = array(t("You must choose one term for this node."), t("You must choose one or more terms for this node."));
@@ -312,7 +312,9 @@ function taxonomy_form($vocabulary_id, $value = 0) {
 
   $multiple = intval($vocabulary->multiple);
 
-  return _taxonomy_term_select($vocabulary->name, "taxonomy", $value, $vocabulary_id, $descriptions[$multiple], $multiple, $blank);
+  $description = $descriptions[$multiple] . $error['taxonomy'];
+
+  return _taxonomy_term_select($vocabulary->name, 'taxonomy', $value, $vocabulary_id, $description, $multiple, $blank);
 }
 
 /*
@@ -336,7 +338,7 @@ function taxonomy_get_vocabularies($type = '', $key = "vid") {
 }
 
 // return form with current term
-function taxonomy_node_form($type, $node = '') {
+function taxonomy_node_form($type, $node = '', $error = array()) {
   if (!$node->taxonomy) {
     if ($node->nid) {
       $terms = array_keys(taxonomy_node_get_terms($node->nid));
@@ -351,7 +353,7 @@ function taxonomy_node_form($type, $node = '') {
 
   $c = db_query("SELECT * FROM {vocabulary} WHERE nodes LIKE '%%%s%%' ORDER BY weight, name", $type);
   while ($vocabulary = db_fetch_object($c)) {
-    $result[] .= taxonomy_form($vocabulary->vid, $terms);
+    $result[] .= taxonomy_form($vocabulary->vid, $terms, $error);
   }
   return $result ? $result : array();
 }
diff --git a/modules/taxonomy/taxonomy.module b/modules/taxonomy/taxonomy.module
index 68639d4abe0a99351fef1b4aade1d7f80dd46eaa..0d32a606bfea2dc88172658340ac74f8094dd559 100644
--- a/modules/taxonomy/taxonomy.module
+++ b/modules/taxonomy/taxonomy.module
@@ -299,7 +299,7 @@ function taxonomy_overview() {
   return theme("table", $header, $rows);
 }
 
-function taxonomy_form($vocabulary_id, $value = 0) {
+function taxonomy_form($vocabulary_id, $value = 0, $error = array()) {
   $vocabulary = taxonomy_get_vocabulary($vocabulary_id);
   if ($vocabulary->required) {
     $descriptions = array(t("You must choose one term for this node."), t("You must choose one or more terms for this node."));
@@ -312,7 +312,9 @@ function taxonomy_form($vocabulary_id, $value = 0) {
 
   $multiple = intval($vocabulary->multiple);
 
-  return _taxonomy_term_select($vocabulary->name, "taxonomy", $value, $vocabulary_id, $descriptions[$multiple], $multiple, $blank);
+  $description = $descriptions[$multiple] . $error['taxonomy'];
+
+  return _taxonomy_term_select($vocabulary->name, 'taxonomy', $value, $vocabulary_id, $description, $multiple, $blank);
 }
 
 /*
@@ -336,7 +338,7 @@ function taxonomy_get_vocabularies($type = '', $key = "vid") {
 }
 
 // return form with current term
-function taxonomy_node_form($type, $node = '') {
+function taxonomy_node_form($type, $node = '', $error = array()) {
   if (!$node->taxonomy) {
     if ($node->nid) {
       $terms = array_keys(taxonomy_node_get_terms($node->nid));
@@ -351,7 +353,7 @@ function taxonomy_node_form($type, $node = '') {
 
   $c = db_query("SELECT * FROM {vocabulary} WHERE nodes LIKE '%%%s%%' ORDER BY weight, name", $type);
   while ($vocabulary = db_fetch_object($c)) {
-    $result[] .= taxonomy_form($vocabulary->vid, $terms);
+    $result[] .= taxonomy_form($vocabulary->vid, $terms, $error);
   }
   return $result ? $result : array();
 }