diff --git a/content_lock.api.inc b/content_lock.api.inc
index 4870d89..29b5eee 100644
--- a/content_lock.api.inc
+++ b/content_lock.api.inc
@@ -152,7 +152,7 @@ function hook_content_lock_locked($nid, $uid) {
  * @ingroup content_lock_hooks
  * @ingroup hooks
  */
-function hook_content_lock_release($nid, $uid = NULL) {
+function hook_content_lock_released($nid, $uid = NULL) {
   /*
    * See the body of hook_content_lock_locked() ;-).
    */
diff --git a/content_lock.module b/content_lock.module
index e60d385..15feee3 100644
--- a/content_lock.module
+++ b/content_lock.module
@@ -495,7 +495,7 @@ function content_lock_release($nid, $uid = NULL) {
     $args[] = $uid;
   }
   db_query("DELETE FROM {content_lock} WHERE nid = %d". $add_sql, $args);
-  module_invoke_all('content_lock_released', $nid);
+  module_invoke_all('content_lock_released', $nid, $uid);
 }
 
 function _content_lock_release_all_user_locks($uid) {
@@ -769,3 +769,29 @@ function content_lock_views_api() {
    'path' => drupal_get_path('module', 'content_lock') . '/views',
   );
 }
+
+/**
+ * Implementation of hook_content_lock_locked().
+ *
+ * @param integer $nid
+ * @param integer $uid
+ */
+function content_lock_content_lock_locked($nid, $uid) {
+  // Invoke rules event for that hook, if rules is active.
+  if (module_exists('rules')) {
+    rules_invoke_event('content_lock_locked', $nid, $uid);
+  }
+}
+
+/**
+ * Implementation of hook_content_lock_release().
+ *
+ * @param integer $nid
+ * @param integer $uid
+ */
+function content_lock_content_lock_released($nid, $uid = NULL) {
+  // Invoke rules event for that hook, if rules is active.
+  if (module_exists('rules')) {
+    rules_invoke_event('content_lock_released', $nid, $uid);
+  }
+}
diff --git a/content_lock.rules.inc b/content_lock.rules.inc
new file mode 100644
index 0000000..091a1e1
--- /dev/null
+++ b/content_lock.rules.inc
@@ -0,0 +1,87 @@
+<?php
+
+/**
+ * @file
+ *   Rules implemenation for content_lock module.
+ */
+
+/**
+ * Implementation of hook_rules_event_info().
+ * @return array
+ */
+function content_lock_rules_event_info() {
+  return array(
+    'content_lock_locked' => array(
+      'label' => t('A node is locked'),
+      'module' => 'Content Lock',
+      'arguments' => array(
+        'nid' => array(
+          'type' => 'number',
+          'label' => 'Node-ID',
+        ),
+        'uid' => array(
+          'type' => 'number',
+          'label' => 'User-ID',
+        ),
+        'node' => array(
+          'type' => 'node',
+          'label' => 'Node',
+          'handler' => '_content_lock_rules_node_load',
+        ),
+        'locking_user' => array(
+          'type' => 'user',
+          'label' => 'Locking user',
+          'handler' => '_content_lock_rules_user_load',
+        ),
+      ),
+    ),
+    'content_lock_released' => array(
+      'label' => t('A node lock is released'),
+      'module' => 'Content Lock',
+      'arguments' => array(
+        'nid' => array(
+          'type' => 'number',
+          'label' => 'Node-ID',
+        ),
+        'uid' => array(
+          'type' => 'number',
+          'label' => 'User-ID',
+        ),
+        'node' => array(
+          'type' => 'node',
+          'label' => 'Node',
+          'handler' => '_content_lock_rules_node_load',
+        ),
+        'releasing_user' => array(
+          'type' => 'user',
+          'label' => 'Releasing user',
+          'handler' => '_content_lock_rules_user_load',
+        ),
+      ),
+    ),
+  );
+}
+
+/**
+ * Helper callback to dynamically load node object for content lock events.
+ *
+ * @param integer $nid
+ * @param integer $uid
+ * @return object
+ *   as user object
+ */
+function _content_lock_rules_node_load($nid, $uid = NULL) {
+  return node_load($nid);
+}
+
+/**
+ * Helper callback to dynamically load user object for content lock events.
+ *
+ * @param integer $nid
+ * @param integer $uid
+ * @return object
+ *   as user object
+ */
+function _content_lock_rules_user_load($nid, $uid) {
+  return user_load(array('uid' => $uid));
+}
