diff --git a/core/store/dist/src/main/java/org/onosproject/store/intent/impl/HazelcastIntentStore.java b/core/store/dist/src/main/java/org/onosproject/store/intent/impl/HazelcastIntentStore.java
index 667d2a8..5121aca 100644
--- a/core/store/dist/src/main/java/org/onosproject/store/intent/impl/HazelcastIntentStore.java
+++ b/core/store/dist/src/main/java/org/onosproject/store/intent/impl/HazelcastIntentStore.java
@@ -28,7 +28,6 @@
 import com.hazelcast.core.EntryListener;
 import com.hazelcast.core.IMap;
 import com.hazelcast.core.Member;
-
 import org.apache.commons.lang3.tuple.Pair;
 import org.apache.felix.scr.annotations.Activate;
 import org.apache.felix.scr.annotations.Component;
@@ -37,20 +36,20 @@
 import org.apache.felix.scr.annotations.ReferenceCardinality;
 import org.apache.felix.scr.annotations.Service;
 import org.onlab.metrics.MetricsService;
+import org.onlab.util.KryoNamespace;
 import org.onosproject.core.MetricsHelper;
 import org.onosproject.net.intent.BatchWrite;
+import org.onosproject.net.intent.BatchWrite.Operation;
 import org.onosproject.net.intent.Intent;
 import org.onosproject.net.intent.IntentEvent;
 import org.onosproject.net.intent.IntentId;
 import org.onosproject.net.intent.IntentState;
 import org.onosproject.net.intent.IntentStore;
-import org.onosproject.net.intent.BatchWrite.Operation;
 import org.onosproject.net.intent.IntentStoreDelegate;
 import org.onosproject.store.hz.AbstractHazelcastStore;
 import org.onosproject.store.hz.SMap;
 import org.onosproject.store.serializers.KryoNamespaces;
 import org.onosproject.store.serializers.KryoSerializer;
-import org.onlab.util.KryoNamespace;
 import org.slf4j.Logger;
 
 import java.util.ArrayList;
@@ -64,10 +63,10 @@
 import java.util.concurrent.Future;
 
 import static com.google.common.base.Preconditions.checkArgument;
-import static com.google.common.base.Preconditions.checkState;
+import static org.onlab.metrics.MetricsUtil.startTimer;
+import static org.onlab.metrics.MetricsUtil.stopTimer;
 import static org.onosproject.net.intent.IntentState.*;
 import static org.slf4j.LoggerFactory.getLogger;
-import static org.onlab.metrics.MetricsUtil.*;
 
 @Component(immediate = true, enabled = true)
 @Service
@@ -102,8 +101,6 @@
 
     private boolean onlyLogTransitionError = true;
 
-    private Timer createIntentTimer;
-    private Timer removeIntentTimer;
     private Timer setInstallableIntentsTimer;
     private Timer getInstallableIntentsTimer;
     private Timer removeInstalledIntentsTimer;
@@ -131,8 +128,6 @@
     public void activate() {
         localIntents = new ConcurrentHashMap<>();
 
-        createIntentTimer = createResponseTimer("createIntent");
-        removeIntentTimer = createResponseTimer("removeIntent");
         setInstallableIntentsTimer = createResponseTimer("setInstallableIntents");
         getInstallableIntentsTimer = createResponseTimer("getInstallableIntents");
         removeInstalledIntentsTimer = createResponseTimer("removeInstalledIntents");
@@ -200,38 +195,6 @@
     }
 
     @Override
-    public void createIntent(Intent intent) {
-        Context timer = startTimer(createIntentTimer);
-        try {
-            Intent existing = intents.putIfAbsent(intent.id(), intent);
-            if (existing != null) {
-                // duplicate, ignore
-                return;
-            } else {
-                this.setState(intent, IntentState.INSTALL_REQ);
-                return;
-            }
-        } finally {
-            stopTimer(timer);
-        }
-    }
-
-    @Override
-    public void removeIntent(IntentId intentId) {
-        Context timer = startTimer(removeIntentTimer);
-        checkState(getIntentState(intentId) == WITHDRAWN,
-                   "Intent state for {} is not WITHDRAWN.", intentId);
-        try {
-            intents.remove(intentId);
-            installable.remove(intentId);
-            states.remove(intentId);
-            transientStates.remove(intentId);
-        } finally {
-            stopTimer(timer);
-        }
-    }
-
-    @Override
     public long getIntentCount() {
         Context timer = startTimer(getIntentCountTimer);
         try {
