diff --git a/modules/forum/forum.install b/modules/forum/forum.install
index 5c4957cbb00d13b43a3f08bdfaea2f5a38939a49..7e6de833a8b98c799f6637def2819d884b49e4d6 100644
--- a/modules/forum/forum.install
+++ b/modules/forum/forum.install
@@ -58,6 +58,7 @@ function forum_enable() {
       'entity_type' => 'node',
       'label' => $vocabulary->name,
       'bundle' => 'forum',
+      'required' => TRUE,
       'widget' => array(
         'type' => 'options_select',
       ),
diff --git a/modules/forum/forum.module b/modules/forum/forum.module
index c278c946b16de96f7ccebf5acb154908101e91cc..10d55b1a3533ddd2a061857a6643559fff7b6e44 100644
--- a/modules/forum/forum.module
+++ b/modules/forum/forum.module
@@ -299,7 +299,13 @@ function forum_node_validate($node, $form) {
     if (!empty($node->taxonomy_forums[$langcode])) {
       // Extract the node's proper topic ID.
       $containers = variable_get('forum_containers', array());
-      foreach ($node->taxonomy_forums[$langcode] as $item) {
+      foreach ($node->taxonomy_forums[$langcode] as $delta => $item) {
+        // If no term was selected (e.g. when no terms exist yet), remove the
+        // item.
+        if (empty($item['tid'])) {
+          unset($node->taxonomy_forums[$langcode][$delta]);
+          continue;
+        }
         $term = taxonomy_term_load($item['tid']);
         $used = db_query_range('SELECT 1 FROM {taxonomy_term_data} WHERE tid = :tid AND vid = :vid',0 , 1, array(
           ':tid' => $term->tid,
diff --git a/modules/forum/forum.test b/modules/forum/forum.test
index f485e48d42652ac137043ba2b219023e653e4693..d916642598e086b2a540d6e6dd62c2e58188ea38 100644
--- a/modules/forum/forum.test
+++ b/modules/forum/forum.test
@@ -90,6 +90,17 @@ class ForumTestCase extends DrupalWebTestCase {
     $this->assertResponse(200);
   }
 
+  /**
+   * Forum nodes should not be created without choosing forum from select list.
+   */
+  function testAddOrphanTopic() {
+    $this->drupalLogin($this->admin_user);
+    $this->drupalPost('node/add/forum', array('title' => $this->randomName(10), 'body[' . LANGUAGE_NONE .'][0][value]' => $this->randomName(120)), t('Save'));
+
+    $nid_count = db_query('SELECT COUNT(nid) FROM {node}')->fetchField();
+    $this->assertEqual(0, $nid_count, t('A forum node was not created.'));
+  }
+
   /**
    * Run admin tests on the admin user.
    *