diff --git a/data/data.views.inc b/data/data.views.inc
index 995f73a..d6258f7 100644
--- a/data/data.views.inc
+++ b/data/data.views.inc
@@ -134,24 +134,9 @@ function data_get_views_handler_options($type = NULL, $reset = FALSE) {
         foreach ($handler_types as $handler_type) {
           if (isset($field_definition[$handler_type]['handler'])) {
             $handler = $field_definition[$handler_type]['handler'];
-            $handlers[$handler_type][$handler] = $handler;
-            $current_handler = $handler;
-            // Work up the class's parentage, as there are many handler classes
-            // not actually used by any views data fields.
-            $finished = FALSE;
-            while (!$finished) {
-              $current_handler = get_parent_class($current_handler);
-              if ($current_handler == 'views_handler') {
-                // We've reached the top; don't add the root class to the list.
-                $finished = TRUE;
-              }
-              else {
-                // Add the class. This is going to be redundant in many cases
-                // as we'll have either already done this or be about to find
-                // it in the data, but this function is only called on an admin
-                // page so performance is not an issue.
-                $handlers[$handler_type][$current_handler] = $current_handler;
-              }
+            $views_base_handler = 'views_handler_' . $handler_type;
+            if (($handler == $views_base_handler) || is_subclass_of($handler, $views_base_handler)) {
+              $handlers[$handler_type][$handler] = $handler;
             }
           }
         }
