diff --git a/core/store/dist/src/main/java/org/onosproject/store/group/impl/GroupStoreMessage.java b/core/store/dist/src/main/java/org/onosproject/store/group/impl/GroupStoreMessage.java
new file mode 100644
index 0000000..b82754b
--- /dev/null
+++ b/core/store/dist/src/main/java/org/onosproject/store/group/impl/GroupStoreMessage.java
@@ -0,0 +1,184 @@
+/*
+ * 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.group.impl;
+
+import org.onosproject.net.DeviceId;
+import org.onosproject.net.group.GroupBuckets;
+import org.onosproject.net.group.GroupDescription;
+import org.onosproject.net.group.GroupKey;
+import org.onosproject.net.group.GroupStore.UpdateType;
+
+/**
+ * Format of the Group store message that is used to
+ * communicate with the peer nodes in the cluster.
+ */
+public final class GroupStoreMessage {
+    private final DeviceId deviceId;
+    private final GroupKey appCookie;
+    private final GroupDescription groupDesc;
+    private final UpdateType updateType;
+    private final GroupBuckets updateBuckets;
+    private final GroupKey newAppCookie;
+    private final Type type;
+
+    /**
+     * Type of group store request.
+     */
+    public enum Type {
+        ADD,
+        UPDATE,
+        DELETE
+    }
+
+    private GroupStoreMessage(Type type,
+                             DeviceId deviceId,
+                             GroupKey appCookie,
+                             GroupDescription groupDesc,
+                             UpdateType updateType,
+                             GroupBuckets updateBuckets,
+                             GroupKey newAppCookie) {
+        this.type = type;
+        this.deviceId = deviceId;
+        this.appCookie = appCookie;
+        this.groupDesc = groupDesc;
+        this.updateType = updateType;
+        this.updateBuckets = updateBuckets;
+        this.newAppCookie = newAppCookie;
+    }
+
+    /**
+     * Creates a group store message for group ADD request.
+     *
+     * @param deviceId device identifier in which group to be added
+     * @param desc group creation parameters
+     * @return constructed group store message
+     */
+    public static GroupStoreMessage createGroupAddRequestMsg(DeviceId deviceId,
+                                                             GroupDescription desc) {
+        return new GroupStoreMessage(Type.ADD,
+                              deviceId,
+                              null,
+                              desc,
+                              null,
+                              null,
+                              null);
+    }
+
+    /**
+     * Creates a group store message for group UPDATE request.
+     *
+     * @param deviceId the device ID
+     * @param appCookie the current group key
+     * @param updateType update (add or delete) type
+     * @param updateBuckets group buckets for updates
+     * @param newAppCookie optional new group key
+     * @return constructed group store message
+     */
+    public static GroupStoreMessage createGroupUpdateRequestMsg(DeviceId deviceId,
+                                                        GroupKey appCookie,
+                                                        UpdateType updateType,
+                                                        GroupBuckets updateBuckets,
+                                                        GroupKey newAppCookie) {
+        return new GroupStoreMessage(Type.UPDATE,
+                              deviceId,
+                              appCookie,
+                              null,
+                              updateType,
+                              updateBuckets,
+                              newAppCookie);
+    }
+
+    /**
+     * Creates a group store message for group DELETE request.
+     *
+     * @param deviceId the device ID
+     * @param appCookie the group key
+     * @return constructed group store message
+     */
+    public static GroupStoreMessage createGroupDeleteRequestMsg(DeviceId deviceId,
+                                                                GroupKey appCookie) {
+        return new GroupStoreMessage(Type.DELETE,
+                                     deviceId,
+                                     appCookie,
+                                     null,
+                                     null,
+                                     null,
+                                     null);
+    }
+
+    /**
+     * Returns the device identifier of this group request.
+     *
+     * @return device identifier
+     */
+    public DeviceId deviceId() {
+        return deviceId;
+    }
+
+    /**
+     * Returns the application cookie associated with this group request.
+     *
+     * @return application cookie
+     */
+    public GroupKey appCookie() {
+        return appCookie;
+    }
+
+    /**
+     * Returns the group create parameters associated with this group request.
+     *
+     * @return group create parameters
+     */
+    public GroupDescription groupDesc() {
+        return groupDesc;
+    }
+
+    /**
+     * Returns the group buckets to be updated as part of this group request.
+     *
+     * @return group buckets to be updated
+     */
+    public GroupBuckets updateBuckets() {
+        return updateBuckets;
+    }
+
+    /**
+     * Returns the update group operation type.
+     *
+     * @return update operation type
+     */
+    public UpdateType updateType() {
+        return updateType;
+    }
+
+    /**
+     * Returns the new application cookie associated with this group operation.
+     *
+     * @return new application cookie
+     */
+    public GroupKey newAppCookie() {
+        return newAppCookie;
+    }
+
+    /**
+     * Returns the type of this group operation.
+     *
+     * @return group message type
+     */
+    public Type type() {
+        return type;
+    }
+}
