diff --git a/sites/all/modules/contrib/webform_view/webform_view.inc b/sites/all/modules/contrib/webform_view/webform_view.inc
index 0e76ab4..4638f29 100644
--- a/sites/all/modules/contrib/webform_view/webform_view.inc
+++ b/sites/all/modules/contrib/webform_view/webform_view.inc
@@ -411,11 +411,32 @@ function array_to_plaintext_table($rows) {
  * Implements _webform_display_component().
  * @param $value this has been flattened and serialized - unpack it before use.
  */
-function _webform_display_view($component, $value_serialized, $format = 'html') {
+function _webform_display_view($component, $value_serialized, $format = 'html', $sid = NULL) {
   $value = array();
-  if (! empty($value_serialized)) {
-    $value = unserialize(reset($value_serialized));
+  if ($sid !== NULL) {
+    // Looking at an already submitted form, we need to get some more data from the database
+    $node = node_load($component['nid']);
+    $sub = webform_get_submission($component['nid'], $sid);
+    foreach ($sub->data as $key => $val) {
+      // Only add non-component data
+      if (!in_array($key, array_keys($node->webform['components']))) {
+        $item = node_load($key);
+
+        foreach ($val as $k => $v) {
+          $val[$k] = token_replace($v, array('node' => $item));
+        }
+        $value[] = $val;
+      }
+    }
   }
+  else {
+    foreach ($component['children'] as $key => $val) {
+      if (!isset($val['nid'])) {
+        $value[] = unserialize($val['value']);
+      }
+    }
+  }
+
   return array(
     '#title' => $component['name'],
     '#weight' => $component['weight'],
diff --git a/sites/all/modules/contrib/webform_view/webform_view.module b/sites/all/modules/contrib/webform_view/webform_view.module
index 9af4136..33d93fd 100644
--- a/sites/all/modules/contrib/webform_view/webform_view.module
+++ b/sites/all/modules/contrib/webform_view/webform_view.module
@@ -37,8 +37,13 @@ function webform_view_webform_component_info() {
       'file' => 'webform_view.inc',
       'features' => array(
         'default_value' => FALSE,
-        // Support nested fields here
+        'required' => FALSE,
+        'description' => FALSE,
+        'conditional' => FALSE,
         'group' => TRUE,
+        'title_inline' => FALSE,
+        'css_classes' => FALSE,
+        'wrapper_classes' => FALSE,
       ),
     ),
   );
@@ -61,24 +66,58 @@ function webform_view_theme() {
 
 
 /**
- * hook_form_alter()
- *
+ * Implements hook_form_BASE_FORM_ID_alter().
  */
-function webform_view_form_alter(&$form, $form_state, $form_id) {
-  if (substr($form_id, 0, 19) != 'webform_client_form') {
-    return;
-  }
-  // Find form_key from cid.
-  $form_key = array();
-  $settings = variable_get('webform_view_' . $form['#node']->nid, array());
-  foreach ($settings as $cid => $enabled) {
-    if (is_int($cid) && $enabled) {
-      $form_key[] = 'webform-component-' . $form['#node']->webform['components'][$cid]['form_key'];
-    }
-  }
+function webform_view_form_webform_client_form_alter(&$form, $form_state, $form_id) {
+  $component_tree = $form_state['webform']['component_tree'];
+  foreach ($component_tree['children'] as $cid => $component) {
+    if ($component['type'] == 'view') {
+      // Current component is a webform_view
+      $form_key = $component['form_key'];
+      $items = array();
+      $first_field = NULL;
+
+      $inputs = $form_state['input']['submitted'];
+      if (is_array($inputs[$form_key])) {
+        foreach ($inputs[$form_key] as $nid => $values) {
+          if (is_numeric($nid)) {
+            // Iterate each node in the view
+            $node = node_load($nid);
+
+            $val = array();
+            // Flatten the embedded view values
+            if (is_array($component['children'])) {
+              foreach ($component['children'] as $key => $field) {
+                // If value was submitted, use it, else use default
+                $v = (isset($values[$field['form_key']])) ? $values[$field['form_key']] : $field['value'];
 
-  #dpm(get_defined_vars());
+                $val[$field['form_key']] = token_replace($v, array('node' => $node));
 
+                if ($first_field === NULL) {
+                  // Discover which was the first field defined
+                  $first_field = $field['form_key'];
+                }
+              }
+            }
+            // This data structure nables the proper display of the embedded view inputs on preview
+            // and also stores the data in the webform_submitted_data table
+            $form['#node']->webform['components'][$nid] = array(
+              'cid' => $nid,
+              'pid' => $component['cid'],
+              'form_key' => $nid,
+              'value' => serialize($val),
+            );
+
+            $items[] = implode(', ', $val);
+          }
+        }
+      }
+      // This stores a nice, text version to show in table view or CSV export
+      if ($first_field !== NULL) {
+        $form['submitted'][$form_key][$first_field]['#value'] = implode("\n", $items);
+      }
+    }
+  }
 }
 
 /**
