diff --git a/src/com/android/providers/telephony/RcsProviderEventHelper.java b/src/com/android/providers/telephony/RcsProviderEventHelper.java
index 9d89e28..cf72c3b 100644
--- a/src/com/android/providers/telephony/RcsProviderEventHelper.java
+++ b/src/com/android/providers/telephony/RcsProviderEventHelper.java
@@ -30,9 +30,9 @@
 import static android.provider.Telephony.RcsColumns.RcsThreadEventColumns.SOURCE_PARTICIPANT_ID_COLUMN;
 import static android.provider.Telephony.RcsColumns.RcsThreadEventColumns.TIMESTAMP_COLUMN;
 import static android.provider.Telephony.RcsColumns.TRANSACTION_FAILED;
-import static android.telephony.ims.RcsEventQueryParameters.ALL_EVENTS;
-import static android.telephony.ims.RcsEventQueryParameters.ALL_GROUP_THREAD_EVENTS;
-import static android.telephony.ims.RcsEventQueryParameters.EVENT_QUERY_PARAMETERS_KEY;
+import static android.telephony.ims.RcsEventQueryParams.ALL_EVENTS;
+import static android.telephony.ims.RcsEventQueryParams.ALL_GROUP_THREAD_EVENTS;
+import static android.telephony.ims.RcsEventQueryParams.EVENT_QUERY_PARAMETERS_KEY;
 
 import static android.telephony.ims.RcsQueryContinuationToken.EVENT_QUERY_CONTINUATION_TOKEN_TYPE;
 import static android.telephony.ims.RcsQueryContinuationToken.QUERY_CONTINUATION_TOKEN;
@@ -51,7 +51,7 @@
 import android.database.sqlite.SQLiteOpenHelper;
 import android.net.Uri;
 import android.os.Bundle;
-import android.telephony.ims.RcsEventQueryParameters;
+import android.telephony.ims.RcsEventQueryParams;
 import android.telephony.ims.RcsQueryContinuationToken;
 import android.util.Log;
 
