diff --git a/includes/simplenews.mail.inc b/includes/simplenews.mail.inc
index b075c11..1506284 100644
--- a/includes/simplenews.mail.inc
+++ b/includes/simplenews.mail.inc
@@ -255,6 +255,8 @@ function simplenews_mail_mail($msgbase, $key = 'node') {
  * Mail data is retrieved from the spool, rendered and send one by one
  * If sending is successful the message is marked as send in the spool.
  * @todo Replace time(): http://drupal.org/node/224333#time
+ *
+ * TODO: Redesign API to allow language counter in multilingual sends.
  */
 function simplenews_mail_spool($nid = NULL, $limit = NULL) {
   $check_counter = 0;
@@ -513,16 +515,30 @@ function simplenews_count_spool($nid, $status = array(SIMPLENEWS_SPOOL_PENDING,
  * All records with status 'send' and time stamp before the expiration date
  * are removed from the spool.
  * @todo Replace time(): http://drupal.org/node/224333#time
+ *
+ * @return Count deleted
  */
 function simplenews_clear_spool() {
   $expiration_time = REQUEST_TIME - variable_get('simplenews_spool_expire', 0) * 86400;
-  db_delete('simplenews_mail_spool')
+  return db_delete('simplenews_mail_spool')
     ->condition('status', SIMPLENEWS_SPOOL_DONE)
     ->condition('timestamp', $expiration_time, '<=')
     ->execute();
 }
 
 /**
+ * Remove records from mail spool table for node.
+ *
+ * @return Count deleted
+ */
+function simplenews_clear_spool_node($node) {
+  return db_delete('simplenews_mail_spool')
+    ->condition('nid', $node->nid)
+    ->execute();
+}
+
+
+/**
  * Update newsletter sent status.
  *
  * Set newsletter sent status based on email sent status in spool table.
diff --git a/simplenews.module b/simplenews.module
index 676612f..1c12440 100644
--- a/simplenews.module
+++ b/simplenews.module
@@ -475,6 +475,19 @@ function simplenews_node_delete($node) {
     return;
   }
   simplenews_newsletter_delete($node);
+  // Check if pending emails of this newsletter issue exist and delete these too.
+  module_load_include('inc', 'simplenews', 'includes/simplenews.mail');
+  $count = simplenews_clear_spool_node($node);
+  if ($count) {
+    drupal_set_message(t('Newsletter %title was deleted but had @count pending emails. They can no longer be sent.', array(
+      '%title' => $node->title,
+      '@count' => $count,
+     )), 'warning');
+    watchdog('simplenews', 'Newsletter %title deleted with @count pending emails. Emails can no longer be sent.', array(
+      '%title' => $node->title,
+      '@count' => $count,
+     ), WATCHDOG_ALERT);
+  }
   drupal_set_message(t('Newsletter %title was deleted.', array('%title' => $node->title)));
 }
 
diff --git a/tests/simplenews.test b/tests/simplenews.test
index 48f8444..84ae256 100644
--- a/tests/simplenews.test
+++ b/tests/simplenews.test
@@ -1035,7 +1035,7 @@ class SimplenewsSendTestCase extends SimplenewsTestCase {
   function setUp() {
     parent::setUp();
 
-    $this->user = $this->drupalCreateUser(array('administer newsletters', 'send newsletter', 'administer nodes', 'administer simplenews subscriptions', 'create simplenews content', 'edit any simplenews content', 'view own unpublished content'));
+    $this->user = $this->drupalCreateUser(array('administer newsletters', 'send newsletter', 'administer nodes', 'administer simplenews subscriptions', 'create simplenews content', 'edit any simplenews content', 'view own unpublished content', 'delete any simplenews content'));
     $this->drupalLogin($this->user);
 
     // Subscribe a few users.
@@ -1396,4 +1396,80 @@ class SimplenewsSendTestCase extends SimplenewsTestCase {
     $this->assertEqual(SIMPLENEWS_STATUS_SEND_NOT, $newsletter->status, t('Newsletter sending not started.'));
     $this->assertEqual(2, $newsletter->tid, t('Newsletter has tid 2.'));
   }
+
+
+  /**
+   * Create a newsletter, send mails and then delete.
+   */
+  function testDelete() {
+    // Verify that the newsletter settings are shown.
+    $this->drupalGet('node/add/simplenews');
+    $this->assertText(t('Newsletter category'));
+
+    // Prevent deleting the mail spool entries automatically.
+    variable_set('simplenews_spool_expire', 1);
+
+    $edit = array(
+      'title' => $this->randomName(),
+    );
+    $this->drupalPost(NULL, $edit, ('Save'));
+    $this->assertTrue(preg_match('|node/(\d+)$|', $this->getUrl(), $matches), 'Node created');
+    $node = node_load($matches[1]);
+
+    $this->clickLink(t('Newsletter'));
+    $this->assertText(t('Send one test newsletter to the test address'));
+    $this->assertText(t('Send newsletter'));
+    $this->assertNoText(t('Send newsletter when published'), t('Send on publish is not shown for published nodes.'));
+
+    // Verify state.
+    $newsletter = simplenews_newsletter_load($node->nid);
+    $this->assertEqual(SIMPLENEWS_STATUS_SEND_NOT, $newsletter->status, t('Newsletter not sent yet.'));
+
+    // Send now.
+    $this->drupalPost(NULL, array('simplenews[send]' => SIMPLENEWS_COMMAND_SEND_NOW), t('Submit'));
+
+    // Verify state.
+    $newsletter = simplenews_newsletter_load($node->nid);
+    $this->assertEqual(SIMPLENEWS_STATUS_SEND_PENDING, $newsletter->status, t('Newsletter sending pending.'));
+
+    $spooled = db_query('SELECT COUNT(*) FROM {simplenews_mail_spool} WHERE nid = :nid', array(':nid' => $node->nid))->fetchField();
+    $this->assertEqual(5, $spooled, t('5 mails remaining in spool.'));
+
+    // Verify that deleting isn't possible right now.
+    $this->clickLink(t('Edit'));
+    $this->assertText(t("You can't delete this newsletter because it has not been sent to all its subscribers."));
+    $this->assertNoText(t('Delete'));
+
+    // Send mails.
+    simplenews_cron();
+
+    // Verify state.
+    $newsletter = simplenews_newsletter_load($node->nid);
+    $this->assertEqual(SIMPLENEWS_STATUS_SEND_READY, $newsletter->status, t('Newsletter sending finished'));
+
+    $spooled = db_query('SELECT COUNT(*) FROM {simplenews_mail_spool} WHERE nid = :nid', array(':nid' => $node->nid))->fetchField();
+    $this->assertEqual(5, $spooled, t('Mails are kept in simplenews_mail_spool after being sent.'));
+
+    // Verify mails.
+    $mails = $this->drupalGetMails();
+    $this->assertEqual(5, count($mails), t('All mails were sent.'));
+    foreach ($mails as $mail) {
+      $this->assertEqual($mail['subject'], '[Drupal newsletter] ' . $edit['title'], t('Mail has correct subject'));
+      $this->assertTrue(isset($this->subscribers[$mail['to']]), t('Found valid recipient'));
+      unset($this->subscribers[$mail['to']]);
+    }
+    $this->assertEqual(0, count($this->subscribers), t('all subscribers have been received a mail'));
+
+    // Now delete.
+    $this->clickLink(t('Edit'));
+    $this->drupalPost(NULL, array(), t('Delete'));
+    $this->drupalPost(NULL, array(), t('Delete'));
+
+    // Verify.
+    $newsletter = simplenews_newsletter_load($node->nid);
+    $this->assertFalse($newsletter);
+    $spooled = db_query('SELECT COUNT(*) FROM {simplenews_mail_spool} WHERE nid = :nid', array(':nid' => $node->nid))->fetchField();
+    $this->assertEqual(0, $spooled, t('No mails remaining in spool.'));
+
+  }
 }
