diff --git a/api/api.go b/api/api.go
index 0ae2130..1c7caea 100644
--- a/api/api.go
+++ b/api/api.go
@@ -289,7 +289,7 @@
 
 	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))
+		return nil, fmt.Errorf("number of bookings differ, ListBookings invalid. Got: %d, Want: %d. Abandoning all bookings from this flow", len(gB), len(tB))
 	}
 
 	sort.Sort(gB)
@@ -332,10 +332,12 @@
 }
 
 // CancelBooking is a clean up method that cancels all supplied bookings.
-func CancelBooking(b *mpb.Booking, conn *HTTPConnection) error {
-	b.Status = mpb.BookingStatus_CANCELED
+func CancelBooking(bookingID string, conn *HTTPConnection) error {
 	reqPB := &mpb.UpdateBookingRequest{
-		Booking: b,
+		Booking: &mpb.Booking{
+			BookingId: bookingID,
+			Status:    mpb.BookingStatus_CANCELED,
+		},
 	}
 	req, err := conn.marshaler.MarshalToString(reqPB)
 	if err != nil {
@@ -376,15 +378,18 @@
 	if err != nil {
 		return fmt.Errorf("could not complete booking, abandoning rescheduling flow: %v", err)
 	}
-	slot := newBooking.GetSlot()
 
 	// New slot.
 	lastAvailability := slots[len(slots)-1]
-	slot.StartSec = lastAvailability.GetStartSec()
-	slot.DurationSec = lastAvailability.GetDurationSec()
 
 	reqPB := &mpb.UpdateBookingRequest{
-		Booking: newBooking,
+		Booking: &mpb.Booking{
+			BookingId: newBooking.GetBookingId(),
+			Slot: &mpb.Slot{
+				StartSec:    lastAvailability.GetStartSec(),
+				DurationSec: lastAvailability.GetDurationSec(),
+			},
+		},
 	}
 	req, err := conn.marshaler.MarshalToString(reqPB)
 	if err != nil {
@@ -399,7 +404,7 @@
 	if iE := utils.ValidateBooking(resp.GetBooking(), newBooking); iE != nil {
 		return fmt.Errorf("invalid response. UpdateBooking: %s, abandoning slot 1/1", iE.Error())
 	}
-	return CancelBooking(resp.GetBooking(), conn)
+	return CancelBooking(resp.GetBooking().GetBookingId(), conn)
 }
 
 // CheckOrderFulfillability attempts to send a CheckOrderFulfillabilityRequest
diff --git a/testclient/bookingClient.go b/testclient/bookingClient.go
index c85de5f..e77546c 100644
--- a/testclient/bookingClient.go
+++ b/testclient/bookingClient.go
@@ -48,6 +48,7 @@
 	outputDir         = flag.String("output_dir", "", "Absolute path of dir to dump log file.")
 	caFile            = flag.String("ca_file", "", "Absolute path to your server's Certificate Authority root cert. Downloading all roots currently recommended by the Google Internet Authority is a suitable alternative https://pki.google.com/roots.pem. Leave blank to connect using http rather than https.")
 	fullServerName    = flag.String("full_server_name", "", "Fully qualified domain name. Same name used to sign CN. Only necessary if ca_file is specified and the base URL differs from the server address.")
+	outputToTerminal  = flag.Bool("output_to_terminal", false, "Output to terminal rather than a file.")
 )
 
 type counters struct {
@@ -129,7 +130,7 @@
 		totalErrors += stats.CreateBookingErrors
 		log.Printf("CreateBooking Errors: %d/%d", stats.CreateBookingErrors, stats.CreateBookingErrors+stats.CreateBookingSuccess)
 	}
-	if *listFlow || *allFlows {
+	if *listFlow || *allFlows || *cancelAllBookings {
 		if stats.ListBookingsSuccess {
 			log.Println("ListBookings Succeeded")
 		} else {
@@ -158,20 +159,22 @@
 	}
 
 	log.Println("\n************* End Stats *************\n")
-	os.Exit(0)
+	os.Exit(totalErrors)
 }
 
 func main() {
 	flag.Parse()
 	var stats counters
 
-	// Set up logging before continuing with flows
-	f, err := createLogFile()
-	if err != nil {
-		log.Fatalf("Failed to create log file %v", err)
+	if !*outputToTerminal {
+		// Set up logging before continuing with flows
+		f, err := createLogFile()
+		if err != nil {
+			log.Fatalf("Failed to create log file %v", err)
+		}
+		defer f.Close()
+		log.SetOutput(f)
 	}
-	defer f.Close()
-	log.SetOutput(f)
 
 	conn, err := api.InitHTTPConnection(*serverAddr, *credentialsFile, *caFile, *fullServerName)
 	if err != nil {
@@ -287,7 +290,7 @@
 	if len(b) > 0 {
 		utils.LogFlow("Cancel Booking", "Start")
 		for i, booking := range b {
-			if err = api.CancelBooking(booking, conn); err != nil {
+			if err = api.CancelBooking(booking.GetBookingId(), conn); err != nil {
 				log.Printf("%s. abandoning booking %d/%d", err.Error(), i, len(b))
 				stats.CancelBookingsErrors++
 				continue
diff --git a/testclient/orderClient.go b/testclient/orderClient.go
index 02125eb..718ff23 100644
--- a/testclient/orderClient.go
+++ b/testclient/orderClient.go
@@ -44,6 +44,7 @@
 	outputDir        = flag.String("output_dir", "", "Absolute path of dir to dump log file.")
 	caFile           = flag.String("ca_file", "", "Absolute path to your server's Certificate Authority root cert. Downloading all roots currently recommended by the Google Internet Authority is a suitable alternative https://pki.google.com/roots.pem. Leave blank to connect using http rather than https.")
 	fullServerName   = flag.String("full_server_name", "", "Fully qualified domain name. Same name used to sign CN. Only necessary if ca_file is specified and the base URL differs from the server address.")
+	outputToTerminal = flag.Bool("output_to_terminal", false, "Output to terminal rather than a file.")
 )
 
 type counters struct {
@@ -112,20 +113,22 @@
 	}
 
 	log.Println("\n************* End Stats *************\n")
-	os.Exit(0)
+	os.Exit(totalErrors)
 }
 
 func main() {
 	flag.Parse()
 	var stats counters
 
-	// Set up logging before continuing with flows
-	f, err := createLogFile()
-	if err != nil {
-		log.Fatalf("Failed to create log file %v", err)
+	if !*outputToTerminal {
+		// Set up logging before continuing with flows
+		f, err := createLogFile()
+		if err != nil {
+			log.Fatalf("Failed to create log file %v", err)
+		}
+		defer f.Close()
+		log.SetOutput(f)
 	}
-	defer f.Close()
-	log.SetOutput(f)
 
 	conn, err := api.InitHTTPConnection(*serverAddr, *credentialsFile, *caFile, *fullServerName)
 	if err != nil {
