diff --git a/api.go b/api.go
index 9e3d5ab..553673c 100644
--- a/api.go
+++ b/api.go
@@ -42,7 +42,7 @@
 	deploymentsEndpoint  = "/configurations"
 	blobEndpointPath     = "/blobs"
 	blobEndpoint         = blobEndpointPath + "/{blobId}"
-	configStatusEndpoint = "/configstatus"
+	configStatusEndpoint = "/configurations/status"
 	heartbeatEndpoint    = "/heartbeat/{uuid}"
 	registerEndpoint     = "/register/{uuid}"
 )
@@ -363,8 +363,7 @@
 	vars := mux.Vars(r)
 	uuid := vars["uuid"]
 
-	// parse body
-
+	// parse & validate body
 	body := r.Body
 	defer body.Close()
 	bodyBytes, err := ioutil.ReadAll(body)
@@ -388,7 +387,10 @@
 		return
 	}
 
+	// connect to tracker
 	trackerResp := a.trackerCl.putRegister(uuid, reqBody)
+
+	// write response
 	switch trackerResp.code {
 	case http.StatusOK:
 		a.writePutRegisterResp(w, trackerResp)
@@ -401,8 +403,7 @@
 
 func (a *apiManager) apiPutConfigStatus(w http.ResponseWriter, r *http.Request) {
 
-	// parse body
-
+	// parse & validate body
 	body := r.Body
 	defer body.Close()
 	bodyBytes, err := ioutil.ReadAll(body)
@@ -425,7 +426,11 @@
 		a.writeError(w, http.StatusBadRequest, API_ERR_INVALID_PARAMETERS, reason)
 		return
 	}
+
+	// connect to tracker
 	trackerResp := a.trackerCl.putConfigStatus(reqBody)
+
+	// write response
 	switch trackerResp.code {
 	case http.StatusOK:
 		a.writeConfigStatusResp(w, trackerResp)
@@ -436,6 +441,7 @@
 }
 
 func (a *apiManager) apiPutHeartbeat(w http.ResponseWriter, r *http.Request) {
+	// parse & validate
 	vars := mux.Vars(r)
 	uuid := vars["uuid"]
 	if !isValidUuid(uuid) {
@@ -447,7 +453,11 @@
 		a.writeError(w, http.StatusBadRequest, API_ERR_INVALID_PARAMETERS, "Bad/Missing reportedTime")
 		return
 	}
+
+	// connect to tracker
 	trackerResp := a.trackerCl.putHeartbeat(uuid, reported)
+
+	// write response
 	switch trackerResp.code {
 	case http.StatusOK:
 		a.writePutHeartbeatResp(w, trackerResp)
@@ -458,25 +468,21 @@
 }
 
 func (a *apiManager) writeConfigStatusResp(w http.ResponseWriter, tr *trackerResponse) {
-	w.Header().Add("Content-type", tr.contentType)
-	_, err := w.Write(tr.body)
-	if err != nil {
-		log.Errorf("failed to write response: %v", err)
-		a.writeError(w, http.StatusInternalServerError, API_ERR_INTERNAL, err.Error())
-	}
+	a.writeSimpleResp(w, tr)
 }
 
 func (a *apiManager) writePutRegisterResp(w http.ResponseWriter, tr *trackerResponse) {
-	w.Header().Add("Content-type", tr.contentType)
-	_, err := w.Write(tr.body)
-	if err != nil {
-		log.Errorf("failed to write response: %v", err)
-		a.writeError(w, http.StatusInternalServerError, API_ERR_INTERNAL, err.Error())
-	}
+	a.writeSimpleResp(w, tr)
 }
 
 func (a *apiManager) writePutHeartbeatResp(w http.ResponseWriter, tr *trackerResponse) {
-	w.Header().Add("Content-type", tr.contentType)
+	a.writeSimpleResp(w, tr)
+}
+
+func (a *apiManager) writeSimpleResp(w http.ResponseWriter, tr *trackerResponse) {
+	if tr.contentType != "" {
+		w.Header().Add("Content-type", tr.contentType)
+	}
 	_, err := w.Write(tr.body)
 	if err != nil {
 		log.Errorf("failed to write response: %v", err)
diff --git a/clients.go b/clients.go
index d2876f5..7680029 100644
--- a/clients.go
+++ b/clients.go
@@ -11,7 +11,7 @@
 
 const (
 	configBearerToken           = "apigeesync_bearer_token"
-	trackerConfigStatusEndpoint = "/serviceconfigstatus"
+	trackerConfigStatusEndpoint = "/configurations/status"
 	trackerHeartbeatEndpoint    = "/serviceheartbeat/{uuid}"
 	trackerRegisterEndpoint     = "/serviceregister/{uuid}"
 )
@@ -126,11 +126,11 @@
 		return (internalError(err))
 	}
 	res := &trackerResponse{}
+	res.contentType = r.Header.Get("Content-type")
 	switch r.StatusCode {
 	case http.StatusOK:
 		res.code = r.StatusCode
 		res.body = trackerBody
-		res.contentType = r.Header.Get("Content-type")
 	case http.StatusUnauthorized, http.StatusForbidden:
 		res.code = http.StatusInternalServerError
 		res.body = []byte("apid token rejected by tracker")
@@ -143,7 +143,6 @@
 		log.Infof("Abnormal Response from Tracker: %v, %v", r.StatusCode, trackerBody)
 		res.code = r.StatusCode
 		res.body = trackerBody
-		res.contentType = r.Header.Get("Content-type")
 	}
 	return res
 }
