diff --git a/includes/simplenews.mail.inc b/includes/simplenews.mail.inc
index 5334de0..c0fce8b 100644
--- a/includes/simplenews.mail.inc
+++ b/includes/simplenews.mail.inc
@@ -365,9 +365,14 @@ function simplenews_get_spool($limit = SIMPLENEWS_UNLIMITED, $conditions = array
   $status_or = db_or();
   $statuses = is_array($conditions['status']) ? $conditions['status'] : array($conditions['status']);
   foreach ($statuses as $status) {
-    $status_or->condition('status', $status);
     if ($status == SIMPLENEWS_SPOOL_IN_PROGRESS) {
-      $status_or->condition('s.timestamp', simplenews_get_expiration_time(), '<');
+      $status_or->condition(db_and()
+        ->condition('status', $status)
+        ->condition('s.timestamp', simplenews_get_expiration_time(), '<')
+      );
+    }
+    else {
+      $status_or->condition('status', $status);
     }
   }
   unset($conditions['status']);
diff --git a/tests/simplenews.test b/tests/simplenews.test
index a96680f..a7fa792 100644
--- a/tests/simplenews.test
+++ b/tests/simplenews.test
@@ -1976,6 +1976,19 @@ class SimplenewsSendTestCase extends SimplenewsTestCase {
     }
     $this->assertEqual(0, count($this->subscribers), t('all subscribers have been received a mail'));
 
+    // Update timestamp to simulate pending lock expiration.
+    db_update('simplenews_mail_spool')
+      ->fields(array(
+        'timestamp' => simplenews_get_expiration_time() - 1,
+      ))
+      ->execute();
+
+    // Verify that kept mail spool rows are not re-sent.
+    simplenews_cron();
+    simplenews_get_spool();
+    $mails = $this->drupalGetMails();
+    $this->assertEqual(5, count($mails), t('No additional mails have been sent.'));
+
     // Now delete.
     $this->clickLink(t('Edit'));
     $this->drupalPost(NULL, array(), t('Delete'));
