diff --git a/src/main/java/net/floodlightcontroller/core/web/OFFlowStatsEntryMod.java b/src/main/java/net/floodlightcontroller/core/web/OFFlowStatsEntryMod.java
index ead1aff..d9095d6 100644
--- a/src/main/java/net/floodlightcontroller/core/web/OFFlowStatsEntryMod.java
+++ b/src/main/java/net/floodlightcontroller/core/web/OFFlowStatsEntryMod.java
@@ -1,10 +1,11 @@
 package net.floodlightcontroller.core.web;
 
+import net.floodlightcontroller.core.web.serializers.OFFlowStatsEntryModSerializer;
+
 import org.projectfloodlight.openflow.protocol.OFFlowStatsEntry;
 
-import com.fasterxml.jackson.databind.annotation.JsonSerialize;
-
-//@JsonSerialize(using = OFFlowStatsEntryModSerializer.class)
+import org.codehaus.jackson.map.annotate.JsonSerialize;
+@JsonSerialize(using = OFFlowStatsEntryModSerializer.class)
 public class OFFlowStatsEntryMod {
     private OFFlowStatsEntry FlowStatsEntry = null;
 
@@ -15,7 +16,7 @@
         this.FlowStatsEntry = FlowStatsEntry;
     }
 
-    public OFFlowStatsEntry getFlowStatsEntr() {
+    public OFFlowStatsEntry getFlowStatsEntry() {
         return this.FlowStatsEntry;
     }
 
diff --git a/src/main/java/net/floodlightcontroller/core/web/SwitchResourceBase.java b/src/main/java/net/floodlightcontroller/core/web/SwitchResourceBase.java
index def6a7d..8e4208c 100644
--- a/src/main/java/net/floodlightcontroller/core/web/SwitchResourceBase.java
+++ b/src/main/java/net/floodlightcontroller/core/web/SwitchResourceBase.java
@@ -27,6 +27,7 @@
 import net.floodlightcontroller.core.annotations.LogMessageDoc;
 
 import org.projectfloodlight.openflow.protocol.OFFeaturesReply;
+import org.projectfloodlight.openflow.protocol.OFFlowStatsEntry;
 import org.projectfloodlight.openflow.protocol.OFGroupDescStatsEntry;
 import org.projectfloodlight.openflow.protocol.OFGroupDescStatsReply;
 import org.projectfloodlight.openflow.protocol.OFGroupStatsEntry;
@@ -34,6 +35,7 @@
 import org.projectfloodlight.openflow.protocol.OFMatchV3;
 import org.projectfloodlight.openflow.protocol.OFOxmList;
 import org.projectfloodlight.openflow.protocol.OFPortStatsEntry;
+import org.projectfloodlight.openflow.protocol.OFFlowStatsReply;
 import org.projectfloodlight.openflow.protocol.OFPortStatsReply;
 import org.projectfloodlight.openflow.protocol.OFPortStatsRequest;
 import org.projectfloodlight.openflow.protocol.OFStatsReply;
@@ -96,6 +98,21 @@
                         .setOutPort(OFPort.ANY)
                         .setTableId(TableId.ALL)
                         .setXid(sw.getNextTransactionId()).build();
+                List<OFFlowStatsEntryMod> flowStats = new ArrayList<OFFlowStatsEntryMod>();
+                try {
+                    future = sw.getStatistics(req);
+                    values = future.get(10, TimeUnit.SECONDS);
+                    System.out.println("value\n\n\n"+ values);
+                    for (OFFlowStatsEntry entry : ((OFFlowStatsReply)values.get(0)).getEntries()) {
+                        OFFlowStatsEntryMod entryMod = new OFFlowStatsEntryMod(entry);
+                        flowStats.add(entryMod);
+                    }
+                    log.debug("Switch flow Stats Entries from switch {} are {}",
+                            sw.getStringId(), flowStats);
+                } catch (Exception e) {
+                    log.error("Failure retrieving statistics from switch " + sw, e);
+                }
+                return flowStats;
             } 
             else if (statType == OFStatsType.PORT){
                 log.debug("Switch Port Stats: req sent for all "
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 2cce2d8..f1936c2 100644
--- a/src/main/java/net/floodlightcontroller/core/web/serializers/OFFlowStatsEntryModSerializer.java
+++ b/src/main/java/net/floodlightcontroller/core/web/serializers/OFFlowStatsEntryModSerializer.java
@@ -1,6 +1,8 @@
 package net.floodlightcontroller.core.web.serializers;
 
 import java.io.IOException;
+import java.util.Iterator;
+import java.util.Set;
 
 import net.floodlightcontroller.core.web.OFFlowStatsEntryMod;
 
@@ -8,6 +10,13 @@
 import org.codehaus.jackson.JsonGenerator;
 import org.codehaus.jackson.map.SerializerProvider;
 import org.codehaus.jackson.map.ser.std.SerializerBase;
+import org.projectfloodlight.openflow.protocol.OFFlowModFlags;
+import org.projectfloodlight.openflow.protocol.OFFlowStatsEntry;
+import org.projectfloodlight.openflow.protocol.OFMatchV3;
+import org.projectfloodlight.openflow.protocol.OFOxmList;
+import org.projectfloodlight.openflow.protocol.match.MatchFields;
+import org.projectfloodlight.openflow.protocol.oxm.OFOxm;
+import org.projectfloodlight.openflow.protocol.oxm.OFOxmIpv4DstMasked;
 
 public class OFFlowStatsEntryModSerializer extends SerializerBase<OFFlowStatsEntryMod> {
     
@@ -19,7 +28,38 @@
     public void serialize(OFFlowStatsEntryMod FlowStatsEntryMod, JsonGenerator jGen,
             SerializerProvider sp) throws IOException,
             JsonGenerationException {
+        OFFlowStatsEntry flowStatsEntry = FlowStatsEntryMod.getFlowStatsEntry();
+        OFOxmList matches = ((OFMatchV3)flowStatsEntry.getMatch()).getOxmList();
+        Set<OFFlowModFlags> flags = flowStatsEntry.getFlags();
+        jGen.writeStartObject();
         
+        jGen.writeNumberField("byteCount", flowStatsEntry.getByteCount().getValue());
+        jGen.writeNumberField("cookie", flowStatsEntry.getCookie().getValue());
+        jGen.writeNumberField("durationNsec", flowStatsEntry.getDurationNsec());
+        jGen.writeNumberField("durationSec", flowStatsEntry.getDurationSec());
+        jGen.writeArrayFieldStart("flags");
+        for (OFFlowModFlags flag: flags){
+            jGen.writeNullField(flag.name());;
+        }
+        jGen.writeEndArray();
+        jGen.writeNumberField("hardTimeout", flowStatsEntry.getHardTimeout());
+        jGen.writeNumberField("idleTimeout", flowStatsEntry.getIdleTimeout());
+        jGen.writeArrayFieldStart("match");
+        //jGen.writeStartObject();
+        Iterator<OFOxm<?>> match= matches.iterator();
+        while(match.hasNext()){
+            OFOxm<?> matchGeneric = match.next();
+            if (matchGeneric.getMatchField().id == MatchFields.IPV4_DST){
+                
+                //jGen.writeObjectField("networkDestination", ((OFOxmIpv4DstVer13) matchGeneric).getValue());
+            }
+            
+            
+        }
+        jGen.writeEndArray();
+
+        jGen.writeEndObject();
     }
+    
 
 }
diff --git a/src/main/java/net/onrc/onos/apps/segmentrouting/SegmentRoutingManager.java b/src/main/java/net/onrc/onos/apps/segmentrouting/SegmentRoutingManager.java
index 918a12f..91f1262 100644
--- a/src/main/java/net/onrc/onos/apps/segmentrouting/SegmentRoutingManager.java
+++ b/src/main/java/net/onrc/onos/apps/segmentrouting/SegmentRoutingManager.java
@@ -312,6 +312,9 @@
 
             IOF13Switch sw = (IOF13Switch) floodlightProvider.getMasterSwitch(
                     getSwId(port.getDpid().toString()));
+            if (sw == null){
+                return;
+            }
             sw.addPortToGroups(port.getPortNumber());
 
             log.debug("Add port {} to switch {}", port, dpid);
