diff --git a/nearby/framework/java/android/nearby/BroadcastRequest.java b/nearby/framework/java/android/nearby/BroadcastRequest.java
index 71d51d2..3273ea1 100644
--- a/nearby/framework/java/android/nearby/BroadcastRequest.java
+++ b/nearby/framework/java/android/nearby/BroadcastRequest.java
@@ -19,10 +19,8 @@
 import android.annotation.IntDef;
 import android.annotation.IntRange;
 import android.annotation.NonNull;
-import android.annotation.SuppressLint;
 import android.annotation.SystemApi;
 import android.os.Parcel;
-import android.os.Parcelable;
 
 import java.lang.annotation.Retention;
 import java.lang.annotation.RetentionPolicy;
@@ -35,8 +33,7 @@
  * @hide
  */
 @SystemApi
-@SuppressLint("ParcelNotFinal")  // BroadcastRequest constructor is not public
-public abstract class BroadcastRequest implements Parcelable {
+public abstract class BroadcastRequest {
 
     /** An unknown nearby broadcast request type. */
     public static final int BROADCAST_TYPE_UNKNOWN = -1;
@@ -91,25 +88,22 @@
         int MDNS = 2;
     }
 
-    public static final @NonNull Creator<BroadcastRequest> CREATOR =
-            new Creator<BroadcastRequest>() {
-                @Override
-                public BroadcastRequest createFromParcel(Parcel in) {
-                    int type = in.readInt();
-                    switch (type) {
-                        case BroadcastRequest.BROADCAST_TYPE_NEARBY_PRESENCE:
-                            return PresenceBroadcastRequest.createFromParcelBody(in);
-                        default:
-                            throw new IllegalStateException(
-                                    "Unexpected broadcast type (value " + type + ") in parcel.");
-                    }
-                }
-
-                @Override
-                public BroadcastRequest[] newArray(int size) {
-                    return new BroadcastRequest[size];
-                }
-            };
+    /**
+     * Creates a {@link BroadcastRequest} from parcel.
+     *
+     * @hide
+     */
+    @NonNull
+    public static BroadcastRequest createFromParcel(Parcel in) {
+        int type = in.readInt();
+        switch (type) {
+            case BroadcastRequest.BROADCAST_TYPE_NEARBY_PRESENCE:
+                return PresenceBroadcastRequest.createFromParcelBody(in);
+            default:
+                throw new IllegalStateException(
+                        "Unexpected broadcast type (value " + type + ") in parcel.");
+        }
+    }
 
     private final @BroadcastType int mType;
     private final @BroadcastVersion int mVersion;
@@ -163,16 +157,15 @@
         return mMediums;
     }
 
-    @Override
+    /**
+     * Writes the BroadcastRequest to the parcel.
+     *
+     * @hide
+     */
     public void writeToParcel(@NonNull Parcel dest, int flags) {
         dest.writeInt(mType);
         dest.writeInt(mVersion);
         dest.writeInt(mTxPower);
         dest.writeList(mMediums);
     }
-
-    @Override
-    public int describeContents() {
-        return 0;
-    }
 }
diff --git a/nearby/framework/java/android/nearby/BroadcastRequest.aidl b/nearby/framework/java/android/nearby/BroadcastRequestParcelable.aidl
similarity index 93%
rename from nearby/framework/java/android/nearby/BroadcastRequest.aidl
rename to nearby/framework/java/android/nearby/BroadcastRequestParcelable.aidl
index 53f7d42..818f8d5 100644
--- a/nearby/framework/java/android/nearby/BroadcastRequest.aidl
+++ b/nearby/framework/java/android/nearby/BroadcastRequestParcelable.aidl
@@ -16,4 +16,4 @@
 
 package android.nearby;
 
