diff --git a/includes/admin.inc b/includes/admin.inc
index 8c18c71..0e5d70b 100644
--- a/includes/admin.inc
+++ b/includes/admin.inc
@@ -1966,52 +1966,16 @@ function views_ui_import_validate($form, &$form_state) {
 
   // Make sure base table gets set properly if it got moved.
   $view->update();
-
-  $view->init_display();
-
-  $broken = FALSE;
-  // Make sure that all plugins and handlers needed by this view actually exist.
-  foreach ($view->display as $id => $display) {
-    if (empty($display->handler) || !empty($display->handler->broken)) {
-      drupal_set_message(t('Display plugin @plugin is not available.', array('@plugin' => $display->display_plugin)), 'error');
-      $broken = TRUE;
-      continue;
-    }
-
-    $plugin = views_get_plugin('style', $display->handler->get_option('style_plugin'));
-    if (!$plugin) {
-      drupal_set_message(t('Style plugin @plugin is not available.', array('@plugin' => $display->handler->get_option('style_plugin'))), 'error');
-      $broken = TRUE;
-    }
-    elseif ($plugin->uses_row_plugin()) {
-      $plugin = views_get_plugin('row', $display->handler->get_option('row_plugin'));
-      if (!$plugin) {
-        drupal_set_message(t('Row plugin @plugin is not available.', array('@plugin' => $display->handler->get_option('row_plugin'))), 'error');
-        $broken = TRUE;
-      }
-    }
-
-    foreach (views_object_types() as $type => $info) {
-      $handlers = $display->handler->get_handlers($type);
-      if ($handlers) {
-        foreach ($handlers as $id => $handler) {
-          if ($handler->broken()) {
-            drupal_set_message(t('@type handler @table.@field is not available.', array(
-              '@type' => $info['stitle'],
-              '@table' => $handler->table,
-              '@field' => $handler->field,
-            )), 'error');
-            $broken = TRUE;
-          }
-        }
+  views_include('analyze');
+  if ($messages = views_analyze_view($view)) {
+    foreach ($messages as $message) {
+      if ($message['type'] == 'error') {
+        form_set_error('', t('Unable to import view.'));
+        break;
       }
     }
   }
 
-  if ($broken) {
-    form_set_error('', t('Unable to import view.'));
-  }
-
   $form_state['view'] = &$view;
 }
 
diff --git a/includes/analyze.inc b/includes/analyze.inc
index d48bf77..9f8aaf1 100644
--- a/includes/analyze.inc
+++ b/includes/analyze.inc
@@ -105,9 +105,10 @@ function views_ui_views_analyze($view) {
   // You can give a page display the same path as an alias existing in the
   // system, so the alias will not work anymore. Report this to the user,
   // because he probably wanted something else.
+  // Make sure that all plugins and handlers needed by this view actually exist.
   foreach ($view->display as $id => $display) {
-    if (empty($display->handler)) {
-      continue;
+    if (empty($display->handler) || !empty($display->handler->broken)) {
+      $ret[] = views_ui_analysis(t('Display plugin @plugin is not available.', array('@plugin' => $display->display_plugin)), 'error');
     }
     if ($display->handler->has_path() && $path = $display->handler->get_option('path')) {
       $normal_path = drupal_get_normal_path($path);
@@ -115,8 +116,43 @@ function views_ui_views_analyze($view) {
         $ret[] = views_ui_analysis(t('You have configured display %display with a path which is an path alias as well. This might lead to unwanted effects so better use an internal path.', array('%display' => $display->display_title)), 'warning');
       }
     }
+
+    $plugin = views_get_plugin('style', $display->handler->get_option('style_plugin'));
+    if ($plugin) {
+      $plugin->init($view, $display);
+      if ($validate_messages = $plugin->validate()) {
+        foreach ($validate_messages as $validate_message) {
+          $ret[] = views_ui_analysis(t('Style plugin @plugin: @message', array('@plugin' => $plugin_name, '@message' => $validate_message)));
+        }
+      }
+    }
+    else {
+      $ret[] = views_ui_analysis(t('Style plugin @plugin is not available.', array('@plugin' => $plugin_name)), 'error');
+    }
+
+    foreach (views_object_types() as $type => $info) {
+      $handlers = $display->handler->get_handlers($type);
+      if ($handlers) {
+        foreach ($handlers as $id => $handler) {
+          if ($validate_messages = $handler->validate()) {
+            foreach ($validate_messages as $message) {
+              $ret[] = views_ui_analysis("$display_id: $id: $message", 'error');
+            }
+          }
+          if ($handler->broken()) {
+            $ret[] = views_ui_analysis(t('@type handler @table.@field is not available.', array(
+              '@type' => $info['stitle'],
+              '@table' => $handler->table,
+              '@field' => $handler->field,
+            )), 'error');
+          }
+        }
+      }
+    }
   }
 
+
+
   return $ret;
 }
 
