diff --git a/entityreference_view_widget.css b/entityreference_view_widget.css
index c8fc84a..4f6ceec 100644
--- a/entityreference_view_widget.css
+++ b/entityreference_view_widget.css
@@ -38,6 +38,10 @@
   height: 380px;
 }
 
+.entityreference-view-widget-right .messages {
+    margin-left: 15px;
+    margin-right: 15px;
+}
 .entityreference-view-widget-right .view {
   padding-left: 15px;
   height: 297px;
@@ -65,4 +69,4 @@
 
 .entityreference-view-widget-right-top .ajax-progress {
   float: right;
-}
\ No newline at end of file
+}
diff --git a/entityreference_view_widget.module b/entityreference_view_widget.module
index b9acb81..a6c34da 100644
--- a/entityreference_view_widget.module
+++ b/entityreference_view_widget.module
@@ -249,13 +249,18 @@ function entityreference_view_widget_field_widget_form(&$form, &$form_state, $fi
   $view->set_display($target_view[1]);
   // If the widget has been rebuilt via #ajax, change the exposed filter and
   // pager values, if needed.
-  if (isset($form_state['values'][$field_name][$field_language])) {
+  $ajax = isset($form_state['values'][$field_name][$field_language]);
+  if ($ajax) {
     $values = $form_state['values'][$field_name];
     // Set exposed_raw_input and exposed_data just like views_exposed_form_submit() does.
     if (!empty($values['exposed_filters'])) {
       $exposed_input = $values['exposed_filters'];
       $view->exposed_raw_input = $exposed_input;
       $view->exposed_data = $exposed_input;
+      // Also set exposed_input, to prevent get_exposed_input() from using the
+      // previous outdated values
+      unset($exposed_input['submit']);
+      $view->exposed_input = $exposed_input;
     }
 
     // Only change the page if the rebuild wasn't triggered by an exposed filter,
@@ -272,7 +277,9 @@ function entityreference_view_widget_field_widget_form(&$form, &$form_state, $fi
   }
   $view->build();
   $view->execute($target_view[1]);
-  $output = $view->render();
+  // Display errors here if there is no full page build.
+  $output = $ajax ? theme('status_messages') : '';
+  $output .= $view->render();
 
   $element += array(
     '#element_validate' => array('entityreference_view_widget_validate'),
diff --git a/views/entityreference_view_widget_plugin_exposed_form.inc b/views/entityreference_view_widget_plugin_exposed_form.inc
index 9f4e6cb..8847096 100644
--- a/views/entityreference_view_widget_plugin_exposed_form.inc
+++ b/views/entityreference_view_widget_plugin_exposed_form.inc
@@ -44,6 +44,11 @@ class entityreference_view_widget_plugin_exposed_form extends views_plugin_expos
     );
     foreach (element_get_visible_children($form) as $key) {
       $return_form[$key] = $form[$key];
+      // Adjust the element's values to the exposed input used for filtering
+      // the view. Set #default_value since we do not return $form_state.
+      if (isset($form_state['input'][$key]) && isset($return_form[$key]['#default_value'])) {
+        $return_form[$key]['#default_value'] = $form_state['input'][$key];
+      }
     }
     return $return_form;
   }
