diff --git a/views/webform.views.inc b/views/webform.views.inc
index dab3fe3..22874fd 100644
--- a/views/webform.views.inc
+++ b/views/webform.views.inc
@@ -123,6 +123,10 @@
       'handler' => 'views_handler_sort_date',
     ),
   );
+  // Add date module support, if present.
+  if (module_exists('date')) {
+    $data['webform_submissions']['submitted']['filter']['handler'] = 'date_views_filter_handler_simple';
+  }
 
   // remote_addr
   $data['webform_submissions']['remote_addr'] = array(
@@ -168,6 +172,71 @@
       'help' => t('Provide a simple link to delete the submission.'),
       'handler' => 'webform_handler_field_submission_link',
       'link_type' => 'delete',
+    ),
+  );
+
+  // Relation to webform data.
+  $data['webform_submissions']['data'] = array(
+    'title' => t('Data'),
+    'help' => t('Relates to a webform submission data'),
+    'real field' => 'sid',
+    'relationship' => array(
+      'handler' => 'webform_handler_relationship_submission_data',
+      'base' => 'webform_submitted_data',
+      'base field' => 'sid',
+      'label' => t('Submission Data'),
+    ),
+  );
+
+  /**
+   * Submission data table definitions.
+   */
+  $data['webform_submitted_data']['table']['group'] = t('Webform submission data');
+  $data['webform_submitted_data']['data'] = array(
+    'table' => 'webform_submitted_data',
+    'title' => t('Data field (raw)'),
+    'help' => t('The submitted data value as raw output string.'),
+    'real field' => 'data',
+    'argument' => array(
+      'handler' => 'views_handler_argument_string',
+    ),
+    'field' => array(
+      'handler' => 'views_handler_field_xss',
+    ),
+    'filter' => array(
+      'handler' => 'views_handler_filter_string',
+    ),
+    'sort' => array(
+      'handler' => 'views_handler_sort',
+    ),
+  );
+
+  // data_formatted
+  $data['webform_submitted_data']['data_formatted'] = array(
+    'title' => t('Data field (formatted)'),
+    'help' => t('The submitted data in component specific format.'),
+    'real field' => 'data',
+    'field' => array(
+      'handler' => 'webform_handler_field_submission_data',
+    ),
+  );
+
+  // Number
+  $data['webform_submitted_data']['no'] = array(
+    'title' => t('Delta'),
+    'help' => t('The delta value of the submitted data in a multi value component.'),
+    'real field' => 'no',
+    'argument' => array(
+      'handler' => 'views_handler_argument_numeric',
+    ),
+    'field' => array(
+      'handler' => 'views_handler_field_numeric',
+    ),
+    'filter' => array(
+      'handler' => 'views_handler_filter_numeric',
+    ),
+    'sort' => array(
+      'handler' => 'views_handler_sort',
     ),
   );
 
@@ -273,6 +342,10 @@
         'parent' => 'views_handler_field',
         'file' => 'webform_handler_field_submission_link.inc',
       ),
+      'webform_handler_field_submission_data' => array(
+        'parent' => 'views_handler_field',
+        'file' => 'webform_handler_field_submission_data.inc',
+      ),
       'webform_handler_field_submission_count' => array(
         'parent' => 'views_handler_field',
         'file' => 'webform_handler_field_submission_count.inc',
@@ -303,6 +376,45 @@
         'parent' => 'views_handler_filter_boolean_operator',
         'file' => 'webform_handler_filter_webform_status.inc',
       ),
+      'webform_handler_relationship_submission_data' => array(
+        'parent' => 'views_handler_relationship',
+        'file' => 'webform_handler_relationship_submission_data.inc',
+      ),
     ),
   );
