diff --git a/core/api/src/main/java/org/onosproject/ui/chart/ChartModel.java b/core/api/src/main/java/org/onosproject/ui/chart/ChartModel.java
index 40c3028..b15705d 100644
--- a/core/api/src/main/java/org/onosproject/ui/chart/ChartModel.java
+++ b/core/api/src/main/java/org/onosproject/ui/chart/ChartModel.java
@@ -43,7 +43,7 @@
 
     private final Set<String> seriesSet;
     private final String[] seriesArray;
-    private final List<Long> labels = Lists.newArrayList();
+    private final List<Object> labels = Lists.newArrayList();
     private final List<DataPoint> dataPoints = Lists.newArrayList();
     private final Map<String, Annot> annotations = new HashMap<>();
 
@@ -94,9 +94,10 @@
     /**
      * Adds a data point to the chart model.
      *
+     * @param label label instance
      * @return the data point, for chaining
      */
-    public DataPoint addDataPoint(Long label) {
+    public DataPoint addDataPoint(Object label) {
         DataPoint dp = new DataPoint();
         labels.add(label);
         dataPoints.add(dp);
@@ -127,7 +128,7 @@
      * @return an array of labels
      */
     public Object[] getLabels() {
-        return labels.toArray(new Long[labels.size()]);
+        return labels.toArray(new Object[labels.size()]);
     }
 
     /**
@@ -219,7 +220,7 @@
      */
     public class DataPoint {
         // values for all series
-        private final Map<String, Double> data = Maps.newHashMap();
+        private final Map<String, Object> data = Maps.newHashMap();
 
         /**
          * Sets the data value for the given series of this data point.
@@ -228,7 +229,7 @@
          * @param value  value to set
          * @return self, for chaining
          */
-        public DataPoint data(String series, Double value) {
+        public DataPoint data(String series, Object value) {
             checkSeries(series);
             data.put(series, value);
             return this;
@@ -237,9 +238,10 @@
         /**
          * Returns the data value with the given series for this data point.
          *
+         * @param series  series name
          * @return data value
          */
-        public Double get(String series) {
+        public Object get(String series) {
             return data.get(series);
         }
 
@@ -248,8 +250,8 @@
          *
          * @return an array of ordered data values
          */
-        public Double[] getAll() {
-            Double[] value = new Double[getSeries().length];
+        public Object[] getAll() {
+            Object[] value = new Object[getSeries().length];
             int idx = 0;
             for (String s : getSeries()) {
                 value[idx] = get(s);
@@ -266,5 +268,29 @@
         public int size() {
             return data.size();
         }
+
+        /**
+         * Returns the value of the data point as a string, using the
+         * formatter appropriate for the series.
+         *
+         * @param series series
+         * @return formatted data point value
+         */
+        public String getAsString(String series) {
+            return get(series).toString();
+        }
+
+        /**
+         * Returns the row as an array of formatted strings.
+         *
+         * @return the string format of data points
+         */
+        public String[] getAsStrings() {
+            List<String> formatted = new ArrayList<>(size());
+            for (String c : seriesArray) {
+                formatted.add(getAsString(c));
+            }
+            return formatted.toArray(new String[formatted.size()]);
+        }
     }
 }
