diff --git a/handlers/views_handler_field.inc b/handlers/views_handler_field.inc
index 428e3b97bdf8c4d3d9084976f85fee7063bdeb67..5b8cd63054954f07a9c13d6578d94c40d6060331 100644
--- a/handlers/views_handler_field.inc
+++ b/handlers/views_handler_field.inc
@@ -378,6 +378,17 @@ function get_value($values, $field = NULL) {
     }
   }
 
+  /**
+   * Determines if this field will be available as an option to group the result
+   * by in the style settings.
+   *
+   * @return bool
+   *  TRUE if this field handler is groupable, otherwise FALSE.
+   */
+  function use_string_group_by() {
+    return TRUE;
+  }
+
   function option_definition() {
     $options = parent::option_definition();
 
diff --git a/plugins/views_plugin_display.inc b/plugins/views_plugin_display.inc
index 97e3660a195d0cc90df40dcfdcd3537ded7a9ccc..d469f5171ff4462c209093e494f50377330a2e52 100644
--- a/plugins/views_plugin_display.inc
+++ b/plugins/views_plugin_display.inc
@@ -975,9 +975,18 @@ function get_handlers($type) {
 
   /**
    * Retrieve a list of fields for the current display with the
-   *  relationship associated if it exists.
+   * relationship associated if it exists.
+   *
+   * @param $groupable_only
+   *  Return only an array of field labels from handler that return TRUE
+   *  from use_string_group_by method.
    */
   function get_field_labels() {
+    // Use func_get_arg so the function signature isn't amended
+    // but we can still pass TRUE into the function to filter
+    // by groupable handlers.
+    $groupable_only = func_get_arg(0);
+
     $options = array();
     foreach ($this->get_handlers('relationship') as $relationship => $handler) {
       if ($label = $handler->label()) {
@@ -989,6 +998,10 @@ function get_field_labels() {
     }
 
     foreach ($this->get_handlers('field') as $id => $handler) {
+      if ($groupable_only && !$handler->use_string_group_by()) {
+        // Continue to next handler if it's not groupable.
+        continue;
+      }
       if ($label = $handler->label()) {
         $options[$id] = $label;
       }
diff --git a/plugins/views_plugin_style.inc b/plugins/views_plugin_style.inc
index 831ba369349a255292585147ee93f8541acfe821..020b33f817bfc62f806d06c7f3a52704e28a5f33 100644
--- a/plugins/views_plugin_style.inc
+++ b/plugins/views_plugin_style.inc
@@ -187,9 +187,8 @@ function options_form(&$form, &$form_state) {
     // @TODO: Document "uses grouping" in docs.php when docs.php is written.
     if ($this->uses_fields() && $this->definition['uses grouping']) {
       $options = array('' => t('- None -'));
-      $field_labels = $this->display->handler->get_field_labels();
+      $field_labels = $this->display->handler->get_field_labels(TRUE);
       $options += $field_labels;
-
       // If there are no fields, we can't group on them.
       if (count($options) > 1) {
         // This is for backward compability, when there was just a single select form.