diff --git a/feeds.module b/feeds.module
index 46007d6..16de9d2 100644
--- a/feeds.module
+++ b/feeds.module
@@ -91,6 +91,9 @@ function feeds_cron_job_scheduler_info() {
   $info['feeds_source_import'] = array(
     'queue name' => 'feeds_source_import',
   );
+  // feeds_source_clear never gets called, since we now use the queue directly.
+  // This is left in case any background jobs still running after an
+  // upgrade.
   $info['feeds_source_clear'] = array(
     'queue name' => 'feeds_source_clear',
   );
diff --git a/feeds.pages.inc b/feeds.pages.inc
index ce02fc1..bbc11da 100644
--- a/feeds.pages.inc
+++ b/feeds.pages.inc
@@ -89,12 +89,24 @@ function feeds_import_form(array $form, array &$form_state, FeedsImporter $impor
     '#type' => 'submit',
     '#value' => t('Import'),
   );
+  // Change submit button label if processing in background.
+  if ($source->importer->config['process_in_background']) {
+    $form['submit']['#value'] = t('Schedule import');
+  }
+
+  // Disable submit button if import is initiated.
   $progress = $source->progressImporting();
   if ($progress !== FEEDS_BATCH_COMPLETE) {
     $form['submit']['#disabled'] = TRUE;
     $form['submit']['#value'] =
       t('Importing (@progress %)', array('@progress' => number_format(100 * $progress, 0)));
+
+    // Check if import task is queued.
+    if ($source->isQueued()) {
+      $form['source_status']['#value'] .= t('Run cron to continue the import.');
+    }
   }
+
   return $form;
 }
 
@@ -121,6 +133,9 @@ function feeds_import_form_submit($form, &$form_state) {
   // Refresh feed if import on create is selected.
   if ($source->importer->config['import_on_create']) {
     $source->startImport();
+    if ($source->importer->config['process_in_background']) {
+      drupal_set_message(t('Import scheduled.'));
+    }
   }
 
   // Add to schedule, make sure importer is scheduled, too.
@@ -145,12 +160,25 @@ function feeds_import_tab_form($form, &$form_state, $node) {
     '#value' => feeds_source_status($source),
   );
   $form = confirm_form($form, t('Import all content from source?'), 'node/' . $node->nid, '', t('Import'), t('Cancel'), 'confirm feeds update');
+
+  // Change submit button label if processing in background.
+  if ($source->importer->config['process_in_background']) {
+    $form['actions']['submit']['#value'] = t('Schedule import');
+  }
+
+  // Disable submit button if import is initiated.
   $progress = $source->progressImporting();
   if ($progress !== FEEDS_BATCH_COMPLETE) {
     $form['actions']['submit']['#disabled'] = TRUE;
     $form['actions']['submit']['#value'] =
       t('Importing (@progress %)', array('@progress' => number_format(100 * $progress, 0)));
+
+    // Check if import task is queued.
+    if ($source->isQueued()) {
+      $form['source_status']['#value'] .= t('Run cron to continue the import.');
+    }
   }
+
   return $form;
 }
 