-parcelable BroadcastRequest;
+parcelable BroadcastRequestParcelable;
diff --git a/nearby/framework/java/android/nearby/BroadcastRequestParcelable.java b/nearby/framework/java/android/nearby/BroadcastRequestParcelable.java
new file mode 100644
index 0000000..4a2ff6d
--- /dev/null
+++ b/nearby/framework/java/android/nearby/BroadcastRequestParcelable.java
@@ -0,0 +1,64 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.nearby;
+
+import android.annotation.NonNull;
+import android.os.Parcel;
+import android.os.Parcelable;
+
+/**
+ * A wrapper of {@link BroadcastRequest} that is parcelable.
+ *
+ * @hide
+ */
+public class BroadcastRequestParcelable implements Parcelable {
+    private final BroadcastRequest mBroadcastRequest;
+
+    public static final Creator<BroadcastRequestParcelable> CREATOR =
+            new Creator<BroadcastRequestParcelable>() {
+                @Override
+                public BroadcastRequestParcelable createFromParcel(Parcel in) {
+                    return new BroadcastRequestParcelable(BroadcastRequest.createFromParcel(in));
+                }
+
+                @Override
+                public BroadcastRequestParcelable[] newArray(int size) {
+                    return new BroadcastRequestParcelable[size];
+                }
+            };
+
+    BroadcastRequestParcelable(BroadcastRequest broadcastRequest) {
+        mBroadcastRequest = broadcastRequest;
+    }
+
+    /**
+     * Returns the broadcastRequest.
+     */
+    public BroadcastRequest getBroadcastRequest() {
+        return mBroadcastRequest;
+    }
+
+    @Override
+    public int describeContents() {
+        return 0;
+    }
+
+    @Override
+    public void writeToParcel(@NonNull Parcel dest, int flags) {
+        mBroadcastRequest.writeToParcel(dest, flags);
+    }
+}
diff --git a/nearby/framework/java/android/nearby/INearbyManager.aidl b/nearby/framework/java/android/nearby/INearbyManager.aidl
index 91dd485..e5c4102 100644
--- a/nearby/framework/java/android/nearby/INearbyManager.aidl
+++ b/nearby/framework/java/android/nearby/INearbyManager.aidl
@@ -18,7 +18,7 @@
 
 import android.nearby.IBroadcastListener;
 import android.nearby.IScanListener;
-import android.nearby.BroadcastRequest;
+import android.nearby.BroadcastRequestParcelable;
 import android.nearby.ScanRequest;
 
 /**
@@ -32,7 +32,8 @@
 
     void unregisterScanListener(in IScanListener listener);
 
-    void startBroadcast(in BroadcastRequest broadcastRequest, in IBroadcastListener callback);
+    void startBroadcast(in BroadcastRequestParcelable broadcastRequest,
+            in IBroadcastListener callback);
 
     void stopBroadcast(in IBroadcastListener callback);
 }
\ No newline at end of file
diff --git a/nearby/framework/java/android/nearby/NearbyManager.java b/nearby/framework/java/android/nearby/NearbyManager.java
index eb34e00..1f6edd3 100644
--- a/nearby/framework/java/android/nearby/NearbyManager.java
+++ b/nearby/framework/java/android/nearby/NearbyManager.java
@@ -157,7 +157,7 @@
      *
      * @param broadcastRequest Request for the nearby broadcast.
      * @param executor Executor for running the callback.
-     * @param callback Callback for notifying the client..
+     * @param callback Callback for notifying the client.
      */
     public void startBroadcast(@NonNull BroadcastRequest broadcastRequest,
             @CallbackExecutor @NonNull Executor executor, @NonNull BroadcastCallback callback) {
@@ -172,7 +172,8 @@
                     Preconditions.checkState(transport.isRegistered());
                     transport.setExecutor(executor);
                 }
-                mService.startBroadcast(broadcastRequest, transport);
+                mService.startBroadcast(new BroadcastRequestParcelable(broadcastRequest),
+                        transport);
                 sBroadcastListeners.put(callback, new WeakReference<>(transport));
             }
         } catch (RemoteException e) {
diff --git a/nearby/framework/java/android/nearby/PresenceCredential.java b/nearby/framework/java/android/nearby/PresenceCredential.java
index fae3603..7ad6ae9 100644
--- a/nearby/framework/java/android/nearby/PresenceCredential.java
+++ b/nearby/framework/java/android/nearby/PresenceCredential.java
@@ -18,10 +18,8 @@
 
 import android.annotation.IntDef;
 import android.annotation.NonNull;
-import android.annotation.SuppressLint;
 import android.annotation.SystemApi;
 import android.os.Parcel;
-import android.os.Parcelable;
 
 import java.lang.annotation.Retention;
 import java.lang.annotation.RetentionPolicy;
@@ -34,8 +32,7 @@
  * @hide
  */
 @SystemApi
-@SuppressLint("ParcelNotFinal")  // PresenceCredential constructor is not public
-public abstract class PresenceCredential implements Parcelable {
+public abstract class PresenceCredential {
     /**
      * Private credential type.
      */
@@ -108,29 +105,6 @@
                 CredentialElement.class);
     }
 
-
-    @NonNull
-    public static final Creator<PresenceCredential> CREATOR = new Creator<PresenceCredential>() {
-        @Override
-        public PresenceCredential createFromParcel(Parcel in) {
-            int type = in.readInt();
-            switch (type) {
-                case CREDENTIAL_TYPE_PRIVATE:
-                    return PrivateCredential.createFromParcelBody(in);
-                case CREDENTIAL_TYPE_PUBLIC:
-                    return PublicCredential.createFromParcelBody(in);
-                default:
-                    throw new IllegalStateException(
-                            "Unexpected credential type (value " + type + ") in parcel.");
-            }
-        }
-
-        @Override
-        public PresenceCredential[] newArray(int size) {
-            return new PresenceCredential[size];
-        }
-    };
-
     /**
      * Returns the type of the credential.
      */
@@ -169,12 +143,11 @@
         return mCredentialElements;
     }
 
