diff --git a/core/api/src/main/java/org/onosproject/ui/table/cell/HexLongFormatter.java b/core/api/src/main/java/org/onosproject/ui/table/cell/HexLongFormatter.java
new file mode 100644
index 0000000..9155efe
--- /dev/null
+++ b/core/api/src/main/java/org/onosproject/ui/table/cell/HexLongFormatter.java
@@ -0,0 +1,38 @@
+/*
+ *  Copyright 2016 Open Networking Laboratory
+ *
+ *  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 org.onosproject.ui.table.cell;
+
+import org.onosproject.ui.table.CellFormatter;
+
+/**
+ * Formats long values as hex strings with a "0x" prefix.
+ */
+public final class HexLongFormatter extends AbstractCellFormatter {
+
+    // non-instantiable
+    private HexLongFormatter() { }
+
+    @Override
+    protected String nonNullFormat(Object value) {
+        return "0x" + Long.toHexString((Long) value);
+    }
+
+    /**
+     * An instance of this class.
+     */
+    public static final CellFormatter INSTANCE = new HexLongFormatter();
+}
diff --git a/core/api/src/test/java/org/onosproject/ui/table/cell/HexLongFormatterTest.java b/core/api/src/test/java/org/onosproject/ui/table/cell/HexLongFormatterTest.java
new file mode 100644
index 0000000..c8a0912
--- /dev/null
+++ b/core/api/src/test/java/org/onosproject/ui/table/cell/HexLongFormatterTest.java
@@ -0,0 +1,65 @@
+/*
+ *  Copyright 2016 Open Networking Laboratory
+ *
+ *  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 org.onosproject.ui.table.cell;
+
+import org.junit.Test;
+import org.onosproject.ui.table.CellFormatter;
+
+import static org.junit.Assert.assertEquals;
+
+/**
+ * Unit tests for {@link HexLongFormatter}.
+ */
+public class HexLongFormatterTest {
+
+    private CellFormatter fmt = HexLongFormatter.INSTANCE;
+
+    @Test
+    public void nullValue() {
+        assertEquals("null value", "", fmt.format(null));
+    }
+
+    @Test
+    public void zero() {
+        assertEquals("zero", "0x0", fmt.format(0L));
+    }
+
+    @Test
+    public void one() {
+        assertEquals("one", "0x1", fmt.format(1L));
+    }
+
+    @Test
+    public void ten() {
+        assertEquals("ten", "0xa", fmt.format(10L));
+    }
+
+    @Test
+    public void twenty() {
+        assertEquals("twenty", "0x14", fmt.format(20L));
+    }
+
+    @Test
+    public void veryBig() {
+        assertEquals("very big", "0x7048860f3a38", fmt.format(123456789101112L));
+    }
+
+    @Test
+    public void maxLong() {
+        assertEquals("max long", "0x7fffffffffffffff", fmt.format(Long.MAX_VALUE));
+    }
+}
diff --git a/web/gui/src/main/java/org/onosproject/ui/impl/FlowViewMessageHandler.java b/web/gui/src/main/java/org/onosproject/ui/impl/FlowViewMessageHandler.java
index 0217911..44bd78d 100644
--- a/web/gui/src/main/java/org/onosproject/ui/impl/FlowViewMessageHandler.java
+++ b/web/gui/src/main/java/org/onosproject/ui/impl/FlowViewMessageHandler.java
@@ -30,6 +30,8 @@
 import org.onosproject.ui.table.TableModel;
 import org.onosproject.ui.table.TableRequestHandler;
 import org.onosproject.ui.table.cell.EnumFormatter;
+import org.onosproject.ui.table.cell.HexFormatter;
+import org.onosproject.ui.table.cell.HexLongFormatter;
 
 import java.util.Collection;
 import java.util.List;
@@ -84,6 +86,8 @@
         @Override
         protected TableModel createTableModel() {
             TableModel tm = super.createTableModel();
+            tm.setFormatter(ID, HexLongFormatter.INSTANCE);
+            tm.setFormatter(GROUP_ID, HexFormatter.INSTANCE);
             tm.setFormatter(SELECTOR, new SelectorFormatter());
             tm.setFormatter(TREATMENT, new TreatmentFormatter());
             tm.setFormatter(STATE, EnumFormatter.INSTANCE);
diff --git a/web/gui/src/main/java/org/onosproject/ui/impl/GroupViewMessageHandler.java b/web/gui/src/main/java/org/onosproject/ui/impl/GroupViewMessageHandler.java
index c7d539b..c78d32f 100644
--- a/web/gui/src/main/java/org/onosproject/ui/impl/GroupViewMessageHandler.java
+++ b/web/gui/src/main/java/org/onosproject/ui/impl/GroupViewMessageHandler.java
@@ -29,6 +29,7 @@
 import org.onosproject.ui.table.TableModel;
 import org.onosproject.ui.table.TableRequestHandler;
 import org.onosproject.ui.table.cell.EnumFormatter;
+import org.onosproject.ui.table.cell.HexFormatter;
 
 import java.util.Collection;
 import java.util.List;
@@ -75,6 +76,7 @@
         @Override
         protected TableModel createTableModel() {
             TableModel tm = super.createTableModel();
+            tm.setFormatter(ID, HexFormatter.INSTANCE);
             tm.setFormatter(TYPE, EnumFormatter.INSTANCE);
             tm.setFormatter(BUCKETS, new BucketFormatter());
             return tm;
