diff --git a/cli/cli/c_actions.py b/cli/cli/c_actions.py
index 19bc031..637116d 100755
--- a/cli/cli/c_actions.py
+++ b/cli/cli/c_actions.py
@@ -2062,19 +2062,19 @@
                 print "command_display_rest: missing group desc for group id %s" % (groupId)
                 continue
             for bucketId in range(len(groupStatEntry['bucketStats'])):
-                setsrcmac = None
+                setsrcmac = '*'
                 if 'SET_DL_SRC' in groupDescEntry['bucketsActions'][bucketId]:
                     setsrcmac = groupDescEntry['bucketsActions'][bucketId]['SET_DL_SRC']
-                setdstmac = None
+                setdstmac = '*'
                 if 'SET_DL_DST' in groupDescEntry['bucketsActions'][bucketId]:
                     setdstmac = groupDescEntry['bucketsActions'][bucketId]['SET_DL_DST']
-                pushmpls = None
+                pushmpls = '*'
                 if 'PUSH_MPLS' in groupDescEntry['bucketsActions'][bucketId]:
                     pushmpls = groupDescEntry['bucketsActions'][bucketId]['PUSH_MPLS']
-                popmpls = None
+                popmpls = '*'
                 if 'POP_MPLS' in groupDescEntry['bucketsActions'][bucketId]:
                     popmpls = groupDescEntry['bucketsActions'][bucketId]['POP_MPLS']
-                outport = None
+                outport = '*'
                 if 'OUTPPUT' in groupDescEntry['bucketsActions'][bucketId]:
                     outport = groupDescEntry['bucketsActions'][bucketId]['OUTPPUT']
                 combResult.append({
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 c550674..405679d 100644
--- a/src/main/java/net/floodlightcontroller/core/web/serializers/OFGroupDescStatsEntryModSerializer.java
+++ b/src/main/java/net/floodlightcontroller/core/web/serializers/OFGroupDescStatsEntryModSerializer.java
@@ -4,6 +4,7 @@
 
 import net.floodlightcontroller.core.web.OFGroupDescStatsEntryMod;
 
+import org.apache.commons.codec.binary.Hex;
 import org.codehaus.jackson.JsonGenerationException;
 import org.codehaus.jackson.JsonGenerator;
 import org.codehaus.jackson.map.SerializerProvider;
@@ -11,7 +12,6 @@
 import org.projectfloodlight.openflow.protocol.OFActionType;
 import org.projectfloodlight.openflow.protocol.OFBucket;
 import org.projectfloodlight.openflow.protocol.OFGroupDescStatsEntry;
-import org.projectfloodlight.openflow.protocol.action.OFAction;
 import org.projectfloodlight.openflow.protocol.action.*;
 public class OFGroupDescStatsEntryModSerializer extends SerializerBase<OFGroupDescStatsEntryMod>{
 
@@ -36,6 +36,8 @@
             jGen.writeStartObject();
             List<OFAction> actions = bucket.getActions();
             for (OFAction action : actions ){
+                System.out.println("OFMessage: " + groupDescStatsEntryMod);
+                System.out.println("\naction.getType()\n"+ action.getType()+"\n"+ action.getClass());
                 if(action.getType().compareTo(OFActionType.SET_FIELD) == 0){
                     /*
                      * TODO: 1-Need better if condition.
@@ -48,10 +50,22 @@
                     else if (((OFActionSetField)action).getField().toString().contains("OFOxmEthDstVer13")){
                         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());
+                    }
                 }
                 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");
+                    System.out.println("\n\n\nPOP:" + Integer.decode("0x"+((OFActionPopMpls)action).getEthertype().toString()));
+                }
+                
             }
             jGen.writeEndObject();
         }
