diff --git a/content_lock.module b/content_lock.module
index e60d385..40416d1 100644
--- a/content_lock.module
+++ b/content_lock.module
@@ -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_release($nid, $uid = NULL) {
+  // Invoke rules event for that hook, if rules is active.
+  if (module_exists('rules')) {
+    rules_invoke_event('content_lock_release', $nid, $uid);
+  }
+}
diff --git a/content_lock.rules.inc b/content_lock.rules.inc
new file mode 100644
index 0000000..6ef3a8d
--- /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_release' => 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));
+}
