diff --git a/src/com/android/settings/datausage/lib/DataUsageLib.java b/src/com/android/settings/datausage/lib/DataUsageLib.java
index 1ca5eff..b3f7e79 100644
--- a/src/com/android/settings/datausage/lib/DataUsageLib.java
+++ b/src/com/android/settings/datausage/lib/DataUsageLib.java
@@ -22,12 +22,14 @@
 import android.telephony.SubscriptionInfo;
 import android.telephony.SubscriptionManager;
 import android.telephony.TelephonyManager;
+import android.util.ArraySet;
 import android.util.Log;
 
 import androidx.annotation.NonNull;
 
 import com.android.internal.util.ArrayUtils;
 
+import java.util.Arrays;
 import java.util.List;
 import java.util.Set;
 
@@ -76,16 +78,21 @@
     }
 
     private static NetworkTemplate normalizeMobileTemplate(
-            @NonNull NetworkTemplate template, @NonNull String[] mergedSet) {
+            @NonNull NetworkTemplate template, @NonNull String[] merged) {
         if (template.getSubscriberIds().isEmpty()) return template;
         // The input template should have at most 1 subscriberId.
         final String subscriberId = template.getSubscriberIds().iterator().next();
-
-        if (Set.of(mergedSet).contains(subscriberId)) {
+        // In some rare cases (e.g. b/243015487), merged subscriberId list might contain
+        // duplicated items. Deduplication for better error handling.
+        final ArraySet mergedSet = new ArraySet(merged);
+        if (mergedSet.size() != merged.length) {
+            Log.wtf(TAG, "Duplicated merged list detected: " + Arrays.toString(merged));
+        }
+        if (mergedSet.contains(subscriberId)) {
             // Requested template subscriber is part of the merge group; return
             // a template that matches all merged subscribers.
             return new NetworkTemplate.Builder(template.getMatchRule())
-                    .setSubscriberIds(Set.of(mergedSet))
+                    .setSubscriberIds(mergedSet)
                     .setMeteredness(template.getMeteredness()).build();
         }
 
diff --git a/tests/robotests/src/com/android/settings/datausage/lib/DataUsageLibTest.java b/tests/robotests/src/com/android/settings/datausage/lib/DataUsageLibTest.java
index 4391425..fccef4f 100644
--- a/tests/robotests/src/com/android/settings/datausage/lib/DataUsageLibTest.java
+++ b/tests/robotests/src/com/android/settings/datausage/lib/DataUsageLibTest.java
@@ -103,11 +103,14 @@
     public void getMobileTemplate_groupUuidExist_returnMobileMerged() {
         when(mSubscriptionManager.getActiveSubscriptionInfo(SUB_ID)).thenReturn(mInfo1);
         when(mInfo1.getGroupUuid()).thenReturn(mParcelUuid);
+        // In some rare cases (e.g. b/243015487), merged subscriberId list might contain
+        // duplicated items. The implementation should perform deduplication.
         when(mTelephonyManager.getMergedImsisFromGroup())
-                .thenReturn(new String[] {SUBSCRIBER_ID, SUBSCRIBER_ID_2});
+                .thenReturn(new String[] {SUBSCRIBER_ID, SUBSCRIBER_ID, SUBSCRIBER_ID_2});
 
         final NetworkTemplate networkTemplate = DataUsageLib.getMobileTemplate(mContext, SUB_ID);
         assertThat(networkTemplate.getSubscriberIds().contains(SUBSCRIBER_ID)).isTrue();
         assertThat(networkTemplate.getSubscriberIds().contains(SUBSCRIBER_ID_2)).isTrue();
+        assertThat(networkTemplate.getSubscriberIds().size() == 2).isTrue();
     }
 }
