diff --git a/api.go b/api.go
index ae92a0d..00dc633 100644
--- a/api.go
+++ b/api.go
@@ -13,12 +13,23 @@
 	"time"
 )
 
+// todo: the full set of states should probably be RECEIVED, READY, FAIL, SUCCESS
 const (
 	RESPONSE_STATUS_SUCCESS = "SUCCESS"
 	RESPONSE_STATUS_FAIL    = "FAIL"
+)
 
-	// todo: add error codes where this is used
-	ERROR_CODE_TODO = 0
+const (
+	TRACKER_ERR_BUNDLE_TIMEOUT = iota
+	TRACKER_ERR_PARSE_FAILED
+	TRACKER_ERR_INVALID_CHECKSUM
+)
+
+const (
+	API_ERR_BAD_BLOCK = iota
+	API_ERR_BAD_JSON
+	API_ERR_INVALID_CONTENT
+	API_ERR_INTERNAL
 )
 
 var (
@@ -81,7 +92,7 @@
 }
 
 func writeDatabaseError(w http.ResponseWriter) {
-	writeError(w, http.StatusInternalServerError, ERROR_CODE_TODO, "database error")
+	writeError(w, http.StatusInternalServerError, API_ERR_INTERNAL, "database error")
 }
 
 func distributeEvents() {
@@ -143,7 +154,7 @@
 		var err error
 		timeout, err = strconv.Atoi(b)
 		if err != nil {
-			writeError(w, http.StatusBadRequest, ERROR_CODE_TODO, "bad block value, must be number of seconds")
+			writeError(w, http.StatusBadRequest, API_ERR_BAD_BLOCK, "bad block value, must be number of seconds")
 			return
 		}
 	}
@@ -235,7 +246,7 @@
 	err := json.Unmarshal(buf, &results)
 	if err != nil {
 		log.Errorf("Resp Handler Json Unmarshal err: ", err)
-		writeError(w, http.StatusBadRequest, ERROR_CODE_TODO, "Malformed JSON")
+		writeError(w, http.StatusBadRequest, API_ERR_BAD_JSON, "Malformed JSON")
 		return
 	}
 
@@ -269,12 +280,11 @@
 	}
 
 	if errs.Len() > 0 {
-		writeError(w, http.StatusBadRequest, ERROR_CODE_TODO, errs.String())
+		writeError(w, http.StatusBadRequest, API_ERR_INVALID_CONTENT, errs.String())
 		return
 	}
 
 	if len(validResults) > 0 {
-		go transmitDeploymentResultsToServer(validResults)
 		setDeploymentResults(validResults)
 	}
 
diff --git a/bundle.go b/bundle.go
index 1105606..e877ad2 100644
--- a/bundle.go
+++ b/bundle.go
@@ -47,7 +47,7 @@
 			{
 				ID:        dep.ID,
 				Status:    RESPONSE_STATUS_FAIL,
-				ErrorCode: ERROR_CODE_TODO,
+				ErrorCode: TRACKER_ERR_INVALID_CHECKSUM,
 				Message:   msg,
 			},
 		})
@@ -132,7 +132,7 @@
 				{
 					ID:        r.dep.ID,
 					Status:    RESPONSE_STATUS_FAIL,
-					ErrorCode: ERROR_CODE_TODO,
+					ErrorCode: TRACKER_ERR_BUNDLE_TIMEOUT,
 					Message:   "bundle download failed",
 				},
 			})
diff --git a/bundle_test.go b/bundle_test.go
index 84989ea..15fd8e3 100644
--- a/bundle_test.go
+++ b/bundle_test.go
@@ -8,6 +8,8 @@
 	"net/http"
 	"net/http/httptest"
 
+	"io/ioutil"
+
 	. "github.com/onsi/ginkgo"
 	. "github.com/onsi/gomega"
 )
@@ -134,6 +136,31 @@
 			err = tx.Commit()
 			Expect(err).ShouldNot(HaveOccurred())
 
