diff --git a/src/main/java/net/floodlightcontroller/core/web/OFFlowStatsEntryMod.java b/src/main/java/net/floodlightcontroller/core/web/OFFlowStatsEntryMod.java
index d9095d6..c4b2606 100644
--- a/src/main/java/net/floodlightcontroller/core/web/OFFlowStatsEntryMod.java
+++ b/src/main/java/net/floodlightcontroller/core/web/OFFlowStatsEntryMod.java
@@ -1,23 +1,32 @@
 package net.floodlightcontroller.core.web;
 
+import net.floodlightcontroller.core.IOFSwitch;
 import net.floodlightcontroller.core.web.serializers.OFFlowStatsEntryModSerializer;
 
 import org.projectfloodlight.openflow.protocol.OFFlowStatsEntry;
-
 import org.codehaus.jackson.map.annotate.JsonSerialize;
 @JsonSerialize(using = OFFlowStatsEntryModSerializer.class)
 public class OFFlowStatsEntryMod {
     private OFFlowStatsEntry FlowStatsEntry = null;
+    /*
+     * need switch to get table name so the we could sepcify table name (ip,acl,mpls)
+     * instead of table number
+     */
+    private IOFSwitch sw;
 
     public  OFFlowStatsEntryMod() {
     }
 
-    public  OFFlowStatsEntryMod(OFFlowStatsEntry FlowStatsEntry) {
+    public  OFFlowStatsEntryMod(OFFlowStatsEntry FlowStatsEntry, IOFSwitch sw1) {
         this.FlowStatsEntry = FlowStatsEntry;
+        this.sw = sw1;
     }
 
     public OFFlowStatsEntry getFlowStatsEntry() {
         return this.FlowStatsEntry;
     }
+    public IOFSwitch getSwitch(){
+        return this.sw;
+    }
 
 }
diff --git a/src/main/java/net/floodlightcontroller/core/web/OFGroupDescStatsEntryMod.java b/src/main/java/net/floodlightcontroller/core/web/OFGroupDescStatsEntryMod.java
index e7ca358..15a230b 100644
--- a/src/main/java/net/floodlightcontroller/core/web/OFGroupDescStatsEntryMod.java
+++ b/src/main/java/net/floodlightcontroller/core/web/OFGroupDescStatsEntryMod.java
@@ -8,17 +8,17 @@
 @JsonSerialize(using = OFGroupDescStatsEntryModSerializer.class)
 
 public class OFGroupDescStatsEntryMod {
-        private OFGroupDescStatsEntry GroupDescStatsEntry = null;
+    private OFGroupDescStatsEntry GroupDescStatsEntry = null;
 
-        public OFGroupDescStatsEntryMod() {
-        }
+    public OFGroupDescStatsEntryMod() {
+    }
 
-        public OFGroupDescStatsEntryMod(OFGroupDescStatsEntry GroupStatsEntry) {
-            this.GroupDescStatsEntry = GroupStatsEntry;
-        }
+    public OFGroupDescStatsEntryMod(OFGroupDescStatsEntry GroupStatsEntry) {
+        this.GroupDescStatsEntry = GroupStatsEntry;
+    }
 
-        public OFGroupDescStatsEntry getGroupDescStatsEntry() {
-            return this.GroupDescStatsEntry;
-        }
+    public OFGroupDescStatsEntry getGroupDescStatsEntry() {
+        return this.GroupDescStatsEntry;
+    }
 
 }
diff --git a/src/main/java/net/floodlightcontroller/core/web/SwitchResourceBase.java b/src/main/java/net/floodlightcontroller/core/web/SwitchResourceBase.java
index fd78c1f..56d5355 100644
--- a/src/main/java/net/floodlightcontroller/core/web/SwitchResourceBase.java
+++ b/src/main/java/net/floodlightcontroller/core/web/SwitchResourceBase.java
@@ -103,7 +103,7 @@
                     future = sw.getStatistics(req);
                     values = future.get(10, TimeUnit.SECONDS);
                     for (OFFlowStatsEntry entry : ((OFFlowStatsReply)values.get(0)).getEntries()) {
-                        OFFlowStatsEntryMod entryMod = new OFFlowStatsEntryMod(entry);
+                        OFFlowStatsEntryMod entryMod = new OFFlowStatsEntryMod(entry, sw);
                         flowStats.add(entryMod);
                     }
                     log.debug("Switch flow Stats Entries from switch {} are {}",
@@ -244,7 +244,7 @@
                     future = sw.getStatistics(req);
                     values = future.get(10, TimeUnit.SECONDS);
                     for (OFFlowStatsEntry entry : ((OFFlowStatsReply)values.get(0)).getEntries()) {
-                        OFFlowStatsEntryMod entryMod = new OFFlowStatsEntryMod(entry);
+                        OFFlowStatsEntryMod entryMod = new OFFlowStatsEntryMod(entry, sw);
                         flowStats.add(entryMod);
                     }
                     log.debug("Switch flow Stats Entries for table {} from switch {} are {}",
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 1ce945b..5619702 100644
--- a/src/main/java/net/floodlightcontroller/core/web/serializers/OFFlowStatsEntryModSerializer.java
+++ b/src/main/java/net/floodlightcontroller/core/web/serializers/OFFlowStatsEntryModSerializer.java
@@ -6,6 +6,7 @@
 import java.util.Set;
 
 import net.floodlightcontroller.core.web.OFFlowStatsEntryMod;
+import net.onrc.onos.core.drivermanager.OFSwitchImplSpringOpenTTP;
 import net.onrc.onos.core.packet.IPv4;
 
 import org.projectfloodlight.openflow.protocol.action.*;
@@ -36,6 +37,7 @@
             JsonGenerationException {
         OFFlowStatsEntry flowStatsEntry = FlowStatsEntryMod.getFlowStatsEntry();
         OFOxmList matches = ((OFMatchV3)flowStatsEntry.getMatch()).getOxmList();
+        OFSwitchImplSpringOpenTTP sw = (OFSwitchImplSpringOpenTTP)FlowStatsEntryMod.getSwitch();
         
         List<OFInstruction> instructions = flowStatsEntry.getInstructions();
         jGen.writeStartObject();
@@ -121,8 +123,22 @@
                 
                 jGen.writeFieldName(instruction.getType().name());
                 jGen.writeStartObject();
-                jGen.writeNumberField("tableId"
-                        , ((OFInstructionGotoTable)instruction).getTableId().getValue());
+                if(((OFInstructionGotoTable)instruction).getTableId().getValue()==
+                        sw.getTableId("ip").getValue()){
+                    jGen.writeStringField("tableId", "ip");
+                }
+                else if(((OFInstructionGotoTable)instruction).getTableId().getValue()==
+                        sw.getTableId("mpls").getValue()){
+                    jGen.writeStringField("tableId", "mpls");
+                }
+                else if(((OFInstructionGotoTable)instruction).getTableId().getValue()==
+                        sw.getTableId("acl").getValue()){
+                    jGen.writeStringField("tableId", "acl");
+                }
+                else{
+                    jGen.writeNumberField("tableId"
+                            , ((OFInstructionGotoTable)instruction).getTableId().getValue());
+                }
                 jGen.writeEndObject();
                 continue;
             }//*/
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 3b1ca58..e3fec5c 100644
--- a/src/main/java/net/floodlightcontroller/core/web/serializers/OFGroupDescStatsEntryModSerializer.java
+++ b/src/main/java/net/floodlightcontroller/core/web/serializers/OFGroupDescStatsEntryModSerializer.java
@@ -2,6 +2,7 @@
 import java.io.IOException;
 import java.util.List;
 
+import net.floodlightcontroller.core.IOFSwitch;
 import net.floodlightcontroller.core.web.OFGroupDescStatsEntryMod;
 
 import org.apache.commons.codec.binary.Hex;
@@ -58,12 +59,13 @@
                     }
                 }
                 else if(action.getType().compareTo(OFActionType.OUTPUT) == 0){
-                    jGen.writeNumberField("OUTPPUT", ((OFActionOutput)action).getPort().getPortNumber());
+                    jGen.writeNumberField("OUTPUT", ((OFActionOutput)action).getPort().getPortNumber());
                 }
                 else if(action.getType().compareTo(OFActionType.POP_MPLS) == 0){
                     jGen.writeStringField("POP_MPLS",  "0x"+((OFActionPopMpls)action).getEthertype().toString());
                 }
                 else if(action.getType().compareTo(OFActionType.GROUP) == 0){
+                    ((OFActionGroup)action).getGroup().getGroupNumber();
                     jGen.writeNumberField("goToGroup", ((OFActionGroup)action).getGroup().getGroupNumber());
                 }
                 else if(action.getType().compareTo(OFActionType.COPY_TTL_IN) == 0
