diff --git a/README.md b/README.md
index 168daed..9691d3a 100644
--- a/README.md
+++ b/README.md
@@ -23,9 +23,13 @@
 Duration between deleting a deployment and deleting it's bundles on disk. 
 Default: "1s"
 
-#### gatewaydeploy_bundle_download_timeout
-Duration before bundle download marks deployment as failed (will continue retries regardless). 
-Default: "1m"
+#### gatewaydeploy_download_connection_timeout
+Duration before a bundle download connection terminates  
+Default: "5m"
+
+#### gatewaydeploy_deployment_timeout
+Duration before bundle download marks deployment as failed (will continue download retries regardless). 
+Default: "10m"
 
 #### gatewaydeploy_bundle_dir
 Relative location from local_storage_path in which to store local bundle files.
diff --git a/apidGatewayDeploy_suite_test.go b/apidGatewayDeploy_suite_test.go
index ad253e0..ccb41b2 100644
--- a/apidGatewayDeploy_suite_test.go
+++ b/apidGatewayDeploy_suite_test.go
@@ -50,7 +50,7 @@
 	debounceDuration = time.Millisecond
 	bundleCleanupDelay = time.Millisecond
 	bundleRetryDelay = 10 * time.Millisecond
-	bundleDownloadTimeout = 50 * time.Millisecond
+	markDeploymentFailedAfter = 50 * time.Millisecond
 	concurrentDownloads = 1
 	downloadQueueSize = 1
 
@@ -76,7 +76,7 @@
 			return
 		}
 		if vars["id"] == "longfail" {
-			time.Sleep(bundleDownloadTimeout + (250 * time.Millisecond))
+			time.Sleep(markDeploymentFailedAfter + (250 * time.Millisecond))
 		}
 		w.Write([]byte("/bundles/" + vars["id"]))
 
diff --git a/bundle.go b/bundle.go
index 1163946..1105606 100644
--- a/bundle.go
+++ b/bundle.go
@@ -18,10 +18,11 @@
 )
 
 var (
-	bundleRetryDelay      = time.Second
-	bundleDownloadTimeout = 10 * time.Minute
-	downloadQueue         = make(chan *DownloadRequest, downloadQueueSize)
-	workerQueue           = make(chan chan *DownloadRequest, concurrentDownloads)
+	markDeploymentFailedAfter time.Duration
+	bundleDownloadConnTimeout time.Duration
+	bundleRetryDelay          = time.Second
+	downloadQueue             = make(chan *DownloadRequest, downloadQueueSize)
+	workerQueue               = make(chan chan *DownloadRequest, concurrentDownloads)
 )
 
 // simple doubling back-off
@@ -55,13 +56,13 @@
 
 	retryIn := bundleRetryDelay
 	maxBackOff := 5 * time.Minute
-	timeoutAfter := time.Now().Add(bundleDownloadTimeout)
+	markFailedAt := time.Now().Add(markDeploymentFailedAfter)
 	req := &DownloadRequest{
 		dep:          dep,
 		hashWriter:   hashWriter,
 		bundleFile:   getBundleFile(dep),
 		backoffFunc:  createBackoff(retryIn, maxBackOff),
-		timeoutAfter: timeoutAfter,
+		markFailedAt: markFailedAt,
 	}
 	downloadQueue <- req
 }
@@ -71,7 +72,7 @@
 	hashWriter   hash.Hash
 	bundleFile   string
 	backoffFunc  func()
