diff --git a/rules/modules/comment.rules.inc b/rules/modules/comment.rules.inc
index 3886fd9..139be3e 100644
--- a/rules/modules/comment.rules.inc
+++ b/rules/modules/comment.rules.inc
@@ -128,6 +128,23 @@
       ),
       'module' => 'Comment',
     ),
+    'rules_action_add_comment' => array(
+      'label' => t('Add new comment'),
+      'arguments' => array(
+        'node' => array('type' => 'node', 'label' => t('Content')),
+        'author' => array('type' => 'user', 'label' => t('The author of the comment')),
+      ),
+      'new variables' => array(
+        'comment_added' => array(
+          'type' => 'comment',
+          'label' => t('Added comment'),
+          'save' => TRUE,
+          'label callback' => 'rules_action_add_comment_variable_label',        
+        ),
+      ),
+      'eval input' => array('subject', 'comment_body'),
+      'module' => 'Comment',
+    ),
   );
 }
 
@@ -139,6 +156,40 @@
 }
 
 /**
+ * Action: Add comment to node.
+ */
+function rules_action_add_comment($node, $user, $settings) {
+  $comment = array();
+  $comment['pid'] = 0;
+  $comment['cid'] = NULL;
+  $comment['nid'] = $node->nid;
+  $comment['uid'] = $user->uid;
+  $comment['name'] = $user->name;
+
+  $comment['subject'] = $settings['subject'];
+  $comment['comment'] = $settings['comment_body'];
+  $comment['format'] = $settings['comment_body_format'];
+
+  // If comment title is not specified, extract one from the comment's body.
+  // This code borrowed from _comment_form_submit().
+  if (trim($settings['subject']) == '') {
+    // The body may be in any format, so we:
+    // 1) Filter it into HTML
+    // 2) Strip out all HTML tags
+    // 3) Convert entities back to plain-text.
+    // Note: format is checked by check_markup().
+    $comment['subject'] = truncate_utf8(trim(decode_entities(strip_tags(check_markup($settings['comment_body'], $settings['comment_body_format'])))), 29, TRUE);
+    // Edge cases where the comment body is populated only by HTML tags will
+    // require a default subject.
+    if ($comment['subject'] == '') {
+      $comment['subject'] = t('(No subject)');
+    }
+  }
+
+  return array('comment_added' => $comment);
+}
+
+/**
  * Implementation of hook_rules_data_type_info()
  */
 function comment_rules_data_type_info() {
@@ -146,7 +197,7 @@
     'comment' => array(
       'label' => t('comment'),
       'class' => 'rules_data_type_comment',
-      'savable' => FALSE,
+      'savable' => TRUE,
       'identifiable' => TRUE,
       'module' => 'Comment',
     ),
@@ -157,6 +208,13 @@
  * Defines the comment data type
  */
 class rules_data_type_comment extends rules_data_type {
+
+  function save() {
+    $comment = &$this->get();
+    comment_save($comment);
+    return TRUE;
+  }
+  
   function load($cid) {
     return _comment_load($cid);
   }
