diff --git views_field_view_handler_field_view.inc views_field_view_handler_field_view.inc
index bf93f97..9f6b93f 100644
--- views_field_view_handler_field_view.inc
+++ views_field_view_handler_field_view.inc
@@ -7,6 +7,7 @@ class views_field_view_handler_field_view extends views_handler_field {
     $options['view'] = array('default' => '');
     $options['display'] = array('default' => 'default');
     $options['arguments'] = array('default' => '');
+    $options['custom_exposed_query'] = array('default' => '');
 
     return $options;
   }
@@ -44,6 +45,13 @@ class views_field_view_handler_field_view extends views_handler_field {
         '#type' => 'textfield',
         '#default_value' => $this->options['arguments'],
       );
+
+      $form['custom_exposed_query'] = array(
+        '#title' => t('Exposed form'),
+        '#description' => t('Use an urlencoded list of values') . $form['alter']['help']['#prefix'],
+        '#type' => 'textfield',
+        '#default_value' => $this->options['custom_exposed_query'],
+      );
     }
     $form['alter']['#access'] = FALSE;
   }
@@ -59,20 +67,66 @@ class views_field_view_handler_field_view extends views_handler_field {
       // Set the variable for yourself, this is not for the normal "user".
       if (empty($running[$this->options['view']][$this->options['display']]) || variable_get('views_field_view_evil', FALSE)) {
         $running[$this->options['view']][$this->options['display']] = TRUE;
-        $args = array();
-        $args[] = $this->options['view'];
-        $args[] = $this->options['display'];
-
-        foreach (explode(',', $this->options['arguments']) as $argument) {
-          $alter = array(
-            'text' => $argument,
-          );
-          $tokens = $this->get_render_tokens($alter);
-          $value = $this->render_altered($alter, $tokens);
-          $args[] = $value;
+
+        $view = views_get_view($this->options['view']);
+        if (!$view || !$view->access($this->options['display'])) {
+          $output = NULL;
+        }
+        else {
+          $args = array();
+
+          foreach (explode(',', $this->options['arguments']) as $argument) {
+            $alter = array(
+              'text' => $argument,
+            );
+            $tokens = $this->get_render_tokens($alter);
+            $value = $this->render_altered($alter, $tokens);
+            $args[] = $value;
+          }
+
+          if (empty($view->current_display) || $view->current_display != $this->options['display']) {
+            if (!$view->set_display($this->options['display'])) {
+              $output = FALSE;
+            }
+          }
+
+          if ($output === FALSE) {
+            $output = NULL;
+          }
+          else {
+            $view->preview = TRUE;
+            $view->pre_execute($args);
+            $view->init_handlers();
+
+            if (!empty($this->options['custom_exposed_query'])) {
+              $exposed = array();
+
+              parse_str($this->options['custom_exposed_query'], $exposed);
+
+              if (!empty($exposed)) {
+                $exposed['submit'] = t('Apply');
+                $form_state = array(
+                  'view' => &$view,
+                  'display' => &$view->display_handler->display,
+                  'values' => $exposed,
+                );
+                drupal_execute('views_exposed_form', $form_state);
+                if (form_get_errors()) {
+                  $output = FALSE;
+                }
+              }
+            }
+
+            if ($output === FALSE) {
+              $output = NULL;
+            }
+            else {
+              $output = $view->display_handler->preview();
+              $view->post_execute();
+            }
+          }
         }
 
-        $output = call_user_func_array('views_embed_view', $args);
         $running[$this->options['view']][$this->options['display']] = FALSE;
       }
       else {