@@ -159,7 +187,13 @@ function feeds_import_tab_form($form, &$form_state, $node) {
  */
 function feeds_import_tab_form_submit($form, &$form_state) {
   $form_state['redirect'] = $form['#redirect'];
-  feeds_source($form['#importer_id'], $form['#feed_nid'])->startImport();
+  $source = feeds_source($form['#importer_id'], $form['#feed_nid']);
+  $source->startImport();
+  $source->ensureSchedule();
+
+  if ($source->importer->config['process_in_background']) {
+    drupal_set_message(t('Import scheduled.'));
+  }
 }
 
 /**
@@ -188,12 +222,21 @@ function feeds_delete_tab_form(array $form, array &$form_state, FeedsImporter $i
     '#value' => feeds_source_status($source),
   );
   $form = confirm_form($form, t('Delete all items from source?'), $form['#redirect'], '', t('Delete'), t('Cancel'), 'confirm feeds update');
+
+  // Change submit button label if processing in background.
+  if ($source->importer->config['process_in_background']) {
+    $form['actions']['submit']['#value'] = t('Schedule delete');
+  }
+
+  // Disable submit button if clearing is initiated.
   $progress = $source->progressClearing();
   if ($progress !== FEEDS_BATCH_COMPLETE) {
     $form['actions']['submit']['#disabled'] = TRUE;
     $form['actions']['submit']['#value'] =
       t('Deleting (@progress %)', array('@progress' => number_format(100 * $progress, 0)));
+    $form['source_status']['#value'] .= t('Run cron to continue the deletion of items.');
   }
+
   return $form;
 }
 
@@ -203,7 +246,13 @@ function feeds_delete_tab_form(array $form, array &$form_state, FeedsImporter $i
 function feeds_delete_tab_form_submit($form, &$form_state) {
   $form_state['redirect'] = $form['#redirect'];
   $feed_nid = empty($form['#feed_nid']) ? 0 : $form['#feed_nid'];
-  feeds_source($form['#importer_id'], $feed_nid)->startClear();
+  $source = feeds_source($form['#importer_id'], $feed_nid);
+  $source->startClear();
+  $source->ensureSchedule();
+
+  if ($source->importer->config['process_in_background']) {
+    drupal_set_message(t('Deletion of items scheduled.'));
+  }
 }
 
 /**
diff --git a/includes/FeedsSource.inc b/includes/FeedsSource.inc
index ee3c513..ba86c66 100644
--- a/includes/FeedsSource.inc
+++ b/includes/FeedsSource.inc
@@ -334,7 +334,7 @@ class FeedsSource extends FeedsConfigurable {
         JobScheduler::get('feeds_source_import')->reschedule($existing);
       }
     }
-    else {
+    elseif (!$this->isQueued()) {
       // Feed is not fully imported yet, so we put this job back in the queue
       // immediately for further processing.
       $queue = DrupalQueue::get('feeds_source_import');
@@ -383,16 +383,13 @@ class FeedsSource extends FeedsConfigurable {
     $job = array(
       'type' => $this->id,
       'id' => $this->feed_nid,
-      'period' => 0,
-      'periodic' => TRUE,
     );
-    // Remove job if batch is complete.
-    if ($this->progressClearing() === FEEDS_BATCH_COMPLETE) {
-      JobScheduler::get('feeds_source_clear')->remove($job);
-    }
-    // Schedule as soon as possible if batch is not complete.
-    else {
-      JobScheduler::get('feeds_source_clear')->set($job);
+
+    if ($this->progressClearing() !== FEEDS_BATCH_COMPLETE) {
+      // Feed is not fully cleared yet, so we put this job back in the queue
+      // immediately for further processing.
+      $queue = DrupalQueue::get('feeds_source_clear');
+      $queue->createItem($job);
     }
   }
 
@@ -682,6 +679,9 @@ class FeedsSource extends FeedsConfigurable {
   /**
    * Returns the next time that the feed will be imported.
    *
+   * @param array $methods
+   *   (optional) Methods to check.
+   *
    * @return array|null
    *   Information about when the next time the feed will be imported:
    *   - time: the next time the feed will be imported as a UNIX timestamp.
@@ -689,108 +689,137 @@ class FeedsSource extends FeedsConfigurable {
    *   - message: If set, time and method should be ignored.
    *   Null if no information is available.
    */
-  public function getNextImportTimeDetails() {
-    // Check queue.
-    $serialized_job_type = db_like(strtr('s:4:"type";s:!length:"!type";', array(
-      '!length' => strlen($this->id),
-      '!type' => $this->id,
-    )));
-    $serialized_job_id_as_string = db_like(strtr('s:2:"id";s:!length:"!id";', array(
-      '!length' => strlen($this->feed_nid),
-      '!id' => $this->feed_nid,
-    )));
-    $serialized_job_id_as_integer = db_like(strtr('s:2:"id";i:!id;', array(
-      '!id' => $this->feed_nid,
-    )));
-
-    $queue_created = db_select('queue')
-      ->fields('queue', array('created'))
-      ->condition('name', 'feeds_source_import')
-      ->condition('data', '%' . $serialized_job_type . '%', 'LIKE')
-      ->condition(db_or()
-        ->condition('data', '%' . $serialized_job_id_as_string . '%', 'LIKE')
-        ->condition('data', '%' . $serialized_job_id_as_integer . '%', 'LIKE')
-      )
-      ->condition('expire', 0)
-      ->execute()
-      ->fetchField();
-
-    if ($queue_created) {
-      return array(
-        'time' => $queue_created,
-        'method' => t('Queue'),
+  public function getNextImportTimeDetails(array $methods = array()) {
+    if (empty($methods)) {
+      $methods = array(
+        'queue',
+        'feeds_reschedule',
+        'job_scheduler',
       );
     }
 
-    // Special case for PostgreSQL: if using that database type, we cannot
-    // search in the data column of the queue table, because the Drupal database
-    // layer adds '::text' to bytea columns, which results into the data column
-    // becoming unreadable in conditions. So instead, we check for the first 10
-    // records in the queue to see if the given importer ID + feed NID is
-    // amongst them.
-    if (Database::getConnection()->databaseType() == 'pgsql') {
-      $items = db_query("SELECT data, created FROM {queue} WHERE name = :name AND expire = 0 LIMIT 10", array(
-        ':name' => 'feeds_source_import',
-      ));
-      foreach ($items as $item) {
-        if (is_string($item->data)) {
-          $item->data = unserialize($item->data);
-        }
-        if ($item->data['type'] == $this->id && $item->data['id'] == $this->feed_nid) {
-          return array(
-            'time' => $item->created,
-            'method' => t('Queue'),
-          );
-        }
+    if (in_array('queue', $methods)) {
+      // Check queue.
+      $serialized_job_type = db_like(strtr('s:4:"type";s:!length:"!type";', array(
+        '!length' => strlen($this->id),
+        '!type' => $this->id,
+      )));
+      $serialized_job_id_as_string = db_like(strtr('s:2:"id";s:!length:"!id";', array(
+        '!length' => strlen($this->feed_nid),
+        '!id' => $this->feed_nid,
+      )));
+      $serialized_job_id_as_integer = db_like(strtr('s:2:"id";i:!id;', array(
+        '!id' => $this->feed_nid,
+      )));
+
+      $queue_created = db_select('queue')
+        ->fields('queue', array('created'))
+        ->condition('name', 'feeds_source_import')
+        ->condition('data', '%' . $serialized_job_type . '%', 'LIKE')
+        ->condition(db_or()
+          ->condition('data', '%' . $serialized_job_id_as_string . '%', 'LIKE')
+          ->condition('data', '%' . $serialized_job_id_as_integer . '%', 'LIKE')
+        )
+        ->condition('expire', 0)
+        ->execute()
+        ->fetchField();
+
+      if ($queue_created) {
+        return array(
+          'time' => $queue_created,
+          'method' => t('Queue'),
+        );
       }
 
-      // If not found by now, count how many items there are in the
-      // feeds_source_import queue. We use this number later to indicate that
-      // the job *could* be in the queue.
-      $number_of_queue_items = db_query('SELECT COUNT(name) FROM {queue} WHERE name = :name AND expire = 0', array(
-        ':name' => 'feeds_source_import',
-      ))->fetchField();
+      // Special case for PostgreSQL: if using that database type, we cannot
+      // search in the data column of the queue table, because the Drupal database
+      // layer adds '::text' to bytea columns, which results into the data column
+      // becoming unreadable in conditions. So instead, we check for the first 10
+      // records in the queue to see if the given importer ID + feed NID is
+      // amongst them.
+      if (Database::getConnection()->databaseType() == 'pgsql') {
+        $items = db_query("SELECT data, created FROM {queue} WHERE name = :name AND expire = 0 LIMIT 10", array(
+          ':name' => 'feeds_source_import',
+        ));
+        foreach ($items as $item) {
+          if (is_string($item->data)) {
+            $item->data = unserialize($item->data);
+          }
+          if ($item->data['type'] == $this->id && $item->data['id'] == $this->feed_nid) {
+            return array(
+              'time' => $item->created,
+              'method' => t('Queue'),
+            );
+          }
+        }
+
+        // If not found by now, count how many items there are in the
+        // feeds_source_import queue. We use this number later to indicate that
+        // the job *could* be in the queue.
+        $number_of_queue_items = db_query('SELECT COUNT(name) FROM {queue} WHERE name = :name AND expire = 0', array(
+          ':name' => 'feeds_source_import',
+        ))->fetchField();
+      }
     }
 
-    // Check if the importer is in the process of being rescheduled.
-    $importers = feeds_reschedule();
-    if (isset($importers[$this->id])) {
-      return array(
-        'time' => NULL,
-        'method' => NULL,
-        'message' => t('to be rescheduled'),
-      );
+    if (in_array('feeds_reschedule', $methods)) {
+      // Check if the importer is in the process of being rescheduled.
+      $importers = feeds_reschedule();
+      if (isset($importers[$this->id])) {
+        return array(
+          'time' => NULL,
+          'method' => NULL,
+          'message' => t('to be rescheduled'),
+        );
+      }
     }
 
-    // Check job scheduler.
-    $job = db_select('job_schedule')
-      ->fields('job_schedule', array('next', 'scheduled'))
-      ->condition('name', 'feeds_source_import')
-      ->condition('type', $this->id)
-      ->condition('id', $this->feed_nid)
-      ->execute()
-      ->fetch();
-
-    if (isset($job->next)) {
-      $details = array(
-        'time' => $job->next,
-        'method' => t('Job scheduler'),
-      );
-      if (!empty($job->scheduled)) {
-        if (isset($number_of_queue_items) && $number_of_queue_items > 10) {
-          // When using PostgreSQL we were not able to efficiently search the
-          // queue table, so it could still be in that table.
-          $details['message'] = t('unknown, could still be in the queue');
-        }
-        else {
-          $details['message'] = t('possibly stuck');
+    if (in_array('job_scheduler', $methods)) {
+      // Check job scheduler.
+      $job = db_select('job_schedule')
+        ->fields('job_schedule', array('next', 'scheduled'))
+        ->condition('name', 'feeds_source_import')
+        ->condition('type', $this->id)
+        ->condition('id', $this->feed_nid)
+        ->execute()
+        ->fetch();
+
+      if (isset($job->next)) {
+        $details = array(
+          'time' => $job->next,
+          'method' => t('Job scheduler'),
+        );
+        if (!empty($job->scheduled)) {
+          if (isset($number_of_queue_items) && $number_of_queue_items > 10) {
+            // When using PostgreSQL we were not able to efficiently search the
+            // queue table, so it could still be in that table.
+            $details['message'] = t('unknown, could still be in the queue');
+          }
+          else {
+            $details['message'] = t('possibly stuck');
+          }
         }
+        return $details;
       }
-      return $details;
     }
   }
 
   /**
+   * Checks if a source is queued for import.
+   *
+   * @return bool
+   *   True if the source is queued to be imported.
+   *   False otherwise.
+   */
+  public function isQueued() {
+    $details = $this->getNextImportTimeDetails(array('queue'));
+    if ($details) {
+      return TRUE;
+    }
+    return FALSE;
+  }
+
+  /**
    * Unlocks a feed.
    */
   public function unlock() {
@@ -1009,32 +1038,39 @@ class FeedsSource extends FeedsConfigurable {
   }
 
   /**
-   * Background job helper. Starts a background job using Job Scheduler.
-   *
-   * Execute the first batch chunk of a background job on the current page load,
-   * moves the rest of the job processing to a cron powered background job.
-   *
-   * Executing the first batch chunk is important, otherwise, when a user
-   * submits a source for import or clearing, we will leave her without any
-   * visual indicators of an ongoing job.
+   * Background job helper. Starts a background job using the Drupal queue.
    *
    * @see FeedsSource::startImport().
    * @see FeedsSource::startClear().
    *
-   * @param $method
+   * @param string $method
    *   Method to execute on importer; one of 'import' or 'clear'.
-   *
-   * @throws Exception $e
    */
   protected function startBackgroundJob($method) {
-    if (FEEDS_BATCH_COMPLETE != $this->$method()) {
-      $job = array(
-        'type' => $this->id,
-        'id' => $this->feed_nid,
-        'period' => 0,
-        'periodic' => FALSE,
-      );
-      JobScheduler::get("feeds_source_{$method}")->set($job);
+    $job = array(
+      'type' => $this->id,
+      'id' => $this->feed_nid,
+    );
+    $queue = DrupalQueue::get('feeds_source_' . $method);
+    $queue->createItem($job);
+
+    switch ($method) {
+      case 'import':
+        $state = $this->state(FEEDS_PARSE);
+        break;
+
+      case 'clear':
+        $state = $this->state(FEEDS_PROCESS_CLEAR);
+        break;
+
+      case 'expire':
+        $state = $this->state(FEEDS_PROCESS_EXPIRE);
+        break;
+    }
+
+    if (isset($state)) {
+      $state->progress = 0;
+      $this->save();
     }
   }
 
diff --git a/tests/feeds.test b/tests/feeds.test
index ff8f256..15fc2f3 100644
--- a/tests/feeds.test
+++ b/tests/feeds.test
@@ -359,14 +359,24 @@ class FeedsWebTestCase extends DrupalWebTestCase {
 
   /**
    * Import a file through the import form. Assumes FeedsFileFetcher in place.
+   *
+   * @param string $id
+   *   The ID of the importer.
+   * @param string $file
+   *   The absolute path to the file.
+   * @param string $submit
+   *   (optional) The button to press.
+   *   Defaults to the button "Import".
    */
-  public function importFile($id, $file) {
-
+  public function importFile($id, $file, $submit = NULL) {
     $this->assertTrue(file_exists($file), 'Source file exists');
     $edit = array(
       'files[feeds]' => $file,
     );
-    $this->drupalPost('import/' . $id, $edit, 'Import');
+    if (empty($submit)) {
+      $submit = 'Import';
+    }
+    $this->drupalPost('import/' . $id, $edit, $submit);
   }
 
   /**
@@ -454,17 +464,49 @@ class FeedsWebTestCase extends DrupalWebTestCase {
     return $this->assertTrue($fields && $found, $message, $group);
   }
 
-   /**
-    * Adds mappings to a given configuration.
-    *
-    * @param string $id
-    *   ID of the importer.
-    * @param array $mappings
-    *   An array of mapping arrays. Each mapping array must have a source and
-    *   an target key and can have a unique key.
-    * @param bool $test_mappings
-    *   (optional) TRUE to automatically test mapping configs. Defaults to TRUE.
-    */
+  /**
+   * Asserts that a field in the current page is enabled.
+   *
+   * @param string $name
+   *   Name of field to assert.
+   * @param string $message
+   *   (optional) A message to display with the assertion.
+   *
+   * @return bool
+   *   TRUE on pass, FALSE on fail.
+   */
+  protected function assertFieldEnabled($name, $message = '') {
+    $elements = $this->xpath($this->constructFieldXpath('name', $name));
+    return $this->assertTrue(isset($elements[0]) && empty($elements[0]['disabled']), $message ? $message : t('Field %name is enabled.', array('%name' => $name)), t('Browser'));
+  }
+
+  /**
+   * Asserts that a field in the current page is disabled.
+   *
+   * @param string $name
+   *   Name of field to assert.
+   * @param string $message
+   *   (optional) A message to display with the assertion.
+   *
+   * @return bool
+   *   TRUE on pass, FALSE on fail.
+   */
+  protected function assertFieldDisabled($name, $message = '') {
+    $elements = $this->xpath($this->constructFieldXpath('name', $name));
+    return $this->assertTrue(isset($elements[0]) && !empty($elements[0]['disabled']), $message ? $message : t('Field %name is disabled.', array('%name' => $name)), t('Browser'));
+  }
+
+  /**
+   * Adds mappings to a given configuration.
+   *
+   * @param string $id
+   *   ID of the importer.
+   * @param array $mappings
+   *   An array of mapping arrays. Each mapping array must have a source and
+   *   an target key and can have a unique key.
+   * @param bool $test_mappings
+   *   (optional) TRUE to automatically test mapping configs. Defaults to TRUE.
+   */
   public function addMappings($id, array $mappings, $test_mappings = TRUE) {
 
     $path = "admin/structure/feeds/$id/mapping";
diff --git a/tests/feeds_fetcher_file.test b/tests/feeds_fetcher_file.test
index 089c7c0..484f41e 100644
--- a/tests/feeds_fetcher_file.test
+++ b/tests/feeds_fetcher_file.test
@@ -149,7 +149,7 @@ class FeedsFileFetcherTestCase extends FeedsWebTestCase {
     variable_set('feeds_tests_feeds_after_save_sleep', 1);
 
     // Import a file with 9 nodes.
-    $this->importFile('node', $this->absolutePath() . '/tests/feeds/nodes.csv');
+    $this->importFile('node', $this->absolutePath() . '/tests/feeds/nodes.csv', 'Schedule import');
 
     // Assert that the file has been created.
     $this->assertTrue(file_exists('private://feeds/nodes.csv'), 'The imported file is created.');
diff --git a/tests/feeds_processor_node.test b/tests/feeds_processor_node.test
index 25ec79a..f83d767 100644
--- a/tests/feeds_processor_node.test
+++ b/tests/feeds_processor_node.test
@@ -548,9 +548,6 @@ class FeedsRSStoNodesTest extends FeedsWebTestCase {
     // Just remove the mappings rather than creating a new importer.
     $this->removeMappings('syndication', $this->getCurrentMappings('syndication'));
 
-    // Set our process limit to something simple.
-    variable_set('feeds_process_limit', 5);
-
     $this->setPlugin('syndication', 'FeedsFileFetcher');
     $this->setPlugin('syndication', 'FeedsCSVParser');
 
@@ -572,13 +569,85 @@ class FeedsRSStoNodesTest extends FeedsWebTestCase {
       ),
     ));
 
-    $this->importFile('syndication', $this->absolutePath() . '/tests/feeds/many_nodes_ordered.csv');
-    $this->assertEqual(5, db_query("SELECT COUNT(*) FROM {node}")->fetchField());
+    $this->importFile('syndication', $this->absolutePath() . '/tests/feeds/many_nodes_ordered.csv', 'Schedule import');
+    $this->assertEqual(0, db_query("SELECT COUNT(*) FROM {node}")->fetchField());
+
+    // Assert that the import button is disabled.
+    $this->assertFieldDisabled('op');
+
+    // Assert that there is one import task in the queue.
+    $this->assertEqual(1, db_query("SELECT COUNT(*) FROM {queue} WHERE name = 'feeds_source_import'")->fetchField());
 
     // The feed should still be scheduled because it is being processed.
     // @see https://drupal.org/node/2275893
     $this->cronRun();
     $this->assertEqual(86, db_query("SELECT COUNT(*) FROM {node}")->fetchField());
+
+    // Assert that the import button is no longer disabled.
+    $this->drupalGet('import/syndication');
+    $this->assertFieldEnabled('op');
+
+    // Assert that there are no more import tasks in the queue.
+    $this->assertEqual(0, db_query("SELECT COUNT(*) FROM {queue} WHERE name = 'feeds_source_import'")->fetchField());
+  }
+
+  /**
+   * Tests clearing items in background.
+   */
+  public function testClearInBackground() {
+    // Just remove the mappings rather than creating a new importer.
+    $this->removeMappings('syndication', $this->getCurrentMappings('syndication'));
+
+    $this->setSettings('syndication', NULL, array(
+      'content_type' => '',
+    ));
+
+    $this->setPlugin('syndication', 'FeedsFileFetcher');
+    $this->setPlugin('syndication', 'FeedsCSVParser');
+
+    $this->addMappings('syndication', array(
+      0 => array(
+        'source' => 'title',
+        'target' => 'title',
+      ),
+      1 => array(
+        'source' => 'GUID',
+        'target' => 'guid',
+        'unique' => TRUE,
+      ),
+    ));
+
+    // Import 86 nodes.
+    $this->importFile('syndication', $this->absolutePath() . '/tests/feeds/many_nodes_ordered.csv');
+    $this->assertEqual(86, db_query("SELECT COUNT(*) FROM {node}")->fetchField());
+
+    // Turn on "Process in background option" and turn off periodic import.
+    $this->setSettings('syndication', NULL, array(
+      'process_in_background' => TRUE,
+      'import_period' => FEEDS_SCHEDULE_NEVER,
+    ));
+
+    // Now schedule clearing in background.
+    $this->drupalPost('import/syndication/delete-items', array(), t('Schedule delete'));
+    $this->assertEqual(86, db_query("SELECT COUNT(*) FROM {node}")->fetchField());
+
+    // Assert that the delete button is disabled.
+    $this->drupalGet('import/syndication/delete-items');
+    $this->assertFieldDisabled('op');
+
+    // Assert that there is one clear task in the queue.
+    $this->assertEqual(1, db_query("SELECT COUNT(*) FROM {queue} WHERE name = 'feeds_source_clear'")->fetchField());
+
+    // And run cron.
+    $this->cronRun();
+    $this->assertEqual(0, db_query("SELECT COUNT(*) FROM {node}")->fetchField());
+
+    // Assert that the delete button is no longer disabled.
+    $this->drupalGet('import/syndication/delete-items');
+    $this->assertFieldEnabled('op');
+
+    // Assert that there are no more clear tasks in the queue.
+    $this->assertEqual(0, db_query("SELECT COUNT(*) FROM {queue} WHERE name = 'feeds_source_clear'")->fetchField());
   }
 
   /**
diff --git a/tests/feeds_scheduler.test b/tests/feeds_scheduler.test
index 3f16487..416119c 100644
--- a/tests/feeds_scheduler.test
+++ b/tests/feeds_scheduler.test
@@ -264,7 +264,7 @@ class FeedsSchedulerTestCase extends FeedsWebTestCase {
     $this->addMappings('node', $mappings);
 
     // Specify a file with many nodes.
-    $this->importFile('node', $this->absolutePath() . '/tests/feeds/many_nodes.csv');
+    $this->importFile('node', $this->absolutePath() . '/tests/feeds/many_nodes.csv', 'Schedule import');
 
     // Verify that a queue item is created.
     $count = db_query("SELECT COUNT(*) FROM {queue} WHERE name = 'feeds_source_import'")->fetchField();
