--- content.views.inc	2008-11-17 20:56:55.000000000 +0100
+++ content.views.inc.new	2008-11-20 13:33:01.000000000 +0100
@@ -182,11 +182,25 @@ function content_views_field_views_data(
       'field' => 'vid',
     );
 
+    // Build the list of columns enabled for default views integration.
+    $db_columns = array();
+    foreach ($db_info['columns'] as $column => $attributes) {
+      if (!empty($attributes['views'])) {
+        $db_columns[$column] = $attributes;
+      }
+    }
+    // Pick up the first column when none has been explicitly enabled.
+    if (empty($db_columns)) {
+      $db_columns = array_slice($db_info['columns'], 0, 1, TRUE);
+    }
+
     $columns = array();
+    $db_fields = array();
     $arguments = array();
     $filters = array();
-    foreach ($db_info['columns'] as $column => $attributes) {
-      $columns[] = $attributes['column'];
+    foreach ($db_columns as $column => $attributes) {
+      $columns[] = $column;
+      $db_fields[] = $attributes['column'];
       $sorts[] = !empty($attributes['sortable']) ? TRUE : FALSE;
 
       // Identify likely filters and arguments for each column based on field type.
@@ -216,51 +230,53 @@ function content_views_field_views_data(
     }
 
     // Ensure all columns are retrieved,
-    $additional_fields = drupal_map_assoc($columns);
+    $additional_fields = drupal_map_assoc($db_fields);
 
-    $data[$columns[0]] = array(
-      'group' => t('Content'),
-      'title' => t('@label - (!name)', array('@label' => t($field['widget']['label']), '!name' => $field['field_name'])),
-      'title_short' => check_plain(t($field['widget']['label'])),
-      'help' =>  t($field_types[$field['type']]['label']) .' - '. t('Appears in: @types', array('@types' => implode(', ', $types))),
-      'field' => array(
-        'field' => $columns[0],
-        'table' => $db_info['table'],
-        'handler' => 'content_handler_field_multiple',
-        'click sortable' => $sorts[0],
-        'additional fields' => $additional_fields,
-        'content_field_name' => $field['field_name'],
-        // Access control modules should implement content_views_access_callback().
-        'access callback' => 'content_views_access_callback',
-        'access arguments' => array($field),
-      ),
-      'argument' => array(
-        'field' => $columns[0],
-        'table' => $db_info['table'],
-        'handler' => $arguments[0],
-        'additional fields' => $additional_fields,
-        'content_field_name' => $field['field_name'],
-        'empty field name' => t('<No value>'),
-      ),
-      'filter' => array(
-        'field' => $columns[0],
-        'table' => $db_info['table'],
-        'handler' => $filters[0],
-        'additional fields' => $additional_fields,
-        'content_field_name' => $field['field_name'],
-        'allow empty' => TRUE,
-      ),
-    );
-    if (!empty($sorts[0])) {
-      $data[$columns[0]]['sort'] = array(
-        'field' => $columns[0],
-        'table' => $db_info['table'],
-        'handler' => 'content_handler_sort',
-        'additional fields' => $additional_fields,
-        'content_field_name' => $field['field_name'],
+    // Provide automatic filters, sorts, and arguments for each column, not just the first.
+    foreach ($db_fields as $i => $db_field) {
+      $data[$db_field] = array(
+        'group' => t('Content'),
+        'title' => t('@label - (!name)', array('@label' => t($field['widget']['label']), '!name' => $db_field)),
+        'title_short' => t('@label (!name)', array('@label' => t($field['widget']['label']), '!name' => $columns[$i])),
+        'help' =>  t($field_types[$field['type']]['label']) .' - '. t('Appears in: @types', array('@types' => implode(', ', $types))),
+        'field' => array(
+          'field' => $db_field,
+          'table' => $db_info['table'],
+          'handler' => 'content_handler_field_multiple',
+          'click sortable' => $sorts[$i],
+          'additional fields' => $additional_fields,
+          'content_field_name' => $field['field_name'],
+          // Access control modules should implement content_views_access_callback().
+          'access callback' => 'content_views_access_callback',
+          'access arguments' => array($field),
+        ),
+        'argument' => array(
+          'field' => $db_field,
+          'table' => $db_info['table'],
+          'handler' => $arguments[$i],
+          'additional fields' => $additional_fields,
+          'content_field_name' => $field['field_name'],
+          'empty field name' => t('<No value>'),
+        ),
+        'filter' => array(
+          'field' => $db_field,
+          'table' => $db_info['table'],
+          'handler' => $filters[$i],
+          'additional fields' => $additional_fields,
+          'content_field_name' => $field['field_name'],
+          'allow empty' => TRUE,
+        ),
       );
+      if (!empty($sorts[$i])) {
+        $data[$db_field]['sort'] = array(
+          'field' => $db_field,
+          'table' => $db_info['table'],
+          'handler' => 'content_handler_sort',
+          'additional fields' => $additional_fields,
+          'content_field_name' => $field['field_name'],
+        );
+      }
     }
-    // TODO: provide automatic filters, sorts, and arguments for each column, not just the first?
     return array($table_alias => $data);
   }
 }
