 .../views_filters_selective.module                 | 74 +++++++++++++++++++---
 .../views_handler_filter_selective.inc             |  6 +-
 2 files changed, 70 insertions(+), 10 deletions(-)

diff --git a/views_filters_selective/views_filters_selective.module b/views_filters_selective/views_filters_selective.module
index fdafbb0..61382bb 100644
--- a/views_filters_selective/views_filters_selective.module
+++ b/views_filters_selective/views_filters_selective.module
@@ -68,9 +68,9 @@ function _views_filter_selective_query($filter, $field_name, $table_name, $oids)
   $query->init($filter->view->base_table, $filter->view->base_field, $query_options['options']);
 
   if (!empty($filter->options['relationship']) && $filter->options['relationship'] != 'none') {
-    $table_name = _views_filter_selective_query_relationship($filter->view->relationship[$filter->options['relationship']], $query);
+    $table_name1 = _views_filter_selective_query_relationship($filter->view->relationship[$filter->options['relationship']], $query);
+	$table_name=$query->ensure_table($table_name,$table_name1);
   }
-
   $field_alias = $query->add_field($table_name, $field_name);
   $query->add_where_expression(0, "{$filter->view->base_table}.{$filter->view->base_field} IN (:oids)", array(':oids' => $oids));
   $query->set_distinct(TRUE, TRUE);
@@ -97,15 +97,71 @@ function _views_filter_selective_query_relationship($relationship, $query) {
 
   // Handle additional relationships recursively.
   $link = NULL;
-  if (!empty($relationship->options['relationship']) && $relationship->options['relationship'] != 'none') {
-    $relationship_table = $link = _views_filter_selective_query_relationship($relationship->view->relationship[$relationship->options['relationship']], $query);
-  }
+  if (!empty($relationship->options['relationship']) && $relationship->options['relationship'] != 'none') {	
+    $link = _views_filter_selective_query_relationship($relationship->view->relationship[$relationship->options['relationship']], $query);
+   }
 
   // Add this relationship to the query.
   $table_data = views_fetch_data($relationship->definition['base']);
   $base_field = empty($relationship->definition['base field']) ? $table_data['table']['base']['field'] : $relationship->definition['base field'];
-
   $def = $relationship->definition;
+	
+  if($relationship instanceof views_handler_relationship_entity_reverse)
+  {
+    $left_field = $table_data['table']['base']['field'];
+	$first = array(
+      'left_table' => $link,
+      'left_field' => $left_field,
+      'table' => $def['field table'],
+      'field' => $def['field field'],
+    );
+    if (!empty($relationship->options['required'])) {
+      $first['type'] = 'INNER';
+    }
+
+    if (!empty($def['join_extra'])) {
+      $first['extra'] = $def['join_extra'];
+    }
+
+    if (!empty($def['join_handler']) && class_exists($def['join_handler'])) {
+      $first_join = new $def['join_handler'];
+    }
+    else {
+      $first_join = new views_join();
+    }
+    $first_join->definition = $first;
+    $first_join->construct();
+    $first_join->adjusted = TRUE;
+
+    $first_alias = $query->add_table($def['field table'], $link, $first_join);
+	   // Second, relate the field table to the entity specified using
+    // the entity id on the field table and the entity's id field.
+    $second = array(
+      'left_table' => $first_alias,
+      'left_field' => 'entity_id',
+      'table' => $def['base'],
+      'field' => $def['base field'],
+    );
+
+    if (!empty($relationship->options['required'])) {
+      $second['type'] = 'INNER';
+    }
+
+    if (!empty($def['join_handler']) && class_exists($def['join_handler'])) {
+      $join = new $def['join_handler'];
+    }
+    else {
+      $join = new views_join();
+    }
+    $join->definition = $second;
+    $join->construct();
+    $join->adjusted = TRUE;
+    // use a short alias for this:
+    $alias = $def['field_name'] . '_' . $relationship->table;
+  }
+  else
+  {
+
   $def['table'] = $relationship->definition['base'];
   $def['field'] = $base_field;
   $def['left_table'] = $relationship_table;
@@ -121,13 +177,15 @@ function _views_filter_selective_query_relationship($relationship, $query) {
   }
   else {
     $join = new views_join();
+	$query->add_table($def['left_table']);
   }
   $join->definition = $def;
   $join->options = $relationship->options;
   $join->construct();
-  $join->adjusted = TRUE;
-
+ // $join->adjusted = TRUE;.
   $alias = $def['table'] . '_' . $relationship->table;
+  }
+  
 
   return $query->add_relationship($alias, $join, $def['base'], $link);
 }
diff --git a/views_filters_selective/views_handler_filter_selective.inc b/views_filters_selective/views_handler_filter_selective.inc
index b180d58..5c647b3 100644
--- a/views_filters_selective/views_handler_filter_selective.inc
+++ b/views_filters_selective/views_handler_filter_selective.inc
@@ -4,7 +4,7 @@ class views_handler_filter_selective extends views_handler_filter_in_operator {
   static $results;
 
   function get_value_options() {
-    $this->value_options = array(0 => t('Actual values will be available at run-time'));
+	$this->value_options = array('dummy' => t('Actual values will be available at run-time'));
     if (empty($this->view->selective_oids) && !empty($this->view->inited)) {
       $handler = _views_filters_selective_get_handler($this->definition['proxy']);
       $oids = $this->get_oids();
@@ -41,6 +41,8 @@ class views_handler_filter_selective extends views_handler_filter_in_operator {
   function query() {
     // Decode the values to restore special chars.
     $this->value = array_map('urldecode', $this->value);
+	if(!$this->view->editing && is_array($this->value) && (isset($this->value['dummy']) || isset($this->value['all']) || (isset($this->value[0]) && $this->value[0]==0)))
+	$this->value='';
     parent::query();
   }
 
@@ -56,7 +58,7 @@ class views_handler_filter_selective extends views_handler_filter_in_operator {
       $view_copy = views_get_view($this->view->name);
       if (!$view_copy) return NULL;
       $view_copy->selective_oids = TRUE;
-      $view_copy->set_exposed_input($exposed_input);
+      $view_copy->set_exposed_input(array('All'));
       $view_copy->set_arguments($this->view->args);
       $view_copy->set_items_per_page(0);
       if (isset($_GET['items_per_page'])) {
