diff --git a/core/api/src/main/java/org/onlab/onos/net/intent/IntentBatchLeaderEvent.java b/core/api/src/main/java/org/onlab/onos/net/intent/IntentBatchLeaderEvent.java
new file mode 100644
index 0000000..cd5297f
--- /dev/null
+++ b/core/api/src/main/java/org/onlab/onos/net/intent/IntentBatchLeaderEvent.java
@@ -0,0 +1,61 @@
+/*
+ * Copyright 2014 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.onlab.onos.net.intent;
+
+import org.onlab.onos.core.ApplicationId;
+import org.onlab.onos.event.AbstractEvent;
+
+/**
+ * A class to represent an intent related event.
+ */
+public class IntentBatchLeaderEvent extends AbstractEvent<IntentBatchLeaderEvent.Type, ApplicationId> {
+
+    public enum Type {
+        /**
+         * Signifies that this instance has become the leader for the given application id.
+         */
+        ELECTED,
+
+        /**
+         * Signifies that instance is no longer the leader for a given application id.
+         */
+        BOOTED
+    }
+
+    /**
+     * Creates an event of a given type and for the specified appId and the
+     * current time.
+     *
+     * @param type   event type
+     * @param appId  subject appId
+     * @param time   time the event created in milliseconds since start of epoch
+     */
+    public IntentBatchLeaderEvent(Type type, ApplicationId appId, long time) {
+        super(type, appId, time);
+    }
+
+    /**
+     * Creates an event of a given type and for the specified appId and the
+     * current time.
+     *
+     * @param type   event type
+     * @param appId subject appId
+     */
+    public IntentBatchLeaderEvent(Type type, ApplicationId appId) {
+        super(type, appId);
+    }
+
+}
diff --git a/core/api/src/main/java/org/onlab/onos/net/intent/IntentBatchListener.java b/core/api/src/main/java/org/onlab/onos/net/intent/IntentBatchListener.java
new file mode 100644
index 0000000..fb5c600
--- /dev/null
+++ b/core/api/src/main/java/org/onlab/onos/net/intent/IntentBatchListener.java
@@ -0,0 +1,24 @@
+/*
+ * Copyright 2014 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.onlab.onos.net.intent;
+
+import org.onlab.onos.event.EventListener;
+
+/**
+ * Listener for {@link org.onlab.onos.net.intent.IntentEvent intent events}.
+ */
+public interface IntentBatchListener extends EventListener<IntentBatchLeaderEvent> {
+}
diff --git a/core/api/src/main/java/org/onlab/onos/net/intent/IntentBatchService.java b/core/api/src/main/java/org/onlab/onos/net/intent/IntentBatchService.java
index 8a58aa2..246ece8 100644
--- a/core/api/src/main/java/org/onlab/onos/net/intent/IntentBatchService.java
+++ b/core/api/src/main/java/org/onlab/onos/net/intent/IntentBatchService.java
@@ -45,14 +45,6 @@
     Set<IntentOperations> getPendingOperations();
 
     /**
-     * Returns the set of intent batches currently being processed.
-     * @return set of batches
-     */
-    //TODO we may want to get rid of this method
-    @Deprecated
-    Set<IntentOperations> getCurrentOperations();
-
-    /**
      * Return true if this instance is the local leader for batch
      * processing a given application id.
      *
@@ -75,4 +67,17 @@
      */
     void unsetDelegate(IntentBatchDelegate delegate);
 
+    /**
+     * Adds the specified listener for intent batch leadership events.
+     *
+     * @param listener listener to be added
+     */
+    void addListener(IntentBatchListener listener);
+
+    /**
+     * Removes the specified listener for intent batch leadership events.
+     *
+     * @param listener listener to be removed
+     */
+    void removeListener(IntentBatchListener listener);
 }
