diff -u node_clone_orig/clone.module node_clone/clone.module
--- node_clone_orig/clone.module	Thu Jul 29 00:39:18 2010
+++ node_clone/clone.module	Mon May 30 15:57:55 2011
@@ -114,3 +114,47 @@
   }
 }
 
+/**
+ *  Implements hook_action_info()
+ *  See http://drupal.org/node/172152
+ */
+function clone_action_info() {
+  return array(
+    'clone_clone_node_action' => array(
+      'type' => 'node',
+      'description' => t('Clone node'),
+      'configurable' => FALSE,
+    ),
+  );
+}
+
+/**
+ *  Implements a Drupal action to clone a node.
+ */
+function clone_clone_node_action(&$node, $context=array()) {
+  module_load_include('inc', 'clone', 'clone.pages');
+  if (isset($node->nid)) {
+    clone_node_save($node->nid);
+  }
+}
+
+/**
+ *  Implements hook_nodeapi()
+ *  If Rules is installed then we can trigger the clone event.
+ *  This function is only needed to support the 'prepopulate' choice.
+ */
+function clone_nodeapi(&$node, $op, $a3 = NULL, $a4 = NULL) {
+  global $user;
+
+  switch ($op) {
+    case 'insert':
+      if (module_exists('rules')) {
+        if ($node->clone_from_original_nid) {
+          $original_node = node_load($node->clone_from_original_nid);
+          rules_invoke_event('clone_cloned_node', $original_node, $node, $user);
+        }
+      }
+      break;
+  }
+}
+
diff -u node_clone_orig/clone.pages.inc node_clone/clone.pages.inc
--- node_clone_orig/clone.pages.inc	Thu Jul 29 00:22:16 2010
+++ node_clone/clone.pages.inc	Mon May 30 15:43:37 2011
@@ -86,6 +86,20 @@
 }
 
 /**
+ *  Implementation of hook_form_alter.
+ *  By adding the 'clone_from_original_nid' field as a form element,
+ *  it will be available in the node object when calling clone_nodeapi.
+ */
+function clone_form_alter(&$form, &$form_state, $form_id) {
+  if ($form['#node']->clone_from_original_nid) {
+    $form['clone_from_original_nid'] = array(
+      '#type' => 'hidden', 
+      '#default_value' => $form['#node']->clone_from_original_nid,
+    );
+  }
+}
+
+/**
  *  form builder: prompt the user to confirm the operation
  */
 function clone_node_confirm($form_state, $node) {
@@ -212,6 +226,11 @@
       drupal_alter("clone_node", $node, $original_node, "save-edit");
 
       node_save($node);
+
+      if (module_exists('rules')) {
+        rules_invoke_event('clone_cloned_node', $original_node, $node, $user);
+      }
+
       return $node->nid;
     }
   }
diff -u node_clone_orig/clone.rules.inc node_clone/clone.rules.inc
--- node_clone_orig/clone.rules.inc	Mon May 30 16:02:43 2011
+++ node_clone/clone.rules.inc	Mon May 30 15:40:23 2011
@@ -1,0 +1,22 @@
+<?php
+/**
+ * @file rules integration for the clone module
+ */
+
+/**
+ * Implementation of hook_rules_event_info().
+ * @ingroup rules
+ */
+function clone_rules_event_info() {
+  return array(
+    'clone_cloned_node' => array(
+      'label' => t('Content has been cloned'),
+      'module' => 'Clone module',
+      'arguments' => array(
+        'original_node' => array('type' => 'node', 'label' => t('Original content')), 
+        'cloned_node' => array('type' => 'node', 'label' => t('Cloned content')),
+        'user' => array('type' => 'user', 'label' => t('Acting user'))
+      )
+    ),
+  );
+}
Common subdirectories: node_clone_orig/translations and node_clone/translations
Common subdirectories: node_clone_orig/views and node_clone/views
