diff --git a/plugins/FeedsTermProcessor.inc b/plugins/FeedsTermProcessor.inc
index bae88a4..19ec5e5 100644
--- a/plugins/FeedsTermProcessor.inc
+++ b/plugins/FeedsTermProcessor.inc
@@ -39,6 +39,21 @@ class FeedsTermProcessor extends FeedsProcessor {
   }
 
   /**
+   * Load an existing entity.
+   */
+  protected function entityLoad(FeedsSource $source, $entity_id) {
+    $entity = parent::entityLoad($source, $entity_id);
+
+    // Avoid missing bundle errors when term has been loaded directly from db.
+    if (empty($entity->vocabulary_machine_name) && !empty($entity->vid)) {
+      $vocabulary = taxonomy_vocabulary_load($entity->vid);
+      $entity->vocabulary_machine_name = ($vocabulary) ? $vocabulary->machine_name : NULL;
+    }
+
+    return $entity;
+  }
+
+  /**
    * Validates a term.
    */
   protected function entityValidate($term) {
diff --git a/tests/feeds_processor_term.test b/tests/feeds_processor_term.test
index 9af79ac..5d40f8b 100644
--- a/tests/feeds_processor_term.test
+++ b/tests/feeds_processor_term.test
@@ -348,4 +348,32 @@ class FeedsCSVtoTermsTest extends FeedsWebTestCase {
     }
   }
 
+  /**
+   * Test replacing terms on subsequent imports.
+   */
+  public function testReplaceTerms() {
+    $mappings = array(
+      0 => array(
+        'source' => 'name',
+        'target' => 'name',
+        'unique' => 1,
+      ),
+    );
+    $this->addMappings('term_import', $mappings);
+
+    // Configure the processor to "Replace existing terms".
+    $this->setSettings('term_import', 'FeedsTermProcessor', array(
+      'skip_hash_check' => TRUE,
+      'update_existing' => 1,
+    ));
+
+    // Import first time.
+    $this->importFile('term_import', $this->absolutePath() . '/tests/feeds/users.csv');
+    $this->assertText('Created 5 terms');
+
+    // Import again to replace terms.
+    $this->importFile('term_import', $this->absolutePath() . '/tests/feeds/users.csv');
+    $this->assertText('Updated 5 terms.');
+  }
+
 }
