diff --git a/cli/cli/desc/version200/core.py b/cli/cli/desc/version200/core.py
index 695d692..15ab705 100755
--- a/cli/cli/desc/version200/core.py
+++ b/cli/cli/desc/version200/core.py
@@ -1925,7 +1925,7 @@
             'transportDestination' : { 'verbose-name' : 'Dst Port',
                                        'formatter' : fmtcnv.decode_dst_port
                                  },
-            'actions'          : { 'verbose-name' : 'Actions',
+            'actions'          : { 'verbose-name' : 'Instructions',
                                  },
             'vnsName'          : { 'verbose-name' : 'VNS'
                                  },
@@ -1945,29 +1945,29 @@
             'default' : [
                           'Idx', 'cookie', 'priority',
                           'byteCount', 'packetCount',
-                          'mplsTc', 'mplsLabel',
+                          'mplsLabel','mplsBoS','mplsTc',
                           'flow-brief', 'actions'
                         ],
             'scoped'  : [
                           'Idx', 'byteCount', 'packetCount', 'durationSeconds',
                           'cookie', 'priority',
-                          'mplsTc', 'mplsLabel','actions'
+                           'mplsLabel','mplsBoS','mplsTc','actions'
                         ],
             'brief'   : [ 'Idx', 'byteCount', 'packetCount', 'durationSeconds',
                           'cookie','priority',
-                          'mplsTc', 'mplsLabel','actions'
+                          'mplsLabel','mplsBoS','mplsTc','actions'
                           ],
             'default' : [ 'Idx',  'byteCount', 'packetCount', 'durationSeconds',
                           'cookie','priority',
-                          'mplsTc', 'mplsLabel','actions'
+                           'mplsLabel','mplsBoS','mplsTc','actions'
                           ],
             'scoped'  : [ 'Idx',  'byteCount', 'packetCount', 'durationSeconds',
                           'cookie','priority',
-                          'mplsTc', 'mplsLabel','actions'
+                           'mplsLabel','mplsBoS','mplsTc','actions'
                           ],
             'details' : [ 'Idx', 'byteCount', 'packetCount', 'durationSeconds',
                           'cookie','priority',
-                          'mplsTc', 'mplsLabel','actions'
+                         'mplsLabel','mplsBoS','mplsTc','actions'
                           ],
             #'vns_flow': [ 'Idx', 'dataLayerSource', 'dataLayerDestination', 'dataLayerVirtualLan', 'dataLayerType'],
             #'summary' : [ 'Idx', 'vnsName', 'vnsFlowCnt', 'flowEntryCnt'],
@@ -2047,7 +2047,7 @@
             'transportDestination' : { 'verbose-name' : 'Dst Port',
                                        'formatter' : fmtcnv.decode_dst_port
                                  },
-            'actions'          : { 'verbose-name' : 'Actions'
+            'actions'          : { 'verbose-name' : 'Instructions'
                                  },
             'vnsName'          : { 'verbose-name' : 'VNS'
                                  },
@@ -2074,32 +2074,32 @@
                           'Idx',  'cookie', 'priority'
                           'byteCount', 'packetCount',
                          'dataLayerSource', 'dataLayerDestination',
-                          'flow-brief','mplsTc','mplsLabel','actions'
+                          'flow-brief','mplsLabel','mplsBoS','mplsTc','actions'
                         ],
             'scoped'  : [
                           'Idx', 'cookie', 'priority',
                           'byteCount', 'packetCount',
-                          'dataLayerSource', 'dataLayerDestination','mplsTc','mplsLabel',
+                          'dataLayerSource', 'dataLayerDestination','mplsLabel','mplsBoS','mplsTc'
                           'flow-brief','actions'
 
                         ],
             'brief'   : [ 'Idx', 'cookie','priority', 'dataLayerSource', 'dataLayerDestination',
                           'networkSource', 'networkDestination', 'networkProtocol',
-                          'transportSource', 'transportDestination','mplsTc','mplsLabel','actions'],
+                          'transportSource', 'transportDestination','mplsLabel','mplsBoS','mplsTc','actions'],
             'default' : [ 'Idx','byteCount', 'packetCount', 'durationSeconds',
                           'cookie','priority', 'inputPort', 'dataLayerSource', 'dataLayerDestination',
                           'dataLayerType', 'networkSource', 'networkDestination', 'networkProtocol',
-                          'transportSource', 'transportDestination','mplsTc','mplsLabel', 'actions'],
+                          'transportSource', 'transportDestination''mplsLabel','mplsBoS','mplsTc', 'actions'],
             'scoped'  : [ 'Idx','byteCount', 'packetCount', 'durationSeconds',
                           'cookie','priority', 'inputPort', 'dataLayerSource', 'dataLayerDestination',
                           'dataLayerType', 'networkSource', 'networkDestination', 'networkProtocol',
-                          'transportSource', 'transportDestination','mplsTc','mplsLabel','actions'],
+                          'transportSource', 'transportDestination','mplsLabel','mplsBoS','mplsTc','actions'],
             'details' : [ 'Idx','byteCount', 'packetCount', 'durationSeconds',
                           'cookie', 'priority','hardTimeout', 'idleTimeout', 'priority', 'tableId', 'inputPort',
                           'dataLayerSource', 'dataLayerDestination', 'dataLayerType', 'dataLayerVirtualLan',
                           'dataLayerVirtualLanPriorityCodePoint', 'networkSource', 'networkDestination',
                           'networkProtocol', 'transportSource', 'transportDestination',
-                          'networkTypeOfService','mplsTc','mplsLabel', 'actions'],
+                          'networkTypeOfService','mplsLabel','mplsBoS','mplsTc', 'actions'],
             #'vns_flow': [ 'Idx', 'dataLayerSource', 'dataLayerDestination', 'dataLayerVirtualLan', 'dataLayerType'],
             #'summary' : [ 'Idx', 'vnsName', 'vnsFlowCnt', 'flowEntryCnt'],
             },
