diff --git a/README.md b/README.md
index de53791..5deb718 100644
--- a/README.md
+++ b/README.md
@@ -90,6 +90,14 @@
         Whether to test the GetBookingStatus endpoint.
     -booking_test
         Whether to test the CreateBooking endpoint.
+    -ca_file string
+        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
+    -cancel_all_bookings
+        This option assumes that the ListBookings and UpdateBooking endpoints
+        are fully functional. This is a convenience flag for purging your system
+        of all previously created bookings.
     -check_availability_test
         Whether to test the CheckAvailability endpoint.
     -health_check_test
@@ -97,8 +105,8 @@
     -list_bookings_test
         Whether to test the ListBookings endpoint
     -num_test_slots int
-        Maximum number of slots to test from availability_feed.
-        Slots will be selected randomly (default 10)
+        Maximum number of slots to test from availability_feed. Slots will be
+        selected randomly (default 10)
     -output_dir string
         Absolute path of dir to dump log file.
     -rescheduling_test
@@ -106,8 +114,13 @@
     -rpc_timeout duration
         Number of seconds to wait before abandoning request (default 30s)
     -server_addr string
-        Your grpc server's address in the format of
-        host:port (default "example.com:80")
+        Your grpc server's address in the format of host:port
+        (default "example.com:80")
+    -servername_override string
+        Override FQDN to use. Please see README for additional details
+    -tls
+        Whether to enable TLS when using the test client. Please review the
+        README.md before attempting to use this flag.
 
 Example Usage:
 
diff --git a/testclient/main.go b/testclient/main.go
index 0ed4589..8f18633 100644
--- a/testclient/main.go
+++ b/testclient/main.go
@@ -118,21 +118,22 @@
 -----END RSA PRIVATE KEY-----`
 
 var (
-	serverAddr       = flag.String("server_addr", "example.com:80", "Your grpc server's address in the format of host:port")
-	rpcTimeout       = flag.Duration("rpc_timeout", 30*time.Second, "Number of seconds to wait before abandoning request")
-	testSlots        = flag.Int("num_test_slots", 10, "Maximum number of slots to test from availability_feed. Slots will be selected randomly")
-	allFlows         = flag.Bool("all_tests", false, "Whether to test all endpoints.")
-	healthFlow       = flag.Bool("health_check_test", false, "Whether to test the Health endpoint.")
-	checkFlow        = flag.Bool("check_availability_test", false, "Whether to test the CheckAvailability endpoint.")
-	bookFlow         = flag.Bool("booking_test", false, "Whether to test the CreateBooking endpoint.")
-	listFlow         = flag.Bool("list_bookings_test", false, "Whether to test the ListBookings endpoint")
-	statusFlow       = flag.Bool("booking_status_test", false, "Whether to test the GetBookingStatus endpoint.")
-	rescheduleFlow   = flag.Bool("rescheduling_test", false, "Whether to test the UpdateBooking endpoint.")
-	availabilityFeed = flag.String("availability_feed", "", "Absolute path to availability feed required for all tests except health. Feeds can be in either json or pb3 format")
-	outputDir        = flag.String("output_dir", "", "Absolute path of dir to dump log file.")
-	enableTLS        = flag.Bool("tls", false, "Whether to enable TLS when using the test client. Please review the README.md before attempting to use this flag.")
-	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")
-	serverName       = flag.String("servername_override", "", "Override FQDN to use. Please see README for additional details")
+	serverAddr        = flag.String("server_addr", "example.com:80", "Your grpc server's address in the format of host:port")
+	rpcTimeout        = flag.Duration("rpc_timeout", 30*time.Second, "Number of seconds to wait before abandoning request")
+	testSlots         = flag.Int("num_test_slots", 10, "Maximum number of slots to test from availability_feed. Slots will be selected randomly")
+	allFlows          = flag.Bool("all_tests", false, "Whether to test all endpoints.")
+	healthFlow        = flag.Bool("health_check_test", false, "Whether to test the Health endpoint.")
+	checkFlow         = flag.Bool("check_availability_test", false, "Whether to test the CheckAvailability endpoint.")
+	bookFlow          = flag.Bool("booking_test", false, "Whether to test the CreateBooking endpoint.")
+	listFlow          = flag.Bool("list_bookings_test", false, "Whether to test the ListBookings endpoint")
+	statusFlow        = flag.Bool("booking_status_test", false, "Whether to test the GetBookingStatus endpoint.")
+	rescheduleFlow    = flag.Bool("rescheduling_test", false, "Whether to test the UpdateBooking endpoint.")
+	cancelAllBookings = flag.Bool("cancel_all_bookings", false, "This option assumes that the ListBookings and UpdateBooking endpoints are fully functional. This is a convenience flag for purging your system of all previously created bookings.")
+	availabilityFeed  = flag.String("availability_feed", "", "Absolute path to availability feed required for all tests except health. Feeds can be in either json or pb3 format")
+	outputDir         = flag.String("output_dir", "", "Absolute path of dir to dump log file.")
+	enableTLS         = flag.Bool("tls", false, "Whether to enable TLS when using the test client. Please review the README.md before attempting to use this flag.")
+	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")
+	serverName        = flag.String("servername_override", "", "Override FQDN to use. Please see README for additional details")
 )
 
 type counters struct {
@@ -299,6 +300,11 @@
 
 	ctx := context.Background()
 
+	// Health check doesn't affect the cancel booking flow so we let it through.
+	if *cancelAllBookings && (*allFlows || *checkFlow || *bookFlow || *listFlow || *statusFlow || *rescheduleFlow) {
+		log.Fatal("cancel_all_bookings is not supported with other test flows")
+	}
+
 	// HealthCheck Flow
 	if *healthFlow || *allFlows {
 		stats.HealthCheckSuccess = true
@@ -312,15 +318,18 @@
 		}
 	}
 
-	// Build availablility records.
-	if *availabilityFeed == "" {
-		log.Fatal("please set availability_feed flag if you wish to test additional flows")
+	var av []*fpb.Availability
+	if !*cancelAllBookings {
+		// Build availablility records.
+		if *availabilityFeed == "" {
+			log.Fatal("please set availability_feed flag if you wish to test additional flows")
+		}
+		av, err = utils.AvailabilityFrom(*availabilityFeed, *testSlots)
+		if err != nil {
+			log.Fatal(err.Error())
+		}
+		stats.TotalSlotsProcessed += len(av)
 	}
-	av, err := utils.AvailabilityFrom(*availabilityFeed, *testSlots)
-	if err != nil {
-		log.Fatal(err.Error())
-	}
-	stats.TotalSlotsProcessed += len(av)
 
 	// AvailabilityCheck Flow
 	if *checkFlow || *allFlows {
@@ -361,8 +370,8 @@
 	}
 
 	// ListBookings Flow
-	if *listFlow || *allFlows {
-		if len(b) == 0 {
+	if *listFlow || *allFlows || *cancelAllBookings {
+		if len(b) == 0 && !*cancelAllBookings {
 			b = GenerateBookings(setTimeout(ctx), av, &stats, client)
 		}
 		utils.LogFlow("List Bookings", "Start")
