diff --git a/feeds.module b/feeds.module
index 8785f22..21865c6 100644
--- a/feeds.module
+++ b/feeds.module
@@ -398,6 +398,15 @@ function feeds_exit() {
   if (drupal_static('feeds_log_error', FALSE)) {
     watchdog('feeds', 'Feeds reported errors, visit the Feeds log for details.', array(), WATCHDOG_ERROR, 'admin/reports/dblog/feeds');
   }
+
+  // Process any pending PuSH subscriptions.
+  $jobs = feeds_get_subscription_jobs();
+  foreach ($jobs as $job) {
+    if (!isset($job['fetcher']) || !isset($job['source'])) {
+      continue;
+     }
+    $job['fetcher']->subscribe($job['source']);
+  }
 }
 
 /**
@@ -1006,3 +1015,30 @@ function feeds_valid_url($url, $absolute = FALSE) {
     return (bool) preg_match("/^(?:[\w#!:\.\?\+=&@$'~*,;\/\(\)\[\]\-]|%[0-9a-f]{2})+$/i", $url);
   }
 }
+
+/**
+ * Adds feeds subscription information to the jobs array to be executed
+ * on hook_exit().
+ *
+ * @param {array} $job
+ *   Information about a new job to queue up.
+ *
+ * @return {array}.
+ */
+function feeds_set_subscription_job(array $job = NULL) {
+  $jobs =& drupal_static(__FUNCTION__, array());
+  if ($job) {
+    $jobs[] = $job;
+  }
+  return $jobs;
+}
+
+/**
+ * Returns the list of queued jobs to be run on hook_exit().
+ *
+ * @return {array}.
+ */
+function feeds_get_subscription_jobs() {
+  return feeds_set_subscription_job();
+}
+
diff --git a/plugins/FeedsHTTPFetcher.inc b/plugins/FeedsHTTPFetcher.inc
index 27dd013..2ebde5f 100644
--- a/plugins/FeedsHTTPFetcher.inc
+++ b/plugins/FeedsHTTPFetcher.inc
@@ -164,7 +164,14 @@ class FeedsHTTPFetcher extends FeedsFetcher {
    */
   public function sourceSave(FeedsSource $source) {
     if ($this->config['use_pubsubhubbub']) {
-      $this->subscribe($source);
+      // If this is a feeds node we want to delay the subscription to
+      // hook_exit() to avoid transaction race conditions.
+      if ($source->feed_nid) {
+        feeds_set_subscription_job(array('fetcher' => $this, 'source' => $source));
+      }
+      else {
+        $this->subscribe($source);
+      }
     }
   }
 
