diff --git a/workbench_moderation.install b/workbench_moderation.install
index 1dffed4..a56ff4a 100644
--- a/workbench_moderation.install
+++ b/workbench_moderation.install
@@ -136,6 +136,12 @@ function workbench_moderation_schema() {
         'default' => 0,
         'disp-width' => '10',
       ),
+      'comment' => array(
+        'description' => 'Additional comments from the user making the state change.',
+        'type' => 'text',
+        'not null' => FALSE,
+        'size' => 'big',
+      )
     ),
     'primary key' => array('hid'),
     'indexes' => array(
@@ -569,3 +575,18 @@ function workbench_moderation_update_7007() {
     '%to' => $transition->to_name,
   ));
 }
+
+/**
+ * Adds comment column to workbench table. 
+ */
+function workbench_moderation_update_7008() {
+  db_add_field("workbench_moderation_node_history", "comment", array(
+      'description' => 'Additional comments from the user making the state change.',
+      'type' => 'text',
+      'not null' => FALSE,
+      'size' => 'big',
+    )
+  );
+  
+  return t("Updated workbench_moderation_node_history table to include comment column.");
+}
\ No newline at end of file
diff --git a/workbench_moderation.module b/workbench_moderation.module
index b652b6f..d0080ab 100644
--- a/workbench_moderation.module
+++ b/workbench_moderation.module
@@ -374,6 +374,9 @@ function workbench_moderation_theme() {
       'file' => 'workbench_moderation.admin.inc',
       'render element' => 'form',
     ),
+    'workbench_moderation_comment_sentence' => array(
+      'moderation_info' => NULL,
+    )
   );
 }
 
@@ -1466,7 +1469,7 @@ function workbench_moderation_states_next($current_state, $account = NULL, $node
  * @param $state
  *   The new moderation state requested.
  */
-function workbench_moderation_moderate($node, $state) {
+function workbench_moderation_moderate($node, $state, $comment = '') {
   global $user;
 
   $old_revision = $node->workbench_moderation['my_revision'];
@@ -1489,6 +1492,7 @@ function workbench_moderation_moderate($node, $state) {
     'current' => $current,
     'published' => ($state == workbench_moderation_state_published()),
     'stamp' => $_SERVER['REQUEST_TIME'],
+    'comment' => $comment,
   );
 
   // If this is the new 'current' moderation record, it should be the only one
@@ -1672,6 +1676,15 @@ function workbench_moderation_moderate_form($form, &$form_state, $node, $destina
       '#options' => $next_states,
       '#default_value' => _workbench_moderation_default_next_state($my_revision->state, $next_states),
     );
+    
+    $form['comment'] = array(
+      '#prefix' => '<br style="clear: both;" />',
+      '#type' => 'textarea',
+      '#title' => 'Comments',
+      //'#description' => "Please include a comment relating to this workflow change.",
+      '#required' => TRUE
+    );
+    
     $form['submit'] = array(
       '#type' => 'submit',
       '#value' => t('Apply'),
@@ -1712,7 +1725,7 @@ function workbench_moderation_moderate_form_validate($form, &$form_state) {
 
 function workbench_moderation_moderate_form_submit($form, $form_state) {
   if (_workbench_moderation_moderate_access($form_state['values']['node'], $form_state['values']['state'])) {
-    workbench_moderation_moderate($form_state['values']['node'], $form_state['values']['state']);
+    workbench_moderation_moderate($form_state['values']['node'], $form_state['values']['state'], $form_state['values']['comment']);
   }
 
   // This is not ideal, but if the form is invoked from a node's draft tab and
@@ -2110,3 +2123,50 @@ function workbench_moderation_ctools_plugin_api($module, $api) {
     return array('version' => 1);
   }
 }
+
+
+
+/**
+ * Implementation of hook_token_info()
+ * 
+ * @return type 
+ */
+function workbench_moderation_token_info() {
+  
+  $node['workbench_moderation_comment'] = array(
+    'name' => t("Workbench Moderation Comment "),
+    'description' => t("Comment provided during moderation of content."),
+  );
+  
+  return array(
+    'tokens' => array('node' => $node),
+  );
+}
+
+
+/**
+ * Implements hook_tokens().
+ */
+function workbench_moderation_tokens($type, $tokens, array $data = array(), array $options = array()) {
+  $replacements = array();
+
+  if ($type == 'node' && !empty($data['node'])) {
+    $node = $data['node'];
+
+    foreach ($tokens as $name => $original) {
+      switch ($name) {
+        // Simple key values on the node.
+        case 'workbench_moderation_comment':
+          if (isset($node->workbench_moderation['my_revision']->comment)) {
+            $replacements[$original] = "{$node->workbench_moderation['my_revision']->comment}";
+          }
+          else {
+            $replacements[$original] = "";
+          }
+          break;
+      }
+    }
+  }
+  
+  return $replacements;
+}
\ No newline at end of file
diff --git a/workbench_moderation.node.inc b/workbench_moderation.node.inc
index 408170f..93c0406 100644
--- a/workbench_moderation.node.inc
+++ b/workbench_moderation.node.inc
@@ -190,24 +190,28 @@ function workbench_moderation_node_history_view($node) {
     $items = array();
     foreach ($moderations as $moderation) {
       if ($moderation->from_state) {
-        $items[] = t('From @from_state --> @to_state on %date by !user',
+        $items[] = t('From @from_state --> @to_state on %date by !user !comment',
           array(
             '@from_state' => workbench_moderation_state_label($moderation->from_state),
             '@to_state' => workbench_moderation_state_label($moderation->state),
             '%date' => format_date($moderation->stamp, 'short'),
             '!user' => theme('username', array('account' => $moderation)),
+            '!comment' => theme('workbench_moderation_comment_sentence', array('moderation_info' => $moderation)),
           )
         );
       }
       else {
-        $items[] = t('Created as @to_state on %date by !user',
+        $items[] = t('Created as @to_state on %date by !user !comment',
           array(
             '@from_state' => workbench_moderation_state_label($moderation->from_state),
             '@to_state' => workbench_moderation_state_label($moderation->state),
             '%date' => format_date($moderation->stamp, 'short'),
             '!user' => theme('username', array('account' => $moderation)),
+            '!comment' => theme('workbench_moderation_comment_sentence', array('moderation_info' => $moderation)),
           )
         );
+        
+        
       }
     }
     $row['data']['moderation'] .= theme('item_list', array('items' => $items));
@@ -306,3 +310,19 @@ function workbench_moderation_node_unpublish_form_submit($form, &$form_state) {
   drupal_set_message(t('The live revision of this content has been unpublished.'));
   $form_state['redirect'] ="node/{$node->nid}/moderation";
 }
+
+/**
+ * custom theme function. 
+ */
+function theme_workbench_moderation_comment_sentence($variables) {
+  $formatted_comment = "";
+  
+  if ($variables['moderation_info']->comment != "") {
+    $variables['moderation_info']->comment = trim($variables['moderation_info']->comment, ".");
+    $formatted_comment = " who left the following comment: {$variables['moderation_info']->comment}.";
+  }
+  
+  return $formatted_comment;
+}
+
+
