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 f31f5b5..5a4865b 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
@@ -41,20 +41,14 @@
 import org.onosproject.net.intent.IntentStore;
 import org.onosproject.net.intent.IntentStoreDelegate;
 import org.onosproject.net.intent.Key;
-import org.onosproject.net.intent.impl.phase.CompilingFailed;
 import org.onosproject.net.intent.impl.phase.FinalIntentProcessPhase;
-import org.onosproject.net.intent.impl.phase.InstallRequest;
-import org.onosproject.net.intent.impl.phase.IntentProcessPhase;
-import org.onosproject.net.intent.impl.phase.WithdrawRequest;
-import org.onosproject.net.intent.impl.phase.Withdrawn;
+import org.onosproject.net.intent.impl.phase.IntentWorker;
 import org.slf4j.Logger;
 
 import java.util.Collection;
 import java.util.EnumSet;
 import java.util.List;
 import java.util.Map;
-import java.util.Optional;
-import java.util.concurrent.Callable;
 import java.util.concurrent.ExecutionException;
 import java.util.concurrent.ExecutorService;
 import java.util.concurrent.Future;
@@ -64,10 +58,8 @@
 import static java.util.concurrent.Executors.newFixedThreadPool;
 import static java.util.concurrent.Executors.newSingleThreadExecutor;
 import static org.onlab.util.Tools.groupedThreads;
-import static org.onlab.util.Tools.isNullOrEmpty;
 import static org.onosproject.net.intent.IntentState.FAILED;
 import static org.onosproject.net.intent.IntentState.INSTALL_REQ;
-import static org.onosproject.net.intent.IntentState.WITHDRAWN;
 import static org.onosproject.net.intent.IntentState.WITHDRAW_REQ;
 import static org.slf4j.LoggerFactory.getLogger;
 
@@ -364,48 +356,6 @@
         }
     }
 
-    private final class IntentWorker implements Callable<FinalIntentProcessPhase> {
-
-        private final IntentProcessor processor;
-        private final IntentData data;
-        private final IntentData current;
-
-        private IntentWorker(IntentProcessor processor, IntentData data, IntentData current) {
-            this.processor = checkNotNull(processor);
-            this.data = checkNotNull(data);
-            this.current = current;
-        }
-
-        @Override
-        public FinalIntentProcessPhase call() throws Exception {
-            IntentProcessPhase update = createIntentUpdate();
-            Optional<IntentProcessPhase> currentPhase = Optional.of(update);
-            IntentProcessPhase previousPhase = update;
-
-            while (currentPhase.isPresent()) {
-                previousPhase = currentPhase.get();
-                currentPhase = previousPhase.execute();
-            }
-            return (FinalIntentProcessPhase) previousPhase;
-        }
-
-        private IntentProcessPhase createIntentUpdate() {
-            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);
-            }
-        }
-    }
-
     private class InternalBatchDelegate implements IntentBatchDelegate {
         @Override
         public void execute(Collection<IntentData> operations) {
diff --git a/core/net/src/main/java/org/onosproject/net/intent/impl/phase/InstallRequest.java b/core/net/src/main/java/org/onosproject/net/intent/impl/phase/InstallRequest.java
index 90e0fd2..1944aad 100644
--- a/core/net/src/main/java/org/onosproject/net/intent/impl/phase/InstallRequest.java
+++ b/core/net/src/main/java/org/onosproject/net/intent/impl/phase/InstallRequest.java
@@ -25,13 +25,13 @@
 /**
  * Represents a phase where intent installation has been requested.
  */
-public final class InstallRequest implements IntentProcessPhase {
+final class InstallRequest implements IntentProcessPhase {
 
     private final IntentProcessor intentManager;
     private final IntentData pending;
     private final Optional<IntentData> current;
 
-    public InstallRequest(IntentProcessor processor, IntentData intentData, Optional<IntentData> current) {
+    InstallRequest(IntentProcessor processor, IntentData intentData, Optional<IntentData> current) {
         this.intentManager = checkNotNull(processor);
         this.pending = checkNotNull(intentData);
         this.current = checkNotNull(current);
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
new file mode 100644
index 0000000..aa7ef6a
--- /dev/null
+++ b/core/net/src/main/java/org/onosproject/net/intent/impl/phase/IntentWorker.java
@@ -0,0 +1,84 @@
+/*
+ * Copyright 2015 Open Networking Laboratory
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+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;
+
+    /**
+     * 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
+     */
+    public IntentWorker(IntentProcessor processor, IntentData data, IntentData current) {
+        this.processor = checkNotNull(processor);
+        this.data = checkNotNull(data);
+        this.current = current;
+    }
+
+    @Override
+    public FinalIntentProcessPhase call() throws Exception {
+        IntentProcessPhase update = createInitialPhase();
+        Optional<IntentProcessPhase> currentPhase = Optional.of(update);
+        IntentProcessPhase previousPhase = update;
+
+        while (currentPhase.isPresent()) {
+            previousPhase = currentPhase.get();
+            currentPhase = previousPhase.execute();
+        }
+        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);
+        }
+    }
+}
diff --git a/core/net/src/main/java/org/onosproject/net/intent/impl/phase/WithdrawRequest.java b/core/net/src/main/java/org/onosproject/net/intent/impl/phase/WithdrawRequest.java
index f2e120f..7940cf7 100644
--- a/core/net/src/main/java/org/onosproject/net/intent/impl/phase/WithdrawRequest.java
+++ b/core/net/src/main/java/org/onosproject/net/intent/impl/phase/WithdrawRequest.java
@@ -25,13 +25,13 @@
 /**
  * Represents a phase of requesting a withdraw of an intent.
  */
-public final class WithdrawRequest implements IntentProcessPhase {
+final class WithdrawRequest implements IntentProcessPhase {
 
     private final IntentProcessor processor;
     private final IntentData pending;
     private final IntentData current;
 
-    public WithdrawRequest(IntentProcessor processor, IntentData intentData, IntentData current) {
+    WithdrawRequest(IntentProcessor processor, IntentData intentData, IntentData current) {
         this.processor = checkNotNull(processor);
         this.pending = checkNotNull(intentData);
         this.current = checkNotNull(current);
diff --git a/core/net/src/main/java/org/onosproject/net/intent/impl/phase/Withdrawn.java b/core/net/src/main/java/org/onosproject/net/intent/impl/phase/Withdrawn.java
index 069a989..b8e724b 100644
--- a/core/net/src/main/java/org/onosproject/net/intent/impl/phase/Withdrawn.java
+++ b/core/net/src/main/java/org/onosproject/net/intent/impl/phase/Withdrawn.java
@@ -24,15 +24,15 @@
 /**
  * Represents a phase where an intent has been withdrawn.
  */
-public final class Withdrawn extends FinalIntentProcessPhase {
+final class Withdrawn extends FinalIntentProcessPhase {
 
     private final IntentData intentData;
 
-    public Withdrawn(IntentData intentData) {
+    Withdrawn(IntentData intentData) {
         this(intentData, WITHDRAWING);
     }
 
-    public Withdrawn(IntentData intentData, IntentState newState) {
+    Withdrawn(IntentData intentData, IntentState newState) {
         this.intentData = checkNotNull(intentData);
         this.intentData.setState(newState);
     }
