diff --git a/workbench_moderation.api.php b/workbench_moderation.api.php
index 4b2afc6..7b721fe 100644
--- a/workbench_moderation.api.php
+++ b/workbench_moderation.api.php
@@ -66,3 +66,30 @@ function hook_workbench_moderation_states_next_alter(&$states, $current_state, $
 function hook_workbench_moderation_transition($node, $previous_state, $new_state) {
   // Your code here.
 }
+
+/**
+ * Allows modules to respond when a state is deleted.
+ *
+ * @param object $state
+ *  The state which was just deleted.
+ */
+function hook_workbench_moderation_state_delete($state) {
+  // Remove data from a custom table which refers to the old state.
+  db_delete('mytable')
+    ->condition('state', $state->name)
+    ->execute();
+}
+
+/**
+ * Allows modules to respond when a transition is deleted.
+ *
+ * @param object $transition
+ *  The transition which was just deleted.
+ */
+function hook_workbench_moderation_transition_delete($transition) {
+  // Remove data from a custom table which refers to the old state.
+  db_delete('mytable')
+    ->condition('from_state', $transition->from_name)
+    ->condition('to_state', $transition->to_name)
+    ->execute();
+}
diff --git a/workbench_moderation.module b/workbench_moderation.module
index f510e2e..6d60f9b 100644
--- a/workbench_moderation.module
+++ b/workbench_moderation.module
@@ -1308,11 +1308,12 @@ function workbench_moderation_state_save($state) {
  * This function also deletes any transitions that reference the deleted
  * moderation state.
  *
- * @TODO: add a hook here.
+ * Invokes hook_workbench_moderation_state_delete().
  *
  * @param $state
  *   An object with at least a name property.
  *
+ * @see hook_workbench_moderation_state_delete().
  */
 function workbench_moderation_state_delete($state) {
   db_delete('workbench_moderation_states')
@@ -1322,6 +1323,13 @@ function workbench_moderation_state_delete($state) {
   db_delete('workbench_moderation_transitions')
     ->condition(db_or()->condition('from_name', $state->name)->condition('to_name', $state->name))
     ->execute();
+
+  foreach (module_implements('workbench_moderation_state_delete') as $module) {
+    // Don't call this function! That would lead to infinite recursion.
+    if ($module !== 'workbench_moderation') {
+      module_invoke($module, 'workbench_moderation_state_delete', $state);
+    }
+  }
 }
 
 /**
@@ -1369,17 +1377,26 @@ function workbench_moderation_transition_save($transition) {
 /**
  * Deletes a moderation state transition.
  *
- * @TODO: add a hook here.
+ * Invoke hook_workbenech_moderation_tranisiton_delete().
  *
  * @param $transition
  *   An object with from_name and to_name properties that reference moderation
  *   states.
+ *
+ * @see hook_workbench_moderation_transition_delete().
  */
 function workbench_moderation_transition_delete($transition) {
   db_delete('workbench_moderation_transitions')
     ->condition('from_name', $transition->from_name)
     ->condition('to_name', $transition->to_name)
     ->execute();
+
+  foreach (module_implements('workbench_moderation_transition_delete') as $module) {
+    // Don't call this function! That would lead to infinite recursion.
+    if ($module !== 'workbench_moderation') {
+      module_invoke($module, 'workbench_moderation_transition_delete', $transition);
+    }
+  }
 }
 
 /**
