diff --git a/save_draft.module b/save_draft.module
index 5a530c7..9e7c7cf 100644
--- a/save_draft.module
+++ b/save_draft.module
@@ -6,11 +6,22 @@
  */
 
 /**
+ * Implements hook_permission().
+ */
+function save_draft_permission() {
+  return array(
+    'save draft' => array(
+      'title' => t('Save content as draft'),
+      'description' => t('Allows a user to save a draft of their content.'),
+    ),
+  );
+}
+
+/**
  * Implements hook_form_FORM_ID_alter().
  */
 function save_draft_form_node_form_alter(&$form, &$form_state) {
-  // Only alter the form if the status checkbox is present.
-  if (isset($form['options']['status']) && (!isset($form['options']['status']['#access']) || $form['options']['status']['#access'])) {
+  if (user_access('save draft')) {
     $form['options']['#title'] = t('Promotion settings');
     $form['options']['#attributes']['class'] = array('node-promotion-options');
     $form['options']['#attached'] = array(
diff --git a/save_draft.test b/save_draft.test
index 4f37ee4..9ce5e9d 100644
--- a/save_draft.test
+++ b/save_draft.test
@@ -14,7 +14,7 @@ class SaveDraftTestCase extends DrupalWebTestCase {
 
   public function setUp() {
     parent::setUp(array('save_draft'));
-    $this->admin = $this->drupalCreateUser(array('create article content', 'edit any article content', 'administer nodes'));
+    $this->admin = $this->drupalCreateUser(array('create article content', 'edit any article content', 'save draft'));
     $this->drupalLogin($this->admin);
     $langcode = LANGUAGE_NONE;
     $this->title_key = "title";
