diff --git a/apps/t3/src/main/java/org/onosproject/t3/cli/TroubleshootTraceCommand.java b/apps/t3/src/main/java/org/onosproject/t3/cli/TroubleshootTraceCommand.java
index fdeb944..c809065 100644
--- a/apps/t3/src/main/java/org/onosproject/t3/cli/TroubleshootTraceCommand.java
+++ b/apps/t3/src/main/java/org/onosproject/t3/cli/TroubleshootTraceCommand.java
@@ -20,6 +20,7 @@
 import org.apache.karaf.shell.commands.Option;
 import org.onlab.packet.IpAddress;
 import org.onlab.packet.MacAddress;
+import org.onlab.packet.MplsLabel;
 import org.onlab.packet.TpPort;
 import org.onlab.packet.VlanId;
 import org.onosproject.cli.AbstractShellCommand;
@@ -84,8 +85,11 @@
     @Option(name = "-vid", aliases = "--vlanId", description = "Vlan of incoming packet", valueToShowInHelp = "None")
     String vlan = "None";
 
+    @Option(name = "-ml", aliases = "--mplsLabel", description = "Mpls label of incoming packet")
+    String mplsLabel = null;
+
     @Option(name = "-mb", aliases = "--mplsBos", description = "MPLS BOS", valueToShowInHelp = "True")
-    String mplsBos = "true";
+    String mplsBos = null;
 
     @Override
     protected void execute() {
@@ -134,8 +138,13 @@
         //if vlan option is not specified using NONE
         selectorBuilder.matchVlanId(VlanId.vlanId(vlan));
 
-        //if mplsBos option is not specified using True
-        selectorBuilder.matchMplsBos(Boolean.valueOf(mplsBos));
+        if (mplsLabel != null) {
+            selectorBuilder.matchMplsLabel(MplsLabel.mplsLabel(Integer.parseInt(mplsLabel)));
+        }
+
+        if (mplsBos != null) {
+            selectorBuilder.matchMplsBos(Boolean.valueOf(mplsBos));
+        }
 
         TrafficSelector packet = selectorBuilder.build();
 
diff --git a/apps/t3/src/main/java/org/onosproject/t3/impl/TroubleshootManager.java b/apps/t3/src/main/java/org/onosproject/t3/impl/TroubleshootManager.java
index 24cd251..b66996d 100644
--- a/apps/t3/src/main/java/org/onosproject/t3/impl/TroubleshootManager.java
+++ b/apps/t3/src/main/java/org/onosproject/t3/impl/TroubleshootManager.java
@@ -435,9 +435,11 @@
         //If the pakcet comes in with the expected elements we update it as per OFDPA spec.
         if (mplsCriterion != null && ((EthTypeCriterion) mplsCriterion).ethType()
                 .equals(EtherType.MPLS_UNICAST.ethType())) {
+            //TODO update with parsing with eth MPLS pop Instruction for treating label an bos
             Instruction ethInstruction = Instructions.popMpls(((EthTypeCriterion) trace.getInitialPacket()
                     .getCriterion(Criterion.Type.ETH_TYPE)).ethType());
             //FIXME what do we use as L3_Unicast mpls Label ?
+            //translateInstruction(builder, ethInstruction);
             builder.add(ethInstruction);
         }
         packet = updatePacket(packet, builder.build()).build();
@@ -548,9 +550,10 @@
     private TrafficSelector.Builder updatePacket(TrafficSelector packet, List<Instruction> instructions) {
         TrafficSelector.Builder newSelector = DefaultTrafficSelector.builder();
         packet.criteria().forEach(newSelector::add);
-        instructions.forEach(instruction -> {
-            translateInstruction(newSelector, instruction);
-        });
+        //FIXME optimize
+        for (Instruction instruction : instructions) {
+            newSelector = translateInstruction(newSelector, instruction);
+        }
         return newSelector;
     }
 
@@ -563,6 +566,7 @@
      */
     private TrafficSelector.Builder translateInstruction(TrafficSelector.Builder newSelector, Instruction instruction) {
         log.debug("Translating instruction {}", instruction);
+        log.debug("New Selector {}", newSelector.build());
         //TODO add as required
         Criterion criterion = null;
         switch (instruction.type()) {
@@ -587,11 +591,24 @@
                         L2ModificationInstruction.ModMplsHeaderInstruction mplsPopInstruction =
                                 (L2ModificationInstruction.ModMplsHeaderInstruction) instruction;
                         criterion = Criteria.matchEthType(mplsPopInstruction.ethernetType().toShort());
+
+                        //When popping MPLS we remove label and BOS
+                        TrafficSelector temporaryPacket = newSelector.build();
+                        if (temporaryPacket.getCriterion(Criterion.Type.MPLS_LABEL) != null) {
+                            TrafficSelector.Builder noMplsSelector = DefaultTrafficSelector.builder();
+                            temporaryPacket.criteria().stream().filter(c -> {
+                                return !c.type().equals(Criterion.Type.MPLS_LABEL) &&
+                                        !c.type().equals(Criterion.Type.MPLS_BOS);
+                            }).forEach(noMplsSelector::add);
+                            newSelector = noMplsSelector;
+                        }
+
                         break;
                     case MPLS_LABEL:
                         L2ModificationInstruction.ModMplsLabelInstruction mplsLabelInstruction =
                                 (L2ModificationInstruction.ModMplsLabelInstruction) instruction;
                         criterion = Criteria.matchMplsLabel(mplsLabelInstruction.label());
+                        newSelector.matchMplsBos(true);
                         break;
                     case ETH_DST:
                         L2ModificationInstruction.ModEtherInstruction modEtherDstInstruction =
