diff --git a/core/api/src/main/java/org/onosproject/net/flow/DefaultTrafficTreatment.java b/core/api/src/main/java/org/onosproject/net/flow/DefaultTrafficTreatment.java
index da3cac6..bba3e91 100644
--- a/core/api/src/main/java/org/onosproject/net/flow/DefaultTrafficTreatment.java
+++ b/core/api/src/main/java/org/onosproject/net/flow/DefaultTrafficTreatment.java
@@ -41,6 +41,7 @@
 
     private final List<Instruction> immediate;
     private final List<Instruction> deferred;
+    private final List<Instruction> all;
     private final Instructions.TableTypeTransition table;
 
     private final boolean hasClear;
@@ -51,21 +52,31 @@
     /**
      * Creates a new traffic treatment from the specified list of instructions.
      *
-     * @param instructions treatment instructions
+     * @param immediate immediate instructions
      */
-    private DefaultTrafficTreatment(List<Instruction> instructions) {
-        this.immediate = ImmutableList.copyOf(checkNotNull(instructions));
+    private DefaultTrafficTreatment(List<Instruction> immediate) {
+        this.immediate = ImmutableList.copyOf(checkNotNull(immediate));
         this.deferred = ImmutableList.of();
+        this.all = this.immediate;
         this.hasClear = false;
         this.table = null;
     }
 
+    /**
+     * Creates a new traffic treatment from the specified list of instructions.
+     *
+     * @param deferred deferred instructions
+     * @param immediate immediate instructions
+     * @param table table transition instruction
+     * @param clear instruction to clear the deferred actions list
+     */
     private DefaultTrafficTreatment(List<Instruction> deferred,
                                    List<Instruction> immediate,
                                    Instructions.TableTypeTransition table,
                                    boolean clear) {
         this.immediate = ImmutableList.copyOf(checkNotNull(immediate));
         this.deferred = ImmutableList.copyOf(checkNotNull(deferred));
+        this.all = ListUtils.union(this.immediate, this.deferred);
         this.table = table;
         this.hasClear = clear;
 
@@ -83,7 +94,7 @@
 
     @Override
     public List<Instruction> allInstructions() {
-        return ListUtils.union(immediate, deferred);
+        return all;
     }
 
     @Override
@@ -92,7 +103,7 @@
     }
 
     @Override
-    public Boolean clearedDeferred() {
+    public boolean clearedDeferred() {
         return hasClear;
     }
 
@@ -162,8 +173,6 @@
      */
     public static final class Builder implements TrafficTreatment.Builder {
 
-        boolean drop = false;
-
         boolean clear = false;
 
         Instructions.TableTypeTransition table;
@@ -179,11 +188,14 @@
         }
 
         // Creates a new builder based off an existing treatment
-        //FIXME only works for immediate instruction sets.
         private Builder(TrafficTreatment treatment) {
-            for (Instruction instruction : treatment.immediate()) {
-                add(instruction);
-            }
+            deferred();
+            treatment.deferred().forEach(i -> add(i));
+
+            immediate();
+            treatment.immediate().forEach(i -> add(i));
+
+            clear = treatment.clearedDeferred();
         }
 
         @Override
diff --git a/core/api/src/main/java/org/onosproject/net/flow/TrafficTreatment.java b/core/api/src/main/java/org/onosproject/net/flow/TrafficTreatment.java
index a2254fa..8d45f35 100644
--- a/core/api/src/main/java/org/onosproject/net/flow/TrafficTreatment.java
+++ b/core/api/src/main/java/org/onosproject/net/flow/TrafficTreatment.java
@@ -64,7 +64,7 @@
      * by the device.
      * @return a boolean
      */
-    Boolean clearedDeferred();
+    boolean clearedDeferred();
 
     /**
      * Builder of traffic treatment entities.
diff --git a/core/api/src/test/java/org/onosproject/net/intent/IntentTestsMocks.java b/core/api/src/test/java/org/onosproject/net/intent/IntentTestsMocks.java
index 8bef293..dc8cd2b 100644
--- a/core/api/src/test/java/org/onosproject/net/intent/IntentTestsMocks.java
+++ b/core/api/src/test/java/org/onosproject/net/intent/IntentTestsMocks.java
@@ -54,7 +54,6 @@
 import org.onosproject.net.topology.TopologyVertex;
 import org.onosproject.store.Timestamp;
 
-import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collection;
 import java.util.Collections;
@@ -94,17 +93,17 @@
     public static class MockTreatment implements TrafficTreatment {
         @Override
         public List<Instruction> deferred() {
-            return null;
+            return Collections.emptyList();
         }
 
         @Override
         public List<Instruction> immediate() {
-            return new ArrayList<>();
+            return Collections.emptyList();
         }
 
         @Override
         public List<Instruction> allInstructions() {
-            return null;
+            return Collections.emptyList();
         }
 
         @Override
@@ -113,8 +112,8 @@
         }
 
         @Override
-        public Boolean clearedDeferred() {
-            return null;
+        public boolean clearedDeferred() {
+            return false;
         }
     }
 
diff --git a/core/net/src/test/java/org/onosproject/net/flow/impl/FlowRuleManagerTest.java b/core/net/src/test/java/org/onosproject/net/flow/impl/FlowRuleManagerTest.java
index 6669578..7ead516 100644
--- a/core/net/src/test/java/org/onosproject/net/flow/impl/FlowRuleManagerTest.java
+++ b/core/net/src/test/java/org/onosproject/net/flow/impl/FlowRuleManagerTest.java
@@ -577,8 +577,8 @@
         }
 
         @Override
-        public Boolean clearedDeferred() {
-            return null;
+        public boolean clearedDeferred() {
+            return false;
         }
 
         @Override
