diff --git a/viewfield/viewfield.module b/viewfield/viewfield.module
--- a/viewfield/viewfield.module
+++ b/viewfield/viewfield.module
@@ -34,10 +34,9 @@ function viewfield_field_settings($op, $field) {
       $form['allowed_views'] = array(
         '#type' => 'checkboxes',
         '#title' => t('Allowed values'),
-        '#default_value' => is_array($field['allowed_views']) ? $field['allowed_views'] : array(),
-        '#options' => drupal_map_assoc(array_keys(views_get_all_views())),
         '#description' => t('Only selected views will be available for content authors. Leave empty to allow all.'),
       );
+      $form['allowed_views'] += _viewfield_get_view_options(is_array($field['allowed_views']) ? $field['allowed_views'] : array());
       return $form;
 
     case 'validate':
@@ -383,3 +382,68 @@ function _viewfield_get_view_args($vargs, $node) {
   }
   return $args;
 }
+
+function _viewfield_get_view_options($default_values) {
+  $format = variable_get('viewfield_options_sort', 'alpha_by_tag');
+  $options = array();
+  
+  switch ($format) {
+    case 'alpha_by_tag':
+      return _viewfield_options_alpha_by_tag($default_values);
+    case 'alpha':
+      $views = views_get_all_views();
+      ksort($views);
+      $options['#options'] = drupal_map_assoc(array_keys($views));
+      $options['#default_value'] = $default_values;
+      break;
+    default:
+      $options['#options'] = drupal_map_assoc(array_keys(views_get_all_views()));
+      $options['#default_value'] = $default_values;
+  }
+  return $options;
+}
+
+/**
+ * Sort by tags, then view name 
+ */
+function _viewfield_sort_views($a, $b) {
+  if ($a->tag === $b->tag) {
+    return strcmp($a->name, $b->name);
+  }
+  return strcmp($a->tag, $b->tag);
+}
+
+/**
+ * Return options grouped in fieldsets by tag.
+ */
+function _viewfield_options_alpha_by_tag($default_values) {
+  $views = views_get_all_views();
+
+  /* Sort views by tags, then name */
+  uasort($views, '_viewfield_sort_views');
+
+  /* Create options array elements, apply #prefix and #suffix */
+  $i = 0;
+  $options = array();  
+  foreach($views as $key => $view) {
+    $options[$i] = array(
+      '#type' => 'checkbox',
+      '#title' => $key,
+      '#return_value' => $key,
+      '#disabled' => FALSE,
+      '#default_value' => 0,
+      '#view_tag' => $view->tag,
+    );
+    
+    if ($i == 0) {
+      $options[$i]['#prefix'] = '<fieldset class="viewfield_group"><legend>'.$view->tag.'</legend>';
+    } 
+    elseif ($options[$i-1]['#view_tag'] !== $options[$i]['#view_tag']) {
+      $options[$i]['#prefix'] = '<fieldset class="viewfield_group"><legend>'.$view->tag.'</legend>';
+      $options[$i-1]['#suffix'] = '</fieldset>';
+    }    
+    $i++;
+  }
+  $options[$i-1]['#suffix'] = '</fieldset>';
+  return $options;
+}
\ No newline at end of file