-}
\ No newline at end of file
+}
+
+/**
+ * Menu callback; Provide a list of Webform nodes for use in autocomplete.
+ */
+function webform_views_autocomplete($string = '') {
+  $matches = array();
+  if ($string) {
+    $or = db_or();
+
+    // Strings with nid: in them can be used as direct matches.
+    $matches = array();
+    if (preg_match('/nid:([0-9]+)/', $string, $matches)) {
+      $or->condition('nid', (int) $matches[1]);
+    }
+    // Otherwise match on title and optionally indirect NIDs.
+    else {
+      $or->condition('title', '%' . db_like($string) . '%', 'LIKE');
+      if (is_numeric($string)) {
+        $or->condition('nid', (int) $string);
+      }
+    }
+
+    $options = array();
+    $result = db_select('node')
+      ->fields('node', array('nid', 'title'))
+      ->condition($or)
+      ->range(0, 10)
+      ->execute();
+    foreach ($result as $node) {
+      $options[$node->title . ' [nid:' . $node->nid . ']'] = check_plain($node->title) . ' [nid:' . $node->nid . ']';
+    }
+  }
+
+  drupal_json_output($options);
+}
diff --git a/views/webform_handler_field_submission_data.inc b/views/webform_handler_field_submission_data.inc
new file mode 100644
index 0000000..27cccc8
--- /dev/null
+++ b/views/webform_handler_field_submission_data.inc
@@ -0,0 +1,96 @@
+<?php
+
+/**
+ * @file
+ * Views handler to display data value of a webform submission component.
+ */
+
+/**
+ * Field handler to show if submission is draft or not.
+ *
+ * @ingroup views_field_handlers
+ */
+class webform_handler_field_submission_data extends views_handler_field {
+  /**
+   * Field constructor to provide default data.
+   */
+  function construct() {
+    parent::construct();
+    $this->additional_fields['nid'] = 'nid';
+    $this->additional_fields['cid'] = 'cid';
+    $this->additional_fields['no'] = 'no';
+  }
+
+  /**
+   * Definition and defaults for the option form/values.
+   */
+  function option_definition() {
+    $options = parent::option_definition();
+    $options['format'] = array('default' => 'html');
+    $options['display_label'] = array('default' => FALSE);
+    return $options;
+  }
+
+  function options_form(&$form, &$form_state) {
+    parent::options_form($form, $form_state);
+
+    // Provide the selection for the display format.
+    $form['format'] = array(
+      '#type' => 'select',
+      '#title' => t('Display format'),
+      '#options' => array(
+        'html' => 'html',
+        'plain' => 'plain',
+      ),
+      '#required' => TRUE,
+      '#default_value' => $this->options['format'],
+    );
+
+    // Title display settings.
+    $form['display_label'] = array(
+      '#type' => 'checkbox',
+      '#title' => t('Display label'),
+      '#default_value' => $this->options['display_label'],
+      '#description' => t('Show the label of the component as it is provied by webform.'),
+    );
+  }
+
+  /**
+   * Load the node for any needed relationships to load the components.
+   */
+  function pre_render(&$values) {
+    // @TODO: maybe we add a multi value pre query here?
+    $nid = $this->view->relationship[$this->options['relationship']]->options['webform_nid'];
+    $this->webform_node = node_load($nid);
+  }
+
+  /**
+   * Render the field.
+   *
+   * @param $row
+   *   The row retrieved
+   */
+  function render($row) {
+    $value = $this->get_value($row);
+    if (isset($value)) {
+      $nid = $this->get_value($row, 'nid');
+      $cid = $this->get_value($row, 'cid');
+      // @TODO: use a delta = 0 on every item?
+      $delta = $this->get_value($row, 'no');
+      $component = $this->webform_node->webform['components'][$cid];
+
+      $render = array();
+      $format = $this->options['format'];
+      $input_values = array($cid => array($delta => $value));
+      _webform_client_form_add_component($this->webform_node, $component, NULL, $render, $render, $input_values, $format);
+      $render = $render[$component['form_key']];
+
+      // Remove display label.
+      if (empty($this->options['display_label'])) {
+        $render['#theme_wrappers'] = array();
+      }
+
+      return render($render);
+    }
+  }
+}
diff --git a/views/webform_handler_relationship_submission_data.inc b/views/webform_handler_relationship_submission_data.inc
new file mode 100644
index 0000000..e723138
--- /dev/null
+++ b/views/webform_handler_relationship_submission_data.inc
@@ -0,0 +1,97 @@
+<?php
+/**
+ * @file
+ * Views' relationship handlers.
+ */
+
+class webform_handler_relationship_submission_data extends views_handler_relationship  {
+
+  function option_definition() {
+    $options = parent::option_definition();
+    $options['webform_nid'] = array('default' => NULL);
+    $options['components'] = array('default' => array());
+    return $options;
+  }
+
+  /**
+   * Extends the relationship options form.
+   */
+  function options_form(&$form, &$form_state) {
+    parent::options_form($form, $form_state);
+
+    $nid = $this->options['webform_nid'];
+    $node = $nid ? node_load((int) $nid) : NULL;
+
+    $form['webform_nid'] = array(
+      '#type' => 'textfield',
+      '#title' => t('Webform title'),
+      '#default_value' => isset($node) ? $node->title . ' [nid:' . $node->nid . ']' : '',
+      '#ajax' => array(
+        'path' => views_ui_build_form_url($form_state),
+        'event' => 'blur',
+      ),
+      '#autocomplete_path' => 'webform/autocomplete',
+      '#description' => t('Enter the title or NID of the Webform whose values should be made available.'),
+      '#submit' => array('views_ui_config_item_form_submit_temporary'),
+      '#executes_submit_callback' => TRUE,
+    );
+
+    $components = array();
+    if (isset($node->webform['components'])) {
+      $components = $node->webform['components'];
+    }
+
+    $type_options = array();
+    foreach (webform_components() as $key => $component) {
+      $type_options[$key] = check_plain($component['label']);
+    }
+
+    $options = array();
+    foreach ($components as $cid => $component) {
+      $options[$cid] = check_plain($component['name']);
+    }
+    $form['components'] = array(
+      '#title' => t('Components'),
+      '#type' => 'select',
+      '#collapsible' => FALSE,
+      '#collapsed' => FALSE,
+      '#multiple' => TRUE,
+      '#options' => $options,
+      '#default_value' => $this->options['components'],
+      '#dependency' => array('edit-options-component-type' => array($type)),
+      '#process' => array('webform_component_select'),
+      '#access' => count($components),
+    );
+  }
+
+  function options_submit(&$form, &$form_state) {
+    // Just store the checked components of the selected type.
+    $form_state['values']['options']['webform_nid'] = preg_replace('/^.*?nid:([0-9]+).*?$/', '$1', $form_state['values']['options']['webform_nid']);
+    $form_state['values']['options']['components'] = array_filter($form_state['values']['options']['components']);
+  }
+
+  /**
+   * Called to implement a relationship in a query.
+   *
+   * It respects the given component ids, provided via options form.
+   */
+  function query() {
+    $nid = $this->options['webform_nid'];
+    $components = $this->options['components'];
+    $this->definition['extra'] = array(
+      array(
+        'table' => NULL,
+        'field' => "%alias.nid",
+        'value' => $nid,
+      ),
+      array(
+        'table' => NULL,
+        'field' => "%alias.cid",
+        'value' => $components,
+      )
+    );
+
+    // The rest of building the join is performed by the parent.
+    parent::query();
+  }
+}
diff --git a/webform.info b/webform.info
index 12ae28a..5e90cb3 100644
--- a/webform.info
+++ b/webform.info
@@ -13,10 +13,12 @@
 files[] = views/webform_handler_field_node_link_edit.inc
 files[] = views/webform_handler_field_node_link_results.inc
 files[] = views/webform_handler_field_submission_count.inc
+files[] = views/webform_handler_field_submission_data.inc
 files[] = views/webform_handler_field_submission_link.inc
 files[] = views/webform_handler_field_webform_status.inc
 files[] = views/webform_handler_filter_is_draft.inc
 files[] = views/webform_handler_filter_webform_status.inc
+files[] = views/webform_handler_relationship_submission_data.inc
 files[] = views/webform.views.inc
 
 files[] = tests/components.test
diff --git a/webform.module b/webform.module
index b716c90..2e66758 100644
--- a/webform.module
+++ b/webform.module
@@ -112,6 +112,15 @@
     'type' => MENU_NORMAL_ITEM,
   );
 
+  // Autocomplete used in Views integration.
+  $items['webform/autocomplete'] = array(
+    'title' => 'Webforms',
+    'page callback' => 'webform_views_autocomplete',
+    'access arguments' => 'administer views',
+    'file' => 'views/webform.views.inc',
+    'type' => MENU_CALLBACK,
+  );
+
   // Node page tabs.
   $items['node/%webform_menu/done'] = array(
     'title' => 'Webform confirmation',