diff --git a/core/api/src/main/java/org/onosproject/ui/topo/PropertyPanel.java b/core/api/src/main/java/org/onosproject/ui/topo/PropertyPanel.java
index a165be3..c75eccf 100644
--- a/core/api/src/main/java/org/onosproject/ui/topo/PropertyPanel.java
+++ b/core/api/src/main/java/org/onosproject/ui/topo/PropertyPanel.java
@@ -18,7 +18,7 @@
 
 import com.google.common.collect.Sets;
 
-import java.text.DecimalFormat;
+import java.text.NumberFormat;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Set;
@@ -28,7 +28,7 @@
  */
 public class PropertyPanel {
 
-    private static final DecimalFormat DF0 = new DecimalFormat("#,###");
+    private static final NumberFormat NF = NumberFormat.getInstance();
 
     private String title;
     private String typeId;
@@ -49,6 +49,24 @@
     }
 
     /**
+     * Returns a number formatter to use for formatting integer and long
+     * property values.
+     * <p>
+     * This default implementation uses a formatter for the default
+     * locale. For example:
+     * <pre>
+     *     Locale.ENGLISH  :  1000 -&gt; "1,000"
+     *     Locale.FRENCH   :  1000 -&gt; "1 000"
+     *     Locale.GERMAN   :  1000 -&gt; "1.000"
+     * </pre>
+     *
+     * @return the number formatter
+     */
+    protected NumberFormat formatter() {
+        return NF;
+    }
+
+    /**
      * Adds an ID field to the panel data, to be included in
      * the returned JSON data to the client.
      *
@@ -80,7 +98,7 @@
      * @return self, for chaining
      */
     public PropertyPanel addProp(String key, int value) {
-        properties.add(new Prop(key, DF0.format(value)));
+        properties.add(new Prop(key, formatter().format(value)));
         return this;
     }
 
@@ -92,7 +110,7 @@
      * @return self, for chaining
      */
     public PropertyPanel addProp(String key, long value) {
-        properties.add(new Prop(key, DF0.format(value)));
+        properties.add(new Prop(key, formatter().format(value)));
         return this;
     }
 
diff --git a/core/api/src/test/java/org/onosproject/ui/topo/PropertyPanelTest.java b/core/api/src/test/java/org/onosproject/ui/topo/PropertyPanelTest.java
index 7e6cc22..157cdc7 100644
--- a/core/api/src/test/java/org/onosproject/ui/topo/PropertyPanelTest.java
+++ b/core/api/src/test/java/org/onosproject/ui/topo/PropertyPanelTest.java
@@ -20,17 +20,38 @@
 import org.junit.Test;
 import org.onosproject.ui.topo.PropertyPanel.Prop;
 
+import java.text.NumberFormat;
 import java.util.HashMap;
 import java.util.Iterator;
+import java.util.Locale;
 import java.util.Map;
 
-import static org.junit.Assert.*;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.fail;
 
 /**
  * Unit tests for {@link PropertyPanel}.
  */
 public class PropertyPanelTest {
 
+    // Modified property panel subclass to use ENGLISH locale formatter so
+    //  we know formatted numbers will use comma for the thousand separator.
+    private static final class EnglishPropertyPanel extends PropertyPanel {
+        private static final NumberFormat ENGLISH_FORMATTER =
+                NumberFormat.getInstance(Locale.ENGLISH);
+
+        public EnglishPropertyPanel(String title, String typeId) {
+            super(title, typeId);
+        }
+
+        @Override
+        protected NumberFormat formatter() {
+            return ENGLISH_FORMATTER;
+        }
+    }
+
     private static final String TITLE_ORIG = "Original Title";
     private static final String TYPE_ORIG = "Original type ID";
     private static final String TITLE_NEW = "New Title";
@@ -76,7 +97,7 @@
 
     @Test
     public void basic() {
-        pp = new PropertyPanel(TITLE_ORIG, TYPE_ORIG);
+        pp = new EnglishPropertyPanel(TITLE_ORIG, TYPE_ORIG);
         assertEquals("wrong title", TITLE_ORIG, pp.title());
         assertEquals("wrong type", TYPE_ORIG, pp.typeId());
         assertNull("id?", pp.id());
