diff --git a/Library/Homebrew/cmd/pull.rb b/Library/Homebrew/cmd/pull.rb
index 809e4b5a49d69b602f44ef58dd5543b25e769908..35576fee04ce763d01b0ed6437a9cf37e871dc5b 100644
--- a/Library/Homebrew/cmd/pull.rb
+++ b/Library/Homebrew/cmd/pull.rb
@@ -57,6 +57,8 @@ module Homebrew
       odie "You meant `git pull --rebase`."
     end
 
+    bintray_fetch_formulae =[]
+
     ARGV.named.each do |arg|
       if arg.to_i > 0
         url = "https://github.com/Homebrew/homebrew/pull/#{arg}"
@@ -189,19 +191,29 @@ module Homebrew
               "-u#{bintray_user}:#{bintray_key}", "-X", "POST",
               "-d", '{"publish_wait_for_secs": -1}',
               "https://api.bintray.com/content/homebrew/#{repo}/#{package}/#{version}/publish"
-            sleep 5
-            success = system "brew", "fetch", "--retry", "--force-bottle", f.full_name
-            unless success
-              ohai "That didn't work; sleeping another 10 and trying again..."
-              sleep 10
-              system "brew", "fetch", "--retry", "--force-bottle", f.full_name
-            end
+            bintray_fetch_formulae << f
           end
         else
           opoo "You must set BINTRAY_USER and BINTRAY_KEY to add or update bottles on Bintray!"
         end
       end
 
+      bintray_fetch_formulae.each do |f|
+        max_retries = 5
+        retry_count = 0
+        begin
+          success = system "brew", "fetch", "--force-bottle", f.full_name
+          raise "Failed to download #{f} bottle!" unless success
+        rescue RuntimeError => e
+          retry_count += 1
+          raise e if retry_count >= max_retries
+          sleep_seconds = 2**retry_count
+          ohai "That didn't work; sleeping #{sleep_seconds} seconds and trying again..."
+          sleep sleep_seconds
+          retry
+        end
+      end
+
       ohai "Patch changed:"
       safe_system "git", "diff-tree", "-r", "--stat", revision, "HEAD"