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/CompletedIntentUpdate.java
new file mode 100644
index 0000000..a2ed4d9
--- /dev/null
+++ b/core/net/src/main/java/org/onosproject/net/intent/impl/CompletedIntentUpdate.java
@@ -0,0 +1,66 @@
+/*
+ * 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;
+
+import org.onosproject.net.flow.FlowRuleBatchOperation;
+import org.onosproject.net.intent.BatchWrite;
+import org.onosproject.net.intent.Intent;
+
+import java.util.Collections;
+import java.util.List;
+
+/**
+ * Represents a completed phase of processing an intent.
+ */
+interface CompletedIntentUpdate extends IntentUpdate {
+
+    /**
+     * Write data to the specified BatchWrite after execution() is called.
+     *
+     * @param batchWrite batchWrite
+     */
+    default void writeAfterExecution(BatchWrite batchWrite) {}
+
+    /**
+     * Moves forward with the contained current batch.
+     * This method is invoked when the batch is successfully completed.
+     */
+    default void batchSuccess() {}
+
+    /**
+     * Reverts the contained batches.
+     * This method is invoked when the batch results in failure.
+     */
+    default void batchFailed() {}
+
+    /**
+     * Returns the current FlowRuleBatchOperation.
+     *
+     * @return current FlowRuleBatchOperation
+     */
+    default FlowRuleBatchOperation currentBatch() {
+        return null;
+    }
+
+    /**
+     * Returns all of installable intents this instance holds.
+     *
+     * @return all of installable intents
+     */
+    default List<Intent> allInstallables() {
+        return Collections.emptyList();
+    }
+}
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 7c3bb3e..8280b02 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
@@ -483,58 +483,6 @@
         }
     }
 
-    private interface IntentUpdate {
-
-        /**
-         * Execute the procedure represented by the instance
-         * and generates the next update instance.
-         *
-         * @return next update
-         */
-        default Optional<IntentUpdate> execute() {
-            return Optional.empty();
-        }
-
-        /**
-         * Write data to the specified BatchWrite before execution() is called.
-         *
-         * @param batchWrite batchWrite
-         */
-        default void writeBeforeExecution(BatchWrite batchWrite) {}
-    }
-
-    private interface CompletedIntentUpdate extends IntentUpdate {
-
-        /**
-         * Write data to the specified BatchWrite after execution() is called.
-         *
-         * @param batchWrite batchWrite
-         */
-        default void writeAfterExecution(BatchWrite batchWrite) {}
-
-        default void batchSuccess() {}
-
-        default void batchFailed() {}
-
-        /**
-         * Returns the current FlowRuleBatchOperation.
-         *
-         * @return current FlowRuleBatchOperation
-         */
-        default FlowRuleBatchOperation currentBatch() {
-            return null;
-        }
-
-        /**
-         * Returns all of installable intents this instance holds.
-         *
-         * @return all of installable intents
-         */
-        default List<Intent> allInstallables() {
-            return Collections.emptyList();
-        }
-    }
-
     private class InstallRequest implements IntentUpdate {
 
         private final Intent intent;
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/IntentUpdate.java
new file mode 100644
index 0000000..155c0fe
--- /dev/null
+++ b/core/net/src/main/java/org/onosproject/net/intent/impl/IntentUpdate.java
@@ -0,0 +1,43 @@
+/*
+ * 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;
+
+import org.onosproject.net.intent.BatchWrite;
+
+import java.util.Optional;
+
+/**
+ * Represents a phase of processing an intent.
+ */
+interface IntentUpdate {
+
+    /**
+     * Execute the procedure represented by the instance
+     * and generates the next update instance.
+     *
+     * @return next update
+     */
+    default Optional<IntentUpdate> execute() {
+        return Optional.empty();
+    }
+
+    /**
+     * Write data to the specified BatchWrite before execution() is called.
+     *
+     * @param batchWrite batchWrite
+     */
+    default void writeBeforeExecution(BatchWrite batchWrite) {}
+}
