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 ed1552a..982aa0c 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
@@ -151,6 +151,13 @@
     }
 
     @Override
+    public void purge(Intent intent) {
+        checkNotNull(intent, INTENT_NULL);
+        IntentData data = new IntentData(intent, IntentState.PURGE_REQ, null);
+        store.addPending(data);
+    }
+
+    @Override
     public Intent getIntent(Key key) {
         return store.getIntent(key);
     }
@@ -193,11 +200,6 @@
     }
 
     @Override
-    public void purge(Key key) {
-        store.purge(key);
-    }
-
-    @Override
     public <T extends Intent> void registerCompiler(Class<T> cls, IntentCompiler<T> compiler) {
         compilerRegistry.registerCompiler(cls, compiler);
     }
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 5f7412b..dfa9d11 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
@@ -56,6 +56,8 @@
                 } else {
                     return new WithdrawRequest(processor, data, current);
                 }
+            case PURGE_REQ:
+                return new PurgeRequest(data, current);
             default:
                 // illegal state
                 return new CompilingFailed(data);
diff --git a/core/net/src/main/java/org/onosproject/net/intent/impl/phase/PurgeRequest.java b/core/net/src/main/java/org/onosproject/net/intent/impl/phase/PurgeRequest.java
new file mode 100644
index 0000000..b04e05e
--- /dev/null
+++ b/core/net/src/main/java/org/onosproject/net/intent/impl/phase/PurgeRequest.java
@@ -0,0 +1,60 @@
+/*
+ * 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.IntentState;
+import org.slf4j.Logger;
+
+import static com.google.common.base.Preconditions.checkNotNull;
+import static org.slf4j.LoggerFactory.getLogger;
+
+/**
+ * Represents a phase of requesting a purge of an intent.
+ * <p>
+ * Note: The purge will only succeed if the intent is FAILED or WITHDRAWN.
+ * </p>
+ */
+final class PurgeRequest extends FinalIntentProcessPhase {
+
+    private static final Logger log = getLogger(PurgeRequest.class);
+
+    private final IntentData pending;
+    private final IntentData current;
+
+    PurgeRequest(IntentData intentData, IntentData current) {
+        this.pending = checkNotNull(intentData);
+        this.current = checkNotNull(current);
+    }
+
+    private boolean shouldAcceptPurge() {
+        if (current.state() == IntentState.WITHDRAWN
+                || current.state() == IntentState.FAILED) {
+            return true;
+        }
+        log.info("Purge for intent {} is rejected", pending.key());
+        return false;
+    }
+
+    @Override
+    public IntentData data() {
+        if (shouldAcceptPurge()) {
+            return pending;
+        } else {
+            return current;
+        }
+    }
+}
