diff --git a/feeds.module b/feeds.module
index 4a338da..0bef91d 100644
--- a/feeds.module
+++ b/feeds.module
@@ -641,9 +641,11 @@ function feeds_node_presave($node) {
  */
 function feeds_node_insert($node) {
   // Source attached to node.
-  feeds_node_update($node);
   if (isset($node->feeds) && $importer_id = feeds_get_importer_id($node->type)) {
     $source = feeds_source($importer_id, $node->nid);
+    $source->addConfig($node->feeds);
+    $source->save();
+
     // Start import if requested.
     if (feeds_importer($importer_id)->config['import_on_create'] && !isset($node->feeds['suppress_import'])) {
       $source->startImport();
@@ -662,6 +664,7 @@ function feeds_node_update($node) {
     $source = feeds_source($importer_id, $node->nid);
     $source->addConfig($node->feeds);
     $source->save();
+    $source->schedule();
   }
 }
 
diff --git a/includes/FeedsSource.inc b/includes/FeedsSource.inc
index bb03d0e..e2c4fe5 100644
--- a/includes/FeedsSource.inc
+++ b/includes/FeedsSource.inc
@@ -311,7 +311,9 @@ class FeedsSource extends FeedsConfigurable {
       JobScheduler::get('feeds_source_import')->remove($job);
     }
     elseif ($this->progressImporting() === FEEDS_BATCH_COMPLETE) {
-      JobScheduler::get('feeds_source_import')->set($job);
+      if (!JobScheduler::get('feeds_source_import')->check($job)) {
+        JobScheduler::get('feeds_source_import')->set($job);
+      }
     }
     else {
       // Feed is not fully imported yet, so we put this job back in the queue
@@ -338,7 +340,9 @@ class FeedsSource extends FeedsConfigurable {
       JobScheduler::get('feeds_source_expire')->remove($job);
     }
     else {
-      JobScheduler::get('feeds_source_expire')->set($job);
+      if (!JobScheduler::get('feeds_source_expire')->check($job)) {
+        JobScheduler::get('feeds_source_expire')->set($job);
+      }
     }
   }
 
