diff --git a/core/api/src/test/java/org/onosproject/ui/topo/NodeBadgeTest.java b/core/api/src/test/java/org/onosproject/ui/topo/NodeBadgeTest.java
index 12b0db6..c824369 100644
--- a/core/api/src/test/java/org/onosproject/ui/topo/NodeBadgeTest.java
+++ b/core/api/src/test/java/org/onosproject/ui/topo/NodeBadgeTest.java
@@ -17,6 +17,7 @@
 package org.onosproject.ui.topo;
 
 import org.junit.Test;
+import org.onosproject.ui.topo.NodeBadge.Status;
 
 import static org.junit.Assert.assertEquals;
 
@@ -25,92 +26,87 @@
  */
 public class NodeBadgeTest {
 
-    private static final String SOME_MSG = "a msg";
-    private static final String WR_T = "wrong type";
+    private static final String MSG = "a msg";
+    private static final String TXT = "text";
+    private static final String GID = "glyph-id";
+    private static final int NUM = 42;
+    private static final String NUM_STR = Integer.toString(NUM);
+
+    private static final String WR_S = "wrong status";
+    private static final String WR_B = "wrong boolean";
+    private static final String WR_T = "wrong text";
     private static final String WR_M = "wrong message";
     private static final String WR_SF = "wrong string format";
 
     private NodeBadge badge;
 
-    private String expStr(String t) {
-        return "{Badge {" + t + "} \"" + SOME_MSG + "\"}";
-    }
-
-    private String expNumStr(String n) {
-        return "{Badge {n} \"" + n + "\"}";
-    }
-
-    @Test
-    public void info() {
-        badge = NodeBadge.info(SOME_MSG);
-        assertEquals(WR_T, NodeBadge.Type.INFO, badge.type());
-        assertEquals(WR_M, SOME_MSG, badge.message());
-        assertEquals(WR_SF, expStr("i"), badge.toString());
-    }
-
-    @Test
-    public void warn() {
-        badge = NodeBadge.warn(SOME_MSG);
-        assertEquals(WR_T, NodeBadge.Type.WARN, badge.type());
-        assertEquals(WR_M, SOME_MSG, badge.message());
-        assertEquals(WR_SF, expStr("w"), badge.toString());
-    }
-
-    @Test
-    public void error() {
-        badge = NodeBadge.error(SOME_MSG);
-        assertEquals(WR_T, NodeBadge.Type.ERROR, badge.type());
-        assertEquals(WR_M, SOME_MSG, badge.message());
-        assertEquals(WR_SF, expStr("e"), badge.toString());
-    }
-
-    @Test
-    public void checkMark() {
-        badge = NodeBadge.checkMark(SOME_MSG);
-        assertEquals(WR_T, NodeBadge.Type.CHECK_MARK, badge.type());
-        assertEquals(WR_M, SOME_MSG, badge.message());
-        assertEquals(WR_SF, expStr("/"), badge.toString());
-    }
-
-    @Test
-    public void xMark() {
-        badge = NodeBadge.xMark(SOME_MSG);
-        assertEquals(WR_T, NodeBadge.Type.X_MARK, badge.type());
-        assertEquals(WR_M, SOME_MSG, badge.message());
-        assertEquals(WR_SF, expStr("X"), badge.toString());
-    }
-
-    @Test
-    public void number0() {
-        badge = NodeBadge.number(0);
-        assertEquals(WR_T, NodeBadge.Type.NUMBER, badge.type());
-        assertEquals(WR_M, "0", badge.message());
-        assertEquals(WR_SF, expNumStr("0"), badge.toString());
-    }
-
-    @Test
-    public void number5() {
-        badge = NodeBadge.number(5);
-        assertEquals(WR_T, NodeBadge.Type.NUMBER, badge.type());
-        assertEquals(WR_M, "5", badge.message());
-        assertEquals(WR_SF, expNumStr("5"), badge.toString());
-    }
-
-    @Test
-    public void number99() {
-        badge = NodeBadge.number(99);
-        assertEquals(WR_T, NodeBadge.Type.NUMBER, badge.type());
-        assertEquals(WR_M, "99", badge.message());
-        assertEquals(WR_SF, expNumStr("99"), badge.toString());
+    private void checkFields(NodeBadge b, Status s, boolean g,
+                             String txt, String msg) {
+        assertEquals(WR_S, s, b.status());
+        assertEquals(WR_B, g, b.isGlyph());
+        assertEquals(WR_T, txt, b.text());
+        assertEquals(WR_M, msg, b.message());
     }
 
     @Test
     public void badgeTypes() {
-        assertEquals(WR_SF, "i", NodeBadge.Type.INFO.code());
-        assertEquals(WR_SF, "w", NodeBadge.Type.WARN.code());
-        assertEquals(WR_SF, "e", NodeBadge.Type.ERROR.code());
-        assertEquals(WR_SF, "/", NodeBadge.Type.CHECK_MARK.code());
-        assertEquals(WR_SF, "X", NodeBadge.Type.X_MARK.code());
-        assertEquals(WR_SF, "n", NodeBadge.Type.NUMBER.code());
+        assertEquals(WR_SF, "i", Status.INFO.code());
+        assertEquals(WR_SF, "w", Status.WARN.code());
+        assertEquals(WR_SF, "e", Status.ERROR.code());
+        assertEquals("unexpected size", 3, Status.values().length);
+    }
+
+    @Test
+    public void textOnly() {
+        badge = NodeBadge.text(TXT);
+        checkFields(badge, Status.INFO, false, TXT, null);
+    }
+
+    @Test
+    public void glyphOnly() {
+        badge = NodeBadge.glyph(GID);
+        checkFields(badge, Status.INFO, true, GID, null);
+    }
+
+    @Test
+    public void numberOnly() {
+        badge = NodeBadge.number(NUM);
+        checkFields(badge, Status.INFO, false, NUM_STR, null);
+    }
+
+    @Test
+    public void textInfo() {
+        badge = NodeBadge.text(Status.INFO, TXT);
+        checkFields(badge, Status.INFO, false, TXT, null);
+    }
+
+    @Test
+    public void glyphWarn() {
+        badge = NodeBadge.glyph(Status.WARN, GID);
+        checkFields(badge, Status.WARN, true, GID, null);
+    }
+
+    @Test
+    public void numberError() {
+        badge = NodeBadge.number(Status.ERROR, NUM);
+        checkFields(badge, Status.ERROR, false, NUM_STR, null);
+    }
+
+    @Test
+    public void textInfoMsg() {
+        badge = NodeBadge.text(Status.INFO, TXT, MSG);
+        checkFields(badge, Status.INFO, false, TXT, MSG);
+    }
+
+    @Test
+    public void glyphWarnMsg() {
+        badge = NodeBadge.glyph(Status.WARN, GID, MSG);
+        checkFields(badge, Status.WARN, true, GID, MSG);
+    }
+
+    @Test
+    public void numberErrorMsg() {
+        badge = NodeBadge.number(Status.ERROR, NUM, MSG);
+        checkFields(badge, Status.ERROR, false, NUM_STR, MSG);
     }
 }
diff --git a/core/api/src/test/java/org/onosproject/ui/topo/TopoJsonTest.java b/core/api/src/test/java/org/onosproject/ui/topo/TopoJsonTest.java
index 3b572a97..50aabf8 100644
--- a/core/api/src/test/java/org/onosproject/ui/topo/TopoJsonTest.java
+++ b/core/api/src/test/java/org/onosproject/ui/topo/TopoJsonTest.java
@@ -21,9 +21,11 @@
 import org.junit.Test;
 import org.onosproject.ui.JsonUtils;
 import org.onosproject.ui.topo.Highlights.Amount;
+import org.onosproject.ui.topo.NodeBadge.Status;
 
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNull;
 
 /**
  * Unit tests for {@link TopoJson}.
@@ -32,7 +34,8 @@
 
     private static final String DEV1 = "device-1";
     private static final String DEV2 = "device-2";
-    private static final String BADGE_MSG = "Hello there";
+    private static final String SOME_MSG = "Hello there";
+    private static final String GID = "glyph-ID";
 
     private ObjectNode payload;
 
@@ -78,15 +81,15 @@
     public void badgedDevice() {
         Highlights h = new Highlights();
         DeviceHighlight dh = new DeviceHighlight(DEV1);
-        dh.setBadge(NodeBadge.info(BADGE_MSG));
-        h.add(dh);
-
-        dh = new DeviceHighlight(DEV2);
         dh.setBadge(NodeBadge.number(7));
         h.add(dh);
 
+        dh = new DeviceHighlight(DEV2);
+        dh.setBadge(NodeBadge.glyph(Status.WARN, GID, SOME_MSG));
+        h.add(dh);
+
         payload = TopoJson.json(h);
-        System.out.println(payload);
+//        System.out.println(payload);
 
         // dig into the payload, and verify the badges are set on the devices
         ArrayNode a = (ArrayNode) payload.get(TopoJson.DEVICES);
@@ -96,15 +99,19 @@
 
         ObjectNode b = (ObjectNode) d.get(TopoJson.BADGE);
         assertNotNull("missing badge", b);
-        assertEquals("wrong type code", "i", b.get(TopoJson.TYPE).asText());
-        assertEquals("wrong message", BADGE_MSG, b.get(TopoJson.MSG).asText());
+        assertEquals("wrong status code", "i", b.get(TopoJson.STATUS).asText());
+        assertEquals("wrong text", "7", b.get(TopoJson.TXT).asText());
+        assertNull("glyph?", b.get(TopoJson.GID));
+        assertNull("msg?", b.get(TopoJson.MSG));
 
         d = (ObjectNode) a.get(1);
         assertEquals("wrong device id", DEV2, d.get(TopoJson.ID).asText());
 
         b = (ObjectNode) d.get(TopoJson.BADGE);
         assertNotNull("missing badge", b);
-        assertEquals("wrong type code", "n", b.get(TopoJson.TYPE).asText());
-        assertEquals("wrong message", "7", b.get(TopoJson.MSG).asText());
+        assertEquals("wrong status code", "w", b.get(TopoJson.STATUS).asText());
+        assertNull("text?", b.get(TopoJson.TXT));
+        assertEquals("wrong text", GID, b.get(TopoJson.GID).asText());
+        assertEquals("wrong message", SOME_MSG, b.get(TopoJson.MSG).asText());
     }
 }