@@ -2178,7 +2178,7 @@
             'transportDestination' : { 'verbose-name' : 'Dst Port',
                                        'formatter' : fmtcnv.decode_dst_port
                                  },
-            'actions'          : { 'verbose-name' : 'Actions'
+            'actions'          : { 'verbose-name' : 'Instructions'
                                  },
             'vnsName'          : { 'verbose-name' : 'VNS'
                                  },
diff --git a/src/main/java/net/floodlightcontroller/core/web/serializers/OFFlowStatsEntryModSerializer.java b/src/main/java/net/floodlightcontroller/core/web/serializers/OFFlowStatsEntryModSerializer.java
index 4a83230..f780fd7 100644
--- a/src/main/java/net/floodlightcontroller/core/web/serializers/OFFlowStatsEntryModSerializer.java
+++ b/src/main/java/net/floodlightcontroller/core/web/serializers/OFFlowStatsEntryModSerializer.java
@@ -38,7 +38,6 @@
         OFOxmList matches = ((OFMatchV3)flowStatsEntry.getMatch()).getOxmList();
         
         List<OFInstruction> instructions = flowStatsEntry.getInstructions();
-        Set<OFFlowModFlags> flags = flowStatsEntry.getFlags();
         jGen.writeStartObject();
         //System.out.println("flowstats:\n\n\n"+ flowStatsEntry);
         jGen.writeNumberField("byteCount", flowStatsEntry.getByteCount().getValue());
@@ -61,7 +60,7 @@
                         +(matchGeneric.isMasked() ?
                                 OFFlowStatsEntryModSerializer.covertToMask(
                                         IPv4.toIPv4Address(
-                                                matchGeneric.getMask().toString())):"0"));
+                                                matchGeneric.getMask().toString())):"32"));
             }
             else if (matchGeneric.getMatchField().id == MatchFields.IPV4_SRC){
                 jGen.writeStringField("networkSource", matchGeneric.getValue().toString()
@@ -69,7 +68,7 @@
                         +(matchGeneric.isMasked() ?
                                 OFFlowStatsEntryModSerializer.covertToMask(
                                         IPv4.toIPv4Address(
-                                                matchGeneric.getMask().toString())):"0"));
+                                                matchGeneric.getMask().toString())):"32"));
             }
             else if (matchGeneric.getMatchField().id == MatchFields.ETH_DST){
                 jGen.writeStringField("dataLayerDestination", matchGeneric.getValue().toString());
@@ -108,12 +107,21 @@
         jGen.writeStartArray();
         List<OFAction> actions = null;
         for (OFInstruction instruction: instructions){
+            
             if(instruction.getType().equals(OFInstructionType.APPLY_ACTIONS)){
                 actions = ((OFInstructionApplyActions)instruction).getActions();
             }
             else if(instruction.getType().equals(OFInstructionType.WRITE_ACTIONS)){
                 actions = ((OFInstructionWriteActions)instruction).getActions();
             }
+            else if(instruction.getType().equals(OFInstructionType.GOTO_TABLE)){
+                jGen.writeFieldName(instruction.getType().name());
+                jGen.writeStartObject();
+                jGen.writeNumberField("tableId"
+                        , ((OFInstructionGotoTable)instruction).getTableId().getValue());
+                jGen.writeEndObject();
+                continue;
+            }
             else{
                 continue;
             }
@@ -125,7 +133,13 @@
                     jGen.writeNumberField("group", ((OFActionGroup)action).getGroup().getGroupNumber());
                 }
                 else if (action.getType().equals(OFActionType.OUTPUT)){
-                    jGen.writeNumberField("group", ((OFActionOutput)action).getPort().getPortNumber());
+                    if (((OFActionOutput)action).getPort().getPortNumber() == -3){
+                        //Controller port
+                        jGen.writeStringField("output", "CONTROLLER");
+                    }
+                    else{
+                        jGen.writeNumberField("output", ((OFActionOutput)action).getPort().getPortNumber());
+                    }
                 }
                 else if(action.getType().compareTo(OFActionType.POP_MPLS) == 0
                         || action.getType().compareTo(OFActionType.COPY_TTL_IN) == 0
@@ -164,13 +178,23 @@
         jGen.writeEndArray();
         jGen.writeEndObject();
     }
+    /**
+     * Get the number of 1's in the 32bit integer
+     * Use full to convert wildcard mask(x.x.x.x) to \x notation
+     * for example
+     * ("0.0.0.255") to int to "/8" or
+     * ("0.0.255.255") to int to "/16"
+     * @param x
+     * @return
+     */
+    
     public static int covertToMask(int x) {
-        x = x - ((x >>> 1) & 0x55555555); 
-        x = (x & 0x33333333) + ((x >>> 2) & 0x33333333); 
-        x = (x + (x >>> 4)) & 0x0F0F0F0F; 
-        x = x + (x >>> 8); 
-        x = x + (x >>> 16); 
-        return x & 0x0000003F; 
+        x = x - ((x >>> 1) & 0x55555555);
+        x = (x & 0x33333333) + ((x >>> 2) & 0x33333333);
+        x = (x + (x >>> 4)) & 0x0F0F0F0F;
+        x = x + (x >>> 8);
+        x = x + (x >>> 16);
+        return 32 - (x & 0x0000003F);
     } 
 
 }
