diff --git a/sites/all/modules/legal/legal.api.php b/sites/all/modules/legal/legal.api.php
index e69de29..969b43f 100644
--- a/sites/all/modules/legal/legal.api.php
+++ b/sites/all/modules/legal/legal.api.php
@@ -0,0 +1,44 @@
+<?php
+
+/**
+ * @file
+ * This file contains no working PHP code; it exists to provide additional
+ * documentation for doxygen as well as to document hooks in the standard
+ * Drupal manner.
+ */
+
+
+/**
+ * @defgroup legal Legal module integrations.
+ *
+ * Module integrations with the legal module.
+ */
+
+/**
+ * @defgroup legal_hooks Legal hooks
+ * @{
+ * Hooks that can be implemented by other modules in order to extend legal.
+ */
+
+/**
+ * Runs actions when legal terms are accepted
+ *
+ * @param $data
+ *   Data relating to the current acceptance. Includes:
+ *   uid - The ID of the user that accepted the terms.
+ *   version - The version of Terms accepted.
+ *   revision - The revision of Terms accepted.
+ *   accepted - The timestamp the Terms were accepted at.
+ *   language - The current language.
+ */
+function hook_legal_accepted($data) {
+  if (module_exists('rules')) {
+    $user = user_load($data['uid']);
+    $conditions = legal_get_conditions($data['language']);
+    rules_invoke_event('legal_accepted', $user, $conditions, $data['accepted']);
+  }
+}
+
+/**
+ * @}
+ */
diff --git a/sites/all/modules/legal/legal.module b/sites/all/modules/legal/legal.module
index 87e6f43..e04ddac 100644
--- a/sites/all/modules/legal/legal.module
+++ b/sites/all/modules/legal/legal.module
@@ -1,5 +1,7 @@
 <?php
 
+module_load_include('inc', 'legal', 'legal.rules');
+
 // $Id$
 
 /**
@@ -663,15 +665,29 @@ function legal_get_accept($uid) {
 }
 
 function legal_save_accept($version, $revision, $language, $uid) {
+  $accepted = time();
+  $data = array(
+    'version' => $version,
+    'revision' => $revision,
+    'language' => $language,
+    'uid' => $uid,
+    'accepted' => $accepted,
+  );
   db_insert('legal_accepted')
-    ->fields(array(
-      'version' => $version,
-      'revision' => $revision,
-      'language' => $language,
-      'uid' => $uid,
-      'accepted' => time(),
-    ))
+    ->fields($data)
     ->execute();
+  module_invoke_all('legal_accepted', $data);
+}
+
+/**
+ * Implements hook_legal_accepted().
+ */
+function legal_legal_accepted($data) {
+  if (module_exists('rules')) {
+    $user = user_load($data['uid']);
+    $conditions = legal_get_conditions($data['language']);
+    rules_invoke_event('legal_accepted', $user, $conditions, $data['accepted']);
+  }
 }
 
 function legal_get_conditions($language = NULL) {
diff --git a/sites/all/modules/legal/legal.rules.inc b/sites/all/modules/legal/legal.rules.inc
index e69de29..43bfec8 100644
--- a/sites/all/modules/legal/legal.rules.inc
+++ b/sites/all/modules/legal/legal.rules.inc
@@ -0,0 +1,27 @@
+<?php
+
+/**
+ * Implements hook_rules_event_info().
+ */
+function legal_rules_event_info() {
+  return array(
+    'legal_accepted' => array(
+      'label' => t('After user accepts terms and conditions'),
+      'group' => t('User'),
+      'variables' => array(
+        'account' => array(
+          'type' => 'user', 
+          'label' => t('updated user'),
+        ),
+        'conditions' => array(
+          'type' => 'text',
+          'label' => t('Terms and Conditions text'),
+        ),
+        'accepted' => array(
+          'type' => 'text',
+          'label' => t('Timestamp of acceptance'),
+        ),
+      ),
+    ),
+  );
+}