+			trackerHit := false
+			tracker := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
+				defer GinkgoRecover()
+
+				b, err := ioutil.ReadAll(r.Body)
+				Expect(err).ShouldNot(HaveOccurred())
+				var received apiDeploymentResults
+				json.Unmarshal(b, &received)
+
+				expected := apiDeploymentResults{
+					{
+						ID:        deploymentID,
+						Status:    RESPONSE_STATUS_FAIL,
+						ErrorCode: TRACKER_ERR_BUNDLE_TIMEOUT,
+						Message:   "bundle download failed",
+					},
+				}
+				Expect(received).To(Equal(expected))
+				trackerHit = true
+				w.Write([]byte("OK"))
+			}))
+			defer tracker.Close()
+			apiServerBaseURI, err = url.Parse(tracker.URL)
+			Expect(err).ShouldNot(HaveOccurred())
+
 			queueDownloadRequest(dep)
 
 			<-proceed
@@ -147,10 +174,12 @@
 
 			Expect(d.ID).To(Equal(deploymentID))
 			Expect(d.DeployStatus).To(Equal(RESPONSE_STATUS_FAIL))
-			Expect(d.DeployErrorCode).To(Equal(ERROR_CODE_TODO))
+			Expect(d.DeployErrorCode).To(Equal(TRACKER_ERR_BUNDLE_TIMEOUT))
 			Expect(d.DeployErrorMessage).ToNot(BeEmpty())
 			Expect(d.LocalBundleURI).To(BeEmpty())
 
+			Expect(trackerHit).To(BeTrue())
+
 			var listener = make(chan string)
 			addSubscriber <- listener
 			<-listener
@@ -165,7 +194,7 @@
 
 			Expect(d.ID).To(Equal(deploymentID))
 			Expect(d.DeployStatus).To(Equal(RESPONSE_STATUS_FAIL))
-			Expect(d.DeployErrorCode).To(Equal(ERROR_CODE_TODO))
+			Expect(d.DeployErrorCode).To(Equal(TRACKER_ERR_BUNDLE_TIMEOUT))
 			Expect(d.DeployErrorMessage).ToNot(BeEmpty())
 			Expect(d.LocalBundleURI).To(BeAnExistingFile())
 		})
diff --git a/data.go b/data.go
index d36e745..ad67728 100644
--- a/data.go
+++ b/data.go
@@ -155,7 +155,7 @@
 
 // getUnreadyDeployments() returns array of deployments that are not yet ready to deploy
 func getUnreadyDeployments() (deployments []DataDeployment, err error) {
-	return getDeployments("WHERE local_bundle_uri = $1 and deploy_status = $2", "", "")
+	return getDeployments("WHERE local_bundle_uri = $1", "")
 }
 
 // getDeployments() accepts a "WHERE ..." clause and optional parameters and returns the list of deployments
@@ -207,6 +207,9 @@
 
 func setDeploymentResults(results apiDeploymentResults) error {
 
+	// also send results to server
+	go transmitDeploymentResultsToServer(results)
+
 	log.Debugf("setDeploymentResults: %v", results)
 
 	tx, err := getDB().Begin()
@@ -265,12 +268,3 @@
 
 	return nil
 }
-
-func getLocalBundleURI(depID string) (localBundleUri string, err error) {
-
-	err = getDB().QueryRow("SELECT local_bundle_uri FROM deployments WHERE id=$1;", depID).Scan(&localBundleUri)
-	if err == sql.ErrNoRows {
-		err = nil
-	}
-	return
-}
diff --git a/listener.go b/listener.go
index e4290d5..339213a 100644
--- a/listener.go
+++ b/listener.go
@@ -72,7 +72,7 @@
 					result := apiDeploymentResult{
 						ID:        dep.ID,
 						Status:    RESPONSE_STATUS_FAIL,
-						ErrorCode: ERROR_CODE_TODO,
+						ErrorCode: TRACKER_ERR_PARSE_FAILED,
 						Message:   fmt.Sprintf("unable to parse deployment: %v", err),
 					}
 					errResults = append(errResults, result)
@@ -174,7 +174,7 @@
 					result := apiDeploymentResult{
 						ID:        dep.ID,
 						Status:    RESPONSE_STATUS_FAIL,
-						ErrorCode: ERROR_CODE_TODO,
+						ErrorCode: TRACKER_ERR_PARSE_FAILED,
 						Message:   fmt.Sprintf("unable to parse deployment: %v", err),
 					}
 					errResults = append(errResults, result)
