diff --git a/cli/cli/c_actions.py b/cli/cli/c_actions.py
index 3c9adb0..e06819b 100755
--- a/cli/cli/c_actions.py
+++ b/cli/cli/c_actions.py
@@ -2019,10 +2019,9 @@
     if format:
         #
         detail = command_display_rest_join_entries(table_format, data, entries, detail)
-
-        if 'realtimestats' in data and data['realtimestats'] == 'flow':
-            entries = sdnsh.fix_realtime_flows(entries)
-            check_single_entry = False
+        #if 'realtimestats' in data and data['realtimestats'] == 'flow':
+        #    entries = sdnsh.fix_realtime_flows(entries)
+        #    check_single_entry = False
 
         if 'realtimestats' in data and data['realtimestats'] == 'features':
             for entry in entries:
diff --git a/cli/cli/desc/version200/core.py b/cli/cli/desc/version200/core.py
index 5085216..cca3240 100755
--- a/cli/cli/desc/version200/core.py
+++ b/cli/cli/desc/version200/core.py
@@ -155,7 +155,7 @@
          'tech-support',
     ),
 }
-"""
+
 SHOW_FLOW_ENTRY_COMMAND_DESCRIPTION = {
     'name'         : 'show',
     'obj-type'     : 'flow-entry',
@@ -186,7 +186,7 @@
 
     )
 }
-
+"""
 SHOW_FIREWALL_COMMAND_DESCRIPTION = {
     'name'         : 'show',
     'obj-type'     : 'firewall-rule',
diff --git a/cli/cli/desc/version200/flow_entry.py b/cli/cli/desc/version200/flow_entry.py
index bbb49f9..dfe9449 100755
--- a/cli/cli/desc/version200/flow_entry.py
+++ b/cli/cli/desc/version200/flow_entry.py
@@ -15,7 +15,7 @@
 #
 
 import fmtcnv
-"""
+
 FLOW_ENTRY_SUBMODE_COMMAND_DESCRIPTION = {
     'name'            : 'flow-entry',
     'mode'            : 'config-switch*',
@@ -489,4 +489,4 @@
             },
         },
 }
-"""
+
diff --git a/cli/sdncon/controller/models.py b/cli/sdncon/controller/models.py
index e678aa2..1181f32 100755
--- a/cli/sdncon/controller/models.py
+++ b/cli/sdncon/controller/models.py
@@ -1027,7 +1027,7 @@
         FIELD_INFO = (
             {'name': 'switch_interface', 'rest_name': 'switch-interface'},
         )
-"""
+
 #
 # ------------------------------------------------------------
 
@@ -1207,7 +1207,7 @@
             {'name': 'tp_dst',          'rest_name': 'dst-port'},
             {'name': 'actions',         'rest_name': 'actions'},
             )
-"""
+
 
 #
 # ------------------------------------------------------------
diff --git a/cli/sdncon/rest/views.py b/cli/sdncon/rest/views.py
index 44af953..c8ff42e 100755
--- a/cli/sdncon/rest/views.py
+++ b/cli/sdncon/rest/views.py
@@ -404,6 +404,7 @@
     This returns realtime statistics (flows, ports, table, aggregate,
     desc, ...)  for a dpid by calling the localhost sdnplatform
     """
+    #raise RestInvalidMethodException()
     if request.method != 'GET':
         raise RestInvalidMethodException()
     #url = controller_url('core', 'switch', dpid, stattype, 'json')
@@ -412,6 +413,7 @@
     if stattype == 'groupdesc':
         stattype = 'groupDesc'
     url = "http://localhost:8080/wm/floodlight/core/switch/%s/%s/json" % (dpid, stattype)
+    #url ="http://localhost:8080/wm/floodlight/core/switch/00:00:00:00:00:00:00:01/flow/json"
     return get_sdnplatform_response(url)
 
 @safe_rest_view
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 f1936c2..b340ba9 100644
--- a/src/main/java/net/floodlightcontroller/core/web/serializers/OFFlowStatsEntryModSerializer.java
+++ b/src/main/java/net/floodlightcontroller/core/web/serializers/OFFlowStatsEntryModSerializer.java
@@ -2,21 +2,27 @@
 
 import java.io.IOException;
 import java.util.Iterator;
+import java.util.List;
 import java.util.Set;
 
 import net.floodlightcontroller.core.web.OFFlowStatsEntryMod;
 
+import org.projectfloodlight.openflow.protocol.action.*;
 import org.codehaus.jackson.JsonGenerationException;
 import org.codehaus.jackson.JsonGenerator;
 import org.codehaus.jackson.map.SerializerProvider;
 import org.codehaus.jackson.map.ser.std.SerializerBase;
+import org.projectfloodlight.openflow.protocol.OFActionType;
 import org.projectfloodlight.openflow.protocol.OFFlowModFlags;
 import org.projectfloodlight.openflow.protocol.OFFlowStatsEntry;
+import org.projectfloodlight.openflow.protocol.OFInstructionType;
 import org.projectfloodlight.openflow.protocol.OFMatchV3;
 import org.projectfloodlight.openflow.protocol.OFOxmList;
+import org.projectfloodlight.openflow.protocol.action.OFAction;
+import org.projectfloodlight.openflow.protocol.instruction.*;
 import org.projectfloodlight.openflow.protocol.match.MatchFields;
 import org.projectfloodlight.openflow.protocol.oxm.OFOxm;
-import org.projectfloodlight.openflow.protocol.oxm.OFOxmIpv4DstMasked;
+import org.projectfloodlight.openflow.protocol.ver13.OFInstructionTypeSerializerVer13;
 
 public class OFFlowStatsEntryModSerializer extends SerializerBase<OFFlowStatsEntryMod> {
     
@@ -30,10 +36,14 @@
             JsonGenerationException {
         OFFlowStatsEntry flowStatsEntry = FlowStatsEntryMod.getFlowStatsEntry();
         OFOxmList matches = ((OFMatchV3)flowStatsEntry.getMatch()).getOxmList();
+        
+        List<OFInstruction> instructions = flowStatsEntry.getInstructions();
         Set<OFFlowModFlags> flags = flowStatsEntry.getFlags();
         jGen.writeStartObject();
         
         jGen.writeNumberField("byteCount", flowStatsEntry.getByteCount().getValue());
+        jGen.writeNumberField("pktCount", flowStatsEntry.getPacketCount().getValue());
+        jGen.writeNumberField("priority", flowStatsEntry.getPriority());
         jGen.writeNumberField("cookie", flowStatsEntry.getCookie().getValue());
         jGen.writeNumberField("durationNsec", flowStatsEntry.getDurationNsec());
         jGen.writeNumberField("durationSec", flowStatsEntry.getDurationSec());
@@ -45,20 +55,97 @@
         jGen.writeNumberField("hardTimeout", flowStatsEntry.getHardTimeout());
         jGen.writeNumberField("idleTimeout", flowStatsEntry.getIdleTimeout());
         jGen.writeArrayFieldStart("match");
-        //jGen.writeStartObject();
+        jGen.writeStartObject();
         Iterator<OFOxm<?>> match= matches.iterator();
         while(match.hasNext()){
             OFOxm<?> matchGeneric = match.next();
+            //jGen.writeObjectField(matchGeneric.getMatchField().id.toString(), matchGeneric.getValue().toString());
             if (matchGeneric.getMatchField().id == MatchFields.IPV4_DST){
-                
-                //jGen.writeObjectField("networkDestination", ((OFOxmIpv4DstVer13) matchGeneric).getValue());
+                jGen.writeStringField("networkDestination", matchGeneric.getValue().toString());
             }
-            
-            
+            else if (matchGeneric.getMatchField().id == MatchFields.IPV4_SRC){
+                jGen.writeStringField("networkSource", matchGeneric.getValue().toString());
+            }
+            else if (matchGeneric.getMatchField().id == MatchFields.ETH_DST){
+                jGen.writeStringField("dataLayerDestination", matchGeneric.getValue().toString());
+            }
+            else if (matchGeneric.getMatchField().id == MatchFields.ETH_SRC){
+                jGen.writeStringField("dataLayerSource", matchGeneric.getValue().toString());
+            }
+            else if (matchGeneric.getMatchField().id == MatchFields.ETH_TYPE){
+                jGen.writeStringField("dataLayerType", "0x"+matchGeneric.getValue().toString());
+            }
+            else if (matchGeneric.getMatchField().id == MatchFields.IN_PORT){
+                jGen.writeNumberField("inputPort", Integer.parseInt(matchGeneric.getValue().toString()));
+            }
+            else if (matchGeneric.getMatchField().id == MatchFields.MPLS_TC){
+                jGen.writeNumberField("mplsTc", Integer.parseInt(matchGeneric.getValue().toString()));
+            }
+            else if (matchGeneric.getMatchField().id == MatchFields.MPLS_LABEL){
+                jGen.writeNumberField("mplsLabel", Integer.parseInt(matchGeneric.getValue().toString()));
+            }
+            else if (matchGeneric.getMatchField().id == MatchFields.IP_PROTO){
+                jGen.writeNumberField("networkProtocol", Integer.parseInt(matchGeneric.getValue().toString())); 
+            }
+            //TODO: Ask Saurav about the implementation of tcp and udp.
+            else if (matchGeneric.getMatchField().id == MatchFields.TCP_DST || matchGeneric.getMatchField().id == MatchFields.UDP_DST){
+                jGen.writeNumberField("transportDestination", Integer.parseInt(matchGeneric.getValue().toString()));
+            }
+            else if (matchGeneric.getMatchField().id == MatchFields.TCP_SRC || matchGeneric.getMatchField().id == MatchFields.UDP_SRC){
+                jGen.writeNumberField("transportSource", Integer.parseInt(matchGeneric.getValue().toString()));
+            }
         }
+        jGen.writeEndObject();
         jGen.writeEndArray();
 
+        /*\jGen.writeArrayFieldStart("instructions");
+        jGen.writeStartObject();
+        for (OFInstruction instruction: instructions){
+            jGen.writeObjectField("instructionType", instruction.getType().name());
+            jGen.writeArrayFieldStart("actions");
+            jGen.writeStartObject();
+            //OFInstructionApplyActions newInstruction = instruction.getClass().cast(instruction);
+            //instruction = ;
+            //instruction.g
+            if (instruction.getType().equals(OFInstructionType.APPLY_ACTIONS)){
+                //import org.projectfloodlight.openflow.protocol.instruction.OFInstructionApplyActions
+                List<OFAction> actions = ((OFInstructionApplyActions) instruction).getActions();
+                for (OFAction action : actions){
+                    a
+                }
+            }
+            else if (instruction.getType().equals(OFInstructionType.APPLY_ACTIONS)){
+                List<OFAction> actions = ((OFInstructionApplyActions) instruction).getActions();
+            }
+            jGen.writeEndObject();
+            jGen.writeEndArray();
+        }
         jGen.writeEndObject();
+        jGen.writeEndArray();*/
+        jGen.writeEndObject();
+
+        
+        //for (OFAction action : actions){
+            /*if(action.getType().compareTo(OFActionType.SET_FIELD) == 0){
+                /*
+                 * TODO: 1-Need better if condition.
+                 * TODO: 2-Complete REST response. (Right now we are only sending what 
+                 * SegmentRouter CLI needs).
+                 */
+                /*if (((OFActionSetField)action).getField().toString().contains("OFOxmEthSrcVer13")){
+                    jGen.writeStringField("SET_DL_SRC", ((OFActionSetField)action).getField().getValue().toString());
+                }
+                else if (((OFActionSetField)action).getField().toString().contains("OFOxmEthDstVer13")){
+                    jGen.writeStringField("SET_DL_DST", ((OFActionSetField)action).getField().getValue().toString());
+                }
+                System.out
+            }
+            else if(action.getType().compareTo(OFActionType.OUTPUT) == 0){
+                jGen.writeNumberField("OUTPPUT", ((OFActionOutput)action).getPort().getPortNumber());
+            }*/
+        //}
+        //jGen.writeEndObject();
+
     }
     
 
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 b4bddc7..c550674 100644
--- a/src/main/java/net/floodlightcontroller/core/web/serializers/OFGroupDescStatsEntryModSerializer.java
+++ b/src/main/java/net/floodlightcontroller/core/web/serializers/OFGroupDescStatsEntryModSerializer.java
@@ -20,6 +20,7 @@
     protected OFGroupDescStatsEntryModSerializer(){
         super(OFGroupDescStatsEntryMod.class);
     }
+//TODO:- Java-doc
 
     @Override
     public void serialize(OFGroupDescStatsEntryMod groupDescStatsModEntry, JsonGenerator jGen,
@@ -36,7 +37,11 @@
             List<OFAction> actions = bucket.getActions();
             for (OFAction action : actions ){
                 if(action.getType().compareTo(OFActionType.SET_FIELD) == 0){
-                    //TODO: Need better if condition.
+                    /*
+                     * TODO: 1-Need better if condition.
+                     * TODO: 2-Complete REST response. (Right now we are only sending what 
+                     * SegmentRouter CLI needs).
+                     */
                     if (((OFActionSetField)action).getField().toString().contains("OFOxmEthSrcVer13")){
                         jGen.writeStringField("SET_DL_SRC", ((OFActionSetField)action).getField().getValue().toString());
                     }
