diff --git a/testclient/bookingClient.go b/testclient/bookingClient.go
index e77546c..efc8cb3 100644
--- a/testclient/bookingClient.go
+++ b/testclient/bookingClient.go
@@ -200,16 +200,22 @@
 	}
 
 	var av []*fpb.Availability
+	var avForRescheduling []*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)
+		av, err = utils.AvailabilityFrom(*availabilityFeed, *testSlots, false)
 		if err != nil {
-			log.Fatal(err.Error())
+			log.Fatalf("Failed to get availability: %v", err.Error())
 		}
 		stats.TotalSlotsProcessed += len(av)
+
+		avForRescheduling, err = utils.AvailabilityFrom(*availabilityFeed, *testSlots, true)
+		if err != nil {
+			log.Fatalf("Failed to get availability for rescheduling test: %v", err.Error())
+		}
 	}
 
 	// AvailabilityCheck Flow
@@ -305,7 +311,7 @@
 	if *rescheduleFlow || *allFlows {
 		utils.LogFlow("Rescheduling", "Start")
 		stats.ReschedulingSuccess = true
-		if err = api.Rescheduling(av, conn); err != nil {
+		if err = api.Rescheduling(avForRescheduling, conn); err != nil {
 			log.Println(err.Error())
 			stats.ReschedulingSuccess = false
 		}
diff --git a/utils/utils.go b/utils/utils.go
index c95e198..fa87aa6 100644
--- a/utils/utils.go
+++ b/utils/utils.go
@@ -164,7 +164,7 @@
 		return nil, errors.New("no valid ticket types found in service feed, please update service feed and retry")
 	}
 
-	availabilities, err := AvailabilityFrom(availabilityFeed, testSlots)
+	availabilities, err := AvailabilityFrom(availabilityFeed, testSlots, false)
 	if err != nil {
 		return nil, err
 	}
@@ -186,7 +186,7 @@
 }
 
 // AvailabilityFrom parses the file specified in availabilityFeed, returning a random permutation of availability data, maximum entries specified in testSlots
-func AvailabilityFrom(availabilityFeed string, testSlots int) ([]*fpb.Availability, error) {
+func AvailabilityFrom(availabilityFeed string, testSlots int, forRescheduling bool) ([]*fpb.Availability, error) {
 	LogFlow("Parse Input Feed", "Start")
 	defer LogFlow("Parse Input Feed", "End")
 
@@ -220,6 +220,15 @@
 		nums := rand.Perm(len(rawAvailability))[0:testSlots]
 		for _, n := range nums {
 			finalAvailability = append(finalAvailability, rawAvailability[n])
+			if !forRescheduling {
+				continue
+			}
+			if n > 0 {
+				finalAvailability = append(finalAvailability, rawAvailability[n-1])
+			}
+			if n < testSlots-1 {
+				finalAvailability = append(finalAvailability, rawAvailability[n+1])
+			}
 		}
 	}
 	log.Printf("Selected %d slots out of a possible %d", len(finalAvailability), len(rawAvailability))
