diff --git devel_generate/devel_generate.fields.inc devel_generate/devel_generate.fields.inc
index fc1d74c..abdc79e 100644
--- devel_generate/devel_generate.fields.inc
+++ devel_generate/devel_generate.fields.inc
@@ -89,7 +89,10 @@ function devel_generate_multiple($function, $object, $field, $instance, $bundle)
         break;
     }
     for ($i = 0; $i <= $max; $i++) {
-      $object_field[$i] = $function($object, $field, $instance, $bundle);
+      $result = $function($object, $field, $instance, $bundle);
+      if (!empty($result)) {
+        $object_field[$i] = $result;
+      }
     }
   }
   return $object_field;
diff --git devel_generate/taxonomy.devel_generate.inc devel_generate/taxonomy.devel_generate.inc
index 048591c..fdd920b 100644
--- devel_generate/taxonomy.devel_generate.inc
+++ devel_generate/taxonomy.devel_generate.inc
@@ -15,7 +15,7 @@ function _taxonomy_devel_generate($object, $field, $instance, $bundle) {
   // TODO: For free tagging vocabularies that do not already have terms, this
   // will not result in any tags being added.
   // Insert new data:
-  $max = db_query('SELECT MAX(tid) FROM taxonomy_term_data')->fetchField();
+  $max = db_query('SELECT MAX(tid) FROM taxonomy_term_data WHERE vid = :vid', array(':vid' =>$field['settings']['allowed_values'][0]['vid'] ))->fetchField();
   $candidate = mt_rand(1, $max);
   $query = db_select('taxonomy_term_data', 't');
   $tid = $query
@@ -25,6 +25,11 @@ function _taxonomy_devel_generate($object, $field, $instance, $bundle) {
             ->range(0,1)
             ->execute()
             ->fetchField();
+  // If there are no terms for the taxonomy, the query will fail, in which
+  // case we return NULL.
+  if ($tid === FALSE) {
+    return NULL;
+  }
   $object_field['tid'] = (int) $tid;
   return $object_field;
 }
