diff --git a/queue_mail.inc b/queue_mail.inc
deleted file mode 100644
index 4a68620..0000000
--- a/queue_mail.inc
+++ /dev/null
@@ -1,17 +0,0 @@
-<?php
-
-/**
- * Wrapper function to use job queue
- */
-function drupal_mail_wrapper($message) {
-  $pos = strpos(variable_get('queue_mail_keys', ''), $mailkey);
-
-  if (function_exists('job_queue_add') && $pos === FALSE) {
-    job_queue_add('queue_mail_send', t('Queued email'), array($message));
-    return t('Email message queued for delivery.');
-  }
-  else {
-    queue_mail_send($message);
-    return t('Queuing unavailable. Email sent directly.');
-  }
-}
diff --git a/queue_mail.info b/queue_mail.info
index 26e3eb3..40c1dc0 100644
--- a/queue_mail.info
+++ b/queue_mail.info
@@ -1,5 +1,5 @@
 name = Queue Mail
-core = 6.x
+core = 7.x
+description = Queues all mail sent by your Drupal site so that it is sent via cron using the Drupal 7 Queues API. This is helpful for large traffic sites where sending a lot of emails per page request can slow things down considerably.
 package = Mail
-dependencies[] = job_queue
-description = Queues all mail send by your Drupal site so that it is sent via cron, using the job queue. This is helpful for large traffic sites where sending a lot of emails per page request can slow things down considerably.
+configure = admin/config/system/queue_mail
diff --git a/queue_mail.install b/queue_mail.install
index 34d1cab..84b07a2 100644
--- a/queue_mail.install
+++ b/queue_mail.install
@@ -1,61 +1,27 @@
 <?php
 
