added additional documentation for waitlist + BAL
diff --git a/README.md b/README.md
index 97e87a5..6b07188 100644
--- a/README.md
+++ b/README.md
@@ -20,6 +20,9 @@
     into a proto file (api_v3.proto). Modify the package to match your project
     (com.partner.mapsbooking.v3.model).
 
+    * If implementing waitlist functionality, repeat the same steps with the
+    [Waitlist Proto Interface](https://developers.google.com/maps-booking/reference/rest-api-v3/waitlists/proto-bundle)
+
 2.  Create a web application project in your IDE named booking_server_v3, add
     Maven support to this project.
 
@@ -70,8 +73,11 @@
 
          protoc --java_out=java resources/api_v3.proto
 
+    * If implementing waitlist functionality, also execute the following:
+         protoc --java_out=java resources/waitlist.proto
+
 5.  Inside of the **src/main/java,** create a new package matching your groupId
-    (com.partner.mapsbooking). Retrieve the sample code from the  repo:
+    (com.partner.mapsbooking). Retrieve the sample code from the repo:
 
          git clone https://maps-booking.googlesource.com/java-maps-booking-rest-server-v3-skeleton
 
diff --git a/rest/BookingService.java b/rest/BookingService.java
index b7cc41a..9711f7b 100644
--- a/rest/BookingService.java
+++ b/rest/BookingService.java
@@ -42,7 +42,7 @@
 import javax.ws.rs.Produces;
 import javax.ws.rs.core.MediaType;
 
-/** Booking REST Server for API v3 with com.partner.mapsbooking.authentication. */
+/** Booking REST Server for API v3 with authentication. */
 @Path("/v3")
 public class BookingService {
 
@@ -106,16 +106,17 @@
   public String batchAvailabilityLookup(String request) throws InvalidProtocolBufferException {
 
     // use JsonFormat.Parser to convert Json String into protocol buffer
-    ApiV3.BatchAvailabilityLookupRequest.Builder requestBuilder = ApiV3.BatchAvailabilityLookupRequest.newBuilder();
+    ApiV3.BatchAvailabilityLookupRequest.Builder requestBuilder
+        = ApiV3.BatchAvailabilityLookupRequest.newBuilder();
     JsonFormat.Parser jsonParser = JsonFormat.parser();
     jsonParser.merge(request, requestBuilder);
     ApiV3.BatchAvailabilityLookupRequest batchAvailabilityLookupRequest = requestBuilder.build();
 
     // Unexpected error: throw exception and handle it in BookingExceptionMapper class,
     // return corresponding response and HTTP code
-    //
     // Normal path: get response object from the helper function
-    ApiV3.BatchAvailabilityLookupResponse response = performBatchAvailabilityLookup(batchAvailabilityLookupRequest);
+    ApiV3.BatchAvailabilityLookupResponse response
+        = performBatchAvailabilityLookup(batchAvailabilityLookupRequest);
 
     // use JsonFormat to convert protocol buffer to Json
     String jsonResponse = jsonPrinter().print(response);
@@ -123,7 +124,8 @@
   }
 
   // TODO(partner): Implement this method to perform batch availability lookup
-  private ApiV3.BatchAvailabilityLookupResponse performBatchAvailabilityLookup(ApiV3.BatchAvailabilityLookupRequest request) {
+  private ApiV3.BatchAvailabilityLookupResponse performBatchAvailabilityLookup(
+      ApiV3.BatchAvailabilityLookupRequest request) {
     //        BatchAvailabilityLookup logic:
     //        e.g.
     //        String merchantId = request.getMerchantId();
@@ -137,15 +139,15 @@
     //        e.g
     //        for (ApiV3.SlotTime slotTime : requestedSlotTimes) {
     //            slotTimeAvailabilities.add(SlotTimeAvailability.newBuilder()
-    //              .setSlotTime(slotTime)
-    //              .setAvailable(true)
-    //              .build());
+    //                .setSlotTime(slotTime)
+    //                .setAvailable(true)
+    //                .build());
     //        }
     //
     //        ApiV3.BatchAvailabilityLookupResponse response =
-    // ApiV3.BatchAvailabilityLookupResponse.newBuilder()
+    //            ApiV3.BatchAvailabilityLookupResponse.newBuilder()
     //                .addAllSlotTimeAvailability(slotTimeAvailabilities).build();
-
+    //
     //        return response;
 
     throw new UnsupportedOperationException("Not implemented yet");
@@ -430,7 +432,7 @@
     //        Create order business logic:
     //        e.g.
     //        ApiV3.Order order = request.getOrder();
-
+    //
     //        normal case -> create this order in the backend, return response:
     //        ApiV3.CreateOrderResponse response = ApiV3.CreateOrderResponse.newBuilder()
     //                .setOrder(order)
@@ -503,9 +505,9 @@
 
   /**
    * Waitlist Implementation
-   * Proto File - https://developers.google.com/maps-booking/reference/rest-api-v3/waitlists/proto-bundle
-   *
-   * */
+   * Proto File -
+   * https://developers.google.com/maps-booking/reference/rest-api-v3/waitlists/proto-bundle
+   */
   @Path("/BatchGetWaitEstimates")
   @POST
   @Produces(MediaType.APPLICATION_JSON)
@@ -513,7 +515,8 @@
   public String batchGetWaitEstimates(String request) throws InvalidProtocolBufferException {
 
     // use JsonFormat.Parser to convert Json String into protocol buffer
-    Waitlist.BatchGetWaitEstimatesRequest.Builder requestBuilder = Waitlist.BatchGetWaitEstimatesRequest.newBuilder();
+    Waitlist.BatchGetWaitEstimatesRequest.Builder requestBuilder
+        = Waitlist.BatchGetWaitEstimatesRequest.newBuilder();
     JsonFormat.Parser jsonParser = JsonFormat.parser();
     jsonParser.merge(request, requestBuilder);
     Waitlist.BatchGetWaitEstimatesRequest batchGetWaitEstimatesRequest = requestBuilder.build();
@@ -522,7 +525,8 @@
     // return corresponding response and HTTP code
     //
     // Normal path: get response object from the helper function
-    Waitlist.BatchGetWaitEstimatesResponse response = performBatchGetWaitEstimates(batchGetWaitEstimatesRequest);
+    Waitlist.BatchGetWaitEstimatesResponse response
+        = performBatchGetWaitEstimates(batchGetWaitEstimatesRequest);
 
     // use JsonFormat to convert protocol buffer to Json
     String jsonResponse = jsonPrinter().print(response);
@@ -530,15 +534,16 @@
   }
 
   // TODO(partner): Implement this method to return wait estimates based on party size
-  private Waitlist.BatchGetWaitEstimatesResponse performBatchGetWaitEstimates(Waitlist.BatchGetWaitEstimatesRequest request) {
-
+  private Waitlist.BatchGetWaitEstimatesResponse performBatchGetWaitEstimates(
+      Waitlist.BatchGetWaitEstimatesRequest request) {
     // String merchantId = request.getMerchantId();
     // String serviceId = request.getServiceId();
     //
     // List<Integer> requestedPartySizes = request.getPartySizeList();
     //
-    // Waitlist.BatchGetWaitEstimatesResponse response = Waitlist.BatchGetWaitEstimatesResponse.newBuilder().setWaitlistStatus(
-    //     WaitlistStatus.OPEN).addAllWaitEstimate(...).build();
+    // Waitlist.BatchGetWaitEstimatesResponse response
+    //     = Waitlist.BatchGetWaitEstimatesResponse.newBuilder().setWaitlistStatus(
+    //           WaitlistStatus.OPEN).addAllWaitEstimate(...).build();
     //
     // return response;
 
@@ -552,7 +557,8 @@
   public String createWaitlistEntry(String request) throws InvalidProtocolBufferException {
 
     // use JsonFormat.Parser to convert Json String into protocol buffer
-    Waitlist.CreateWaitlistEntryRequest.Builder requestBuilder = Waitlist.CreateWaitlistEntryRequest.newBuilder();
+    Waitlist.CreateWaitlistEntryRequest.Builder requestBuilder
+        = Waitlist.CreateWaitlistEntryRequest.newBuilder();
     JsonFormat.Parser jsonParser = JsonFormat.parser();
     jsonParser.merge(request, requestBuilder);
     Waitlist.CreateWaitlistEntryRequest createWaitlistEntryRequest = requestBuilder.build();
@@ -561,7 +567,8 @@
     // return corresponding response and HTTP code
     //
     // Normal path: get response object from the helper function
-    Waitlist.CreateWaitlistEntryResponse response = performCreateWaitlistEntry(createWaitlistEntryRequest);
+    Waitlist.CreateWaitlistEntryResponse response
+        = performCreateWaitlistEntry(createWaitlistEntryRequest);
 
     // use JsonFormat to convert protocol buffer to Json
     String jsonResponse = jsonPrinter().print(response);
@@ -569,26 +576,28 @@
   }
 
   // TODO(partner): Implement this method to create wait list entry based on request
-  private Waitlist.CreateWaitlistEntryResponse performCreateWaitlistEntry(Waitlist.CreateWaitlistEntryRequest request) {
-
+  private Waitlist.CreateWaitlistEntryResponse performCreateWaitlistEntry(
+      Waitlist.CreateWaitlistEntryRequest request) {
     // String merchantId = request.getMerchantId();
     // String serviceId = request.getServiceId();
     // int partySize = request.getPartySize();
     //
     // Waitlist.UserInformation userInformation = request.getUserInformation();
     // String idempotencyToken = request.getIdempotencyToken();
-
-    // Normal Case -> return a unique waitlist_entry_id e.g
-    // Waitlist.CreateWaitlistEntryResponse response = Waitlist.CreateWaitlistEntryResponse.newBuilder()
-    //     .setWaitlistEntryId(...).build();
-
-    // Business logic error -> set the WaitlistBusinessLogicFailure in the response
-
-    // Waitlist.WaitlistBusinessLogicFailure waitlistBusinessLogicFailure = Waitlist.WaitlistBusinessLogicFailure.newBuilder()
-    //     .setCause(Cause.WAITLIST_FULL).setDescription("").build();
     //
-    // Waitlist.CreateWaitlistEntryResponse response = Waitlist.CreateWaitlistEntryResponse.newBuilder()
-    //     .setWaitlistBusinessLogicFailure(waitlistBusinessLogicFailure).build();
+    // Normal Case -> return a unique waitlist_entry_id e.g
+    // Waitlist.CreateWaitlistEntryResponse response
+    //     = Waitlist.CreateWaitlistEntryResponse.newBuilder().setWaitlistEntryId(...).build();
+    //
+    // Business logic error -> set the WaitlistBusinessLogicFailure in the response
+    //
+    // Waitlist.WaitlistBusinessLogicFailure waitlistBusinessLogicFailure
+    //     = Waitlist.WaitlistBusinessLogicFailure.newBuilder()
+    //         .setCause(Cause.WAITLIST_FULL).setDescription("").build();
+    //
+    // Waitlist.CreateWaitlistEntryResponse response
+    //     = Waitlist.CreateWaitlistEntryResponse.newBuilder()
+    //         .setWaitlistBusinessLogicFailure(waitlistBusinessLogicFailure).build();
     //
     // return response;
 
@@ -602,7 +611,8 @@
   public String getWaitlistEntry(String request) throws InvalidProtocolBufferException {
 
     // use JsonFormat.Parser to convert Json String into protocol buffer
-    Waitlist.GetWaitlistEntryRequest.Builder requestBuilder = Waitlist.GetWaitlistEntryRequest.newBuilder();
+    Waitlist.GetWaitlistEntryRequest.Builder requestBuilder
+        = Waitlist.GetWaitlistEntryRequest.newBuilder();
     JsonFormat.Parser jsonParser = JsonFormat.parser();
     jsonParser.merge(request, requestBuilder);
     Waitlist.GetWaitlistEntryRequest getWaitlistEntryRequest = requestBuilder.build();
@@ -611,7 +621,8 @@
     // return corresponding response and HTTP code
     //
     // Normal path: get response object from the helper function
-    Waitlist.GetWaitlistEntryResponse response = performGetWaitlistEntryRequest(getWaitlistEntryRequest);
+    Waitlist.GetWaitlistEntryResponse response
+        = performGetWaitlistEntry(getWaitlistEntryRequest);
 
     // use JsonFormat to convert protocol buffer to Json
     String jsonResponse = jsonPrinter().print(response);
@@ -619,8 +630,8 @@
   }
 
   // TODO(partner): Implement this method to return waitlist entry
-  private Waitlist.GetWaitlistEntryResponse performGetWaitlistEntryRequest(Waitlist.GetWaitlistEntryRequest request) {
-
+  private Waitlist.GetWaitlistEntryResponse performGetWaitlistEntry(
+      Waitlist.GetWaitlistEntryRequest request) {
     // String waitlistEntryId = request.getWaitlistEntryId();
     //
     // Waitlist.GetWaitlistEntryResponse response = Waitlist.GetWaitlistEntryResponse.newBuilder()
@@ -638,7 +649,8 @@
   public String deleteWaitlistEntry(String request) throws InvalidProtocolBufferException {
 
     // use JsonFormat.Parser to convert Json String into protocol buffer
-    Waitlist.DeleteWaitlistEntryRequest.Builder requestBuilder = Waitlist.DeleteWaitlistEntryRequest.newBuilder();
+    Waitlist.DeleteWaitlistEntryRequest.Builder requestBuilder
+        = Waitlist.DeleteWaitlistEntryRequest.newBuilder();
     JsonFormat.Parser jsonParser = JsonFormat.parser();
     jsonParser.merge(request, requestBuilder);
     Waitlist.DeleteWaitlistEntryRequest deleteWaitlistEntryRequest = requestBuilder.build();
@@ -656,10 +668,10 @@
   private void performDeleteWaitlistEntry(Waitlist.DeleteWaitlistEntryRequest request) {
 
     // String waitlistEntryId = request.getWaitlistEntryId();
-
     // If waitlist entry Id exists, delete it
-
     // If waitlist entry id doesn't exist, return 404
-    // throw new WebApplicationException(400);
+    // throw new WebApplicationException(404);
+
+    throw new UnsupportedOperationException("Not implemented yet");
   }
-}
\ No newline at end of file
+}