--- webform_rules.module
+++ webform_rules.module
@@ -210,7 +210,9 @@
 function webform_rules_tokens($type, $tokens, array $data = array(), array $options = array()) {
   $replacements = array();
   if ($type == 'webform') {
-    $component_names = array_keys($data[$type]['components']);
+    $components = get_object_vars($data[$type]); //Convert object into array
+    $component_names = array_keys($components); //Read machine-readable-name of components
+
     foreach ($tokens as $name => $original) {
       if ($name == 'sid') {
         $replacements[$original] = $data[$type]['sid'];
@@ -231,8 +233,12 @@
         // Join token name (without component name).
         $token = implode('-', $token);
         // Webform component.
-        $component = $data[$type]['components'][$component_name]['component'];
-        $component_value = $data[$type]['components'][$component_name]['value'];
+        $component = $data[$type]->$component_name;
+        $component_value = $component[0];
+        //Use value as default
+        if (empty($token)) {
+          $replacements[$original] = $component_value;
+        }
         switch ($token) {
           case 'title':
             $replacements[$original] = $component['name'];

--- webform_rules.rules.inc
+++ webform_rules.rules.inc
@@ -275,11 +275,11 @@
   foreach ($webform->webform['components'] as $cid => $component) {
     // A unique selector, using $nid, is important so that our rule will
     // fail validation if the selected webform changes.
-    $id = "{$nid}__{$cid}";
+    $id = "{$component['form_key']}";
     // Provide property info, as in hook_rules_data_info().
     $info[$id] = array(
       'label' => $component['name'],
-      'description' => t('@form_key from node @nid', array('@form_key' => $component['form_key'], '@nid' => $component['nid'])),
+      'description' => t('@component_name from @title(@nid)', array('@component_name' => $component['name'], '@title' => $webform->title, '@nid' => $webform->nid)),
       // All submission data is stored in arrays, whether its multiple or
       // not. Hence, to simplify, we expose all data as list.
       'type' => 'list<text>',
@@ -496,9 +496,13 @@
     $s = current($s);
     $this->id = $s->sid;
     $this->data = $s;
-    // Assign each piece of submission data to our wrapper's data properties.
+    $webform = node_load($this->data->nid);
+    $components = $webform->webform['components'];
+ // Assign each piece of submission data to our wrapper's data properties.
     foreach ($s->data as $cid => $val) {
-      $id = "{$s->nid}__{$cid}";
+      $c_key = $components[$cid]['form_key'];
+      $c_name = $components[$cid]['name'];
+      $id = "{$c_key}";
       $this->data->$id = array_values($val);
     }
   }
