diff --git a/modules/views.views.inc b/modules/views.views.inc
index baee98c..069dd99 100644
--- a/modules/views.views.inc
+++ b/modules/views.views.inc
@@ -70,6 +70,7 @@ function views_views_data() {
     'help' => t('Override the default view title for this view. This is useful to display an alternative title when a view is empty.'),
     'area' => array(
       'id' => 'title',
+      'sub_type' => 'empty',
     ),
   );
 
diff --git a/views_ui/admin.inc b/views_ui/admin.inc
index 0812692..6e78463 100644
--- a/views_ui/admin.inc
+++ b/views_ui/admin.inc
@@ -1539,7 +1539,7 @@ function views_ui_add_item_form($form, &$form_state) {
 
   // Figure out all the base tables allowed based upon what the relationships provide.
   $base_tables = $view->getBaseTables();
-  $options = views_fetch_fields(array_keys($base_tables), $type, $display->useGroupBy());
+  $options = views_fetch_fields(array_keys($base_tables), $type, $form_state['type'], $display->useGroupBy());
 
   if (!empty($options)) {
     $form['options']['controls'] = array(
@@ -1736,7 +1736,7 @@ function views_ui_config_item_form($form, &$form_state) {
         // If this relationship is valid for this type, add it to the list.
         $data = views_fetch_data($relationship['table']);
         $base = $data[$relationship['field']]['relationship']['base'];
-        $base_fields = views_fetch_fields($base, $form_state['type'], $view->display_handler->useGroupBy());
+        $base_fields = views_fetch_fields($base, $form_state['type'], $form_state['type'], $view->display_handler->useGroupBy());
         if (isset($base_fields[$item['table'] . '.' . $item['field']])) {
           $relationship_handler->init($view, $relationship);
           $relationship_options[$relationship['id']] = $relationship_handler->label();
@@ -1746,7 +1746,7 @@ function views_ui_config_item_form($form, &$form_state) {
       if (!empty($relationship_options)) {
         // Make sure the existing relationship is even valid. If not, force
         // it to none.
-        $base_fields = views_fetch_fields($view->storage->base_table, $form_state['type'], $view->display_handler->useGroupBy());
+        $base_fields = views_fetch_fields($view->storage->base_table, $form_state['type'], $form_state['type'], $view->display_handler->useGroupBy());
         if (isset($base_fields[$item['table'] . '.' . $item['field']])) {
           $relationship_options = array_merge(array('none' => t('Do not use a relationship')), $relationship_options);
         }
@@ -2549,13 +2549,16 @@ function _views_sort_types($a, $b) {
  *   A list or a single base_table, for example node.
  * @param string $type
  *   The handler type, for example field or filter.
+ * @param string $sub_type
+ *   An optional sub type. E.g. Allows making an area plugin available for
+ *   header only, instead of header, footer, and empty regions.
  * @param bool $grouping
  *   Should the result grouping by its 'group' label.
  *
  * @return array
  *   A keyed array of in the form of 'base_table' => 'Description'.
  */
-function views_fetch_fields($base, $type, $grouping = FALSE) {
+function views_fetch_fields($base, $type, $sub_type = NULL, $grouping = FALSE) {
   static $fields = array();
   if (empty($fields)) {
     $data = views_fetch_data();
@@ -2590,6 +2593,16 @@ function views_fetch_fields($base, $type, $grouping = FALSE) {
             if ($grouping && !empty($info[$key]['no group by'])) {
               continue;
             }
+            if ($sub_type && isset($info[$key]['sub_type'])) {
+              if (is_array($info[$key]['sub_type'])) {
+                if (!in_array($sub_type, $info[$key]['sub_type'])) {
+                  continue;
+                }
+              }
+              elseif ($info[$key]['sub_type'] != $sub_type) {
+                continue;
+              }
+            }
             if (!empty($info[$key]['skip base'])) {
               foreach ((array) $info[$key]['skip base'] as $base_name) {
                 $skip_bases[$field][$key][$base_name] = TRUE;
