diff --git a/core/api/src/main/java/org/onlab/onos/store/service/Lock.java b/core/api/src/main/java/org/onlab/onos/store/service/Lock.java
new file mode 100644
index 0000000..c1eb0ff
--- /dev/null
+++ b/core/api/src/main/java/org/onlab/onos/store/service/Lock.java
@@ -0,0 +1,78 @@
+package org.onlab.onos.store.service;
+
+/**
+ * A lock is a tool for controlling access to a shared resource by multiple processes.
+ * Commonly, a lock provides exclusive access to a resource such as a network device
+ * or exclusive permission to a controller to perform a particular role such as serve
+ * as the master controller for a device.
+ * At any given time one and only process can acquire the lock.
+ */
+public interface Lock {
+
+    /**
+     * Acquires the lock.
+     * If the lock is not available then the caller thread becomes
+     * disabled for thread scheduling purposes and lies dormant until
+     * the lock has been acquired.
+     * <p>
+     * Locks are reentrant. A thread invoking this method multiple times
+     * without an intervening unlock or lease expiration must invoke unlock()
+     * the same number of times before the lock is released (unless the lease expires).
+     * When this method is invoked for a lock that is already acquired,
+     * the lease time will be set to the maximum of the remaining lease time
+     * from the previous invocation, or leaseDurationMillis.
+     * @param leaseDurationMillis the number of milliseconds to hold the
+     * lock after granting it, before automatically releasing it if it hasn't
+     * already been released by invoking unlock(). Must be in the range
+     * (0, MAX_LEASE_MILLIS]
+     */
+    void lock(long leaseDurationMillis);
+
+    /**
+     * Acquires the lock only if it is free at the time of invocation.
+     * @param leaseDurationMillis the number of milliseconds the must be
+     * locked after it is granted, before automatically releasing it if it hasn't
+     * already been released by an invocation of unlock(). Must be in the range
+     * (0, MAX_LEASE_MILLIS]
+     * @return true if the lock was acquired and false otherwise
+     */
+    boolean tryLock(long leaseDurationMillis);
+
+    /**
+     * Acquires the lock if it is free within the given waiting
+     * time and the current thread has not been interrupted.
+     * @param waitTimeMillis the maximum time (in milliseconds) to wait for the lock
+     * @param leaseDurationMillis the number of milliseconds to hold the
+     * lock after granting it, before automatically releasing it if it hasn't
+     * already been released by invoking unlock(Object). Must be in the range
+     * (0, MAX_LEASE_MILLIS]
+     * @return true if the lock was acquired and false if the waiting time
+     * elapsed before the lock was acquired
+     */
+    boolean tryLock(long waitTimeMillis, long leaseDurationMillis);
+
+    /**
+     * Returns true if this Lock instance currently holds the lock.
+     * @return true if this instance is the owner of the lock.
+     */
+    boolean isLocked();
+
+    /**
+     * Releases the lock.
+     */
+    void unlock();
+
+    /**
+     * Extends the lease for this lock.
+     * @param extensionDurationMillis is the amount of additional
+     * time to add to the end of the current expiration time. For example,
+     * if the lock is currently set to expire at time T, a successful call to
+     * extendLease with an argument of 5000 will cause the lock to
+     * now expire at 5 seconds past T.
+     * @return true if the extension is successful, false otherwise. Note
+     * that a failure to extend the lease does not result in unlocking. The lock
+     * will be released either by an explicit call to unlock or when previously
+     * acquired lease runs out.
+     */
+    boolean extendLease(long extensionDurationMillis);
+}
\ No newline at end of file
diff --git a/core/api/src/main/java/org/onlab/onos/store/service/LockEventListener.java b/core/api/src/main/java/org/onlab/onos/store/service/LockEventListener.java
new file mode 100644
index 0000000..73f78fe
--- /dev/null
+++ b/core/api/src/main/java/org/onlab/onos/store/service/LockEventListener.java
@@ -0,0 +1,13 @@
+package org.onlab.onos.store.service;
+
+/**
+ * Listener for lock events.
+ */
+public interface LockEventListener {
+
+    /**
+     * Notifies the listener of a lock's lease expiration event.
+     * @param lock lock whose lease has expired.
+     */
+    void leaseExpired(Lock lock);
+}
diff --git a/core/api/src/main/java/org/onlab/onos/store/service/LockService.java b/core/api/src/main/java/org/onlab/onos/store/service/LockService.java
new file mode 100644
index 0000000..7b742b1
--- /dev/null
+++ b/core/api/src/main/java/org/onlab/onos/store/service/LockService.java
@@ -0,0 +1,25 @@
+package org.onlab.onos.store.service;
+
+public interface LockService {
+
+    /**
+     * Create a new lock instance.
+     * A successful return from this method does not mean the resource guarded by the path is locked.
+     * The caller is expect to call Lock.lock() to acquire the lock.
+     * @param path unique lock name.
+     * @return
+     */
+    Lock create(String path);
+
+    /**
+     * Adds a listener to be notified of lock events.
+     * @param listener listener to be added.
+     */
+    void addListener(LockEventListener listener);
+
+    /**
+     * Removes a listener that was previously added.
+     * @param listener listener to be removed.
+     */
+    void removeListener(LockEventListener listener);
+}
\ No newline at end of file
