diff --git a/core/api/src/main/java/org/onosproject/store/service/AtomicValue.java b/core/api/src/main/java/org/onosproject/store/service/AtomicValue.java
new file mode 100644
index 0000000..dfa0fb3
--- /dev/null
+++ b/core/api/src/main/java/org/onosproject/store/service/AtomicValue.java
@@ -0,0 +1,69 @@
+/*
+ * 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.store.service;
+
+/**
+ * Distributed version of java.util.concurrent.atomic.AtomicReference.
+ *
+ * @param <V> value type
+ */
+public interface AtomicValue<V> {
+
+    /**
+     * Atomically sets the value to the given updated value if the current value is equal to the expected value.
+     * <p>
+     * IMPORTANT: Equality is based on the equality of the serialized byte[] representations.
+     * <p>
+     * @param expect  the expected value
+     * @param update  the new value
+     * @return true if successful. false return indicates that the actual value was not equal to the expected value.
+     */
+    boolean compareAndSet(V expect, V update);
+
+    /**
+     * Gets the current value.
+     * @return current value
+     */
+    V get();
+
+    /**
+     * Atomically sets to the given value and returns the old value.
+     * @param value the new value
+     * @return previous value
+     */
+    V getAndSet(V value);
+
+    /**
+     * Sets to the given value.
+     * @param value new value
+     */
+    void set(V value);
+
+    /**
+     * Registers the specified listener to be notified whenever the atomic value is updated.
+     *
+     * @param listener listener to notify about events
+     */
+    void addListener(AtomicValueEventListener<V> listener);
+
+    /**
+     * Unregisters the specified listener such that it will no longer
+     * receive atomic value update notifications.
+     *
+     * @param listener listener to unregister
+     */
+    void removeListener(AtomicValueEventListener<V> listener);
+}
diff --git a/core/api/src/main/java/org/onosproject/store/service/AtomicValueBuilder.java b/core/api/src/main/java/org/onosproject/store/service/AtomicValueBuilder.java
new file mode 100644
index 0000000..6527b9c
--- /dev/null
+++ b/core/api/src/main/java/org/onosproject/store/service/AtomicValueBuilder.java
@@ -0,0 +1,70 @@
+/*
+ * 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.store.service;
+
+/**
+ * Builder for constructing new AtomicValue instances.
+ *
+ * @param <V> atomic value type
+ */
+public interface AtomicValueBuilder<V> {
+    /**
+     * Sets the name for the atomic value.
+     * <p>
+     * Each atomic value is identified by a unique name.
+     * </p>
+     * <p>
+     * Note: This is a mandatory parameter.
+     * </p>
+     *
+     * @param name name of the atomic value
+     * @return this AtomicValueBuilder for method chaining
+     */
+    AtomicValueBuilder<V> withName(String name);
+
+    /**
+     * Sets a serializer that can be used to serialize the value.
+     * <p>
+     * Note: This is a mandatory parameter.
+     * </p>
+     *
+     * @param serializer serializer
+     * @return this AtomicValueBuilder for method chaining
+     */
+    AtomicValueBuilder<V> withSerializer(Serializer serializer);
+
+    /**
+     * Creates this atomic value on the partition that spans the entire cluster.
+     * <p>
+     * When partitioning is disabled, the value state will be
+     * ephemeral and does not survive a full cluster restart.
+     * </p>
+     * <p>
+     * Note: By default partitions are enabled.
+     * </p>
+     * @return this AtomicValueBuilder for method chaining
+     */
+    AtomicValueBuilder<V> withPartitionsDisabled();
+
+    /**
+     * Builds a AtomicValue based on the configuration options
+     * supplied to this builder.
+     *
+     * @return new AtomicValue
+     * @throws java.lang.RuntimeException if a mandatory parameter is missing
+     */
+    AtomicValue<V> build();
+}
diff --git a/core/api/src/main/java/org/onosproject/store/service/AtomicValueEvent.java b/core/api/src/main/java/org/onosproject/store/service/AtomicValueEvent.java
new file mode 100644
index 0000000..226b164
--- /dev/null
+++ b/core/api/src/main/java/org/onosproject/store/service/AtomicValueEvent.java
@@ -0,0 +1,109 @@
+/*
+ * 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.store.service;
+
+import java.util.Objects;
+
+import com.google.common.base.MoreObjects;
+
+/**
+ * Representation of a AtomicValue update notification.
+ *
+ * @param <V> atomic value type
+ */
+public class AtomicValueEvent<V> {
+
+    /**
+     * AtomicValueEvent type.
+     */
+    public enum Type {
+
+        /**
+         * Value was updated.
+         */
+        UPDATE,
+    }
+
+    private final String name;
+    private final Type type;
+    private final V value;
+
+    /**
+     * Creates a new event object.
+     *
+     * @param name AtomicValue name
+     * @param type the type of the event
+     * @param value the new value
+     */
+    public AtomicValueEvent(String name, Type type, V value) {
+        this.name = name;
+        this.type = type;
+        this.value = value;
+    }
+
+    /**
+     * Returns the AtomicValue name.
+     *
+     * @return name of atomic value
+     */
+    public String name() {
+        return name;
+    }
+
+    /**
+     * Returns the type of the event.
+     *
+     * @return the type of the event
+     */
+    public Type type() {
+        return type;
+    }
+
+    /**
+     * Returns the new updated value.
+     *
+     * @return the value
+     */
+    public V value() {
+        return value;
+    }
+
+    @Override
+    public boolean equals(Object o) {
+        if (!(o instanceof AtomicValueEvent)) {
+            return false;
+        }
+
+        AtomicValueEvent<V> that = (AtomicValueEvent) o;
+        return Objects.equals(this.name, that.name) &&
+                Objects.equals(this.type, that.type) &&
+                Objects.equals(this.value, that.value);
+    }
+
+    @Override
+    public int hashCode() {
+        return Objects.hash(name, type, value);
+    }
+
+    @Override
+    public String toString() {
+        return MoreObjects.toStringHelper(getClass())
+                .add("name", name)
+                .add("type", type)
+                .add("value", value)
+                .toString();
+    }
+}
\ No newline at end of file
diff --git a/core/api/src/main/java/org/onosproject/store/service/AtomicValueEventListener.java b/core/api/src/main/java/org/onosproject/store/service/AtomicValueEventListener.java
new file mode 100644
index 0000000..b29d903
--- /dev/null
+++ b/core/api/src/main/java/org/onosproject/store/service/AtomicValueEventListener.java
@@ -0,0 +1,28 @@
+/*
+ * 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.store.service;
+
+/**
+ * Listener to be notified about updates to a AtomicValue.
+ */
+public interface AtomicValueEventListener<V> {
+    /**
+     * Reacts to the specified event.
+     *
+     * @param event the event
+     */
+    void event(AtomicValueEvent<V> event);
+}
diff --git a/core/api/src/main/java/org/onosproject/store/service/StorageService.java b/core/api/src/main/java/org/onosproject/store/service/StorageService.java
index 58ac390..9ba8780 100644
--- a/core/api/src/main/java/org/onosproject/store/service/StorageService.java
+++ b/core/api/src/main/java/org/onosproject/store/service/StorageService.java
@@ -71,6 +71,14 @@
     AtomicCounterBuilder atomicCounterBuilder();
 
     /**
+     * Creates a new AtomicValueBuilder.
+     *
+     * @param <V> atomic value type
+     * @return atomic value builder
+     */
+    <V> AtomicValueBuilder<V> atomicValueBuilder();
+
+    /**
      * Creates a new transaction context builder.
      *
      * @return a builder for a transaction context.
