diff --git content_unpublish/content_unpublish.module content_unpublish/content_unpublish.module
index 894a0b2..f2890d9 100644
--- content_unpublish/content_unpublish.module
+++ content_unpublish/content_unpublish.module
@@ -71,8 +71,8 @@ function content_unpublish_list_permissions($type) {
 function content_unpublish_menu() {
   $items['node/%node/unpublish'] = array(
     'title' => 'Unpublish',
-    'page callback' => 'content_unpublish_switcher',
-    'page arguments' => array('node', 1, FALSE),
+    'page callback' => 'drupal_get_form',
+    'page arguments' => array('content_unpublish_unpublish_confirm', 1),
     'access callback' => 'content_unpublish_node_access',
     'access arguments' => array('unpublish', 'unpublish_url', 1),
   );
@@ -109,10 +109,6 @@ function content_unpublish_node_access($op, $name, $node = NULL, $account = NULL
     return;
   }
 
-  if (in_array($op, array('publish', 'unpublish')) && (!isset($_GET['token']) || !drupal_valid_token($_GET['token'], $node->nid))) {
-    return FALSE;
-  }
-
   if ($node->status == (strpos($name, 'publish') === 0)) {
     // Node is already in the state required.
     return FALSE;
@@ -303,14 +299,14 @@ function content_unpublish_switcher($entity_type, $entity, $op) {
   drupal_goto();
 }
 
-function __content_unpublish_form_alter(&$form, $form_state, $form_id) {
-  if (strpos($form_id, '_node_form') && !empty($form['nid']['#value']) && content_unpublish_access($form['#node']) && $form['#node']->status) {
+function content_unpublish_form_alter(&$form, $form_state, $form_id) {
+  if (strpos($form_id, '_node_form') && !empty($form['nid']['#value']) && content_unpublish_node_access('unpublish', 'unpublish_url', $form['#node']) && $form['#node']->status) {
    // Add unpublish handler.
-   $form['buttons']['unpublish'] = array(
+   $form['actions']['unpublish'] = array(
      '#type' => 'submit',
      '#value' => variable_get('content_unpublish_button_name', t('Unpublish')),
      '#weight' => 13,
-     '#submit' => array('content_unpublish_delete_submit')
+     '#submit' => array('content_unpublish_unpublish_submit')
     );
   }
 }
@@ -318,31 +314,45 @@ function __content_unpublish_form_alter(&$form, $form_state, $form_id) {
 /**
  * Button submit function: handle the 'Unpublish' button on the node form.
  */
-function content_unpublish_delete_submit($form, &$form_state) {
+function content_unpublish_unpublish_submit($form, &$form_state) {
   $destination = '';
-  if (isset($_REQUEST['destination'])) {
+  if (isset($_GET['destination'])) {
     $destination = drupal_get_destination();
-    unset($_REQUEST['destination']);
+    unset($_GET['destination']);
   }
   $node = $form['#node'];
-  $form_state['redirect'] = array('node/'. $node->nid .'/unpublish', $destination);
+  $form_state['redirect'] = array('node/' . $node->nid . '/unpublish', array('query' => $destination));
 }
 
 /**
  * Menu callback; Ask for confirmation of node unpublish.
  */
-function content_unpublish_delete_confirm(&$form_state, $node) {
+function content_unpublish_unpublish_confirm($form, &$form_state, $node) {
   $form['nid'] = array(
     '#type' => 'value',
     '#value' => $node->nid,
   );
-  $operation = variable_get('content_unpublish_button_name', t('Unpublish'));
 
   return confirm_form($form,
-    t('Are you sure you want to @operation %title?', array('@operation' => drupal_strtolower($operation), '%title' => $node->title)),
-    isset($_GET['destination']) ? $_GET['destination'] : 'node/'. $node->nid,
+    t('Are you sure you want to unpublish %title?', array('%title' => $node->title)),
+    'node/'. $node->nid,
     t('This action cannot be undone.'),
-    check_plain($operation),
+    t('Unpublish'),
     t('Cancel')
   );
-}
\ No newline at end of file
+}
+
+/**
+ * Executes node unpublish action.
+ *
+ * @see content_unpublish_unpublish_confirm()
+ */
+function content_unpublish_unpublish_confirm_submit($form, &$form_state) {
+  if ($form_state['values']['confirm']) {
+    $node = node_load($form_state['values']['nid']);
+    content_unpublish_switcher('node', $node, 0);
+    watchdog('content', '@type: unpublished %title.', array('@type' => $node->type, '%title' => $node->title));
+  }
+
+  $form_state['redirect'] = '<front>';
+}
