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/AbstractFailed.java
new file mode 100644
index 0000000..d68ef69
--- /dev/null
+++ b/core/net/src/main/java/org/onosproject/net/intent/impl/AbstractFailed.java
@@ -0,0 +1,45 @@
+/*
+ * 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.IntentData;
+
+import static com.google.common.base.Preconditions.checkNotNull;
+import static org.onosproject.net.intent.IntentState.FAILED;
+
+/**
+ * A common parent class of a class representing failure
+ * as IntentUpdate subclass.
+ */
+abstract class AbstractFailed extends CompletedIntentUpdate {
+
+    private final IntentData intentData;
+
+    /**
+     * Create an instance with the specified data.
+     *
+     * @param intentData intentData
+     */
+    AbstractFailed(IntentData intentData) {
+        this.intentData = checkNotNull(intentData);
+        this.intentData.setState(FAILED);
+    }
+
+    @Override
+    public IntentData data() {
+        return intentData;
+    }
+}
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/CompilingFailed.java
index 4c25dc5..186b4be 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/CompilingFailed.java
@@ -17,24 +17,17 @@
 
 import org.onosproject.net.intent.IntentData;
 
-import static org.onosproject.net.intent.IntentState.FAILED;
-
 /**
  * Represents a phase where the compile has failed.
  */
-class CompilingFailed extends CompletedIntentUpdate {
+class CompilingFailed extends AbstractFailed {
 
-    private final IntentData intentData;
-
+    /**
+     * Create an instance with the specified data.
+     *
+     * @param intentData intentData
+     */
     CompilingFailed(IntentData intentData) {
-        this.intentData = intentData;
-        this.intentData.setState(FAILED);
+        super(intentData);
     }
-
-    @Override
-    public IntentData data() {
-        return intentData;
-    }
-
-    //FIXME we also need to decide what to do with the current intent's resources i.e. cleanup or revert
 }
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/InstallingFailed.java
index e5fefb6..6b15dcb 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/InstallingFailed.java
@@ -17,21 +17,17 @@
 
 import org.onosproject.net.intent.IntentData;
 
-import static com.google.common.base.Preconditions.checkNotNull;
-import static org.onosproject.net.intent.IntentState.FAILED;
+/**
+ * Represent a phase where the install has failed.
+ */
+class InstallingFailed extends AbstractFailed {
 
-class InstallingFailed extends CompletedIntentUpdate {
-
-    private final IntentData intentData;
-
+    /**
+     * Create an instance with the specified data.
+     *
+     * @param intentData intentData
+     */
     InstallingFailed(IntentData intentData) {
-        this.intentData = checkNotNull(intentData);
-        this.intentData.setState(FAILED); //FIXME maybe should be "BROKEN"
-        //TODO consider adding the flow rule operations here
-    }
-
-    @Override
-    public IntentData data() {
-        return intentData;
+        super(intentData);
     }
 }
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/WithdrawCoordinating.java
index 2515a35..bd94ed6 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/WithdrawCoordinating.java
@@ -17,6 +17,9 @@
 
 import org.onosproject.net.flow.FlowRuleOperations;
 import org.onosproject.net.intent.IntentData;
+import org.onosproject.net.intent.IntentException;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 import java.util.Optional;
 
@@ -28,6 +31,8 @@
  */
 class WithdrawCoordinating implements IntentUpdate {
 
+    private static final Logger log = LoggerFactory.getLogger(WithdrawCoordinating.class);
+
     // TODO: define an interface and use it, instead of IntentManager
     private final IntentManager intentManager;
     private final IntentData pending;
@@ -41,8 +46,13 @@
 
     @Override
     public Optional<IntentUpdate> execute() {
-        FlowRuleOperations flowRules = intentManager.uninstallCoordinate(current, pending);
-        pending.setInstallables(current.installables());
-        return Optional.of(new Withdrawing(intentManager, pending, flowRules));
+        try {
+            FlowRuleOperations flowRules = intentManager.uninstallCoordinate(current, pending);
+            pending.setInstallables(current.installables());
+            return Optional.of(new Withdrawing(intentManager, pending, flowRules));
+        } catch (IntentException e) {
+            log.warn("Unable to generate generate a FlowRuleOperations from intent {} due to:", pending.intent(), e);
+            return Optional.of(new WithdrawingFailed(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/WithdrawingFailed.java
new file mode 100644
index 0000000..13a5da6
--- /dev/null
+++ b/core/net/src/main/java/org/onosproject/net/intent/impl/WithdrawingFailed.java
@@ -0,0 +1,33 @@
+/*
+ * 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.IntentData;
+
+/**
+ * Represents a phase where the withdraw has failed.
+ */
+class WithdrawingFailed extends AbstractFailed {
+
+    /**
+     * Create an instance with the specified data.
+     *
+     * @param intentData intentData
+     */
+    WithdrawingFailed(IntentData intentData) {
+        super(intentData);
+    }
+}
