diff --git rules/includes/rules.core.inc rules/includes/rules.core.inc
index c3d6c2a..8ac3653 100644
--- rules/includes/rules.core.inc
+++ rules/includes/rules.core.inc
@@ -657,10 +657,10 @@ abstract class RulesPlugin extends RulesExtendable {
    */
   public function getArgumentInfo($name) {
     $vars = $this->availableVariables();
-    if (isset($this->settings[$name . ':select']) && isset($vars[$this->settings[$name . ':select']])) {
+    if (!empty($this->settings[$name . ':select']) && !empty($vars[$this->settings[$name . ':select']])) {
       return $vars[$this->settings[$name . ':select']];
     }
-    elseif (isset($this->settings[$name . ':select'])) {
+    elseif (!empty($this->settings[$name . ':select'])) {
       if ($wrapper = $this->applyDataSelector($this->settings[$name . ':select'])) {
         return $wrapper->info();
       }
diff --git rules/modules/data.eval.inc rules/modules/data.eval.inc
index accbec8..0fad52d 100644
--- rules/modules/data.eval.inc
+++ rules/modules/data.eval.inc
@@ -111,6 +111,31 @@ function rules_action_data_list_remove($list, $item) {
 }
 
 /**
+ * Action: Create data.
+ */
+function rules_action_data_create() {
+  $args = func_get_args();
+  $caller = array_pop($args);
+  $element = array_pop($args);
+  $state = array_pop($args);
+  $settings = array_pop($args);
+  $values = array();
+  foreach (array_keys($settings['#info']['parameter']) as $name) {
+    // Remove the parameter name prefix 'param_'.
+    $values[substr($name, 6)] = $settings[$name];
+  }
+  $cache = rules_get_cache();
+  $type_info = $cache['data_info'][$settings['type']];
+  if (isset($type_info['property info'])) {
+    $data = $values;
+  }
+  else {
+    $data = $values['value'];
+  }
+  return array('data_created' => $data);
+}
+
+/**
  * Condition: Compare data
  */
 function rules_condition_data_is($data, $op, $value) {
diff --git rules/modules/data.rules.inc rules/modules/data.rules.inc
index 7292cd0..e608d9d 100644
--- rules/modules/data.rules.inc
+++ rules/modules/data.rules.inc
@@ -232,6 +232,31 @@ function rules_data_action_info() {
       'validate' => 'rules_data_validate_list_item_type',
     ),
   );
+
+  $return['data_create'] = array(
+    'label' => t('Create variable'),
+    'parameter' => array(
+      'type' => array(
+        'type' => 'text',
+        'label' => t('Type'),
+        'options list' => 'rules_data_action_data_create_options',
+        'description' => t('Specifies the type of the data variable that should be created.'),
+        'restriction' => 'input',
+       ),
+       // Further needed parameters depend on the type.
+    ),
+    'provides' => array(
+      'data_created' => array(
+        'type' => 'unknown',
+        'label' => t('Created data'),
+      ),
+    ),
+    'group' => t('Data'),
+    'base' => 'rules_action_data_create',
+    'callbacks' => array(
+      'form_alter' => 'rules_action_entity_type_form_alter',
+    ),
+  );
   return $return;
 }
 
@@ -378,7 +403,7 @@ function rules_action_entity_query_process(RulesAbstractPlugin $element) {
 }
 
 /**
- * Custom validate callback for data create action.
+ * Custom validate callback for entity create action.
  */
 function rules_action_entity_create_validate($element) {
   if (!isset($element->settings['type'])) {
@@ -387,7 +412,7 @@ function rules_action_entity_create_validate($element) {
 }
 
 /**
- * Custom process callback for data create action.
+ * Custom process callback for entity create action.
  */
 function rules_action_entity_create_process(RulesAbstractPlugin $element) {
   $element->settings += array('type' => NULL);
@@ -532,6 +557,59 @@ function rules_action_data_list_add_positions() {
 }
 
 /**
+ * Options list callback for data creation action.
+ */
+function rules_data_action_data_create_options() {
+  $data_info = rules_fetch_data('data_info');
+  $entity_info = entity_get_info();
+  $options = array();
+  foreach ($data_info as $type => $properties) {
+    // Only add non-entities.
+    if (!isset($entity_info[$type]) && $type != 'entity') {
+      $options[$type] = $properties['label'];
+    }
+  }
+  natcasesort($options);
+  return $options;
+}
+
+/**
+ * Custom validate callback for data create action.
+ */
+function rules_action_data_create_validate($element) {
+  // TODO is this needed?
+}
+
+/**
+ * Custom process callback for data create action.
+ */
+function rules_action_data_create_process(RulesAbstractPlugin $element) {
+  $type = $element->settings['type'];
+  $cache = rules_get_cache();
+  $type_info = $cache['data_info'][$type];
+  if (isset($type_info['property info'])) {
+    // Add the data type's properties as parameters.
+    foreach ($type_info['property info'] as $property => $property_info) {
+      // Prefix parameter names to avoid name clashes with existing parameters.
+      $element_info['parameter']['param_' . $property] = $property_info;
+      if (isset($cache['data_info'][$property_info['type']])) {
+        $element_info['parameter']['param_' . $property] += $cache['data_info'][$property_info['type']];
+      }
+      if (empty($element_info['parameter']['param_' . $property]['required'])) {
+        $element_info['parameter']['param_' . $property]['optional'] = TRUE;
+      }
+    }
+  }
+  else {
+    // Add a value field as parameter.
+    $element_info['parameter']['param_value'] = $type_info;
+    $element_info['parameter']['param_value']['type'] = $type;
+  }
+  $element_info['provides']['data_created']['type'] = $type;
+  $element->alterInfo($element_info);
+}
+
+/**
  * Implements hook_rules_condition_info() on behalf of the pseudo data module.
  * @see rules_core_modules()
  */