-    @Override
-    public int describeContents() {
-        return 0;
-    }
-
-    @Override
+    /**
+     * Writes the presence credential to the parcel.
+     *
+     * @hide
+     */
     public void writeToParcel(@NonNull Parcel dest, int flags) {
         dest.writeInt(mType);
         dest.writeInt(mIdentityType);
diff --git a/nearby/framework/java/android/nearby/PrivateCredential.java b/nearby/framework/java/android/nearby/PrivateCredential.java
index 8db49fa..d915cc6 100644
--- a/nearby/framework/java/android/nearby/PrivateCredential.java
+++ b/nearby/framework/java/android/nearby/PrivateCredential.java
@@ -107,18 +107,26 @@
         private final List<CredentialElement> mCredentialElements;
 
         private @IdentityType int mIdentityType;
-        private byte[] mSecretId;
-        private byte[] mAuthenticityKey;
-        private byte[] mMetadataEncryptionKey;
-        private String mDeviceName;
+        private final byte[] mSecretId;
+        private final byte[] mAuthenticityKey;
+        private final byte[] mMetadataEncryptionKey;
+        private final String mDeviceName;
 
-        public Builder(@NonNull byte[] secretId, @NonNull byte[] authenticityKey) {
+        public Builder(@NonNull byte[] secretId, @NonNull byte[] authenticityKey,
+                @NonNull byte[] metadataEncryptionKey, @NonNull String deviceName) {
             Preconditions.checkState(secretId != null && secretId.length > 0,
                     "secret id cannot be empty");
             Preconditions.checkState(authenticityKey != null && authenticityKey.length > 0,
                     "authenticity key cannot be empty");
+            Preconditions.checkState(
+                    metadataEncryptionKey != null && metadataEncryptionKey.length > 0,
+                    "metadataEncryptionKey cannot be empty");
+            Preconditions.checkState(deviceName != null && deviceName.length() > 0,
+                    "deviceName cannot be empty");
             mSecretId = secretId;
             mAuthenticityKey = authenticityKey;
+            mMetadataEncryptionKey = metadataEncryptionKey;
+            mDeviceName = deviceName;
             mCredentialElements = new ArrayList<>();
         }
 
@@ -132,24 +140,6 @@
         }
 
         /**
-         * Sets the metadata encryption key to the credential.
-         */
-        @NonNull
-        public Builder setMetadataEncryptionKey(@NonNull byte[] metadataEncryptionKey) {
-            mMetadataEncryptionKey = metadataEncryptionKey;
-            return this;
-        }
-
-        /**
-         * Sets the device name of the credential.
-         */
-        @NonNull
-        public Builder setDeviceName(@NonNull String deviceName) {
-            mDeviceName = deviceName;
-            return this;
-        }
-
-        /**
          * Adds an element to the credential.
          */
         @NonNull
diff --git a/nearby/framework/java/android/nearby/PublicCredential.java b/nearby/framework/java/android/nearby/PublicCredential.java
index 715e7fd..8aac323 100644
--- a/nearby/framework/java/android/nearby/PublicCredential.java
+++ b/nearby/framework/java/android/nearby/PublicCredential.java
@@ -21,6 +21,8 @@
 import android.os.Parcel;
 import android.os.Parcelable;
 
+import com.android.internal.util.Preconditions;
+
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Objects;
@@ -120,17 +122,33 @@
         private final List<CredentialElement> mCredentialElements;
 
         private @IdentityType int mIdentityType;
-        private byte[] mSecretId;
-        private byte[] mAuthenticityKey;
-        private byte[] mPublicKey;
-        private byte[] mEncryptedMetadata;
-        private byte[] mEncryptedMetadataKeyTag;
+        private final byte[] mSecretId;
+        private final byte[] mAuthenticityKey;
+        private final byte[] mPublicKey;
+        private final byte[] mEncryptedMetadata;
+        private final byte[] mEncryptedMetadataKeyTag;
 
-        public Builder(@NonNull byte[] secretId, @NonNull byte[] authenticityKey) {
-            Objects.requireNonNull(secretId);
-            Objects.requireNonNull(authenticityKey);
+        public Builder(@NonNull byte[] secretId, @NonNull byte[] authenticityKey,
+                @NonNull byte[] publicKey, @NonNull byte[] encryptedMetadata,
+                @NonNull byte[] encryptedMetadataKeyTag) {
+            Preconditions.checkState(secretId != null && secretId.length > 0,
+                    "secret id cannot be empty");
+            Preconditions.checkState(authenticityKey != null && authenticityKey.length > 0,
+                    "authenticity key cannot be empty");
+            Preconditions.checkState(
+                    publicKey != null && publicKey.length > 0,
+                    "publicKey cannot be empty");
+            Preconditions.checkState(encryptedMetadata != null && encryptedMetadata.length > 0,
+                    "encryptedMetadata cannot be empty");
+            Preconditions.checkState(
+                    encryptedMetadataKeyTag != null && encryptedMetadataKeyTag.length > 0,
+                    "encryptedMetadataKeyTag cannot be empty");
+
             mSecretId = secretId;
             mAuthenticityKey = authenticityKey;
+            mPublicKey = publicKey;
+            mEncryptedMetadata = encryptedMetadata;
+            mEncryptedMetadataKeyTag = encryptedMetadataKeyTag;
             mCredentialElements = new ArrayList<>();
         }
 
@@ -154,36 +172,6 @@
         }
 
         /**
-         * Sets the public key for the credential.
-         */
-        @NonNull
-        public Builder setPublicKey(@NonNull byte[] publicKey) {
-            Objects.requireNonNull(publicKey);
-            mPublicKey = publicKey;
-            return this;
-        }
-
-        /**
-         * Sets the encrypted metadata.
-         */
-        @NonNull
-        public Builder setEncryptedMetadata(@NonNull byte[] encryptedMetadata) {
-            Objects.requireNonNull(encryptedMetadata);
-            mEncryptedMetadata = encryptedMetadata;
-            return this;
-        }
-
-        /**
-         * Sets the encrypted metadata key tag.
-         */
-        @NonNull
-        public Builder setEncryptedMetadataKeyTag(@NonNull byte[] encryptedMetadataKeyTag) {
-            Objects.requireNonNull(encryptedMetadataKeyTag);
-            mEncryptedMetadataKeyTag = encryptedMetadataKeyTag;
-            return this;
-        }
-
-        /**
          * Builds the {@link PresenceCredential}.
          */
         @NonNull
diff --git a/nearby/framework/java/android/nearby/ScanFilter.java b/nearby/framework/java/android/nearby/ScanFilter.java
index e16c6a0..1409426 100644
--- a/nearby/framework/java/android/nearby/ScanFilter.java
+++ b/nearby/framework/java/android/nearby/ScanFilter.java
@@ -18,10 +18,8 @@
 
 import android.annotation.IntRange;
 import android.annotation.NonNull;
-import android.annotation.SuppressLint;
 import android.annotation.SystemApi;
 import android.os.Parcel;
-import android.os.Parcelable;
 
 /**
  * Filter for scanning a nearby device.
@@ -29,28 +27,24 @@
  * @hide
  */
 @SystemApi
-@SuppressLint("ParcelNotFinal")  // ScanFilter constructor is not public
-public abstract class ScanFilter implements Parcelable {
-    public static final @NonNull Creator<ScanFilter> CREATOR = new Creator<ScanFilter>() {
-        @Override
-        public ScanFilter createFromParcel(Parcel in) {
-            int type = in.readInt();
-            switch (type) {
-                // Currently, only Nearby Presence filtering is supported, in the future
-                // filtering other nearby specifications will be added.
-                case ScanRequest.SCAN_TYPE_NEARBY_PRESENCE:
-                    return PresenceScanFilter.createFromParcelBody(in);
-                default:
-                    throw new IllegalStateException(
-                            "Unexpected scan type (value " + type + ") in parcel.");
-            }
+public abstract class ScanFilter {
+    /**
+     * Creates a {@link ScanFilter} from the parcel.
+     *
+     * @hide
+     */
+    public static ScanFilter createFromParcel(Parcel in) {
+        int type = in.readInt();
+        switch (type) {
+            // Currently, only Nearby Presence filtering is supported, in the future
+            // filtering other nearby specifications will be added.
+            case ScanRequest.SCAN_TYPE_NEARBY_PRESENCE:
+                return PresenceScanFilter.createFromParcelBody(in);
+            default:
+                throw new IllegalStateException(
+                        "Unexpected scan type (value " + type + ") in parcel.");
         }
-
-        @Override
-        public ScanFilter[] newArray(int size) {
-            return new ScanFilter[size];
-        }
-    };
+    }
 
     private final @ScanRequest.ScanType int mType;
     private final int mMaxPathLoss;
@@ -92,17 +86,14 @@
         return mMaxPathLoss;
     }
 
-    @Override
+    /**
+     *
+     * Writes the scan filter to the parcel.
+     *
+     * @hide
+     */
     public void writeToParcel(@NonNull Parcel dest, int flags) {
         dest.writeInt(mType);
         dest.writeInt(mMaxPathLoss);
     }
-
-    /**
-     * No special parcel contents.
-     */
-    @Override
-    public int describeContents() {
-        return 0;
-    }
 }
diff --git a/nearby/framework/java/android/nearby/ScanRequest.java b/nearby/framework/java/android/nearby/ScanRequest.java
index 37285d5..a90b72d 100644
--- a/nearby/framework/java/android/nearby/ScanRequest.java
+++ b/nearby/framework/java/android/nearby/ScanRequest.java
@@ -72,13 +72,15 @@
     public static final Creator<ScanRequest> CREATOR = new Creator<ScanRequest>() {
         @Override
         public ScanRequest createFromParcel(Parcel in) {
-            return new ScanRequest(
-                    /* scanType= */ in.readInt(),
-                    /* scanMode= */ in.readInt(),
-                    /* enableBle= */ in.readBoolean(),
-                    /* workSource= */ in.readTypedObject(WorkSource.CREATOR),
-                    /* scanFilters= */
-                    in.readArrayList(ScanFilter.class.getClassLoader(), ScanFilter.class));
+            ScanRequest.Builder builder = new ScanRequest.Builder()
+                    .setScanType(in.readInt())
+                    .setScanMode(in.readInt())
+                    .setBleEnabled(in.readBoolean())
+                    .setWorkSource(in.readTypedObject(WorkSource.CREATOR));
+            for (int i = 0; i < in.readInt(); i++) {
+                builder.addScanFilter(ScanFilter.createFromParcel(in));
+            }
+            return builder.build();
         }
 
         @Override
@@ -213,7 +215,10 @@
         dest.writeInt(mScanMode);
         dest.writeBoolean(mBleEnabled);
         dest.writeTypedObject(mWorkSource, /* parcelableFlags= */0);
-        dest.writeTypedList(mScanFilters);
+        dest.writeInt(mScanFilters.size());
+        for (int i = 0; i < mScanFilters.size(); ++i) {
+            mScanFilters.get(i).writeToParcel(dest, flags);
+        }
     }
 
     @Override
diff --git a/nearby/service/java/com/android/server/nearby/NearbyService.java b/nearby/service/java/com/android/server/nearby/NearbyService.java
index 74b327a..ca9bca3 100644
--- a/nearby/service/java/com/android/server/nearby/NearbyService.java
+++ b/nearby/service/java/com/android/server/nearby/NearbyService.java
@@ -27,7 +27,7 @@
 import android.content.Intent;
 import android.content.IntentFilter;
 import android.hardware.location.ContextHubManager;
-import android.nearby.BroadcastRequest;
+import android.nearby.BroadcastRequestParcelable;
 import android.nearby.IBroadcastListener;
 import android.nearby.INearbyManager;
 import android.nearby.IScanListener;
@@ -109,8 +109,11 @@
     }
 
     @Override
-    public void startBroadcast(BroadcastRequest broadcastRequest, IBroadcastListener listener) {
-        mBroadcastProviderManager.startBroadcast(broadcastRequest, listener);
+    public void startBroadcast(BroadcastRequestParcelable broadcastRequestParcelable,
+            IBroadcastListener listener) {
+        mBroadcastProviderManager.startBroadcast(
+                broadcastRequestParcelable.getBroadcastRequest(),
+                listener);
     }
 
     @Override
diff --git a/nearby/tests/cts/fastpair/src/android/nearby/cts/NearbyManagerTest.java b/nearby/tests/cts/fastpair/src/android/nearby/cts/NearbyManagerTest.java
index dcc40a3..cd61cad 100644
--- a/nearby/tests/cts/fastpair/src/android/nearby/cts/NearbyManagerTest.java
+++ b/nearby/tests/cts/fastpair/src/android/nearby/cts/NearbyManagerTest.java
@@ -65,6 +65,7 @@
     private static final byte[] SECRETE_ID = new byte[]{1, 2, 3, 4};
     private static final byte[] META_DATA_ENCRYPTION_KEY = new byte[14];
     private static final byte[] AUTHENTICITY_KEY = new byte[]{0, 1, 1, 1};
+    private static final String DEVICE_NAME = "test_device";
     private static final int BLE_MEDIUM = 1;
 
     private Context mContext;
@@ -114,9 +115,9 @@
     @Test
     @SdkSuppress(minSdkVersion = 32, codeName = "T")
     public void testStartStopBroadcast() throws InterruptedException {
-        PrivateCredential credential = new PrivateCredential.Builder(SECRETE_ID, AUTHENTICITY_KEY)
+        PrivateCredential credential = new PrivateCredential.Builder(SECRETE_ID, AUTHENTICITY_KEY,
+                META_DATA_ENCRYPTION_KEY, DEVICE_NAME)
                 .setIdentityType(IDENTITY_TYPE_PRIVATE)
-                .setMetadataEncryptionKey(META_DATA_ENCRYPTION_KEY)
                 .build();
         BroadcastRequest broadcastRequest =
                 new PresenceBroadcastRequest.Builder(
diff --git a/nearby/tests/cts/fastpair/src/android/nearby/cts/PresenceBroadcastRequestTest.java b/nearby/tests/cts/fastpair/src/android/nearby/cts/PresenceBroadcastRequestTest.java
index 3c831a2..1daa410 100644
--- a/nearby/tests/cts/fastpair/src/android/nearby/cts/PresenceBroadcastRequestTest.java
+++ b/nearby/tests/cts/fastpair/src/android/nearby/cts/PresenceBroadcastRequestTest.java
@@ -56,14 +56,15 @@
     private static final byte[] METADATA_ENCRYPTION_KEY = new byte[]{1, 1, 3, 4, 5};
     private static final int KEY = 1234;
     private static final byte[] VALUE = new byte[]{1, 1, 1, 1};
+    private static final String DEVICE_NAME = "test_device";
 
     private PresenceBroadcastRequest.Builder mBuilder;
 
     @Before
     public void setUp() {
-        PrivateCredential credential = new PrivateCredential.Builder(SECRETE_ID, AUTHENTICITY_KEY)
+        PrivateCredential credential = new PrivateCredential.Builder(SECRETE_ID, AUTHENTICITY_KEY,
+                METADATA_ENCRYPTION_KEY, DEVICE_NAME)
                 .setIdentityType(IDENTITY_TYPE_PRIVATE)
-                .setMetadataEncryptionKey(METADATA_ENCRYPTION_KEY)
                 .build();
         DataElement element = new DataElement(KEY, VALUE);
         mBuilder = new PresenceBroadcastRequest.Builder(Collections.singletonList(BLE_MEDIUM), SALT,
diff --git a/nearby/tests/cts/fastpair/src/android/nearby/cts/PresenceScanFilterTest.java b/nearby/tests/cts/fastpair/src/android/nearby/cts/PresenceScanFilterTest.java
index 6b7c43b..b7fe40a 100644
--- a/nearby/tests/cts/fastpair/src/android/nearby/cts/PresenceScanFilterTest.java
+++ b/nearby/tests/cts/fastpair/src/android/nearby/cts/PresenceScanFilterTest.java
@@ -53,10 +53,10 @@
 
 
     private PublicCredential mPublicCredential =
-            new PublicCredential.Builder(SECRETE_ID, AUTHENTICITY_KEY)
+            new PublicCredential.Builder(SECRETE_ID, AUTHENTICITY_KEY, PUBLIC_KEY,
+                    ENCRYPTED_METADATA, METADATA_ENCRYPTION_KEY_TAG)
                     .setIdentityType(IDENTITY_TYPE_PRIVATE)
-                    .setPublicKey(PUBLIC_KEY).setEncryptedMetadata(ENCRYPTED_METADATA)
-                    .setEncryptedMetadataKeyTag(METADATA_ENCRYPTION_KEY_TAG).build();
+                    .build();
     private PresenceScanFilter.Builder mBuilder = new PresenceScanFilter.Builder()
             .setMaxPathLoss(RSSI)
             .addCredential(mPublicCredential)
diff --git a/nearby/tests/cts/fastpair/src/android/nearby/cts/PrivateCredentialTest.java b/nearby/tests/cts/fastpair/src/android/nearby/cts/PrivateCredentialTest.java
index 1cd6d9c..10b3cf2 100644
--- a/nearby/tests/cts/fastpair/src/android/nearby/cts/PrivateCredentialTest.java
+++ b/nearby/tests/cts/fastpair/src/android/nearby/cts/PrivateCredentialTest.java
@@ -53,10 +53,9 @@
 
     @Before
     public void setUp() {
-        mBuilder = new PrivateCredential.Builder(SECRETE_ID, AUTHENTICITY_KEY)
+        mBuilder = new PrivateCredential.Builder(
+                SECRETE_ID, AUTHENTICITY_KEY, METADATA_ENCRYPTION_KEY, DEVICE_NAME)
                 .setIdentityType(IDENTITY_TYPE_PRIVATE)
-                .setDeviceName(DEVICE_NAME)
-                .setMetadataEncryptionKey(METADATA_ENCRYPTION_KEY)
                 .addCredentialElement(new CredentialElement(KEY, VALUE));
     }
 
diff --git a/nearby/tests/cts/fastpair/src/android/nearby/cts/PublicCredentialTest.java b/nearby/tests/cts/fastpair/src/android/nearby/cts/PublicCredentialTest.java
index 7756669..b4a34cc 100644
--- a/nearby/tests/cts/fastpair/src/android/nearby/cts/PublicCredentialTest.java
+++ b/nearby/tests/cts/fastpair/src/android/nearby/cts/PublicCredentialTest.java
@@ -56,11 +56,10 @@
 
     @Before
     public void setUp() {
-        mBuilder = new PublicCredential.Builder(SECRETE_ID, AUTHENTICITY_KEY)
+        mBuilder = new PublicCredential.Builder(SECRETE_ID, AUTHENTICITY_KEY, PUBLIC_KEY,
+                ENCRYPTED_METADATA, METADATA_ENCRYPTION_KEY_TAG)
                 .addCredentialElement(new CredentialElement(KEY, VALUE))
-                .setIdentityType(IDENTITY_TYPE_PRIVATE)
-                .setPublicKey(PUBLIC_KEY).setEncryptedMetadata(ENCRYPTED_METADATA)
-                .setEncryptedMetadataKeyTag(METADATA_ENCRYPTION_KEY_TAG);
+                .setIdentityType(IDENTITY_TYPE_PRIVATE);
     }
 
     @Test
diff --git a/nearby/tests/cts/fastpair/src/android/nearby/cts/ScanRequestTest.java b/nearby/tests/cts/fastpair/src/android/nearby/cts/ScanRequestTest.java
index 11de5ae..019f8ec 100644
--- a/nearby/tests/cts/fastpair/src/android/nearby/cts/ScanRequestTest.java
+++ b/nearby/tests/cts/fastpair/src/android/nearby/cts/ScanRequestTest.java
@@ -173,11 +173,10 @@
         final byte[] encryptedMetadata = new byte[]{1, 2, 3, 4, 5};
         final byte[] metadataEncryptionKeyTag = new byte[]{1, 1, 3, 4, 5};
 
-        PublicCredential credential = new PublicCredential.Builder(secretId, authenticityKey)
+        PublicCredential credential = new PublicCredential.Builder(
+                secretId, authenticityKey, publicKey, encryptedMetadata, metadataEncryptionKeyTag)
                 .setIdentityType(IDENTITY_TYPE_PRIVATE)
-                .setEncryptedMetadata(encryptedMetadata)
-                .setPublicKey(publicKey)
-                .setEncryptedMetadataKeyTag(metadataEncryptionKeyTag).build();
+                .build();
 
         final int rssi = -40;
         final int action = 123;
diff --git a/nearby/tests/unit/src/com/android/server/nearby/presence/FastAdvertisementTest.java b/nearby/tests/unit/src/com/android/server/nearby/presence/FastAdvertisementTest.java
index 73d7695..5e0ccbe 100644
--- a/nearby/tests/unit/src/com/android/server/nearby/presence/FastAdvertisementTest.java
+++ b/nearby/tests/unit/src/com/android/server/nearby/presence/FastAdvertisementTest.java
@@ -43,6 +43,7 @@
     private static final byte[] AUTHENTICITY_KEY = new byte[]{12, 13, 14};
     private static final byte[] EXPECTED_ADV_BYTES =
             new byte[]{2, 2, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 123};
+    private static final String DEVICE_NAME = "test_device";
 
     private PresenceBroadcastRequest.Builder mBuilder;
     private PrivateCredential mCredential;
@@ -50,9 +51,8 @@
     @Before
     public void setUp() {
         mCredential =
-                new PrivateCredential.Builder(SECRET_ID, AUTHENTICITY_KEY)
+                new PrivateCredential.Builder(SECRET_ID, AUTHENTICITY_KEY, IDENTITY, DEVICE_NAME)
                         .setIdentityType(PresenceCredential.IDENTITY_TYPE_PRIVATE)
-                        .setMetadataEncryptionKey(IDENTITY)
                         .build();
         mBuilder =
                 new PresenceBroadcastRequest.Builder(Collections.singletonList(MEDIUM_TYPE_BLE),
diff --git a/nearby/tests/unit/src/com/android/server/nearby/presence/PresenceDiscoveryResultTest.java b/nearby/tests/unit/src/com/android/server/nearby/presence/PresenceDiscoveryResultTest.java
index dd94778..39cab94 100644
--- a/nearby/tests/unit/src/com/android/server/nearby/presence/PresenceDiscoveryResultTest.java
+++ b/nearby/tests/unit/src/com/android/server/nearby/presence/PresenceDiscoveryResultTest.java
@@ -40,6 +40,9 @@
     private static final byte[] SALT = new byte[]{12, 34};
     private static final byte[] SECRET_ID = new byte[]{1, 2, 3, 4};
     private static final byte[] AUTHENTICITY_KEY = new byte[]{12, 13, 14};
+    private static final byte[] PUBLIC_KEY = new byte[]{1, 1, 2, 2};
+    private static final byte[] ENCRYPTED_METADATA = new byte[]{1, 2, 3, 4, 5};
+    private static final byte[] METADATA_ENCRYPTION_KEY_TAG = new byte[]{1, 1, 3, 4, 5};
 
     private PresenceDiscoveryResult.Builder mBuilder;
     private PublicCredential mCredential;
@@ -47,7 +50,8 @@
     @Before
     public void setUp() {
         mCredential =
-                new PublicCredential.Builder(SECRET_ID, AUTHENTICITY_KEY)
+                new PublicCredential.Builder(SECRET_ID, AUTHENTICITY_KEY, PUBLIC_KEY,
+                        ENCRYPTED_METADATA, METADATA_ENCRYPTION_KEY_TAG)
                         .setIdentityType(PresenceCredential.IDENTITY_TYPE_PRIVATE)
                         .build();
         mBuilder = new PresenceDiscoveryResult.Builder()
diff --git a/nearby/tests/unit/src/com/android/server/nearby/provider/BroadcastProviderManagerTest.java b/nearby/tests/unit/src/com/android/server/nearby/provider/BroadcastProviderManagerTest.java
index 71ece63..d45d570 100644
--- a/nearby/tests/unit/src/com/android/server/nearby/provider/BroadcastProviderManagerTest.java
+++ b/nearby/tests/unit/src/com/android/server/nearby/provider/BroadcastProviderManagerTest.java
@@ -61,6 +61,7 @@
     private static final int PRESENCE_ACTION = 123;
     private static final byte[] SECRET_ID = new byte[]{1, 2, 3, 4};
     private static final byte[] AUTHENTICITY_KEY = new byte[]{12, 13, 14};
+    private static final String DEVICE_NAME = "test_device";
 
     @Rule
     public final MockitoRule mocks = MockitoJUnit.rule();
@@ -86,9 +87,8 @@
                 mBleBroadcastProvider);
 
         PrivateCredential privateCredential =
-                new PrivateCredential.Builder(SECRET_ID, AUTHENTICITY_KEY)
+                new PrivateCredential.Builder(SECRET_ID, AUTHENTICITY_KEY, IDENTITY, DEVICE_NAME)
                         .setIdentityType(PresenceCredential.IDENTITY_TYPE_PRIVATE)
-                        .setMetadataEncryptionKey(IDENTITY)
                         .build();
         mBroadcastRequest =
                 new PresenceBroadcastRequest.Builder(Collections.singletonList(MEDIUM_TYPE_BLE),
