diff --git a/rules_forms/includes/rules_forms.ui.inc b/rules_forms/includes/rules_forms.ui.inc
index 45c6bbc..f3346af 100644
--- a/rules_forms/includes/rules_forms.ui.inc
+++ b/rules_forms/includes/rules_forms.ui.inc
@@ -6,25 +6,25 @@
  */

 abstract class RulesFormsDataUI extends RulesDataUI implements RulesDataDirectInputFormInterface {
-
-  /**
-   * Provides the default mode.
-   */
-  public static function getDefaultMode() {
-    return 'input';
-  }
-
-  /**
-   * Provides the default form.
-   */
-  public static function defaultForm($name, $info, $settings, $title, $type = 'select') {
-    $form[$name] = array(
-        '#type' => $type,
-        '#title' => $title,
-        '#default_value' => isset($settings[$name]) ? $settings[$name] : NULL,
-        '#required' => empty($info['optional']),
-    );
-    return $form;
+
+  /**
+   * Provides the default mode.
+   */
+  public static function getDefaultMode() {
+    return 'input';
+  }
+
+  /**
+   * Provides the default form.
+   */
+  public static function defaultForm($name, $info, $settings, $title, $type = 'select') {
+    $form[$name] = array(
+        '#type' => $type,
+        '#title' => $title,
+        '#default_value' => isset($settings[$name]) ? $settings[$name] : NULL,
+        '#required' => empty($info['optional']),
+    );
+    return $form;
   }

   /**
@@ -80,7 +80,7 @@ class RulesFormsDataElement extends RulesFormsDataUI {
     foreach ($element->availableVariables() as $key => $value) {

       // Populate the options list with only form elements.
-      if (!in_array($key, array('site', 'form', 'form_state', 'form_id', 'user'))) {
+      if (!in_array($key, array('site', 'form', 'form_state', 'form_id', 'user', 'node'))) {
         $type = substr($key, 0, strpos($key, ':'));
         // Filter the elements by determining whether this attribute can be applied to them.
         if (isset(self::$_attributes[$attribute])
diff --git a/rules_forms/rules_forms.module b/rules_forms/rules_forms.module
index 402917a..0d89c24 100755
--- a/rules_forms/rules_forms.module
+++ b/rules_forms/rules_forms.module
@@ -72,7 +72,8 @@ function rules_forms_form_alter(&$form, &$form_state, $form_id) {

   if (isset($form_events[$form_id])) {
     // Set elements for form events.
-    rules_forms_invoke_event('form_built', $form, $form_state, $form_id);
+    $node = isset ($form['#node']) ? $form['#node'] : null;
+    rules_forms_invoke_event('form_built', $form, $form_state, $form_id, $node);
     $form['#validate'][] = 'rules_forms_event_validate';
     $form['#submit'][] = 'rules_forms_event_submit';
     $form['#after_build'][] = 'rules_forms_after_build';
@@ -102,7 +103,14 @@ function rules_forms_form_alter(&$form, &$form_state, $form_id) {
  * @see rules_forms_form_alter()
  */
 function rules_forms_event_validate(&$form, &$form_state) {
-  rules_forms_invoke_event('form_validate', $form, $form_state);
+  $node = isset ($form['#node']) ? $form['#node'] : null;
+  // For some reason the revision information in the node is not set, meaning
+  // we cannot use it in validation to check if it is empty or not.
+  // So fix that here, so we can fire a rule to make it required under certain
+  // circumstances.
+  if (isset ($form_state['values']['log']) && (! isset ($node->log) || ! $node->log))
+    $node->log = $form_state['values']['log'];
+  rules_forms_invoke_event('form_validate', $form, $form_state, NULL, $node);
 }

 /**
@@ -116,7 +124,8 @@ function rules_forms_event_button_validate(&$form, &$form_state) {;
     $form_id = $form['form_id']['#value'];
     $button = $form_state['clicked_button'];
     if (isset($button['#rules_forms_element_id']) && isset($form_events[$form_id]['submit'][$button['#rules_forms_element_id']])) {
-      rules_forms_invoke_event('button_'. str_replace(':', '_', $button['#rules_forms_element_id']) .'_validate', $form, $form_state, $form_id);
+      $node = isset ($form['#node']) ? $form['#node'] : null;
+      rules_forms_invoke_event('button_'. str_replace(':', '_', $button['#rules_forms_element_id']) .'_validate', $form, $form_state, $form_id, $node);
     }
   }
 }
@@ -127,7 +136,8 @@ function rules_forms_event_button_validate(&$form, &$form_state) {;
  * @see rules_forms_form_alter()
  */
 function rules_forms_event_submit(&$form, &$form_state) {
-  rules_forms_invoke_event('form_submit', $form, $form_state);
+  $node = isset ($form['#node']) ? $form['#node'] : null;
+  rules_forms_invoke_event('form_submit', $form, $form_state, NULL, $node);
 }

 /**
@@ -143,7 +153,8 @@ function rules_forms_event_button_submit(&$form, &$form_state) {
     $form_id = $form['form_id']['#value'];
     $button = $form_state['clicked_button'];
     if (isset($button['#rules_forms_element_id']) && isset($form_events[$form_id]['submit'][$button['#rules_forms_element_id']])) {
-      rules_forms_invoke_event('button_'. str_replace(':', '_', $button['#rules_forms_element_id']) .'_submit', $form, $form_state, $form_id);
+      $node = isset ($form['#node']) ? $form['#node'] : null;
+      rules_forms_invoke_event('button_'. str_replace(':', '_', $button['#rules_forms_element_id']) .'_submit', $form, $form_state, $form_id, $node);
     }
   }
 }
@@ -170,7 +181,7 @@ function rules_forms_event_button_submit(&$form, &$form_state) {
  * @see rules_forms_event_submit()
  * @see rules_forms_form_alter()
  */
-function rules_forms_invoke_event($event_type, &$form, &$form_state, $form_id = NULL) {
+function rules_forms_invoke_event($event_type, &$form, &$form_state, $form_id = NULL, $node = NULL) {
   global $user;
   if (empty($form_id)) {
     $form_id = $form['form_id']['#value'];
@@ -210,6 +221,7 @@ function rules_forms_invoke_event($event_type, &$form, &$form_state, $form_id =
     $form_data,
     $form_state_data,
     $form_id,
+    $node,
     $user,
   ) + $elements;

diff --git a/rules_forms/rules_forms.rules.inc b/rules_forms/rules_forms.rules.inc
index 05730d7..9713472 100755
--- a/rules_forms/rules_forms.rules.inc
+++ b/rules_forms/rules_forms.rules.inc
@@ -74,6 +74,10 @@ function rules_forms_event_variables() {
       'type' => 'text',
       'label' => t('Form ID'),
     ),
+    'node' => array(
+      'type' => 'node',
+      'label' => t('Node if node form'),
+    ),
     'user' => array(
       'type' => 'user',
       'label' => t('Logged in user'),
