diff --git a/modules/events.inc b/modules/events.inc
index a0e3e23..eeb9293 100644
--- a/modules/events.inc
+++ b/modules/events.inc
@@ -111,6 +111,13 @@ function rules_entity_delete($entity, $type) {
 }
 
 /**
+ * Implements hook_node_prepare().
+ */
+function rules_node_prepare($node) {
+  rules_invoke_event('node_prepare', $node);
+}
+
+/**
  * Implements hook_user_login().
  */
 function rules_user_login(&$edit, $account) {
diff --git a/modules/node.rules.inc b/modules/node.rules.inc
index 87f8821..75e1291 100644
--- a/modules/node.rules.inc
+++ b/modules/node.rules.inc
@@ -31,6 +31,16 @@ function rules_node_event_info() {
       'variables' => rules_events_node_variables(t('updated content'), TRUE),
       'access callback' => 'rules_node_integration_access',
     ),
+    'node_prepare' => array(
+      'label' => t('Before passing content to the add/edit form'),
+      'group' => t('Node'),
+      'variables' => rules_events_node_variables(t('edited content'), TRUE),
+      'access callback' => 'rules_node_integration_access',
+      // Don't save the node because we're just preparing it for the form. Any
+      // changes made here may be overridden by the user before the form is
+      // submitted.
+      'skip save' => TRUE,
+    ),
     'node_presave' => array(
       'label' => t('Before saving content'),
       'group' => t('Node'),