-define('DRUPAL_SMTP_LIBRARY', 'smtp_library');
-
-function queue_mail_library_path() {
-  return @drupal_get_path('module', 'queue_mail') . '/queue_mail.inc';
-}
-
-function _queue_mail_req() {
-  $req = array();
-
-  $req['queue_mail'] = array(
-    'title' => t('Queue mail'),
-    'value' => DRUPAL_SMTP_LIBRARY,
-    );
-
-  return $req;
-}
-
-function queue_mail_requirements($phase) {
-  $req = _queue_mail_req();
-
-  $lib = variable_get(DRUPAL_SMTP_LIBRARY, '');
-  $our_lib = queue_mail_library_path();
-  if (!$lib) {
-    $req['queue_mail']['severity'] = REQUIREMENT_OK;
-    $req['queue_mail']['description'] = t('The variable "smtp_library" is not set. The queue mail will set it to "!lib" so that emails go out via job queue at cron time.', array( '!lib' => $lib));
-    return $req;
-  }
-
-  if ($lib == $our_lib) {
-    $req['queue_mail']['severity'] = REQUIREMENT_OK;
-    $req['queue_mail']['description'] = t('The variable "smtp_library" is set to "!lib". This means queue mail will be the one sending emails out via job queue at cron time.', array( '!lib' => $lib));
-    return $req;
-  }
-  else {
-    $req['queue_mail']['severity'] = REQUIREMENT_ERROR;
-    $req['queue_mail']['description'] = t('The variable "smtp_library" is set to "!lib". This means another module is using another smtp_library. Please beware that this can cause emails not to be sent properly. Please unset the "smtp_library" manually, or disable the module that uses it, then disable and reenable this module.', array( '!lib' => $lib));
-    return $req;
-  }
-}
-
-function queue_mail_enable() {
-  $lib = variable_get(DRUPAL_SMTP_LIBRARY, '');
-  if ($lib) {
-    drupal_set_message(t('The variable "smtp_library" is set to !lib. This means another module is using another smtp_library. Please beware that this can cause emails not to be sent properly. Please unset the "smtp_library" manually, or disable the module that uses it, then disable and reenable this module.', array( '!lib' => $lib)), 'error');
-  }
-  else {
-    variable_set(DRUPAL_SMTP_LIBRARY, queue_mail_library_path());
-  }
-}
-
-function queue_mail_disable() {
-  variable_set(DRUPAL_SMTP_LIBRARY, '');
+/**
+ * @file
+ * Install, update and uninstall functions for the Queue Mail module.
+ */
+
+
+/**
+ * Implements hook_install().
+ */
+function queue_mail_install() {
+  module_load_include('module', 'queue_mail');
+  $queue = _queue_mail_get_queue();
+  $queue->createQueue();
 }
 
+/**
+ * Implements hook_uninstall().
+ */
 function queue_mail_uninstall() {
-  variable_del('queue_mail_isset_mailkey');
+  module_load_include('module', 'queue_mail');
+  $queue = _queue_mail_get_queue();
+  $queue->deleteQueue();
+
   variable_del('queue_mail_keys');
-  variable_del('queue_mail_priority');
 }
diff --git a/queue_mail.module b/queue_mail.module
index a91bc15..7da18f3 100644
--- a/queue_mail.module
+++ b/queue_mail.module
@@ -1,31 +1,23 @@
 <?php
 
-/**
- * Email sending function, called from job queue, or as a fallback.
- */
-function queue_mail_send($message = array()) {
-  $mimeheaders = array();
-  foreach ($message['headers'] as $name => $value) {
-    $mimeheaders[] = $name .': '. mime_header_encode($value);
-  }
-  return mail(
-    $message['to'],
-    mime_header_encode($message['subject']),
-    str_replace("\r", '', $message['body']),
-    join("\n", $mimeheaders)
-  );
+function _queue_mail_get_queue() {
+  return DrupalQueue::get('queue_mail', true);
 }
 
+/**
+ * Implements hook_menu().
+ */
 function queue_mail_menu() {
   $items = array();
 
-  $items['admin/settings/queue_mail'] = array(
+  $items['admin/config/system/queue_mail'] = array(
     'title' => 'Queue Mail',
     'description' => 'Set queue priorities.',
     'page callback' => 'drupal_get_form',
     'page arguments' => array('queue_mail_settings_form'),
     'access arguments' => array('administer site configuration'),
   );
+
   return $items;
 }
 
@@ -37,14 +29,45 @@ function queue_mail_settings_form() {
     '#default_value' => variable_get('queue_mail_keys', ''),
   );
 
-  $form['queue_mail_priority'] = array(
-    '#type' => 'select',
-    '#default_value' => variable_get('queue_mail_priority', 'immediate'),
-    '#description' => t('All mailkeys entered above will be set to immediate. That is, the mail will be sent immediately.'),
-    '#title' => t('Priority'),
-    '#options' => array('immediate'),
-    '#disabled' => TRUE,
+  return system_settings_form($form);
+}
+
+/**
+ * Implements hook_cron_queue_info().
+ */
+function queue_mail_cron_queue_info() {
+  $queues['queue_mail'] = array(
+    'worker callback' => 'queue_mail_send',
   );
+  return $queues;
+}
 
-  return system_settings_form($form);
+/**
+ * Implements hook_mail_alter().
+ */
+function queue_mail_mail_alter(&$message) {
+  $mail_keys = explode(',', variable_get('queue_mail_keys', ''));
+
+  if (!in_array($message['id'], $mail_keys)) {
+    $queue = _queue_mail_get_queue();
+    $queue->createItem($message);
+    $message['send'] = FALSE;
+    return;
+  }
+}
+
+/**
+ * Email sending function, called from job queue, or as a fallback.
+ */
+function queue_mail_send($message = array()) {
+  $mimeheaders = array();
+  foreach ($message['headers'] as $name => $value) {
+    $mimeheaders[] = $name .': '. mime_header_encode($value);
+  }
+  return mail(
+    $message['to'],
+    mime_header_encode($message['subject']),
+    str_replace("\r", '', implode('\n', $message['body'])),
+    join("\n", $mimeheaders)
+  );
 }
