diff -urp revision_moderation/revision_moderation.module revision_moderation_fixed/revision_moderation.module
--- revision_moderation/revision_moderation.module	2008-07-31 12:29:58.000000000 -0500
+++ revision_moderation_fixed/revision_moderation.module	2008-12-12 12:26:59.000000000 -0600
@@ -6,7 +6,7 @@
  * Allows moderation of node revisions while existing revisions stay visible.
  */
 
-// Actions module support.
+// Actions and triggers module support.
 include_once drupal_get_path('module', 'revision_moderation') .'/revision_moderation_actions.inc';
 
 /**
@@ -383,6 +383,7 @@ function revision_moderation_publish($no
   db_query("UPDATE {node} SET vid = %d, title = '%s' WHERE nid = %d", $node->vid, $node->title, $node->nid);
   drupal_set_message('The selected revision has been published.');
   watchdog('content', '@type: published %title revision %revision', array('@type' => t($node->type), '%title' => $node->title, '%revision' => $node->vid), WATCHDOG_NOTICE, l(t('view'), "node/$node->nid/revisions/$node->vid/view"));
+  module_invoke_all('revision_moderation', 'published', $node);
   drupal_goto("node/". $node->nid);
 }
 
diff -urp revision_moderation/revision_moderation_actions.inc revision_moderation_fixed/revision_moderation_actions.inc
--- revision_moderation/revision_moderation_actions.inc	2007-12-17 21:14:40.000000000 -0600
+++ revision_moderation_fixed/revision_moderation_actions.inc	2008-12-12 13:05:23.000000000 -0600
@@ -7,7 +7,38 @@
  */
 
 /**
- * Implementation of hook_action_info.
+ * Implementation of hook_hook_info().
+ */
+function revision_moderation_hook_info() {
+  return array(
+    'revision_moderation' => array(
+      'revision_moderation' => array(
+        'published' => array(
+          'runs when' => t('Moderated revision is published'),
+        ),
+      ),
+    ),
+  );
+}
+
+/**
+ * Implementation of hook_revision_moderation(). Trigger actions if any are available.
+ */
+function revision_moderation_revision_moderation($op, $node = NULL) {
+  // We assume $op = 'published' because it's the only operation in use
+  if (module_exists('trigger')) {
+    $aids = _trigger_get_hook_aids('revision_moderation', $op);
+    foreach ($aids as $aid => $action_info) {
+      // The 'if ($aid)' is a safeguard against http://drupal.org/node/271460#comment-886564
+      if ($aid) {
+        actions_do($aid, $node);
+      }
+    }
+  }
+}
+
+/**
+ * Implementation of hook_action_info().
  */
 function revision_moderation_action_info() {
   $actions['revision_moderation_enable_action'] = array(
@@ -32,6 +63,25 @@ function revision_moderation_action_info
 }
 
 /**
+ * Implementation of hook_action_info_alter().
+ * 
+ * Called after hook_action_info() so modules may modify the action_info array.
+ * 
+ * @param array $info
+ *   The result of calling hook_action_info() on all modules.
+ */
+function revision_moderation_action_info_alter(&$info) {
+  $hooks = array('revision_moderation' => array('published'));
+
+  if (isset($info['node_publish_action']['hooks'])) {
+    $info['node_publish_action']['hooks'] = array_merge($info['node_publish_action']['hooks'], $hooks);
+  }
+  else {
+    $info['node_publish_action']['hooks'] = $hooks;
+  }
+}
+
+/**
  * Implementation of a Drupal action; enables revision moderation
  * on a node.
  */
