diff --git a/plugins/arguments/term.inc b/plugins/arguments/term.inc
index 868c8aa..e6e3710 100644
--- a/plugins/arguments/term.inc
+++ b/plugins/arguments/term.inc
@@ -31,6 +31,14 @@ function ctools_term_context($arg = NULL, $conf = NULL, $empty = FALSE) {
     return ctools_context_create_empty('entity:taxonomy_term');
   }
 
+  // Fallback on old vids setting.
+  if (!isset($conf['vocabularies'])) {
+    $vids = $conf['vids'];
+  }
+  else {
+    $vids = _ctools_term_vocabulary_machine_name_convert($conf['vocabularies'], TRUE);
+  }
+
   if (is_object($arg)) {
     $term = $arg;
   }
@@ -51,10 +59,10 @@ function ctools_term_context($arg = NULL, $conf = NULL, $empty = FALSE) {
 
         $terms = taxonomy_get_term_by_name($arg);
 
-        $conf['vids'] = is_array($conf['vids']) ? array_filter($conf['vids']) : NULL;
-        if ((count($terms) > 1) && isset($conf['vids'])) {
+        $vids = is_array($vids) ? array_filter($vids) : NULL;
+        if ((count($terms) > 1) && isset($vids)) {
           foreach ($terms as $potential) {
-            foreach ($conf['vids'] as $vid => $active) {
+            foreach ($vids as $vid => $active) {
               if ($active && $potential->vid == $vid) {
                 $term = $potential;
                 // break out of the foreaches AND the case
@@ -72,7 +80,7 @@ function ctools_term_context($arg = NULL, $conf = NULL, $empty = FALSE) {
     }
   }
 
-  if (!empty($conf['vids']) && array_filter($conf['vids']) && empty($conf['vids'][$term->vid])) {
+  if (!empty($vids) && array_filter($vids) && empty($vids[$term->vid])) {
     return NULL;
   }
 
@@ -98,13 +106,19 @@ function ctools_term_settings_form(&$form, &$form_state, $conf) {
   $vocabularies = taxonomy_get_vocabularies();
   $options = array();
   foreach ($vocabularies as $vid => $vocab) {
-    $options[$vid] = $vocab->name;
+    $options[$vocab->machine_name] = $vocab->name;
+  }
+
+  // Fallback on old 'vids', when no vocabularies are available.
+  if (empty($conf['vocabularies']) && !empty($conf['vids'])) {
+    $conf['vocabularies'] = _ctools_term_vocabulary_machine_name_convert($conf['vids'], FALSE);
   }
-  $form['settings']['vids'] = array(
+
+  $form['settings']['vocabularies'] = array(
     '#title' => t('Limit to these vocabularies'),
     '#type' => 'checkboxes',
     '#options' => $options,
-    '#default_value' => !empty($conf['vids']) ? $conf['vids'] : array(),
+    '#default_value' => !empty($conf['vocabularies']) ? $conf['vocabularies'] : array(),
     '#description' => t('If no vocabularies are checked, terms from all vocabularies will be accepted.'),
   );
 
@@ -161,3 +175,41 @@ function ctools_term_breadcrumb($conf, $context) {
   $breadcrumb = array_merge(drupal_get_breadcrumb(), array_reverse($breadcrumb));
   drupal_set_breadcrumb($breadcrumb);
 }
+
+/**
+ * Helper function to convert machine names to vids or reverse.
+ *
+ * @param array $args
+ *   array of either vids or machine names
+ * @param bool $to_vids
+ *   if set to TRUE (default), $args are handled as machine_names
+ *   else $args are expected as vids
+ *
+ * @return array
+ *   either array of vocabulary ids ($to_vids == TRUE)
+ *   or array of machine names ($to_vids == FALSE)
+ */
+function _ctools_term_vocabulary_machine_name_convert($args, $to_vids = TRUE) {
+  static $map;
+
+  // Get the map and static cache it.
+  if (!isset($map)) {
+    $vocabularies = taxonomy_get_vocabularies();
+    $map = array();
+    foreach ($vocabularies as $vid => $voc) {
+      $map[$voc->machine_name] = $voc->vid;
+    }
+  }
+
+  $args = array_filter($args);
+  // We need the input values as keys.
+  $args = array_flip($args);
+
+  if ($to_vids) {
+    $return = array_intersect_key($map, $args);
+  }
+  else {
+    $return = array_intersect_key(array_flip($map), $args);
+  }
+  return array_combine($return, $return);
+}
