diff --git a/core/store/dist/src/main/java/org/onlab/onos/store/service/WriteRequest.java b/core/store/dist/src/main/java/org/onlab/onos/store/service/WriteRequest.java
new file mode 100644
index 0000000..7314e4f
--- /dev/null
+++ b/core/store/dist/src/main/java/org/onlab/onos/store/service/WriteRequest.java
@@ -0,0 +1,93 @@
+package org.onlab.onos.store.service;
+
+import static com.google.common.base.Preconditions.checkArgument;
+
+import java.util.Objects;
+
+/**
+ * Database write request.
+ */
+public class WriteRequest {
+
+    private final String tableName;
+    private final String key;
+    private final byte[] newValue;
+    private final long previousVersion;
+    private final byte[] oldValue;
+
+    public WriteRequest(String tableName, String key, byte[] newValue) {
+        this(tableName, key, newValue, -1, null);
+    }
+
+    public WriteRequest(String tableName, String key, byte[] newValue, long previousVersion) {
+        this(tableName, key, newValue, previousVersion, null);
+        checkArgument(previousVersion >= 0);
+    }
+
+    public WriteRequest(String tableName, String key, byte[] newValue, byte[] oldValue) {
+        this(tableName, key, newValue, -1, oldValue);
+    }
+
+    private WriteRequest(String tableName, String key, byte[] newValue, long previousVersion, byte[] oldValue) {
+
+        checkArgument(tableName != null);
+        checkArgument(key != null);
+        checkArgument(newValue != null);
+
+        this.tableName = tableName;
+        this.key = key;
+        this.newValue = newValue;
+        this.previousVersion = previousVersion;
+        this.oldValue = oldValue;
+    }
+
+    public String tableName() {
+        return tableName;
+    }
+
+    public String key() {
+        return key;
+    }
+
+    public byte[] newValue() {
+        return newValue;
+    }
+
+    public long previousVersion() {
+        return previousVersion;
+    }
+
+    public byte[] oldValue() {
+        return oldValue;
+    }
+
+    @Override
+    public String toString() {
+        return "WriteRequest [tableName=" + tableName + ", key=" + key
+                + ", newValue=" + newValue
+                + ", previousVersion=" + previousVersion
+                + ", oldValue=" + oldValue;
+    }
+
+    @Override
+    public int hashCode() {
+        return Objects.hash(key, tableName, previousVersion);
+    }
+
+    @Override
+    public boolean equals(Object obj) {
+        if (this == obj) {
+            return true;
+        }
+        if (obj == null) {
+            return false;
+        }
+        if (getClass() != obj.getClass()) {
+            return false;
+        }
+        WriteRequest other = (WriteRequest) obj;
+        return Objects.equals(this.key, other.key) &&
+                Objects.equals(this.tableName, other.tableName) &&
+                Objects.equals(this.previousVersion, other.previousVersion);
+    }
+}
