diff --git a/src/main/java/com/twitter/clientlib/ServerConfiguration.java b/src/main/java/com/twitter/clientlib/ServerConfiguration.java
index 7257fa4..e33bb9a 100644
--- a/src/main/java/com/twitter/clientlib/ServerConfiguration.java
+++ b/src/main/java/com/twitter/clientlib/ServerConfiguration.java
@@ -27,7 +27,7 @@ public ServerConfiguration(String URL, String description, Map<String, ServerVar
      * @param variables A map between a variable name and its value.
      * @return Formatted URL.
      */
-    public String URL(Map<String, String> variables) {
+    public String formatUrl(Map<String, String> variables) {
         String url = this.URL;
 
         // go through variables and replace placeholders
@@ -52,7 +52,7 @@ public String URL(Map<String, String> variables) {
      *
      * @return Formatted URL.
      */
-    public String URL() {
-        return URL(null);
+    public String formatUrl() {
+        return formatUrl(null);
     }
 }
diff --git a/src/main/java/com/twitter/clientlib/api/ApiCommon.java b/src/main/java/com/twitter/clientlib/api/ApiCommon.java
index 8a1425d..74a8f42 100644
--- a/src/main/java/com/twitter/clientlib/api/ApiCommon.java
+++ b/src/main/java/com/twitter/clientlib/api/ApiCommon.java
@@ -44,7 +44,10 @@ protected String[] reduceAuthNames(String[] localVarAuthNames) {
 
   public boolean handleRateLimit(ApiException e, Integer retries) throws ApiException {
     boolean retryCall = false;
-    if (e.getCode() == 429 && retries > 0) {
+    boolean isRateLimitExceeded = (e.getCode() == 429);
+    boolean hasRetriesLeft = (retries > 0);
+
+    if (isRateLimitExceeded && hasRetriesLeft) {
       long timeToWait = getTimeToWait(e);
       try {
         Thread.sleep(timeToWait);
@@ -63,7 +66,7 @@ long getTimeToWait(ApiException e) {
       List<String> xRateLimitReset = e.getResponseHeaders().get("x-rate-limit-reset");
       if (xRateLimitReset != null && xRateLimitReset.get(0) != null) {
         timeToWait = Long.parseLong(
-            xRateLimitReset.get(0)) * 1000 - Calendar.getInstance().getTimeInMillis();
+                xRateLimitReset.get(0)) * 1000 - Calendar.getInstance().getTimeInMillis();
       }
     }
     return timeToWait;
@@ -72,13 +75,15 @@ long getTimeToWait(ApiException e) {
   boolean isRateLimitRemaining(ApiException e) {
     List<String> xRateLimitRemaining = e.getResponseHeaders().get("x-rate-limit-remaining");
     return xRateLimitRemaining != null && xRateLimitRemaining.get(0) != null
-        && Long.parseLong(xRateLimitRemaining.get(0)) == 0;
+            && Long.parseLong(xRateLimitRemaining.get(0)) == 0;
   }
 
   Set<String> getFields(String fieldName, boolean isExclude, Set<String> fieldValues, Set<String> allFieldsValues) {
     Set<String> result = fieldValues;
-    if(isExclude && SDKConfig.isFieldAllowlisted(fieldName) && allFieldsValues != null) {
-      result = allFieldsValues.stream().filter(e -> !(fieldValues != null && fieldValues.contains(e))).collect(Collectors.toSet());
+    if (isExclude && SDKConfig.isFieldAllowlisted(fieldName)) {
+      if (allFieldsValues != null) {
+        result = allFieldsValues.stream().filter(e -> !(fieldValues != null && fieldValues.contains(e))).collect(Collectors.toSet());
+      }
     }
     return result;
   }
diff --git a/src/main/java/com/twitter/clientlib/api/BookmarksApi.java b/src/main/java/com/twitter/clientlib/api/BookmarksApi.java
index 0c0d665..357ce94 100644
--- a/src/main/java/com/twitter/clientlib/api/BookmarksApi.java
+++ b/src/main/java/com/twitter/clientlib/api/BookmarksApi.java
@@ -72,14 +72,31 @@ private okhttp3.Call getUsersIdBookmarksCall(String id, Integer maxResults, Stri
         Map<String, String> localVarCookieParams = new HashMap<String, String>();
         Map<String, Object> localVarFormParams = new HashMap<String, Object>();
 
-        if (maxResults != null) {
-            localVarQueryParams.addAll(localVarApiClient.parameterToPair("max_results", maxResults));
+        getLocalVarQueryParams(maxResults, paginationToken, localVarQueryParams);
+
+        getLocalVarCollectionQueryParams(tweetFields, expansions, mediaFields, pollFields, userFields, placeFields, localVarCollectionQueryParams);
+
+        final String[] localVarAccepts = {
+            "application/json", "application/problem+json"
+        };
+        final String localVarAccept = localVarApiClient.selectHeaderAccept(localVarAccepts);
+        if (localVarAccept != null) {
+            localVarHeaderParams.put("Accept", localVarAccept);
         }
 
-        if (paginationToken != null) {
-            localVarQueryParams.addAll(localVarApiClient.parameterToPair("pagination_token", paginationToken));
+        final String[] localVarContentTypes = {
+            
+        };
+        final String localVarContentType = localVarApiClient.selectHeaderContentType(localVarContentTypes);
+        if (localVarContentType != null) {
+            localVarHeaderParams.put("Content-Type", localVarContentType);
         }
 
+        String[] localVarAuthNames = new String[] { "OAuth2UserToken" };
+        return localVarApiClient.buildCall(localVarPath, "GET", localVarQueryParams, localVarCollectionQueryParams, localVarPostBody, localVarHeaderParams, localVarCookieParams, localVarFormParams, reduceAuthNames(localVarAuthNames), _callback);
+    }
+
+    private void getLocalVarCollectionQueryParams(Set<String> tweetFields, Set<String> expansions, Set<String> mediaFields, Set<String> pollFields, Set<String> userFields, Set<String> placeFields, List<Pair> localVarCollectionQueryParams) {
         if (tweetFields != null) {
             localVarCollectionQueryParams.addAll(localVarApiClient.parameterToPairs("csv", "tweet.fields", tweetFields));
         }
@@ -103,25 +120,16 @@ private okhttp3.Call getUsersIdBookmarksCall(String id, Integer maxResults, Stri
         if (placeFields != null) {
             localVarCollectionQueryParams.addAll(localVarApiClient.parameterToPairs("csv", "place.fields", placeFields));
         }
+    }
 
-        final String[] localVarAccepts = {
-            "application/json", "application/problem+json"
-        };
-        final String localVarAccept = localVarApiClient.selectHeaderAccept(localVarAccepts);
-        if (localVarAccept != null) {
-            localVarHeaderParams.put("Accept", localVarAccept);
+    private void getLocalVarQueryParams(Integer maxResults, String paginationToken, List<Pair> localVarQueryParams) {
+        if (maxResults != null) {
+            localVarQueryParams.addAll(localVarApiClient.parameterToPair("max_results", maxResults));
         }
 
-        final String[] localVarContentTypes = {
-            
-        };
-        final String localVarContentType = localVarApiClient.selectHeaderContentType(localVarContentTypes);
-        if (localVarContentType != null) {
-            localVarHeaderParams.put("Content-Type", localVarContentType);
+        if (paginationToken != null) {
+            localVarQueryParams.addAll(localVarApiClient.parameterToPair("pagination_token", paginationToken));
         }
-
-        String[] localVarAuthNames = new String[] { "OAuth2UserToken" };
-        return localVarApiClient.buildCall(localVarPath, "GET", localVarQueryParams, localVarCollectionQueryParams, localVarPostBody, localVarHeaderParams, localVarCookieParams, localVarFormParams, reduceAuthNames(localVarAuthNames), _callback);
     }
 
     @SuppressWarnings("rawtypes")
diff --git a/src/main/java/com/twitter/clientlib/api/ComplianceApi.java b/src/main/java/com/twitter/clientlib/api/ComplianceApi.java
index f199ab0..6a88fe5 100644
--- a/src/main/java/com/twitter/clientlib/api/ComplianceApi.java
+++ b/src/main/java/com/twitter/clientlib/api/ComplianceApi.java
@@ -288,16 +288,7 @@ private okhttp3.Call getBatchComplianceJobValidateBeforeCall(String id, Set<Stri
     }
 
 
-    private ApiResponse<Get2ComplianceJobsIdResponse> getBatchComplianceJobWithHttpInfo(String id, Set<String> complianceJobFields) throws ApiException {
-        okhttp3.Call localVarCall = getBatchComplianceJobValidateBeforeCall(id, complianceJobFields, null);
-        try {
-            Type localVarReturnType = new TypeToken<Get2ComplianceJobsIdResponse>(){}.getType();
-            return localVarApiClient.execute(localVarCall, localVarReturnType);
-        } catch (ApiException e) {
-            e.setErrorObject(localVarApiClient.getJSON().getGson().fromJson(e.getResponseBody(), new TypeToken<com.twitter.clientlib.model.ProblemOrError>(){}.getType()));
-            throw e;
-        }
-    }
+
 
     private okhttp3.Call getBatchComplianceJobAsync(String id, Set<String> complianceJobFields, final ApiCallback<Get2ComplianceJobsIdResponse> _callback) throws ApiException {
 
@@ -413,6 +404,17 @@ public ApiResponse<Get2ComplianceJobsIdResponse> executeWithHttpInfo() throws Ap
         public okhttp3.Call executeAsync(final ApiCallback<Get2ComplianceJobsIdResponse> _callback) throws ApiException {
             return getBatchComplianceJobAsync(id, complianceJobFields, _callback);
         }
+
+        private ApiResponse<Get2ComplianceJobsIdResponse> getBatchComplianceJobWithHttpInfo(String id, Set<String> complianceJobFields) throws ApiException {
+            okhttp3.Call localVarCall = getBatchComplianceJobValidateBeforeCall(id, complianceJobFields, null);
+            try {
+                Type localVarReturnType = new TypeToken<Get2ComplianceJobsIdResponse>(){}.getType();
+                return localVarApiClient.execute(localVarCall, localVarReturnType);
+            } catch (ApiException e) {
+                e.setErrorObject(localVarApiClient.getJSON().getGson().fromJson(e.getResponseBody(), new TypeToken<com.twitter.clientlib.model.ProblemOrError>(){}.getType()));
+                throw e;
+            }
+        }
     }
 
     /**
diff --git a/src/main/java/com/twitter/clientlib/model/Get2SpacesSearchResponse.java b/src/main/java/com/twitter/clientlib/model/Get2SpacesSearchResponse.java
index 6023d23..90d9132 100644
--- a/src/main/java/com/twitter/clientlib/model/Get2SpacesSearchResponse.java
+++ b/src/main/java/com/twitter/clientlib/model/Get2SpacesSearchResponse.java
@@ -23,39 +23,24 @@
 package com.twitter.clientlib.model;
 
 import java.util.Objects;
-import java.util.Arrays;
+
 import com.google.gson.TypeAdapter;
-import com.google.gson.annotations.JsonAdapter;
 import com.google.gson.annotations.SerializedName;
 import com.google.gson.stream.JsonReader;
 import com.google.gson.stream.JsonWriter;
-import com.twitter.clientlib.model.Expansions;
-import com.twitter.clientlib.model.Get2ComplianceJobsResponseMeta;
-import com.twitter.clientlib.model.Problem;
-import com.twitter.clientlib.model.Space;
-import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import java.io.IOException;
 import java.util.ArrayList;
 import java.util.List;
 
 import com.google.gson.Gson;
-import com.google.gson.GsonBuilder;
 import com.google.gson.JsonArray;
-import com.google.gson.JsonDeserializationContext;
-import com.google.gson.JsonDeserializer;
 import com.google.gson.JsonElement;
 import com.google.gson.JsonObject;
-import com.google.gson.JsonParseException;
 import com.google.gson.TypeAdapterFactory;
 import com.google.gson.reflect.TypeToken;
 
-import java.lang.reflect.Type;
-import java.util.HashMap;
 import java.util.HashSet;
-import java.util.Map;
-import java.util.Map.Entry;
-import java.util.Set;
 
 import com.twitter.clientlib.JSON;
 
@@ -65,7 +50,8 @@
 @javax.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen")
 public class Get2SpacesSearchResponse {
   public static final String SERIALIZED_NAME_DATA = "data";
-  @SerializedName(SERIALIZED_NAME_DATA)
+    private final StringOperation stringOperation = new StringOperation(this);
+    @SerializedName(SERIALIZED_NAME_DATA)
   private List<Space> data = null;
 
   public static final String SERIALIZED_NAME_ERRORS = "errors";
@@ -194,34 +180,17 @@ public void setMeta(Get2ComplianceJobsResponseMeta meta) {
 
   @Override
   public boolean equals(Object o) {
-    if (this == o) {
-      return true;
-    }
-    if (o == null || getClass() != o.getClass()) {
-      return false;
-    }
-    Get2SpacesSearchResponse get2SpacesSearchResponse = (Get2SpacesSearchResponse) o;
-    return Objects.equals(this.data, get2SpacesSearchResponse.data) &&
-        Objects.equals(this.errors, get2SpacesSearchResponse.errors) &&
-        Objects.equals(this.includes, get2SpacesSearchResponse.includes) &&
-        Objects.equals(this.meta, get2SpacesSearchResponse.meta);
+      return stringOperation.equals(o);
   }
 
   @Override
   public int hashCode() {
-    return Objects.hash(data, errors, includes, meta);
+      return stringOperation.hashCode();
   }
 
   @Override
   public String toString() {
-    StringBuilder sb = new StringBuilder();
-    sb.append("class Get2SpacesSearchResponse {\n");
-    sb.append("    data: ").append(toIndentedString(data)).append("\n");
-    sb.append("    errors: ").append(toIndentedString(errors)).append("\n");
-    sb.append("    includes: ").append(toIndentedString(includes)).append("\n");
-    sb.append("    meta: ").append(toIndentedString(meta)).append("\n");
-    sb.append("}");
-    return sb.toString();
+      return stringOperation.toString();
   }
 
   /**
@@ -229,10 +198,7 @@ public String toString() {
    * (except the first line).
    */
   private String toIndentedString(Object o) {
-    if (o == null) {
-      return "null";
-    }
-    return o.toString().replace("\n", "\n    ");
+      return stringOperation.toIndentedString(o);
   }
 
 
@@ -346,7 +312,67 @@ public static Get2SpacesSearchResponse fromJson(String jsonString) throws IOExce
   * @return JSON string
   */
   public String toJson() {
-    return JSON.getGson().toJson(this);
+      return stringOperation.toJson();
   }
+
+    public static class StringOperation {
+        private final Get2SpacesSearchResponse get2SpacesSearchResponse;
+
+        public StringOperation(Get2SpacesSearchResponse get2SpacesSearchResponse) {
+            this.get2SpacesSearchResponse = get2SpacesSearchResponse;
+        }
+
+        @Override
+        public boolean equals(Object o) {
+            if (get2SpacesSearchResponse == o) {
+                return true;
+            }
+            if (o == null || get2SpacesSearchResponse.getClass() != o.getClass()) {
+                return false;
+            }
+            Get2SpacesSearchResponse get2SpacesSearchResponse = (Get2SpacesSearchResponse) o;
+            return Objects.equals(get2SpacesSearchResponse.getData(), get2SpacesSearchResponse.data) &&
+                    Objects.equals(get2SpacesSearchResponse.getErrors(), get2SpacesSearchResponse.errors) &&
+                    Objects.equals(get2SpacesSearchResponse.getIncludes(), get2SpacesSearchResponse.includes) &&
+                    Objects.equals(get2SpacesSearchResponse.getMeta(), get2SpacesSearchResponse.meta);
+        }
+
+        @Override
+        public int hashCode() {
+            return Objects.hash(get2SpacesSearchResponse.getData(), get2SpacesSearchResponse.getErrors(), get2SpacesSearchResponse.getIncludes(), get2SpacesSearchResponse.getMeta());
+        }
+
+        @Override
+        public String toString() {
+            StringBuilder sb = new StringBuilder();
+            sb.append("class Get2SpacesSearchResponse {\n");
+            sb.append("    data: ").append(toIndentedString(get2SpacesSearchResponse.getData())).append("\n");
+            sb.append("    errors: ").append(toIndentedString(get2SpacesSearchResponse.getErrors())).append("\n");
+            sb.append("    includes: ").append(toIndentedString(get2SpacesSearchResponse.getIncludes())).append("\n");
+            sb.append("    meta: ").append(toIndentedString(get2SpacesSearchResponse.getMeta())).append("\n");
+            sb.append("}");
+            return sb.toString();
+        }
+
+        /**
+         * Convert the given object to string with each line indented by 4 spaces
+         * (except the first line).
+         */
+        private String toIndentedString(Object o) {
+            if (o == null) {
+                return "null";
+            }
+            return o.toString().replace("\n", "\n    ");
+        }
+
+        /**
+         * Convert an instance of Get2SpacesSearchResponse to an JSON string
+         *
+         * @return JSON string
+         */
+        public String toJson() {
+            return JSON.getGson().toJson(get2SpacesSearchResponse);
+        }
+    }
 }
 
diff --git a/src/test/java/com/twitter/clientlib/integration/ApiTester.java b/src/test/java/com/twitter/clientlib/integration/ApiTester.java
index e931d8a..fce33c3 100644
--- a/src/test/java/com/twitter/clientlib/integration/ApiTester.java
+++ b/src/test/java/com/twitter/clientlib/integration/ApiTester.java
@@ -204,10 +204,5 @@ protected void checkDuplicateRuleProblem(Problem problem, String detail, String
     Assertions.assertEquals(value, duplicateProblem.getValue());
   }
 
-  protected void checkFieldUnauthorizedProblem(Problem problem, String title, String field) {
-    Assertions.assertTrue(problem instanceof FieldUnauthorizedProblem);
-    FieldUnauthorizedProblem fieldUnauthorizedProblem = (FieldUnauthorizedProblem) problem;
-    Assertions.assertTrue(fieldUnauthorizedProblem.getTitle().equals(title));
-    Assertions.assertEquals(field, fieldUnauthorizedProblem.getField());
-  }
+
 }
diff --git a/src/test/java/com/twitter/clientlib/integration/ApiTweetTester.java b/src/test/java/com/twitter/clientlib/integration/ApiTweetTester.java
index a1d330a..9cf8dd1 100644
--- a/src/test/java/com/twitter/clientlib/integration/ApiTweetTester.java
+++ b/src/test/java/com/twitter/clientlib/integration/ApiTweetTester.java
@@ -25,6 +25,7 @@
 import java.util.Arrays;
 import java.util.List;
 
+import org.junit.jupiter.api.Assertions;
 import org.junit.jupiter.api.BeforeAll;
 import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.TestInstance;
@@ -449,6 +450,13 @@ public void usersIdTimelineErrorTest() throws ApiException {
         "Invalid Request", "One or more parameters to your request was invalid.");
   }
 
+  protected void checkFieldUnauthorizedProblem(Problem problem, String title, String field) {
+    Assertions.assertTrue(problem instanceof FieldUnauthorizedProblem);
+    FieldUnauthorizedProblem fieldUnauthorizedProblem = (FieldUnauthorizedProblem) problem;
+    Assertions.assertTrue(fieldUnauthorizedProblem.getTitle().equals(title));
+    Assertions.assertEquals(field, fieldUnauthorizedProblem.getField());
+  }
+
   /* Does not work for now
     Streaming
 */