diff --git a/api/api.go b/api/api.go
index 4379df2..be23323 100644
--- a/api/api.go
+++ b/api/api.go
@@ -21,7 +21,9 @@
 	"errors"
 	"fmt"
 	"log"
+	"math/rand"
 	"sort"
+	"strconv"
 	"time"
 
 	"github.com/golang/protobuf/proto"
@@ -117,6 +119,8 @@
 	if err != nil {
 		return nil, fmt.Errorf("unable to build request for check availability flow. err: %v, availability record: %v", err, a.String())
 	}
+
+	gen := rand.New(rand.NewSource(time.Now().UnixNano()))
 	// Lease currently unsupported.
 	req := &mpb.CreateBookingRequest{
 		Slot: slot,
@@ -130,7 +134,7 @@
 		PaymentInformation: &mpb.PaymentInformation{
 			PrepaymentStatus: mpb.PrepaymentStatus_PREPAYMENT_NOT_PROVIDED,
 		},
-		IdempotencyToken: utils.BuildIdempotencyToken(a, userID),
+		IdempotencyToken: strconv.Itoa(gen.Intn(1000000)),
 	}
 
 	log.Printf("CreateBooking Request. Sent(unix): %s, Request %s", time.Now().UTC().Format(time.RFC850), req.String())
@@ -152,6 +156,19 @@
 	}); iE != nil {
 		return nil, fmt.Errorf("invalid response. CreateBooking invalid: %s", iE.Error())
 	}
+
+	// Perform idempotency test.
+	log.Printf("Idempotency check -- CreateBooking Request. Sent(unix): %s, Request %s", time.Now().UTC().Format(time.RFC850), req.String())
+	idemResp, err := c.CreateBooking(ctx, req)
+	if err != nil {
+		return nil, fmt.Errorf("invalid response. Idempotency check yielded error: %v", err)
+	}
+
+	log.Printf("Idempotency check -- Response. Received(unix): %s, Response %s", time.Now().UTC().Format(time.RFC850), resp.String())
+	if diff := cmp.Diff(idemResp, resp); diff != "" {
+		return b, fmt.Errorf("Idempotency check invalid (-got +want)\n%s", diff)
+	}
+
 	return b, nil
 }
 
diff --git a/utils/utils.go b/utils/utils.go
index c082630..db7d129 100644
--- a/utils/utils.go
+++ b/utils/utils.go
@@ -18,14 +18,12 @@
 package utils
 
 import (
-	"crypto/md5"
 	"errors"
 	"fmt"
 	"io/ioutil"
 	"log"
 	"math/rand"
 	"path"
-	"strconv"
 	"strings"
 	"time"
 
@@ -108,24 +106,16 @@
 		return fmt.Errorf("payment information differs (-got +want)\n%s", diff)
 	}
 	// BookingStatus_CONFIRMED is the default case unless want overrides it.
-        wantStatus := mpb.BookingStatus_CONFIRMED
-        if want.GetStatus() != mpb.BookingStatus_BOOKING_STATUS_UNSPECIFIED {
-	        wantStatus = want.GetStatus()
-        }
+	wantStatus := mpb.BookingStatus_CONFIRMED
+	if want.GetStatus() != mpb.BookingStatus_BOOKING_STATUS_UNSPECIFIED {
+		wantStatus = want.GetStatus()
+	}
 	if diff := cmp.Diff(got.GetStatus(), wantStatus); diff != "" {
 		return fmt.Errorf("status differs (-got +want)\n%s", diff)
 	}
 	return nil
 }
 
-// BuildIdempotencyToken creates a unique token based on the slot and user attempting to book the slot.
-func BuildIdempotencyToken(a *fpb.Availability, u string) string {
-	r := a.GetResources()
-	parts := []string{a.GetMerchantId(), a.GetServiceId(), strconv.FormatInt(a.GetStartSec(), 10), strconv.FormatInt(a.GetDurationSec(), 10), r.GetStaffId(), r.GetRoomId(), u}
-	key := strings.Join(parts, "")
-	return fmt.Sprintf("%x", md5.Sum([]byte(key)))
-}
-
 // BuildSlotFrom creates a bookingservice slot from an feed availability record.
 func BuildSlotFrom(a *fpb.Availability) (*mpb.Slot, error) {
 	startTime, err := ptypes.TimestampProto(time.Unix(a.GetStartSec(), 0))
