diff --git a/core/net/src/main/java/org/onosproject/net/intent/impl/IntentManager.java b/core/net/src/main/java/org/onosproject/net/intent/impl/IntentManager.java
index 5a4865b..8f46833 100644
--- a/core/net/src/main/java/org/onosproject/net/intent/impl/IntentManager.java
+++ b/core/net/src/main/java/org/onosproject/net/intent/impl/IntentManager.java
@@ -42,6 +42,7 @@
 import org.onosproject.net.intent.IntentStoreDelegate;
 import org.onosproject.net.intent.Key;
 import org.onosproject.net.intent.impl.phase.FinalIntentProcessPhase;
+import org.onosproject.net.intent.impl.phase.IntentProcessPhase;
 import org.onosproject.net.intent.impl.phase.IntentWorker;
 import org.slf4j.Logger;
 
@@ -61,6 +62,7 @@
 import static org.onosproject.net.intent.IntentState.FAILED;
 import static org.onosproject.net.intent.IntentState.INSTALL_REQ;
 import static org.onosproject.net.intent.IntentState.WITHDRAW_REQ;
+import static org.onosproject.net.intent.impl.phase.IntentProcessPhase.newInitialPhase;
 import static org.slf4j.LoggerFactory.getLogger;
 
 /**
@@ -278,7 +280,8 @@
 
     private Future<FinalIntentProcessPhase> submitIntentData(IntentData data) {
         IntentData current = store.getIntentData(data.key());
-        return workerExecutor.submit(new IntentWorker(processor, data, current));
+        IntentProcessPhase initial = newInitialPhase(processor, data, current);
+        return workerExecutor.submit(new IntentWorker(initial));
     }
 
     private class IntentBatchPreprocess implements Runnable {
diff --git a/core/net/src/main/java/org/onosproject/net/intent/impl/phase/IntentProcessPhase.java b/core/net/src/main/java/org/onosproject/net/intent/impl/phase/IntentProcessPhase.java
index 56bf122..5f7412b 100644
--- a/core/net/src/main/java/org/onosproject/net/intent/impl/phase/IntentProcessPhase.java
+++ b/core/net/src/main/java/org/onosproject/net/intent/impl/phase/IntentProcessPhase.java
@@ -15,8 +15,14 @@
  */
 package org.onosproject.net.intent.impl.phase;
 
+import org.onosproject.net.intent.IntentData;
+import org.onosproject.net.intent.impl.IntentProcessor;
+
 import java.util.Optional;
 
+import static org.onlab.util.Tools.isNullOrEmpty;
+import static org.onosproject.net.intent.IntentState.WITHDRAWN;
+
 /**
  * Represents a phase of processing an intent.
  */
@@ -29,4 +35,31 @@
      * @return next update
      */
     Optional<IntentProcessPhase> execute();
+
+    /**
+     * Create a starting intent process phase according to intent data this class holds.
+     *
+     * @param processor intent processor to be passed to intent process phases
+     *                  generated while this instance is working
+     * @param data intent data to be processed
+     * @param current intent date that is stored in the store
+     * @return starting intent process phase
+     */
+    static IntentProcessPhase newInitialPhase(IntentProcessor processor,
+                                              IntentData data, IntentData current) {
+        switch (data.state()) {
+            case INSTALL_REQ:
+                return new InstallRequest(processor, data, Optional.ofNullable(current));
+            case WITHDRAW_REQ:
+                if (current == null || isNullOrEmpty(current.installables())) {
+                    return new Withdrawn(data, WITHDRAWN);
+                } else {
+                    return new WithdrawRequest(processor, data, current);
+                }
+            default:
+                // illegal state
+                return new CompilingFailed(data);
+        }
+    }
+
 }
diff --git a/core/net/src/main/java/org/onosproject/net/intent/impl/phase/IntentWorker.java b/core/net/src/main/java/org/onosproject/net/intent/impl/phase/IntentWorker.java
index aa7ef6a..9ddcf40 100644
--- a/core/net/src/main/java/org/onosproject/net/intent/impl/phase/IntentWorker.java
+++ b/core/net/src/main/java/org/onosproject/net/intent/impl/phase/IntentWorker.java
@@ -15,42 +15,31 @@
  */
 package org.onosproject.net.intent.impl.phase;
 
-import org.onosproject.net.intent.IntentData;
-import org.onosproject.net.intent.impl.IntentProcessor;
 
 import java.util.Optional;
 import java.util.concurrent.Callable;
 
 import static com.google.common.base.Preconditions.checkNotNull;
-import static org.onlab.util.Tools.isNullOrEmpty;
-import static org.onosproject.net.intent.IntentState.WITHDRAWN;
 
 /**
  * Worker to process a submitted intent. {@link #call()} method generates
  */
 public final class IntentWorker implements Callable<FinalIntentProcessPhase> {
 
-    private final IntentProcessor processor;
-    private final IntentData data;
-    private final IntentData current;
+    private final IntentProcessPhase initial;
 
     /**
      * Create an instance with the specified arguments.
      *
-     * @param processor intent processor to be passed to intent process phases
-     *                  generated while this instance is working
-     * @param data intent data to be processed
-     * @param current intent date that is stored in the store
+     * @param initial initial intent process phase
      */
-    public IntentWorker(IntentProcessor processor, IntentData data, IntentData current) {
-        this.processor = checkNotNull(processor);
-        this.data = checkNotNull(data);
-        this.current = current;
+    public IntentWorker(IntentProcessPhase initial) {
+        this.initial = checkNotNull(initial);
     }
 
     @Override
     public FinalIntentProcessPhase call() throws Exception {
-        IntentProcessPhase update = createInitialPhase();
+        IntentProcessPhase update = initial;
         Optional<IntentProcessPhase> currentPhase = Optional.of(update);
         IntentProcessPhase previousPhase = update;
 
@@ -60,25 +49,4 @@
         }
         return (FinalIntentProcessPhase) previousPhase;
     }
-
-    /**
-     * Create a starting intent process phase according to intent data this class holds.
-     *
-     * @return starting intent process phase
-     */
-    private IntentProcessPhase createInitialPhase() {
-        switch (data.state()) {
-            case INSTALL_REQ:
-                return new InstallRequest(processor, data, Optional.ofNullable(current));
-            case WITHDRAW_REQ:
-                if (current == null || isNullOrEmpty(current.installables())) {
-                    return new Withdrawn(data, WITHDRAWN);
-                } else {
-                    return new WithdrawRequest(processor, data, current);
-                }
-            default:
-                // illegal state
-                return new CompilingFailed(data);
-        }
-    }
 }
