diff --git a/testapps/EmbmsServiceTestApp/src/com/android/phone/testapps/embmsmw/StreamingServiceRepository.java b/testapps/EmbmsServiceTestApp/src/com/android/phone/testapps/embmsmw/StreamingServiceRepository.java
index 789da39..677f39b 100644
--- a/testapps/EmbmsServiceTestApp/src/com/android/phone/testapps/embmsmw/StreamingServiceRepository.java
+++ b/testapps/EmbmsServiceTestApp/src/com/android/phone/testapps/embmsmw/StreamingServiceRepository.java
@@ -19,6 +19,7 @@
 import android.net.Uri;
 import android.telephony.mbms.StreamingServiceInfo;
 
+import java.util.ArrayList;
 import java.util.Date;
 import java.util.HashMap;
 import java.util.List;
@@ -61,9 +62,14 @@
         sServiceIdCounter++;
         String id = "StreamingServiceId[" + sServiceIdCounter + "]";
         Map<Locale, String> localeDict = new HashMap<Locale, String>() {{
-            put(Locale.US, "Entertainment Source " + sServiceIdCounter);
+                put(Locale.US, "Entertainment Source " + sServiceIdCounter);
+                put(Locale.CANADA, "Entertainment Source, eh?" + sServiceIdCounter);
         }};
-        StreamingServiceInfo info = new StreamingServiceInfo(localeDict, className, Locale.US,
+        List<Locale> locales = new ArrayList<Locale>() {{
+                add(Locale.CANADA);
+                add(Locale.US);
+        }};
+        StreamingServiceInfo info = new StreamingServiceInfo(localeDict, className, locales,
                 id, new Date(System.currentTimeMillis() - 10000),
                 new Date(System.currentTimeMillis() + 10000));
         sIdToServiceInfo.put(id, info);
diff --git a/testapps/EmbmsTestStreamingApp/src/com/android/phone/testapps/embmsfrontend/EmbmsTestStreamingApp.java b/testapps/EmbmsTestStreamingApp/src/com/android/phone/testapps/embmsfrontend/EmbmsTestStreamingApp.java
index c310064..aa4a15b 100644
--- a/testapps/EmbmsTestStreamingApp/src/com/android/phone/testapps/embmsfrontend/EmbmsTestStreamingApp.java
+++ b/testapps/EmbmsTestStreamingApp/src/com/android/phone/testapps/embmsfrontend/EmbmsTestStreamingApp.java
@@ -25,7 +25,6 @@
 import android.telephony.MbmsStreamingManager;
 import android.telephony.mbms.MbmsException;
 import android.telephony.mbms.MbmsStreamingManagerCallback;
-import android.telephony.mbms.StreamingService;
 import android.telephony.mbms.StreamingServiceInfo;
 import android.view.View;
 import android.view.ViewGroup;
@@ -39,8 +38,8 @@
 import java.util.Collections;
 import java.util.HashMap;
 import java.util.List;
+import java.util.Locale;
 import java.util.Map;
-import java.util.Objects;
 
 public class EmbmsTestStreamingApp extends Activity {
     private static final String APP_NAME = "StreamingApp1";
@@ -62,11 +61,24 @@
             super(context, resource);
         }
 
+        private String getName(StreamingServiceInfo info) {
+            Map<Locale, String> names = info.getNames();
+            String name = "<No Name>";
+            if (!names.isEmpty()) {
+                Locale locale = Locale.getDefault();
+                if (!names.containsKey(locale)) {
+                    locale = names.keySet().iterator().next();
+                }
+                name = names.get(locale);
+            }
+            return name;
+        }
+
         @Override
         public View getView(int position, View convertView, ViewGroup parent) {
             StreamingServiceInfo info = getItem(position);
             TextView result = new TextView(EmbmsTestStreamingApp.this);
-            result.setText(info.getNames().get(info.getLocale()));
+            result.setText(getName(info));
             return result;
         }
 
@@ -75,7 +87,7 @@
             StreamingServiceInfo info = getItem(position);
             TextView result = new TextView(EmbmsTestStreamingApp.this);
             String text = "name="
-                    + info.getNames().get(info.getLocale())
+                    + getName(info)
                     + ", "
                     + "serviceId="
                     + info.getServiceId();