-	timeoutAfter time.Time
+	markFailedAt time.Time
 }
 
 func (r *DownloadRequest) downloadBundle() {
@@ -122,9 +123,9 @@
 
 func (r *DownloadRequest) checkTimeout() {
 
-	if !r.timeoutAfter.IsZero() {
-		if time.Now().After(r.timeoutAfter) {
-			r.timeoutAfter = time.Time{}
+	if !r.markFailedAt.IsZero() {
+		if time.Now().After(r.markFailedAt) {
+			r.markFailedAt = time.Time{}
 			log.Debugf("bundle download timeout. marking deployment %s failed. will keep retrying: %s",
 				r.dep.ID, r.dep.BundleURI)
 			setDeploymentResults(apiDeploymentResults{
@@ -209,7 +210,10 @@
 	}
 
 	// GET the contents at uriString
-	res, err := http.Get(uriString)
+	client := http.Client{
+		Timeout: bundleDownloadConnTimeout,
+	}
+	res, err := client.Get(uriString)
 	if err != nil {
 		return nil, err
 	}
diff --git a/bundle_test.go b/bundle_test.go
index 796be9a..84989ea 100644
--- a/bundle_test.go
+++ b/bundle_test.go
@@ -16,18 +16,73 @@
 
 	Context("download", func() {
 
-		It("should timeout, mark status as failed, then finish", func() {
+		It("should timeout connection and retry", func() {
+			defer func() {
+				bundleDownloadConnTimeout = time.Second
+			}()
+			bundleDownloadConnTimeout = 100 * time.Millisecond
+			firstTime := true
+			ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
+				if firstTime {
+					firstTime = false
+					time.Sleep(1 * time.Second)
+					w.WriteHeader(500)
+				} else {
+					//proceed <- true
+					w.Write([]byte("/bundles/longfail"))
+				}
+			}))
+			defer ts.Close()
+
+			uri, err := url.Parse(ts.URL)
+			Expect(err).ShouldNot(HaveOccurred())
+			uri.Path = "/bundles/longfail"
+
+			tx, err := getDB().Begin()
+			Expect(err).ShouldNot(HaveOccurred())
+
+			deploymentID := "bundle_download_fail"
+			dep := DataDeployment{
+				ID:                 deploymentID,
+				DataScopeID:        deploymentID,
+				BundleURI:          uri.String(),
+				BundleChecksum:     testGetChecksum("crc-32", uri.String()),
+				BundleChecksumType: "crc-32",
+			}
+
+			err = InsertDeployment(tx, dep)
+			Expect(err).ShouldNot(HaveOccurred())
+
+			err = tx.Commit()
+			Expect(err).ShouldNot(HaveOccurred())
+
+			queueDownloadRequest(dep)
+
+			var listener = make(chan string)
+			addSubscriber <- listener
+			<-listener
+
+			getReadyDeployments()
+			deployments, err := getReadyDeployments()
+			Expect(err).ShouldNot(HaveOccurred())
+
+			Expect(len(deployments)).To(Equal(1))
+			d := deployments[0]
+			Expect(d.ID).To(Equal(deploymentID))
+		})
+
+		It("should timeout deployment, mark status as failed, then finish", func() {
 
 			proceed := make(chan bool)
 			failedOnce := false
 			ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
 				if failedOnce {
 					proceed <- true
-					time.Sleep(bundleDownloadTimeout)
+					time.Sleep(markDeploymentFailedAfter)
 					w.Write([]byte("/bundles/longfail"))
 				} else {
 					failedOnce = true
-					time.Sleep(bundleDownloadTimeout)
+					time.Sleep(markDeploymentFailedAfter)
 					w.WriteHeader(500)
 				}
 			}))
@@ -234,7 +289,7 @@
 			queueDownloadRequest(dep)
 
 			// give download time to finish
-			time.Sleep(bundleDownloadTimeout + (100 * time.Millisecond))
+			time.Sleep(markDeploymentFailedAfter + (100 * time.Millisecond))
 
 			deployments, err := getReadyDeployments()
 			Expect(err).ShouldNot(HaveOccurred())
diff --git a/init.go b/init.go
index f507357..ff39a3e 100644
--- a/init.go
+++ b/init.go
@@ -14,7 +14,8 @@
 	configBundleDirKey          = "gatewaydeploy_bundle_dir"
 	configDebounceDuration      = "gatewaydeploy_debounce_duration"
 	configBundleCleanupDelay    = "gatewaydeploy_bundle_cleanup_delay"
-	configBundleDownloadTimeout = "gatewaydeploy_bundle_download_timeout"
+	configMarkDeployFailedAfter = "gatewaydeploy_deployment_timeout"
+	configDownloadConnTimeout   = "gatewaydeploy_download_connection_timeout"
 	configApiServerBaseURI      = "apigeesync_proxy_server_base"
 	configApidInstanceID        = "apigeesync_apid_instance_id"
 	configApidClusterID         = "apigeesync_cluster_id"
@@ -69,7 +70,8 @@
 	config.SetDefault(configBundleDirKey, "bundles")
 	config.SetDefault(configDebounceDuration, time.Second)
 	config.SetDefault(configBundleCleanupDelay, time.Minute)
-	config.SetDefault(configBundleDownloadTimeout, 5*time.Minute)
+	config.SetDefault(configMarkDeployFailedAfter, 10*time.Minute)
+	config.SetDefault(configDownloadConnTimeout, 5*time.Minute)
 	config.SetDefault(configConcurrentDownloads, 15)
 	config.SetDefault(configDownloadQueueSize, 2000)
 
@@ -83,9 +85,14 @@
 		return pluginData, fmt.Errorf("%s must be a positive duration", configBundleCleanupDelay)
 	}
 
-	bundleDownloadTimeout = config.GetDuration(configBundleDownloadTimeout)
-	if bundleDownloadTimeout < time.Millisecond {
-		return pluginData, fmt.Errorf("%s must be a positive duration", configBundleDownloadTimeout)
+	markDeploymentFailedAfter = config.GetDuration(configMarkDeployFailedAfter)
+	if markDeploymentFailedAfter < time.Millisecond {
+		return pluginData, fmt.Errorf("%s must be a positive duration", configMarkDeployFailedAfter)
+	}
+
+	bundleDownloadConnTimeout = config.GetDuration(configDownloadConnTimeout)
+	if bundleDownloadConnTimeout < time.Millisecond {
+		return pluginData, fmt.Errorf("%s must be a positive duration", configDownloadConnTimeout)
 	}
 
 	data = services.Data()
diff --git a/listener.go b/listener.go
index 0f5c493..938b9d2 100644
--- a/listener.go
+++ b/listener.go
@@ -119,6 +119,7 @@
 			if err != nil {
 				log.Panicf("unable to query database for unready deployments: %v", err)
 			}
+			log.Debugf("Queuing %d deployments for bundle download", len(deployments))
 			for _, dep := range deployments {
 				queueDownloadRequest(dep)
 			}
diff --git a/listener_test.go b/listener_test.go
index dbee310..40c9ce4 100644
--- a/listener_test.go
+++ b/listener_test.go
@@ -66,6 +66,73 @@
 
 			close(done)
 		})
+
+		It("should set DB and process unready on startup event", func(done Done) {
+
+			deploymentID := "startup_test"
+
+			uri, err := url.Parse(testServer.URL)
+			Expect(err).ShouldNot(HaveOccurred())
+
+			uri.Path = "/bundles/1"
+			bundleUri := uri.String()
+			bundle := bundleConfigJson{
+				Name:         uri.Path,
+				URI:          bundleUri,
+				ChecksumType: "crc-32",
+			}
+			bundle.Checksum = testGetChecksum(bundle.ChecksumType, bundleUri)
+
+			dep := DataDeployment{
+				ID:                 deploymentID,
+				DataScopeID:        deploymentID,
+				BundleURI:          bundle.URI,
+				BundleChecksum:     bundle.Checksum,
+				BundleChecksumType: bundle.ChecksumType,
+			}
+
+			// init without info == startup on existing DB
+			var snapshot = common.Snapshot{
+				SnapshotInfo: "test",
+				Tables:       []common.Table{},
+			}
+
+			db, err := data.DBVersion(snapshot.SnapshotInfo)
+			if err != nil {
+				log.Panicf("Unable to access database: %v", err)
+			}
+
+			err = InitDB(db)
+			if err != nil {
+				log.Panicf("Unable to initialize database: %v", err)
+			}
+
+			tx, err := db.Begin()
+			Expect(err).ShouldNot(HaveOccurred())
+
+			err = InsertDeployment(tx, dep)
+			Expect(err).ShouldNot(HaveOccurred())
+
+			err = tx.Commit()
+			Expect(err).ShouldNot(HaveOccurred())
+
+			var listener = make(chan string)
+			addSubscriber <- listener
+
+			apid.Events().Emit(APIGEE_SYNC_EVENT, &snapshot)
+
+			id := <-listener
+			Expect(id).To(Equal(deploymentID))
+
+			deployments, err := getReadyDeployments()
+			Expect(err).ShouldNot(HaveOccurred())
+
+			Expect(len(deployments)).To(Equal(1))
+			d := deployments[0]
+
+			Expect(d.ID).To(Equal(deploymentID))
+			close(done)
+		})
 	})
 
 	Context("ApigeeSync change event", func() {
