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 e663029..1ee6f9c 100644
--- a/feeds.pages.inc
+++ b/feeds.pages.inc
@@ -159,7 +159,9 @@ 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();
 }
 
 /**
@@ -203,7 +205,9 @@ 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();
 }
 
 /**
diff --git a/includes/FeedsSource.inc b/includes/FeedsSource.inc
index b2d8ee9..690bfe8 100644
--- a/includes/FeedsSource.inc
+++ b/includes/FeedsSource.inc
@@ -254,7 +254,7 @@ class FeedsSource extends FeedsConfigurable {
   public function startImport() {
     $config = $this->importer->getConfig();
     if ($config['process_in_background']) {
-      $this->startBackgroundJob('import');
+      $this->import();
     }
     else {
       $this->startBatchAPIJob(t('Importing'), 'import');
@@ -276,7 +276,8 @@ class FeedsSource extends FeedsConfigurable {
   public function startClear() {
     $config = $this->importer->getConfig();
     if ($config['process_in_background']) {
-      $this->startBackgroundJob('clear');
+      $this->clear();
+      $this->scheduleClear();
     }
     else {
       $this->startBatchAPIJob(t('Deleting'), 'clear');
@@ -383,16 +384,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);
     }
   }
 
@@ -884,36 +882,6 @@ 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.
-   *
-   * @see FeedsSource::startImport().
-   * @see FeedsSource::startClear().
-   *
-   * @param $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);
-    }
-  }
-
-  /**
    * Batch API helper. Starts a Batch API job.
    *
    * @see FeedsSource::startImport().
