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 b39d280..0a2316d 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
@@ -47,6 +47,12 @@
 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.slf4j.Logger;
 
 import java.util.ArrayList;
@@ -112,8 +118,9 @@
     @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
     protected EventDeliveryService eventDispatcher;
 
+    // TODO: make this protected due to short term hack for ONOS-1051
     @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
-    protected FlowRuleService flowRuleService;
+    public FlowRuleService flowRuleService;
 
 
     private ExecutorService batchExecutor;
@@ -268,7 +275,8 @@
      * @param previousInstallables previous intent installables
      * @return result of compilation
      */
-    List<Intent> compileIntent(Intent intent, List<Intent> previousInstallables) {
+    // TODO: make this non-public due to short term hack for ONOS-1051
+    public List<Intent> compileIntent(Intent intent, List<Intent> previousInstallables) {
         if (intent.isInstallable()) {
             return ImmutableList.of(intent);
         }
@@ -284,7 +292,8 @@
 
     //TODO javadoc
     //FIXME
-    FlowRuleOperations coordinate(IntentData current, IntentData pending) {
+    // TODO: make this non-public due to short term hack for ONOS-1051
+    public FlowRuleOperations coordinate(IntentData current, IntentData pending) {
         List<Intent> oldInstallables = (current != null) ? current.installables() : null;
         List<Intent> newInstallables = pending.installables();
 
@@ -347,7 +356,8 @@
      * @param current intent data stored in the store
      * @return flow rule operations
      */
-    FlowRuleOperations uninstallCoordinate(IntentData current, IntentData pending) {
+    // TODO: make this non-public due to short term hack for ONOS-1051
+    public FlowRuleOperations uninstallCoordinate(IntentData current, IntentData pending) {
         List<Intent> installables = current.installables();
         List<List<FlowRuleBatchOperation>> plans = new ArrayList<>();
         for (Intent installable : installables) {
@@ -520,7 +530,7 @@
         }
     }
 
-    private IntentUpdate createIntentUpdate(IntentData intentData) {
+    private IntentProcessPhase createIntentUpdate(IntentData intentData) {
         IntentData current = store.getIntentData(intentData.key());
         switch (intentData.state()) {
             case INSTALL_REQ:
@@ -537,7 +547,7 @@
         }
     }
 
-    private Future<CompletedIntentUpdate> submitIntentData(IntentData data) {
+    private Future<FinalIntentProcessPhase> submitIntentData(IntentData data) {
         return workerExecutor.submit(new IntentWorker(data));
     }
 
@@ -590,15 +600,15 @@
             }
         }
 
-        private List<Future<CompletedIntentUpdate>> createIntentUpdates() {
+        private List<Future<FinalIntentProcessPhase>> createIntentUpdates() {
             return data.stream()
                     .map(IntentManager.this::submitIntentData)
                     .collect(Collectors.toList());
         }
 
-        private List<CompletedIntentUpdate> waitForFutures(List<Future<CompletedIntentUpdate>> futures) {
-            ImmutableList.Builder<CompletedIntentUpdate> updateBuilder = ImmutableList.builder();
-            for (Future<CompletedIntentUpdate> future : futures) {
+        private List<FinalIntentProcessPhase> waitForFutures(List<Future<FinalIntentProcessPhase>> futures) {
+            ImmutableList.Builder<FinalIntentProcessPhase> updateBuilder = ImmutableList.builder();
+            for (Future<FinalIntentProcessPhase> future : futures) {
                 try {
                     updateBuilder.add(future.get());
                 } catch (InterruptedException | ExecutionException e) {
@@ -609,14 +619,14 @@
             return updateBuilder.build();
         }
 
-        private void submitUpdates(List<CompletedIntentUpdate> updates) {
+        private void submitUpdates(List<FinalIntentProcessPhase> updates) {
             store.batchWrite(updates.stream()
-                                    .map(CompletedIntentUpdate::data)
+                                    .map(FinalIntentProcessPhase::data)
                                     .collect(Collectors.toList()));
         }
     }
 
-    private final class IntentWorker implements Callable<CompletedIntentUpdate> {
+    private final class IntentWorker implements Callable<FinalIntentProcessPhase> {
 
         private final IntentData data;
 
@@ -625,16 +635,16 @@
         }
 
         @Override
-        public CompletedIntentUpdate call() throws Exception {
-            IntentUpdate update = createIntentUpdate(data);
-            Optional<IntentUpdate> currentPhase = Optional.of(update);
-            IntentUpdate previousPhase = update;
+        public FinalIntentProcessPhase call() throws Exception {
+            IntentProcessPhase update = createIntentUpdate(data);
+            Optional<IntentProcessPhase> currentPhase = Optional.of(update);
+            IntentProcessPhase previousPhase = update;
 
             while (currentPhase.isPresent()) {
                 previousPhase = currentPhase.get();
                 currentPhase = previousPhase.execute();
             }
-            return (CompletedIntentUpdate) previousPhase;
+            return (FinalIntentProcessPhase) previousPhase;
         }
     }
 
diff --git a/core/net/src/main/java/org/onosproject/net/intent/impl/AbstractFailed.java b/core/net/src/main/java/org/onosproject/net/intent/impl/phase/AbstractFailed.java
similarity index 91%
rename from core/net/src/main/java/org/onosproject/net/intent/impl/AbstractFailed.java
rename to core/net/src/main/java/org/onosproject/net/intent/impl/phase/AbstractFailed.java
index d68ef69..8c2734b 100644
--- a/core/net/src/main/java/org/onosproject/net/intent/impl/AbstractFailed.java
+++ b/core/net/src/main/java/org/onosproject/net/intent/impl/phase/AbstractFailed.java
@@ -13,7 +13,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.onosproject.net.intent.impl;
+package org.onosproject.net.intent.impl.phase;
 
 import org.onosproject.net.intent.IntentData;
 
@@ -24,7 +24,7 @@
  * A common parent class of a class representing failure
  * as IntentUpdate subclass.
  */
-abstract class AbstractFailed extends CompletedIntentUpdate {
+abstract class AbstractFailed extends FinalIntentProcessPhase {
 
     private final IntentData intentData;
 
diff --git a/core/net/src/main/java/org/onosproject/net/intent/impl/Compiling.java b/core/net/src/main/java/org/onosproject/net/intent/impl/phase/Compiling.java
similarity index 90%
rename from core/net/src/main/java/org/onosproject/net/intent/impl/Compiling.java
rename to core/net/src/main/java/org/onosproject/net/intent/impl/phase/Compiling.java
index bf4079f..b68230a 100644
--- a/core/net/src/main/java/org/onosproject/net/intent/impl/Compiling.java
+++ b/core/net/src/main/java/org/onosproject/net/intent/impl/phase/Compiling.java
@@ -13,11 +13,12 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.onosproject.net.intent.impl;
+package org.onosproject.net.intent.impl.phase;
 
 import org.onosproject.net.intent.Intent;
 import org.onosproject.net.intent.IntentData;
 import org.onosproject.net.intent.IntentException;
+import org.onosproject.net.intent.impl.IntentManager;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -29,7 +30,7 @@
 /**
  * Represents a phase where an intent is being compiled.
  */
-class Compiling implements IntentUpdate {
+final class Compiling implements IntentProcessPhase {
 
     private static final Logger log = LoggerFactory.getLogger(Compiling.class);
 
@@ -45,7 +46,7 @@
     }
 
     @Override
-    public Optional<IntentUpdate> execute() {
+    public Optional<IntentProcessPhase> execute() {
         try {
             List<Intent> installables = (current != null) ? current.installables() : null;
             pending.setInstallables(intentManager.compileIntent(pending.intent(), installables));
diff --git a/core/net/src/main/java/org/onosproject/net/intent/impl/CompilingFailed.java b/core/net/src/main/java/org/onosproject/net/intent/impl/phase/CompilingFailed.java
similarity index 84%
rename from core/net/src/main/java/org/onosproject/net/intent/impl/CompilingFailed.java
rename to core/net/src/main/java/org/onosproject/net/intent/impl/phase/CompilingFailed.java
index 186b4be..e537308 100644
--- a/core/net/src/main/java/org/onosproject/net/intent/impl/CompilingFailed.java
+++ b/core/net/src/main/java/org/onosproject/net/intent/impl/phase/CompilingFailed.java
@@ -13,21 +13,21 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.onosproject.net.intent.impl;
+package org.onosproject.net.intent.impl.phase;
 
 import org.onosproject.net.intent.IntentData;
 
 /**
  * Represents a phase where the compile has failed.
  */
-class CompilingFailed extends AbstractFailed {
+public class CompilingFailed extends AbstractFailed {
 
     /**
      * Create an instance with the specified data.
      *
      * @param intentData intentData
      */
-    CompilingFailed(IntentData intentData) {
+    public CompilingFailed(IntentData intentData) {
         super(intentData);
     }
 }
diff --git a/core/net/src/main/java/org/onosproject/net/intent/impl/CompletedIntentUpdate.java b/core/net/src/main/java/org/onosproject/net/intent/impl/phase/FinalIntentProcessPhase.java
similarity index 76%
rename from core/net/src/main/java/org/onosproject/net/intent/impl/CompletedIntentUpdate.java
rename to core/net/src/main/java/org/onosproject/net/intent/impl/phase/FinalIntentProcessPhase.java
index 612ae1e..72451a5 100644
--- a/core/net/src/main/java/org/onosproject/net/intent/impl/CompletedIntentUpdate.java
+++ b/core/net/src/main/java/org/onosproject/net/intent/impl/phase/FinalIntentProcessPhase.java
@@ -13,19 +13,19 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.onosproject.net.intent.impl;
+package org.onosproject.net.intent.impl.phase;
 
 import org.onosproject.net.intent.IntentData;
 
 import java.util.Optional;
 
 /**
- * Represents a completed phase of processing an intent.
+ * Represents a final phase of processing an intent.
  */
-abstract class CompletedIntentUpdate implements IntentUpdate {
+public abstract class FinalIntentProcessPhase implements IntentProcessPhase {
 
     @Override
-    public final Optional<IntentUpdate> execute() {
+    public final Optional<IntentProcessPhase> execute() {
         return Optional.empty();
     }
 
diff --git a/core/net/src/main/java/org/onosproject/net/intent/impl/InstallCoordinating.java b/core/net/src/main/java/org/onosproject/net/intent/impl/phase/InstallCoordinating.java
similarity index 90%
rename from core/net/src/main/java/org/onosproject/net/intent/impl/InstallCoordinating.java
rename to core/net/src/main/java/org/onosproject/net/intent/impl/phase/InstallCoordinating.java
index 6145ad2..5fd82ec 100644
--- a/core/net/src/main/java/org/onosproject/net/intent/impl/InstallCoordinating.java
+++ b/core/net/src/main/java/org/onosproject/net/intent/impl/phase/InstallCoordinating.java
@@ -13,11 +13,12 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.onosproject.net.intent.impl;
+package org.onosproject.net.intent.impl.phase;
 
 import org.onosproject.net.flow.FlowRuleOperations;
 import org.onosproject.net.intent.IntentData;
 import org.onosproject.net.intent.IntentException;
+import org.onosproject.net.intent.impl.IntentManager;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -29,7 +30,7 @@
  * Represents a phase to create a {@link FlowRuleOperations} instance
  * with using registered intent installers.
  */
-class InstallCoordinating implements IntentUpdate {
+final class InstallCoordinating implements IntentProcessPhase {
 
     private static final Logger log = LoggerFactory.getLogger(InstallCoordinating.class);
 
@@ -45,7 +46,7 @@
     }
 
     @Override
-    public Optional<IntentUpdate> execute() {
+    public Optional<IntentProcessPhase> execute() {
         try {
             //FIXME we orphan flow rules that are currently on the data plane
             // ... should either reuse them or remove them
diff --git a/core/net/src/main/java/org/onosproject/net/intent/impl/InstallRequest.java b/core/net/src/main/java/org/onosproject/net/intent/impl/phase/InstallRequest.java
similarity index 79%
rename from core/net/src/main/java/org/onosproject/net/intent/impl/InstallRequest.java
rename to core/net/src/main/java/org/onosproject/net/intent/impl/phase/InstallRequest.java
index ebc49fc..e54b10a 100644
--- a/core/net/src/main/java/org/onosproject/net/intent/impl/InstallRequest.java
+++ b/core/net/src/main/java/org/onosproject/net/intent/impl/phase/InstallRequest.java
@@ -13,9 +13,10 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.onosproject.net.intent.impl;
+package org.onosproject.net.intent.impl.phase;
 
 import org.onosproject.net.intent.IntentData;
+import org.onosproject.net.intent.impl.IntentManager;
 
 import java.util.Optional;
 
@@ -24,21 +25,21 @@
 /**
  * Represents a phase where intent installation has been requested.
  */
-class InstallRequest implements IntentUpdate {
+public final class InstallRequest implements IntentProcessPhase {
 
     // TODO: define an interface and use it, instead of IntentManager
     private final IntentManager intentManager;
     private final IntentData pending;
     private final Optional<IntentData> current;
 
-    InstallRequest(IntentManager intentManager, IntentData intentData, Optional<IntentData> current) {
+    public InstallRequest(IntentManager intentManager, IntentData intentData, Optional<IntentData> current) {
         this.intentManager = checkNotNull(intentManager);
         this.pending = checkNotNull(intentData);
         this.current = checkNotNull(current);
     }
 
     @Override
-    public Optional<IntentUpdate> execute() {
+    public Optional<IntentProcessPhase> execute() {
         return Optional.of(new Compiling(intentManager, pending, current.orElse(null)));
     }
 }
diff --git a/core/net/src/main/java/org/onosproject/net/intent/impl/Installed.java b/core/net/src/main/java/org/onosproject/net/intent/impl/phase/Installed.java
similarity index 91%
rename from core/net/src/main/java/org/onosproject/net/intent/impl/Installed.java
rename to core/net/src/main/java/org/onosproject/net/intent/impl/phase/Installed.java
index 1a2dea9..cd4d14e 100644
--- a/core/net/src/main/java/org/onosproject/net/intent/impl/Installed.java
+++ b/core/net/src/main/java/org/onosproject/net/intent/impl/phase/Installed.java
@@ -13,7 +13,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.onosproject.net.intent.impl;
+package org.onosproject.net.intent.impl.phase;
 
 import org.onosproject.net.intent.IntentData;
 
@@ -23,7 +23,7 @@
 /**
  * Represent a phase where an intent has been installed.
  */
-class Installed extends CompletedIntentUpdate {
+class Installed extends FinalIntentProcessPhase {
 
     private final IntentData intentData;
 
diff --git a/core/net/src/main/java/org/onosproject/net/intent/impl/Installing.java b/core/net/src/main/java/org/onosproject/net/intent/impl/phase/Installing.java
similarity index 90%
rename from core/net/src/main/java/org/onosproject/net/intent/impl/Installing.java
rename to core/net/src/main/java/org/onosproject/net/intent/impl/phase/Installing.java
index 122f224..05c499f 100644
--- a/core/net/src/main/java/org/onosproject/net/intent/impl/Installing.java
+++ b/core/net/src/main/java/org/onosproject/net/intent/impl/phase/Installing.java
@@ -13,11 +13,12 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.onosproject.net.intent.impl;
+package org.onosproject.net.intent.impl.phase;
 
 import org.onosproject.net.flow.FlowRuleOperations;
 import org.onosproject.net.intent.IntentData;
 import org.onosproject.net.intent.IntentException;
+import org.onosproject.net.intent.impl.IntentManager;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -29,7 +30,7 @@
  * Represents a phase of installing an intent with calling
  * {@link org.onosproject.net.flow.FlowRuleService}.
  */
-class Installing implements IntentUpdate {
+final class Installing implements IntentProcessPhase {
 
     private static final Logger log = LoggerFactory.getLogger(Installing.class);
 
@@ -45,7 +46,7 @@
     }
 
     @Override
-    public Optional<IntentUpdate> execute() {
+    public Optional<IntentProcessPhase> execute() {
         try {
             intentManager.flowRuleService.apply(flowRules); // FIXME we need to provide a context
             return Optional.of(new Installed(pending));
diff --git a/core/net/src/main/java/org/onosproject/net/intent/impl/InstallingFailed.java b/core/net/src/main/java/org/onosproject/net/intent/impl/phase/InstallingFailed.java
similarity index 95%
rename from core/net/src/main/java/org/onosproject/net/intent/impl/InstallingFailed.java
rename to core/net/src/main/java/org/onosproject/net/intent/impl/phase/InstallingFailed.java
index 6b15dcb..b3bf3a3 100644
--- a/core/net/src/main/java/org/onosproject/net/intent/impl/InstallingFailed.java
+++ b/core/net/src/main/java/org/onosproject/net/intent/impl/phase/InstallingFailed.java
@@ -13,7 +13,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.onosproject.net.intent.impl;
+package org.onosproject.net.intent.impl.phase;
 
 import org.onosproject.net.intent.IntentData;
 
diff --git a/core/net/src/main/java/org/onosproject/net/intent/impl/IntentUpdate.java b/core/net/src/main/java/org/onosproject/net/intent/impl/phase/IntentProcessPhase.java
similarity index 86%
rename from core/net/src/main/java/org/onosproject/net/intent/impl/IntentUpdate.java
rename to core/net/src/main/java/org/onosproject/net/intent/impl/phase/IntentProcessPhase.java
index ed3e9e2..56bf122 100644
--- a/core/net/src/main/java/org/onosproject/net/intent/impl/IntentUpdate.java
+++ b/core/net/src/main/java/org/onosproject/net/intent/impl/phase/IntentProcessPhase.java
@@ -13,14 +13,14 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.onosproject.net.intent.impl;
+package org.onosproject.net.intent.impl.phase;
 
 import java.util.Optional;
 
 /**
  * Represents a phase of processing an intent.
  */
-interface IntentUpdate {
+public interface IntentProcessPhase {
 
     /**
      * Execute the procedure represented by the instance
@@ -28,5 +28,5 @@
      *
      * @return next update
      */
-    Optional<IntentUpdate> execute();
+    Optional<IntentProcessPhase> execute();
 }
diff --git a/core/net/src/main/java/org/onosproject/net/intent/impl/WithdrawCoordinating.java b/core/net/src/main/java/org/onosproject/net/intent/impl/phase/WithdrawCoordinating.java
similarity index 90%
rename from core/net/src/main/java/org/onosproject/net/intent/impl/WithdrawCoordinating.java
rename to core/net/src/main/java/org/onosproject/net/intent/impl/phase/WithdrawCoordinating.java
index aa5e993..24d6dd5 100644
--- a/core/net/src/main/java/org/onosproject/net/intent/impl/WithdrawCoordinating.java
+++ b/core/net/src/main/java/org/onosproject/net/intent/impl/phase/WithdrawCoordinating.java
@@ -13,11 +13,12 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.onosproject.net.intent.impl;
+package org.onosproject.net.intent.impl.phase;
 
 import org.onosproject.net.flow.FlowRuleOperations;
 import org.onosproject.net.intent.IntentData;
 import org.onosproject.net.intent.IntentException;
+import org.onosproject.net.intent.impl.IntentManager;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -29,7 +30,7 @@
  * Represents a phase to create a {@link FlowRuleOperations} instance
  * with using registered intent installers.
  */
-class WithdrawCoordinating implements IntentUpdate {
+final class WithdrawCoordinating implements IntentProcessPhase {
 
     private static final Logger log = LoggerFactory.getLogger(WithdrawCoordinating.class);
 
@@ -45,7 +46,7 @@
     }
 
     @Override
-    public Optional<IntentUpdate> execute() {
+    public Optional<IntentProcessPhase> execute() {
         try {
             // Note: current.installables() are not null or empty due to createIntentUpdate check
             FlowRuleOperations flowRules = intentManager.uninstallCoordinate(current, pending);
diff --git a/core/net/src/main/java/org/onosproject/net/intent/impl/WithdrawRequest.java b/core/net/src/main/java/org/onosproject/net/intent/impl/phase/WithdrawRequest.java
similarity index 82%
rename from core/net/src/main/java/org/onosproject/net/intent/impl/WithdrawRequest.java
rename to core/net/src/main/java/org/onosproject/net/intent/impl/phase/WithdrawRequest.java
index 7444d35..bbc7f34 100644
--- a/core/net/src/main/java/org/onosproject/net/intent/impl/WithdrawRequest.java
+++ b/core/net/src/main/java/org/onosproject/net/intent/impl/phase/WithdrawRequest.java
@@ -13,9 +13,10 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.onosproject.net.intent.impl;
+package org.onosproject.net.intent.impl.phase;
 
 import org.onosproject.net.intent.IntentData;
+import org.onosproject.net.intent.impl.IntentManager;
 
 import java.util.Optional;
 
@@ -24,21 +25,21 @@
 /**
  * Represents a phase of requesting a withdraw of an intent.
  */
-class WithdrawRequest implements IntentUpdate {
+public final class WithdrawRequest implements IntentProcessPhase {
 
     // TODO: define an interface and use it, instead of IntentManager
     private final IntentManager intentManager;
     private final IntentData pending;
     private final IntentData current;
 
-    WithdrawRequest(IntentManager intentManager, IntentData intentData, IntentData current) {
+    public WithdrawRequest(IntentManager intentManager, IntentData intentData, IntentData current) {
         this.intentManager = checkNotNull(intentManager);
         this.pending = checkNotNull(intentData);
         this.current = checkNotNull(current);
     }
 
     @Override
-    public Optional<IntentUpdate> execute() {
+    public Optional<IntentProcessPhase> execute() {
         //TODO perhaps we want to validate that the pending and current are the
         // same version i.e. they are the same
         // Note: this call is not just the symmetric version of submit
diff --git a/core/net/src/main/java/org/onosproject/net/intent/impl/Withdrawing.java b/core/net/src/main/java/org/onosproject/net/intent/impl/phase/Withdrawing.java
similarity index 88%
rename from core/net/src/main/java/org/onosproject/net/intent/impl/Withdrawing.java
rename to core/net/src/main/java/org/onosproject/net/intent/impl/phase/Withdrawing.java
index 06a0ad3..676c3c7 100644
--- a/core/net/src/main/java/org/onosproject/net/intent/impl/Withdrawing.java
+++ b/core/net/src/main/java/org/onosproject/net/intent/impl/phase/Withdrawing.java
@@ -13,10 +13,11 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.onosproject.net.intent.impl;
+package org.onosproject.net.intent.impl.phase;
 
 import org.onosproject.net.flow.FlowRuleOperations;
 import org.onosproject.net.intent.IntentData;
+import org.onosproject.net.intent.impl.IntentManager;
 
 import java.util.Optional;
 
@@ -26,7 +27,7 @@
  * Represents a phase of withdrawing an intent with calling
  * {@link org.onosproject.net.flow.FlowRuleService}.
  */
-class Withdrawing implements IntentUpdate {
+class Withdrawing implements IntentProcessPhase {
 
     // TODO: define an interface and use it, instead of IntentManager
     private final IntentManager intentManager;
@@ -40,7 +41,7 @@
     }
 
     @Override
-    public Optional<IntentUpdate> execute() {
+    public Optional<IntentProcessPhase> execute() {
         intentManager.flowRuleService.apply(flowRules);
         return Optional.of(new Withdrawn(pending));
     }
diff --git a/core/net/src/main/java/org/onosproject/net/intent/impl/WithdrawingFailed.java b/core/net/src/main/java/org/onosproject/net/intent/impl/phase/WithdrawingFailed.java
similarity index 89%
rename from core/net/src/main/java/org/onosproject/net/intent/impl/WithdrawingFailed.java
rename to core/net/src/main/java/org/onosproject/net/intent/impl/phase/WithdrawingFailed.java
index 13a5da6..4e6874e 100644
--- a/core/net/src/main/java/org/onosproject/net/intent/impl/WithdrawingFailed.java
+++ b/core/net/src/main/java/org/onosproject/net/intent/impl/phase/WithdrawingFailed.java
@@ -13,14 +13,14 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.onosproject.net.intent.impl;
+package org.onosproject.net.intent.impl.phase;
 
 import org.onosproject.net.intent.IntentData;
 
 /**
  * Represents a phase where the withdraw has failed.
  */
-class WithdrawingFailed extends AbstractFailed {
+final class WithdrawingFailed extends AbstractFailed {
 
     /**
      * Create an instance with the specified data.
diff --git a/core/net/src/main/java/org/onosproject/net/intent/impl/Withdrawn.java b/core/net/src/main/java/org/onosproject/net/intent/impl/phase/Withdrawn.java
similarity index 83%
rename from core/net/src/main/java/org/onosproject/net/intent/impl/Withdrawn.java
rename to core/net/src/main/java/org/onosproject/net/intent/impl/phase/Withdrawn.java
index e5e4acd..069a989 100644
--- a/core/net/src/main/java/org/onosproject/net/intent/impl/Withdrawn.java
+++ b/core/net/src/main/java/org/onosproject/net/intent/impl/phase/Withdrawn.java
@@ -13,7 +13,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.onosproject.net.intent.impl;
+package org.onosproject.net.intent.impl.phase;
 
 import org.onosproject.net.intent.IntentData;
 import org.onosproject.net.intent.IntentState;
@@ -24,15 +24,15 @@
 /**
  * Represents a phase where an intent has been withdrawn.
  */
-class Withdrawn extends CompletedIntentUpdate {
+public final class Withdrawn extends FinalIntentProcessPhase {
 
     private final IntentData intentData;
 
-    Withdrawn(IntentData intentData) {
+    public Withdrawn(IntentData intentData) {
         this(intentData, WITHDRAWING);
     }
 
-    Withdrawn(IntentData intentData, IntentState newState) {
+    public Withdrawn(IntentData intentData, IntentState newState) {
         this.intentData = checkNotNull(intentData);
         this.intentData.setState(newState);
     }
