diff a/override_node_options.module b/override_node_options.module
--- a/override_node_options.module
+++ b/override_node_options.module
@@ -11,7 +11,7 @@
  * Implementation of hook_perm().
  */
 function override_node_options_perm() {
-  return array('override node publishing options');
+  return array('override publish status', 'override publish promote', 'override publish sticky', 'override publish revision');
 }
 
 /**
@@ -20,14 +20,25 @@ function override_node_options_perm() {
 function override_node_options_form_alter($form_id, &$form) {
   // Allow users with 'override node publishing options' to change node
   // options. Taken from node_form_array().
+  if (user_access('administer nodes')) return; // no need for us
   // TODO: Once in core, remove adminster nodes check.
-  if (isset($form['type']) && $form['type']['#value'] .'_node_form' == $form_id && user_access('override node publishing options') && !user_access('administer nodes')) {
+  if (isset($form['type']) && $form['type']['#value'] .'_node_form' == $form_id) {
+  	$hasPerms = user_access('override publish status') || user_access('override publish promote') || user_access('override publish sticky') || user_access('override publish revision');
+    if (!$hasPerms) return; // no permissions for this user
     $node = $form['#node'];
     $form['options'] = array('#type' => 'fieldset', '#title' => t('Publishing options'), '#collapsible' => TRUE, '#collapsed' => TRUE, '#weight' => 25);
-    $form['options']['override_publishing_status']   = array('#type' => 'checkbox', '#title' => t('Published'), '#default_value' => $node->status);
-    $form['options']['override_publishing_promote']  = array('#type' => 'checkbox', '#title' => t('Promoted to front page'), '#default_value' => $node->promote);
-    $form['options']['override_publishing_sticky']   = array('#type' => 'checkbox', '#title' => t('Sticky at top of lists'), '#default_value' => $node->sticky);
-    $form['options']['override_publishing_revision'] = array('#type' => 'checkbox', '#title' => t('Create new revision'), '#default_value' => $node->revision);
+    if (user_access('override publish status')) {
+      $form['options']['override_publishing_status']   = array('#type' => 'checkbox', '#title' => t('Published'), '#default_value' => $node->status);
+    }
+    if (user_access('override publish promote')) {
+      $form['options']['override_publishing_promote']  = array('#type' => 'checkbox', '#title' => t('Promoted to front page'), '#default_value' => $node->promote);
+    }
+    if (user_access('override publish sticky')) {
+      $form['options']['override_publishing_sticky']   = array('#type' => 'checkbox', '#title' => t('Sticky at top of lists'), '#default_value' => $node->sticky);
+    }
+    if (user_access('override publish revision')) {
+      $form['options']['override_publishing_revision'] = array('#type' => 'checkbox', '#title' => t('Create new revision'), '#default_value' => $node->revision);
+    }
   }
 }
 
@@ -35,18 +46,30 @@ function override_node_options_form_alter($form_id, &$form) {
  * Implementation of hook_nodeapi().
  */
 function override_node_options_nodeapi(&$node, $op, $a3 = NULL, $a4 = NULL) {
+	if (user_access('administer nodes')) return;
   switch ($op) {
     case 'submit':
       // Allow users with 'override node publishing options' to change node
       // options.
+      $i = 0;
+      if (user_access('override publish status')) {
+          $keys['override_publishing_status'] = 'status';
+          $i++;
+      }
+      if (user_access('override publish promote')) {
+          $keys['override_publishing_status'] = 'status';
+          $i++;
+      }
+      if (user_access('override publish sticky')) {
+          $keys['override_publishing_status'] = 'status';
+          $i++;
+      }
+      if (user_access('override publish revision')) {
+          $keys['override_publishing_status'] = 'status';
+          $i++;
+      }
       // TODO: Once in core, remove adminster nodes check.
-      if (user_access('override node publishing options') && !user_access('administer nodes')) {
-        $keys = array(
-          'override_publishing_status' => 'status',
-          'override_publishing_promote' => 'promote',
-          'override_publishing_sticky' => 'sticky',
-          'override_publishing_revision' => 'revision',
-        );
+      if ($i > 0) {
         foreach ($keys as $override_key => $real_key) {
           if (isset($node->$override_key)) {
             $node->$real_key = $node->$override_key;
