diff --git a/includes/admin.inc b/includes/admin.inc
index 1e1339c..539cce1 100644
--- a/includes/admin.inc
+++ b/includes/admin.inc
@@ -857,45 +857,14 @@ function views_ui_import_validate($form, &$form_state) {
     form_set_error('', t('A view by that name already exists; please choose a different name'));
   }
 
-  $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;
-    }
-    else if ($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');
+  views_include('analyze');
+  if ($messages = views_analyze_view($view)) {
+    foreach ($messages as $message) {
+      if ($message['type'] == '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;
-          }
-        }
-      }
-    }
   }
 
   if ($broken) {
diff --git a/includes/analyze.inc b/includes/analyze.inc
index 450efb2..6367fb4 100644
--- a/includes/analyze.inc
+++ b/includes/analyze.inc
@@ -102,6 +102,44 @@ function views_ui_views_analyze($view) {
   if (count($view->display) < 2) {
     $ret[] = views_ui_analysis(t('This view has only a default display and therefore will not be placed anywhere on your site; perhaps you want to add a page or a block display.'), 'warning');
   }
+  foreach ($view->display as $display_id => $display) {
+    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');
+    }
+
+    $plugin = $display->handler->get_plugin('style');
+    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;
 }
