--- views_or_handler_argument.inc.orig  2011-02-25 05:09:04.000000000 +0300
+++ views_or_handler_argument.inc       2011-05-07 17:00:53.000000000 +0400
@@ -181,7 +181,14 @@
     $alt['pre'] = $this->query_get_where_group(0);
     $alt['alternatives'] = array();
     $alt['position'] = $this->position;
-    $this->query_remove_where_group(0);
+
+    // Move default 0 group to other position
+    // so next arguments conditions will not fall into it
+    // (they are written to 0 as hardcoded in handlers)...
+    if (isset($alt['pre'])) {
+      $alt['pre_group'] = $this->query_add_where_group(array('clauses' => array(1), 'args' => array(), 'type' => 'AND'), TRUE);
+    }
+
     if ($this->view->args[$this->position] != '') {
       array_splice($this->view->args, $this->position, 0, '');
     }
@@ -209,16 +216,19 @@
   }

   function query() {
-    $this->finish_alternative();
     $alt = &$this->query_current_alternative();
-    if ($this->view->args[$this->position] != '') {
-      if ($this->options['share_arguments']) {
-        array_splice($this->view->args, $this->position, 0, array_slice($this->view->args, $alt['position'], $this->position - $alt['position']));
-        $alt['position'] = $this->position;
-      }
-      else {
-        array_splice($this->view->args, $this->position, 0, '');
-      }
+
+    // Remove and reinsert 'pre' group after working with alternatives
+    $this->query_remove_where_group($alt['pre_group']);
+    $this->finish_alternative();
+    $alt['pre_group'] = $this->query_add_where_group($alt['pre']);
+
+    if ($this->options['share_arguments']) {
+      array_splice($this->view->args, $this->position, 0, array_slice($this->view->args, $alt['position'], $this->position - $alt['position']));
+      $alt['position'] = $this->position;
+    }
+    else {
+      array_splice($this->view->args, $this->position, 0, '');
     }
   }
 }
@@ -228,8 +238,12 @@
  */
 class views_or_handler_argument_end_alternatives extends views_or_handler_argument {
   function query() {
-    $this->finish_alternative();
     $alt = &$this->query_current_alternative();
+
+    // Remove and reinsert 'pre' group after working with alternatives
+    $this->query_remove_where_group($alt['pre_group']);
+    $this->finish_alternative();
+
     $new_group = array(
       'clauses' => array(),
       'args'    => array(),