diff --git a/src/main/java/net/floodlightcontroller/core/web/serializers/OFGroupDescStatsEntryModSerializer.java b/src/main/java/net/floodlightcontroller/core/web/serializers/OFGroupDescStatsEntryModSerializer.java
index 4033bc8..d4f214a 100644
--- a/src/main/java/net/floodlightcontroller/core/web/serializers/OFGroupDescStatsEntryModSerializer.java
+++ b/src/main/java/net/floodlightcontroller/core/web/serializers/OFGroupDescStatsEntryModSerializer.java
@@ -49,16 +49,13 @@
                         jGen.writeStringField("SET_DL_DST", ((OFActionSetField)action).getField().getValue().toString());
                     }
                     else if (((OFActionSetField)action).getField().toString().contains("OFOxmMplsLabelVer13")){
-                        jGen.writeStringField("PUSH_MPLS", ((OFActionSetField)action).getField().getValue().toString());
+                        jGen.writeNumberField("PUSH_MPLS", 
+                                Integer.decode(((OFActionSetField)action).getField().getValue().toString()));
                     }
                 }
                 else if(action.getType().compareTo(OFActionType.OUTPUT) == 0){
                     jGen.writeNumberField("OUTPPUT", ((OFActionOutput)action).getPort().getPortNumber());
                 }
-                //else if(action.getType().compareTo(OFActionType.PUSH_MPLS) == 0){
-                //    jGen.writeNumberField("POP_MPLS", Integer.parseInt(((OFActionSetField)action).getField().getValue().toString()));
-                //    System.out.println("\n\n\nPOP:" + Integer.decode("0x"+((OFActionPopMpls)action).getEthertype().toString()));
-                //}
                 else if(action.getType().compareTo(OFActionType.POP_MPLS) == 0){
                     jGen.writeStringField("POP_MPLS", "True");
                 }
