diff --git a/core/api/src/main/java/org/onlab/onos/net/flow/DefaultTrafficTreatment.java b/core/api/src/main/java/org/onlab/onos/net/flow/DefaultTrafficTreatment.java
index d3fb7d9..5e64c64 100644
--- a/core/api/src/main/java/org/onlab/onos/net/flow/DefaultTrafficTreatment.java
+++ b/core/api/src/main/java/org/onlab/onos/net/flow/DefaultTrafficTreatment.java
@@ -44,6 +44,16 @@
         return new Builder();
     }
 
+    /**
+     * Returns a new traffic treatment builder primed to produce entities
+     * patterned after the supplied treatment.
+     *
+     * @return traffic treatment builder
+     */
+    public static TrafficTreatment.Builder builder(TrafficTreatment treatment) {
+        return new Builder(treatment);
+    }
+
     //FIXME: Order of instructions may affect hashcode
     @Override
     public int hashCode() {
@@ -90,6 +100,13 @@
         private Builder() {
         }
 
+        // Creates a new builder based off an existing treatment
+        private Builder(TrafficTreatment treatment) {
+            for (Instruction instruction : treatment.instructions()) {
+                add(instruction);
+            }
+        }
+
         @Override
         public Builder add(Instruction instruction) {
             if (drop) {
diff --git a/core/net/src/main/java/org/onlab/onos/net/intent/impl/LinkCollectionIntentInstaller.java b/core/net/src/main/java/org/onlab/onos/net/intent/impl/LinkCollectionIntentInstaller.java
index b3eb0f5..2983a68 100644
--- a/core/net/src/main/java/org/onlab/onos/net/intent/impl/LinkCollectionIntentInstaller.java
+++ b/core/net/src/main/java/org/onlab/onos/net/intent/impl/LinkCollectionIntentInstaller.java
@@ -1,6 +1,5 @@
 package org.onlab.onos.net.intent.impl;
 
-import static org.onlab.onos.net.flow.DefaultTrafficTreatment.builder;
 import static org.slf4j.LoggerFactory.getLogger;
 
 import java.util.List;
@@ -17,6 +16,7 @@
 import org.onlab.onos.net.PortNumber;
 import org.onlab.onos.net.flow.DefaultFlowRule;
 import org.onlab.onos.net.flow.DefaultTrafficSelector;
+import org.onlab.onos.net.flow.DefaultTrafficTreatment;
 import org.onlab.onos.net.flow.FlowRule;
 import org.onlab.onos.net.flow.FlowRuleBatchEntry;
 import org.onlab.onos.net.flow.FlowRuleBatchEntry.FlowRuleOperation;
@@ -61,18 +61,16 @@
 
     @Override
     public List<FlowRuleBatchOperation> install(LinkCollectionIntent intent) {
-        TrafficSelector.Builder builder =
-                DefaultTrafficSelector.builder(intent.selector());
         List<FlowRuleBatchEntry> rules = Lists.newLinkedList();
         for (Link link : intent.links()) {
             rules.add(createBatchEntry(FlowRuleOperation.ADD,
-                   builder.build(),
+                   intent,
                    link.src().deviceId(),
                    link.src().port()));
         }
 
         rules.add(createBatchEntry(FlowRuleOperation.ADD,
-                builder.build(),
+                intent,
                 intent.egressPoint().deviceId(),
                 intent.egressPoint().port()));
 
@@ -81,19 +79,17 @@
 
     @Override
     public List<FlowRuleBatchOperation> uninstall(LinkCollectionIntent intent) {
-        TrafficSelector.Builder builder =
-                DefaultTrafficSelector.builder(intent.selector());
         List<FlowRuleBatchEntry> rules = Lists.newLinkedList();
 
         for (Link link : intent.links()) {
             rules.add(createBatchEntry(FlowRuleOperation.REMOVE,
-                    builder.build(),
+                    intent,
                     link.src().deviceId(),
                     link.src().port()));
         }
 
         rules.add(createBatchEntry(FlowRuleOperation.REMOVE,
-               builder.build(),
+               intent,
                intent.egressPoint().deviceId(),
                intent.egressPoint().port()));
 
@@ -104,17 +100,23 @@
      * Creates a FlowRuleBatchEntry based on the provided parameters.
      *
      * @param operation the FlowRuleOperation to use
-     * @param selector the traffic selector
+     * @param intent the link collection intent
      * @param deviceId the device ID for the flow rule
      * @param outPort the output port of the flow rule
      * @return the new flow rule batch entry
      */
     private FlowRuleBatchEntry createBatchEntry(FlowRuleOperation operation,
-                                    TrafficSelector selector,
+                                    LinkCollectionIntent intent,
                                     DeviceId deviceId,
                                     PortNumber outPort) {
 
-        TrafficTreatment treatment = builder().setOutput(outPort).build();
+        TrafficTreatment.Builder treatmentBuilder =
+                DefaultTrafficTreatment.builder(intent.treatment());
+
+        TrafficTreatment treatment = treatmentBuilder.setOutput(outPort).build();
+
+        TrafficSelector selector = DefaultTrafficSelector.builder(intent.selector())
+                                   .build();
 
         FlowRule rule = new DefaultFlowRule(deviceId,
                 selector, treatment, 123, appId, 0, true);
