diff --git a/api/api.go b/api/api.go
index 90c69ff..179d9a3 100644
--- a/api/api.go
+++ b/api/api.go
@@ -95,7 +95,7 @@
 	}
 	return &HTTPConnection{
 		client: &http.Client{
-			Timeout: 10 * time.Second,
+			Timeout:   10 * time.Second,
 			Transport: &http.Transport{TLSClientConfig: config},
 		},
 		credentials: "Basic " + base64.StdEncoding.EncodeToString([]byte(usernamePassword)),
@@ -141,7 +141,7 @@
 }
 
 // sendRequest sets up and sends the relevant HTTP request to the server and returns the HTTP response.
-func sendRequest(rpcName string, req string, conn *HTTPConnection) (*http.Response, error) {
+func sendRequest(rpcName string, req string, conn *HTTPConnection) (string, error) {
 	httpReq, err := http.NewRequest("POST", conn.getURL(rpcName), bytes.NewBuffer([]byte(req)))
 	httpReq.Header.Set("Content-Type", "application/json")
 	httpReq.Header.Set("Authorization", conn.credentials)
@@ -149,9 +149,16 @@
 
 	httpResp, err := conn.client.Do(httpReq)
 	if err != nil {
-		return nil, fmt.Errorf("invalid response. %s yielded error: %v", rpcName, err)
+		return "", fmt.Errorf("invalid response. %s yielded error: %v", rpcName, err)
 	}
-	return httpResp, nil
+	defer httpResp.Body.Close()
+	bodyBytes, err := ioutil.ReadAll(httpResp.Body)
+	if err != nil {
+		return "", fmt.Errorf("Could not read http response body")
+	}
+	bodyString := string(bodyBytes)
+	log.Printf("%v Response. Received(unix): %s, Response %v\n", rpcName, time.Now().UTC().Format(time.RFC850), bodyString)
+	return bodyString, nil
 }
 
 // CheckAvailability beforms a maps booking availability check on all supplied availability slots. This function
@@ -172,14 +179,11 @@
 	if err != nil {
 		return fmt.Errorf("invalid response. CheckAvailability yielded error: %v", err)
 	}
-	defer httpResp.Body.Close()
 	var resp mpb.CheckAvailabilityResponse
-	if err := jsonpb.Unmarshal(httpResp.Body, &resp); err != nil {
+	if err := jsonpb.UnmarshalString(httpResp, &resp); err != nil {
 		return fmt.Errorf("CheckAvailability: Could not parse HTTP response to pb3: %v", err)
 	}
 
-	log.Printf("CheckAvailability Response. Received(unix): %s, Response %s", time.Now().UTC().Format(time.RFC850), resp.String())
-
 	if diff := cmp.Diff(resp.GetSlot(), slot, cmp.Comparer(proto.Equal)); diff != "" {
 		return fmt.Errorf("invalid response. CheckAvailability slots differ (-got +want)\n%s", diff)
 	}
@@ -223,13 +227,11 @@
 	if err != nil {
 		return nil, fmt.Errorf("invalid response. CreateBooking  yielded error: %v", err)
 	}
-	defer httpResp.Body.Close()
 	var resp mpb.CreateBookingResponse
-	if err := jsonpb.Unmarshal(httpResp.Body, &resp); err != nil {
+	if err := jsonpb.UnmarshalString(httpResp, &resp); err != nil {
 		return nil, fmt.Errorf("CreateBooking: Could not parse HTTP response to pb3: %v", err)
 	}
 
-	log.Printf("CreateBooking Response. Received(unix): %s, Response %s", time.Now().UTC().Format(time.RFC850), resp.String())
 	if resp.GetBookingFailure() != nil {
 		return nil, fmt.Errorf("invalid response. CreateBooking failed with booking failure %v", resp.GetBookingFailure())
 	}
@@ -249,13 +251,11 @@
 	if err != nil {
 		return nil, fmt.Errorf("invalid response. Idempotency check yielded error: %v", err)
 	}
-	defer idemHTTPResp.Body.Close()
 	var idemResp mpb.CreateBookingResponse
-	if err := jsonpb.Unmarshal(httpResp.Body, &resp); err != nil {
+	if err := jsonpb.UnmarshalString(idemHTTPResp, &resp); err != nil {
 		return nil, fmt.Errorf("CreateBooking idem: Could not parse HTTP response to pb3: %v", err)
 	}
 
-	log.Printf("Idempotency check -- Response. Received(unix): %s, Response %s", time.Now().UTC().Format(time.RFC850), idemResp.String())
 	if diff := cmp.Diff(idemResp, resp); diff != "" {
 		return b, fmt.Errorf("Idempotency check invalid (-got +want)\n%s", diff)
 	}
@@ -277,13 +277,11 @@
 	if err != nil {
 		return nil, fmt.Errorf("invalid response. ListBookings yielded error: %v. Abandoning all booking from this flow", err)
 	}
-	defer httpResp.Body.Close()
 	var resp mpb.ListBookingsResponse
-	if err := jsonpb.Unmarshal(httpResp.Body, &resp); err != nil {
+	if err := jsonpb.UnmarshalString(httpResp, &resp); err != nil {
 		return nil, fmt.Errorf("ListBookings: Could not parse HTTP response to pb3: %v", err)
 	}
 
-	log.Printf("ListBookings Response. Received(unix): %s, Response %s", time.Now().UTC().Format(time.RFC850), resp.String())
 	gB := Bookings(resp.GetBookings())
 	if len(gB) != len(tB) {
 		return out, fmt.Errorf("number of bookings differ, ListBookings invalid. Got: %d, Want: %d. Abandoning all bookings from this flow", len(gB), len(tB))
@@ -316,13 +314,11 @@
 	if err != nil {
 		return fmt.Errorf("invalid response. GetBookingStatus yielded error: %v", err)
 	}
-	defer httpResp.Body.Close()
 	var resp mpb.GetBookingStatusResponse
-	if err := jsonpb.Unmarshal(httpResp.Body, &resp); err != nil {
+	if err := jsonpb.UnmarshalString(httpResp, &resp); err != nil {
 		return fmt.Errorf("GetBookingsStatus: Could not parse HTTP response to pb3: %v", err)
 	}
 
-	log.Printf("GetBookingStatus Response. Received(unix): %s, Response %s", time.Now().UTC().Format(time.RFC850), resp.String())
 	if diff := cmp.Diff(resp.GetBookingStatus(), mpb.BookingStatus_CONFIRMED); diff != "" {
 		return fmt.Errorf("invalid response. BookingStatus differ (-got +want)\n%s", diff)
 	}
@@ -344,13 +340,11 @@
 	if err != nil {
 		return fmt.Errorf("invalid response. UpdateBooking yielded error: %v", err)
 	}
-	defer httpResp.Body.Close()
 	var resp mpb.UpdateBookingResponse
-	if err := jsonpb.Unmarshal(httpResp.Body, &resp); err != nil {
+	if err := jsonpb.UnmarshalString(httpResp, &resp); err != nil {
 		return fmt.Errorf("CancelBooking: Could not parse HTTP response to pb3: %v", err)
 	}
 
-	log.Printf("UpdateBooking Response. Received(unix): %s, Response %s", time.Now().UTC().Format(time.RFC850), resp.String())
 	if iE := utils.ValidateBooking(resp.GetBooking(), reqPB.GetBooking()); iE != nil {
 		return fmt.Errorf("invalid response. UpdateBooking: %s", iE.Error())
 	}
@@ -392,13 +386,11 @@
 		return fmt.Errorf("Rescheduling UpdateBooking: Could not convert pb3 to json: %v", reqPB)
 	}
 	updateHTTPResp, err := sendRequest("UpdateBooking", req, conn)
-	defer updateHTTPResp.Body.Close()
 	var resp mpb.CreateBookingResponse
-	if err := jsonpb.Unmarshal(updateHTTPResp.Body, &resp); err != nil {
+	if err := jsonpb.UnmarshalString(updateHTTPResp, &resp); err != nil {
 		return fmt.Errorf("Rescheduling UpdateBooking: Could not parse HTTP response to pb3: %v", err)
 	}
 
-	log.Printf("UpdateBooking Response. Received(unix): %s, Response %s", time.Now().UTC().Format(time.RFC850), resp.String())
 	if iE := utils.ValidateBooking(resp.GetBooking(), newBooking); iE != nil {
 		return fmt.Errorf("invalid response. UpdateBooking: %s, abandoning slot 1/1", iE.Error())
 	}