@@ -107,7 +107,7 @@
     private final SQLiteOpenHelper mSqLiteOpenHelper;
 
     Cursor queryEvents(Bundle bundle) {
-        RcsEventQueryParameters queryParameters = null;
+        RcsEventQueryParams queryParameters = null;
         RcsQueryContinuationToken continuationToken = null;
 
         if (bundle != null) {
@@ -122,13 +122,13 @@
 
         // if no query parameters were entered, build an empty query parameters object
         if (queryParameters == null) {
-            queryParameters = new RcsEventQueryParameters.Builder().build();
+            queryParameters = new RcsEventQueryParams.Builder().build();
         }
 
         return performInitialQuery(queryParameters);
     }
 
-    private Cursor performInitialQuery(RcsEventQueryParameters queryParameters) {
+    private Cursor performInitialQuery(RcsEventQueryParams queryParameters) {
         SQLiteDatabase db = mSqLiteOpenHelper.getReadableDatabase();
         StringBuilder rawQuery = new StringBuilder("SELECT * FROM ").append(RCS_UNIFIED_EVENT_VIEW);
 
@@ -150,7 +150,7 @@
         rawQuery.append(" ORDER BY ");
 
         int sortingProperty = queryParameters.getSortingProperty();
-        if (sortingProperty == RcsEventQueryParameters.SORT_BY_TIMESTAMP) {
+        if (sortingProperty == RcsEventQueryParams.SORT_BY_TIMESTAMP) {
             rawQuery.append(TIMESTAMP_COLUMN);
         } else {
             rawQuery.append(EVENT_ID_COLUMN);
diff --git a/src/com/android/providers/telephony/RcsProviderMessageHelper.java b/src/com/android/providers/telephony/RcsProviderMessageHelper.java
index ba89e8c..670c641 100644
--- a/src/com/android/providers/telephony/RcsProviderMessageHelper.java
+++ b/src/com/android/providers/telephony/RcsProviderMessageHelper.java
@@ -51,8 +51,8 @@
 import static android.provider.Telephony.RcsColumns.RcsUnifiedMessageColumns.UNIFIED_INCOMING_MESSAGE_VIEW;
 import static android.provider.Telephony.RcsColumns.RcsUnifiedMessageColumns.UNIFIED_OUTGOING_MESSAGE_VIEW;
 import static android.provider.Telephony.RcsColumns.TRANSACTION_FAILED;
-import static android.telephony.ims.RcsMessageQueryParameters.MESSAGE_QUERY_PARAMETERS_KEY;
-import static android.telephony.ims.RcsMessageQueryParameters.THREAD_ID_NOT_SET;
+import static android.telephony.ims.RcsMessageQueryParams.MESSAGE_QUERY_PARAMETERS_KEY;
+import static android.telephony.ims.RcsMessageQueryParams.THREAD_ID_NOT_SET;
 
 import static android.telephony.ims.RcsQueryContinuationToken.MESSAGE_QUERY_CONTINUATION_TOKEN_TYPE;
 import static android.telephony.ims.RcsQueryContinuationToken.QUERY_CONTINUATION_TOKEN;
@@ -77,7 +77,7 @@
 import android.os.Bundle;
 import android.provider.Telephony.RcsColumns.RcsIncomingMessageColumns;
 import android.provider.Telephony.RcsColumns.RcsMessageDeliveryColumns;
-import android.telephony.ims.RcsMessageQueryParameters;
+import android.telephony.ims.RcsMessageQueryParams;
 import android.telephony.ims.RcsQueryContinuationToken;
 import android.text.TextUtils;
 import android.util.Log;
@@ -320,7 +320,7 @@
     }
 
     Cursor queryMessages(Bundle bundle) {
-        RcsMessageQueryParameters queryParameters = null;
+        RcsMessageQueryParams queryParameters = null;
         RcsQueryContinuationToken continuationToken = null;
 
         if (bundle != null) {
@@ -335,13 +335,13 @@
 
         // if no parameters were entered, build an empty query parameters object
         if (queryParameters == null) {
-            queryParameters = new RcsMessageQueryParameters.Builder().build();
+            queryParameters = new RcsMessageQueryParams.Builder().build();
         }
 
         return performInitialQuery(queryParameters);
     }
 
-    private Cursor performInitialQuery(RcsMessageQueryParameters queryParameters) {
+    private Cursor performInitialQuery(RcsMessageQueryParams queryParameters) {
         SQLiteDatabase db = mSqLiteOpenHelper.getReadableDatabase();
 
         StringBuilder rawQuery = new StringBuilder("SELECT * FROM ").append(UNIFIED_MESSAGE_VIEW);
@@ -387,7 +387,7 @@
         rawQuery.append(" ORDER BY ");
 
         int sortingProperty = queryParameters.getSortingProperty();
-        if (sortingProperty == RcsMessageQueryParameters.SORT_BY_TIMESTAMP) {
+        if (sortingProperty == RcsMessageQueryParams.SORT_BY_TIMESTAMP) {
             rawQuery.append(ORIGINATION_TIMESTAMP_COLUMN);
         } else {
             rawQuery.append(MESSAGE_ID_COLUMN);
diff --git a/src/com/android/providers/telephony/RcsProviderParticipantHelper.java b/src/com/android/providers/telephony/RcsProviderParticipantHelper.java
index dc107a8..065cf81 100644
--- a/src/com/android/providers/telephony/RcsProviderParticipantHelper.java
+++ b/src/com/android/providers/telephony/RcsProviderParticipantHelper.java
@@ -24,7 +24,7 @@
 import static android.provider.Telephony.RcsColumns.RcsParticipantHelpers.RCS_PARTICIPANT_WITH_THREAD_VIEW;
 import static android.provider.Telephony.RcsColumns.RcsThreadColumns.RCS_THREAD_ID_COLUMN;
 import static android.provider.Telephony.RcsColumns.TRANSACTION_FAILED;
-import static android.telephony.ims.RcsParticipantQueryParameters.PARTICIPANT_QUERY_PARAMETERS_KEY;
+import static android.telephony.ims.RcsParticipantQueryParams.PARTICIPANT_QUERY_PARAMETERS_KEY;
 
 import static android.telephony.ims.RcsQueryContinuationToken.PARTICIPANT_QUERY_CONTINUATION_TOKEN_TYPE;
 import static android.telephony.ims.RcsQueryContinuationToken.QUERY_CONTINUATION_TOKEN;
@@ -42,7 +42,7 @@
 import android.database.sqlite.SQLiteOpenHelper;
 import android.net.Uri;
 import android.os.Bundle;
-import android.telephony.ims.RcsParticipantQueryParameters;
+import android.telephony.ims.RcsParticipantQueryParams;
 import android.telephony.ims.RcsQueryContinuationToken;
 import android.text.TextUtils;
 import android.util.Log;
@@ -112,7 +112,7 @@
     }
 
     Cursor queryParticipant(Bundle bundle) {
-        RcsParticipantQueryParameters queryParameters = null;
+        RcsParticipantQueryParams queryParameters = null;
         RcsQueryContinuationToken continuationToken = null;
 
         if (bundle != null) {
@@ -126,13 +126,13 @@
         }
 
         if (queryParameters == null) {
-            queryParameters = new RcsParticipantQueryParameters.Builder().build();
+            queryParameters = new RcsParticipantQueryParams.Builder().build();
         }
 
         return performInitialQuery(queryParameters);
     }
 
-    private Cursor performInitialQuery(RcsParticipantQueryParameters queryParameters) {
+    private Cursor performInitialQuery(RcsParticipantQueryParams queryParameters) {
         SQLiteDatabase db = mSqLiteOpenHelper.getWritableDatabase();
 
         StringBuilder rawQuery = buildInitialRawQuery(queryParameters);
@@ -151,7 +151,7 @@
         return cursor;
     }
 
-    private StringBuilder buildInitialRawQuery(RcsParticipantQueryParameters queryParameters) {
+    private StringBuilder buildInitialRawQuery(RcsParticipantQueryParams queryParameters) {
         StringBuilder rawQuery = new StringBuilder("SELECT * FROM ");
 
         boolean isThreadFiltered = queryParameters.getThreadId() > 0;
@@ -193,9 +193,9 @@
         rawQuery.append(" ORDER BY ");
 
         int sortingProperty = queryParameters.getSortingProperty();
-        if (sortingProperty == RcsParticipantQueryParameters.SORT_BY_ALIAS) {
+        if (sortingProperty == RcsParticipantQueryParams.SORT_BY_ALIAS) {
             rawQuery.append(RCS_ALIAS_COLUMN);
-        } else if (sortingProperty == RcsParticipantQueryParameters.SORT_BY_CANONICAL_ADDRESS) {
+        } else if (sortingProperty == RcsParticipantQueryParams.SORT_BY_CANONICAL_ADDRESS) {
             rawQuery.append(ADDRESS);
         } else {
             rawQuery.append(RCS_PARTICIPANT_ID_COLUMN);
diff --git a/src/com/android/providers/telephony/RcsProviderThreadHelper.java b/src/com/android/providers/telephony/RcsProviderThreadHelper.java
index 9b9947b..a60d1e9 100644
--- a/src/com/android/providers/telephony/RcsProviderThreadHelper.java
+++ b/src/com/android/providers/telephony/RcsProviderThreadHelper.java
@@ -28,7 +28,7 @@
 import static android.provider.Telephony.RcsColumns.TRANSACTION_FAILED;
 import static android.telephony.ims.RcsQueryContinuationToken.QUERY_CONTINUATION_TOKEN;
 import static android.telephony.ims.RcsQueryContinuationToken.THREAD_QUERY_CONTINUATION_TOKEN_TYPE;
-import static android.telephony.ims.RcsThreadQueryParameters.THREAD_QUERY_PARAMETERS_KEY;
+import static android.telephony.ims.RcsThreadQueryParams.THREAD_QUERY_PARAMETERS_KEY;
 
 import static com.android.providers.telephony.RcsProvider.RCS_1_TO_1_THREAD_TABLE;
 import static com.android.providers.telephony.RcsProvider.RCS_GROUP_THREAD_TABLE;
@@ -47,7 +47,7 @@
 import android.os.Bundle;
 import android.provider.BaseColumns;
 import android.telephony.ims.RcsQueryContinuationToken;
-import android.telephony.ims.RcsThreadQueryParameters;
+import android.telephony.ims.RcsThreadQueryParams;
 import android.util.Log;
 
 import com.android.internal.annotations.VisibleForTesting;
@@ -224,7 +224,7 @@
     }
 
     Cursor queryUnifiedThread(Bundle bundle) {
-        RcsThreadQueryParameters queryParameters = null;
+        RcsThreadQueryParams queryParameters = null;
         RcsQueryContinuationToken continuationToken = null;
         if (bundle != null) {
             queryParameters = bundle.getParcelable(
@@ -238,31 +238,31 @@
         }
 
         if (queryParameters == null) {
-            queryParameters = new RcsThreadQueryParameters.Builder().build();
+            queryParameters = new RcsThreadQueryParams.Builder().build();
         }
 
         return performInitialQuery(queryParameters);
     }
 
-    private Cursor performInitialQuery(RcsThreadQueryParameters queryParameters) {
+    private Cursor performInitialQuery(RcsThreadQueryParams queryParameters) {
         if (queryParameters == null) {
             // return everything for test purposes
-            queryParameters = new RcsThreadQueryParameters.Builder().build();
+            queryParameters = new RcsThreadQueryParams.Builder().build();
         }
 
         SQLiteDatabase db = mSqLiteOpenHelper.getReadableDatabase();
         StringBuilder rawQuery = new StringBuilder("SELECT * FROM ").append(
                 UNIFIED_RCS_THREAD_VIEW);
 
-        if (queryParameters.getThreadType() == RcsThreadQueryParameters.THREAD_TYPE_1_TO_1) {
+        if (queryParameters.getThreadType() == RcsThreadQueryParams.THREAD_TYPE_1_TO_1) {
             rawQuery.append(" WHERE ").append(THREAD_TYPE_COLUMN).append("=0");
-        } else if (queryParameters.getThreadType() == RcsThreadQueryParameters.THREAD_TYPE_GROUP) {
+        } else if (queryParameters.getThreadType() == RcsThreadQueryParams.THREAD_TYPE_GROUP) {
             rawQuery.append(" WHERE ").append(THREAD_TYPE_COLUMN).append("=1");
         }
 
         rawQuery.append(" ORDER BY ");
 
-        if (queryParameters.getSortingProperty() == RcsThreadQueryParameters.SORT_BY_TIMESTAMP) {
+        if (queryParameters.getSortingProperty() == RcsThreadQueryParams.SORT_BY_TIMESTAMP) {
             rawQuery.append(ORIGINATION_TIMESTAMP_COLUMN);
         } else {
             rawQuery.append(RCS_THREAD_ID_COLUMN);
diff --git a/tests/src/com/android/providers/telephony/RcsProviderQueryTest.java b/tests/src/com/android/providers/telephony/RcsProviderQueryTest.java
index e18ebd5..e1ae982 100644
--- a/tests/src/com/android/providers/telephony/RcsProviderQueryTest.java
+++ b/tests/src/com/android/providers/telephony/RcsProviderQueryTest.java
@@ -32,12 +32,12 @@
 import static android.provider.Telephony.RcsColumns.RcsThreadEventColumns.NEW_NAME_COLUMN;
 import static android.provider.Telephony.RcsColumns.RcsThreadEventColumns.SOURCE_PARTICIPANT_ID_COLUMN;
 import static android.provider.Telephony.RcsColumns.RcsUnifiedThreadColumns.THREAD_TYPE_COLUMN;
-import static android.telephony.ims.RcsEventQueryParameters.EVENT_QUERY_PARAMETERS_KEY;
-import static android.telephony.ims.RcsEventQueryParameters.GROUP_THREAD_NAME_CHANGED_EVENT;
-import static android.telephony.ims.RcsMessageQueryParameters.MESSAGE_QUERY_PARAMETERS_KEY;
-import static android.telephony.ims.RcsParticipantQueryParameters.PARTICIPANT_QUERY_PARAMETERS_KEY;
+import static android.telephony.ims.RcsEventQueryParams.EVENT_QUERY_PARAMETERS_KEY;
+import static android.telephony.ims.RcsEventQueryParams.GROUP_THREAD_NAME_CHANGED_EVENT;
+import static android.telephony.ims.RcsMessageQueryParams.MESSAGE_QUERY_PARAMETERS_KEY;
+import static android.telephony.ims.RcsParticipantQueryParams.PARTICIPANT_QUERY_PARAMETERS_KEY;
 import static android.telephony.ims.RcsQueryContinuationToken.QUERY_CONTINUATION_TOKEN;
-import static android.telephony.ims.RcsThreadQueryParameters.THREAD_QUERY_PARAMETERS_KEY;
+import static android.telephony.ims.RcsThreadQueryParams.THREAD_QUERY_PARAMETERS_KEY;
 
 import static com.google.common.truth.Truth.assertThat;
 
@@ -46,12 +46,12 @@
 import android.net.Uri;
 import android.os.Bundle;
 import android.support.test.runner.AndroidJUnit4;
-import android.telephony.ims.RcsEventQueryParameters;
+import android.telephony.ims.RcsEventQueryParams;
 import android.telephony.ims.RcsGroupThread;
-import android.telephony.ims.RcsMessageQueryParameters;
-import android.telephony.ims.RcsParticipantQueryParameters;
+import android.telephony.ims.RcsMessageQueryParams;
+import android.telephony.ims.RcsParticipantQueryParams;
 import android.telephony.ims.RcsQueryContinuationToken;
-import android.telephony.ims.RcsThreadQueryParameters;
+import android.telephony.ims.RcsThreadQueryParams;
 import android.test.mock.MockContentResolver;
 
 import com.android.providers.telephony.RcsProviderTestable.MockContextWithProvider;
@@ -156,7 +156,7 @@
 
     @Test
     public void testCanQueryUnifiedThreads() {
-        RcsThreadQueryParameters queryParameters = new RcsThreadQueryParameters.Builder().build();
+        RcsThreadQueryParams queryParameters = new RcsThreadQueryParams.Builder().build();
         Bundle bundle = new Bundle();
         bundle.putParcelable(THREAD_QUERY_PARAMETERS_KEY, queryParameters);
 
@@ -188,9 +188,9 @@
 
     @Test
     public void testCanQueryUnifiedThreadsWithLimitAndSorting() {
-        RcsThreadQueryParameters queryParameters = new RcsThreadQueryParameters.Builder()
-                .setThreadType(RcsThreadQueryParameters.THREAD_TYPE_1_TO_1).setResultLimit(1)
-                .setSortProperty(RcsThreadQueryParameters.SORT_BY_TIMESTAMP).setSortDirection(true)
+        RcsThreadQueryParams queryParameters = new RcsThreadQueryParams.Builder()
+                .setThreadType(RcsThreadQueryParams.THREAD_TYPE_1_TO_1).setResultLimit(1)
+                .setSortProperty(RcsThreadQueryParams.SORT_BY_TIMESTAMP).setSortDirection(true)
                 .build();
         Bundle bundle = new Bundle();
         bundle.putParcelable(THREAD_QUERY_PARAMETERS_KEY, queryParameters);
@@ -209,8 +209,8 @@
     @Test
     public void testCanContinueThreadQuery() {
         // Limit results to 1.
-        RcsThreadQueryParameters queryParameters =
-                new RcsThreadQueryParameters.Builder().setResultLimit(1).build();
+        RcsThreadQueryParams queryParameters =
+                new RcsThreadQueryParams.Builder().setResultLimit(1).build();
         Bundle bundle = new Bundle();
         bundle.putParcelable(THREAD_QUERY_PARAMETERS_KEY, queryParameters);
 
@@ -284,7 +284,7 @@
 
     @Test
     public void testQueryParticipant() {
-        RcsParticipantQueryParameters queryParameters = new RcsParticipantQueryParameters.Builder()
+        RcsParticipantQueryParams queryParameters = new RcsParticipantQueryParams.Builder()
                 .build();
 
         Bundle bundle = new Bundle();
@@ -313,9 +313,9 @@
         Uri participantUri = Uri.parse("content://rcs/participant");
 
         // Perform the initial query
-        RcsParticipantQueryParameters queryParameters =
-                new RcsParticipantQueryParameters.Builder().setAliasLike("%ali%").setSortProperty(
-                        RcsParticipantQueryParameters.SORT_BY_ALIAS).setSortDirection(true)
+        RcsParticipantQueryParams queryParameters =
+                new RcsParticipantQueryParams.Builder().setAliasLike("%ali%").setSortProperty(
+                        RcsParticipantQueryParams.SORT_BY_ALIAS).setSortDirection(true)
                         .setResultLimit(1).build();
 
         Bundle bundle = new Bundle();
@@ -362,7 +362,7 @@
     @Test
     @Ignore // TODO: fix and un-ignore
     public void testQueryEvents() {
-        RcsEventQueryParameters queryParameters = new RcsEventQueryParameters.Builder().build();
+        RcsEventQueryParams queryParameters = new RcsEventQueryParams.Builder().build();
 
         Bundle bundle = new Bundle();
         bundle.putParcelable(EVENT_QUERY_PARAMETERS_KEY, queryParameters);
@@ -389,8 +389,8 @@
     @Test
     @Ignore // TODO: fix and un-ignore
     public void testQueryEventsWithContinuation() {
-        RcsEventQueryParameters queryParameters =
-                new RcsEventQueryParameters.Builder().setResultLimit(1).setSortDirection(true)
+        RcsEventQueryParams queryParameters =
+                new RcsEventQueryParams.Builder().setResultLimit(1).setSortDirection(true)
                         .build();
 
         Bundle bundle = new Bundle();
@@ -410,8 +410,8 @@
     @Test
     @Ignore // TODO: fix and un-ignore
     public void testQueryEventsWithTypeLimitation() {
-        RcsEventQueryParameters queryParameters =
-                new RcsEventQueryParameters.Builder().setEventType(
+        RcsEventQueryParams queryParameters =
+                new RcsEventQueryParams.Builder().setEventType(
                         GROUP_THREAD_NAME_CHANGED_EVENT).build();
         Bundle bundle = new Bundle();
         bundle.putParcelable(EVENT_QUERY_PARAMETERS_KEY, queryParameters);
@@ -430,7 +430,7 @@
     @Test
     @Ignore // TODO: fix and un-ignore
     public void testQueryMessages() {
-        RcsMessageQueryParameters queryParameters = new RcsMessageQueryParameters.Builder().build();
+        RcsMessageQueryParams queryParameters = new RcsMessageQueryParams.Builder().build();
         Bundle bundle = new Bundle();
         bundle.putParcelable(MESSAGE_QUERY_PARAMETERS_KEY, queryParameters);
 
@@ -454,9 +454,9 @@
     @Test
     @Ignore // TODO: fix and un-ignore
     public void testQueryMessagesWithContinuation() {
-        RcsMessageQueryParameters queryParameters =
-                new RcsMessageQueryParameters.Builder().setMessageLike("%o%message").setResultLimit(
-                        1).setSortProperty(RcsMessageQueryParameters.SORT_BY_TIMESTAMP)
+        RcsMessageQueryParams queryParameters =
+                new RcsMessageQueryParams.Builder().setMessageLike("%o%message").setResultLimit(
+                        1).setSortProperty(RcsMessageQueryParams.SORT_BY_TIMESTAMP)
                         .setSortDirection(true).build();
         Bundle bundle = new Bundle();
         bundle.putParcelable(MESSAGE_QUERY_PARAMETERS_KEY, queryParameters);
@@ -496,8 +496,8 @@
     @Test
     @Ignore // TODO: fix and un-ignore
     public void testQueryMessagesWithThreadFilter() {
-        RcsMessageQueryParameters queryParameters =
-                new RcsMessageQueryParameters.Builder().setThread(new RcsGroupThread(3))
+        RcsMessageQueryParams queryParameters =
+                new RcsMessageQueryParams.Builder().setThread(new RcsGroupThread(3))
                         .build();
         Bundle bundle = new Bundle();
         bundle.putParcelable(MESSAGE_QUERY_PARAMETERS_KEY, queryParameters);
