diff --git a/core/api/src/main/java/org/onosproject/net/group/DefaultGroup.java b/core/api/src/main/java/org/onosproject/net/group/DefaultGroup.java
new file mode 100644
index 0000000..0e4cac1
--- /dev/null
+++ b/core/api/src/main/java/org/onosproject/net/group/DefaultGroup.java
@@ -0,0 +1,142 @@
+/*
+ * 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.net.group;
+
+import static org.slf4j.LoggerFactory.getLogger;
+
+import org.onosproject.core.GroupId;
+import org.slf4j.Logger;
+
+/**
+ * ONOS implementation of default group that is stored in the system.
+ */
+public class DefaultGroup extends DefaultGroupDescription
+    implements Group, StoredGroupEntry {
+
+    private final Logger log = getLogger(getClass());
+
+    private GroupState state;
+    private long life;
+    private long packets;
+    private long bytes;
+    private GroupId id;
+
+    /**
+     * Default group object constructor with the parameters.
+     *
+     * @param id group identifier
+     * @param groupDesc group description parameters
+     */
+    public DefaultGroup(GroupId id, GroupDescription groupDesc) {
+        super(groupDesc);
+        this.id = id;
+        this.state = GroupState.PENDING_ADD;
+        this.life = 0;
+        this.packets = 0;
+        this.bytes = 0;
+    }
+
+    /**
+     * Returns group identifier associated with a group object.
+     *
+     * @return GroupId Group Identifier
+     */
+    @Override
+    public GroupId id() {
+        return this.id;
+    }
+
+    /**
+     * Returns current state of a group object.
+     *
+     * @return GroupState Group State
+     */
+    @Override
+    public GroupState state() {
+        return this.state;
+    }
+
+    /**
+     * Returns the number of milliseconds this group has been alive.
+     *
+     * @return number of millis
+     */
+    @Override
+    public long life() {
+        return this.life;
+    }
+
+    /**
+     * Returns the number of packets processed by this group.
+     *
+     * @return number of packets
+     */
+    @Override
+    public long packets() {
+        return this.packets;
+    }
+
+    /**
+     * Returns the number of bytes processed by this group.
+     *
+     * @return number of bytes
+     */
+    @Override
+    public long bytes() {
+        return this.bytes;
+    }
+
+    /**
+     * Sets the new state for this entry.
+     *
+     * @param newState new group entry state.
+     */
+    @Override
+    public void setState(Group.GroupState newState) {
+        this.state = newState;
+    }
+
+    /**
+     * Sets how long this entry has been entered in the system.
+     *
+     * @param life epoch time
+     */
+    @Override
+    public void setLife(long life) {
+        this.life = life;
+    }
+
+    /**
+     * Sets number of packets processed by this group entry.
+     *
+     * @param packets a long value
+     */
+    @Override
+    public void setPackets(long packets) {
+        this.packets = packets;
+    }
+
+    /**
+     * Sets number of bytes processed by this group entry.
+     *
+     * @param bytes a long value
+     */
+    @Override
+    public void setBytes(long bytes) {
+        this.bytes = bytes;
+    }
+
+}
diff --git a/core/api/src/main/java/org/onosproject/net/group/DefaultGroupBucket.java b/core/api/src/main/java/org/onosproject/net/group/DefaultGroupBucket.java
index 8c6eb63..3fab387 100644
--- a/core/api/src/main/java/org/onosproject/net/group/DefaultGroupBucket.java
+++ b/core/api/src/main/java/org/onosproject/net/group/DefaultGroupBucket.java
@@ -15,12 +15,12 @@
  */
 package org.onosproject.net.group;
 
-import static com.google.common.base.Preconditions.checkNotNull;
 import static com.google.common.base.Preconditions.checkArgument;
+import static com.google.common.base.Preconditions.checkNotNull;
 
+import org.onosproject.core.GroupId;
 import org.onosproject.net.PortNumber;
 import org.onosproject.net.flow.TrafficTreatment;
-import org.onosproject.core.GroupId;
 
 /**
  * Group bucket implementation. A group bucket is collection of
@@ -65,7 +65,6 @@
      * Creates indirect group bucket.
      *
      * @param treatment traffic treatment associated with group bucket
-     *
      * @return indirect group bucket object
      */
     public static GroupBucket createIndirectGroupBucket(
@@ -81,7 +80,6 @@
      * Creates select group bucket with weight as 1.
      *
      * @param treatment traffic treatment associated with group bucket
-     *
      * @return select group bucket object
      */
     public static GroupBucket createSelectGroupBucket(
@@ -98,7 +96,6 @@
      *
      * @param treatment traffic treatment associated with group bucket
      * @param weight weight associated with group bucket
-     *
      * @return select group bucket object
      */
     public static GroupBucket createSelectGroupBucket(
@@ -121,7 +118,6 @@
      * @param treatment traffic treatment associated with group bucket
      * @param watchPort port that determines the liveness of group bucket
      * @param watchGroup group that determines the liveness of group bucket
-     *
      * @return failover group bucket object
      */
     public static GroupBucket createFailoverGroupBucket(
@@ -142,7 +138,7 @@
     }
 
     /**
-     * Return list of Traffic instructions that are part of the bucket.
+     * Returns list of Traffic instructions that are part of the bucket.
      *
      * @return TrafficTreatment Traffic instruction list
      */
@@ -152,7 +148,7 @@
     }
 
     /**
-     * Return weight of select group bucket.
+     * Returns weight of select group bucket.
      *
      * @return short weight associated with a bucket
      */
@@ -162,7 +158,7 @@
     }
 
     /**
-     * Return port number used for liveness detection for a
+     * Returns port number used for liveness detection for a
      * failover bucket.
      *
      * @return PortNumber port number used for liveness detection
@@ -173,7 +169,7 @@
     }
 
     /**
-     * Return group identifier used for liveness detection for a
+     * Returns group identifier used for liveness detection for a
      * failover bucket.
      *
      * @return GroupId group identifier to be used for liveness detection
diff --git a/core/api/src/main/java/org/onosproject/net/group/DefaultGroupDescription.java b/core/api/src/main/java/org/onosproject/net/group/DefaultGroupDescription.java
index 46ccafd..25af506 100644
--- a/core/api/src/main/java/org/onosproject/net/group/DefaultGroupDescription.java
+++ b/core/api/src/main/java/org/onosproject/net/group/DefaultGroupDescription.java
@@ -20,6 +20,9 @@
 import org.onosproject.core.ApplicationId;
 import org.onosproject.net.DeviceId;
 
+/**
+ * Default implementation of group description interface.
+ */
 public class DefaultGroupDescription implements GroupDescription {
     private final GroupDescription.Type type;
     private final GroupBuckets buckets;
@@ -28,15 +31,15 @@
     private final DeviceId deviceId;
 
     /**
+     * Constructor to be used by north bound applications.
+     * NOTE: The caller of this subsystem MUST ensure the appCookie
+     * provided in this API is immutable
      *
      * @param deviceId device identifier
      * @param type type of the group
      * @param buckets immutable list of group bucket
      * @param appCookie immutable application cookie to be associated with the group
      * @param appId application id
-     *
-     * NOTE: The caller of this subsystem MUST ensure the appCookie
-     * provided in this API is immutable
      */
     public DefaultGroupDescription(DeviceId deviceId,
                                    GroupDescription.Type type,
@@ -51,7 +54,22 @@
     }
 
     /**
-     * Return type of a group object.
+     * Constructor to be used by group subsystem internal components.
+     * Creates group description object from another object of same type.
+     *
+     * @param groupDesc group description object
+     *
+     */
+    public DefaultGroupDescription(GroupDescription groupDesc) {
+        this.type = checkNotNull(groupDesc.type());
+        this.deviceId = checkNotNull(groupDesc.deviceId());
+        this.buckets = checkNotNull(groupDesc.buckets());
+        this.appCookie = checkNotNull(groupDesc.appCookie());
+        this.appId = checkNotNull(groupDesc.appId());
+    }
+
+    /**
+     * Returns type of a group object.
      *
      * @return GroupType group type
      */
@@ -61,7 +79,7 @@
     }
 
     /**
-     * Return device identifier on which this group object is created.
+     * Returns device identifier on which this group object is created.
      *
      * @return DeviceId device identifier
      */
@@ -71,7 +89,7 @@
     }
 
     /**
-     * Return application identifier that has created this group object.
+     * Returns application identifier that has created this group object.
      *
      * @return ApplicationId application identifier
      */
@@ -81,7 +99,7 @@
     }
 
     /**
-     * Return application cookie associated with a group object.
+     * Returns application cookie associated with a group object.
      *
      * @return GroupKey application cookie
      */
@@ -91,7 +109,7 @@
     }
 
     /**
-     * Return group buckets of a group.
+     * Returns group buckets of a group.
      *
      * @return GroupBuckets immutable list of group bucket
      */
diff --git a/core/api/src/main/java/org/onosproject/net/group/Group.java b/core/api/src/main/java/org/onosproject/net/group/Group.java
index 33a7969..f7fa507 100644
--- a/core/api/src/main/java/org/onosproject/net/group/Group.java
+++ b/core/api/src/main/java/org/onosproject/net/group/Group.java
@@ -23,35 +23,43 @@
 public interface Group extends GroupDescription {
     /**
      * State of the group object in ONOS.
-     * PENDING_ADD: group create request is processed by ONOS and
-     * not yet received the confirmation from data plane
-     * ADDED: group is created in the data plane
-     * PENDING_UPDATE: group update request is processed by ONOS and
-     * not received the confirmation from data plane post which state
-     * moves to ADDED state
-     * PENDING_DELETE: group delete request is processed by ONOS and
-     * not received the confirmation from data plane
      */
     public enum GroupState {
+        /**
+         * Group create request is processed by ONOS and not yet
+         * received the confirmation from data plane.
+         */
         PENDING_ADD,
+        /**
+         * Group is created in the data plane.
+         */
         ADDED,
+        /**
+         * Group update request is processed by ONOS and not
+         * received the confirmation from data plane post which
+         * state moves to ADDED state.
+         */
         PENDING_UPDATE,
+        /**
+         * Group delete request is processed by ONOS and not
+         * received the confirmation from data plane.
+         */
         PENDING_DELETE
     }
 
     /**
-     * Return group identifier associated with a group object.
+     * Returns group identifier associated with a group object.
      *
      * @return GroupId Group Identifier
      */
-    public GroupId id();
+    GroupId id();
 
     /**
-     * Return current state of a group object.
+     * Returns current state of a group object.
      *
      * @return GroupState Group State
      */
-    public GroupState state();
+    GroupState state();
 
     /**
      * Returns the number of milliseconds this group has been alive.
diff --git a/core/api/src/main/java/org/onosproject/net/group/GroupBucket.java b/core/api/src/main/java/org/onosproject/net/group/GroupBucket.java
index 3c2e1ec..2bf8882 100644
--- a/core/api/src/main/java/org/onosproject/net/group/GroupBucket.java
+++ b/core/api/src/main/java/org/onosproject/net/group/GroupBucket.java
@@ -15,11 +15,12 @@
  */
 package org.onosproject.net.group;
 
+import org.onosproject.core.GroupId;
 import org.onosproject.net.PortNumber;
 import org.onosproject.net.flow.TrafficTreatment;
-import org.onosproject.core.GroupId;
 
-/* Group Bucket definition. A default group Bucket is collection of
+/**
+ * Group Bucket definition. A default group Bucket is collection of
  * Instructions that can be performed on a traffic flow. A failover
  * group bucket is associated with a specific port or group that
  * controls its liveness. A select group bucket contains optional
@@ -27,28 +28,28 @@
  */
 public interface GroupBucket {
     /**
-     * Return group type of the bucket.
+     * Returns group type of the bucket.
      *
      * @return GroupType group type
      */
     public GroupDescription.Type type();
 
     /**
-     * Return list of Traffic instructions that are part of the bucket.
+     * Returns list of Traffic instructions that are part of the bucket.
      *
      * @return TrafficTreatment traffic instruction list
      */
     public TrafficTreatment treatment();
 
     /**
-     * Return weight of select group bucket.
+     * Returns weight of select group bucket.
      *
      * @return short weight associated with a bucket
      */
     public short weight();
 
     /**
-     * Return port number used for liveness detection for a
+     * Returns port number used for liveness detection for a
      * failover bucket.
      *
      * @return PortNumber port number used for liveness detection
@@ -56,7 +57,7 @@
     public PortNumber watchPort();
 
     /**
-     * Return group identifier used for liveness detection for a
+     * Returns group identifier used for liveness detection for a
      * failover bucket.
      *
      * @return GroupId group identifier to be used for liveness detection
diff --git a/core/api/src/main/java/org/onosproject/net/group/GroupBucketEntry.java b/core/api/src/main/java/org/onosproject/net/group/GroupBucketEntry.java
index c8805ad..f7a6617 100644
--- a/core/api/src/main/java/org/onosproject/net/group/GroupBucketEntry.java
+++ b/core/api/src/main/java/org/onosproject/net/group/GroupBucketEntry.java
@@ -15,20 +15,21 @@
  */
 package org.onosproject.net.group;
 
-/* Generic group bucket entry representation that is stored in a
+/**
+ * Generic group bucket entry representation that is stored in a
  * group object. A group bucket entry provides additional info of
  * group bucket like statistics...etc
  */
 public interface GroupBucketEntry extends GroupBucket {
     /**
-     * Return Number of packets processed by bucket.
+     * Returns Number of packets processed by bucket.
      *
      * @return long
      */
     public long packets();
 
     /**
-     * Return Number of bytes processed by bucket.
+     * Returns Number of bytes processed by bucket.
      *
      * @return long
      */
diff --git a/core/api/src/main/java/org/onosproject/net/group/GroupBuckets.java b/core/api/src/main/java/org/onosproject/net/group/GroupBuckets.java
index c4aaad2..10f4eca 100644
--- a/core/api/src/main/java/org/onosproject/net/group/GroupBuckets.java
+++ b/core/api/src/main/java/org/onosproject/net/group/GroupBuckets.java
@@ -19,9 +19,11 @@
 
 import java.util.List;
 
-
 import com.google.common.collect.ImmutableList;
 
+/**
+ * Immutable collection of group bucket.
+ */
 public final class GroupBuckets {
     private final List<GroupBucket> buckets;
 
@@ -35,7 +37,7 @@
     }
 
     /**
-     * Immutable list of group buckets.
+     * Returns immutable list of group buckets.
      *
      * @return list of group bucket
      */
diff --git a/core/api/src/main/java/org/onosproject/net/group/GroupDescription.java b/core/api/src/main/java/org/onosproject/net/group/GroupDescription.java
index e4ae7ed..74dcb16 100644
--- a/core/api/src/main/java/org/onosproject/net/group/GroupDescription.java
+++ b/core/api/src/main/java/org/onosproject/net/group/GroupDescription.java
@@ -47,35 +47,35 @@
     }
 
     /**
-     * Return type of a group object.
+     * Returns type of a group object.
      *
      * @return GroupType group type
      */
     public Type type();
 
     /**
-     * Return device identifier on which this group object is created.
+     * Returns device identifier on which this group object is created.
      *
      * @return DeviceId device identifier
      */
     public DeviceId deviceId();
 
     /**
-     * Return application identifier that has created this group object.
+     * Returns application identifier that has created this group object.
      *
      * @return ApplicationId application identifier
      */
     public ApplicationId appId();
 
     /**
-     * Return application cookie associated with a group object.
+     * Returns application cookie associated with a group object.
      *
      * @return GroupKey application cookie
      */
     public GroupKey appCookie();
 
     /**
-     * Return group buckets of a group.
+     * Returns group buckets of a group.
      *
      * @return GroupBuckets immutable list of group bucket
      */
diff --git a/core/api/src/main/java/org/onosproject/net/group/GroupEvent.java b/core/api/src/main/java/org/onosproject/net/group/GroupEvent.java
index 8bbe742..d9d8a97 100644
--- a/core/api/src/main/java/org/onosproject/net/group/GroupEvent.java
+++ b/core/api/src/main/java/org/onosproject/net/group/GroupEvent.java
@@ -18,7 +18,7 @@
 import org.onosproject.event.AbstractEvent;
 
 /**
- * Describes flow rule event.
+ * Describes group events.
  */
 public class GroupEvent extends AbstractEvent<GroupEvent.Type, Group> {
 
@@ -48,6 +48,10 @@
          */
         GROUP_ADD_REQUESTED,
         /*
+         * Signifies that a request to update Group has been added to the store.
+         */
+        GROUP_UPDATE_REQUESTED,
+        /*
          * Signifies that a request to delete Group has been added to the store.
          */
         GROUP_REMOVE_REQUESTED,
diff --git a/core/api/src/main/java/org/onosproject/net/group/GroupKey.java b/core/api/src/main/java/org/onosproject/net/group/GroupKey.java
index 17cb560..da8d449 100644
--- a/core/api/src/main/java/org/onosproject/net/group/GroupKey.java
+++ b/core/api/src/main/java/org/onosproject/net/group/GroupKey.java
@@ -15,8 +15,9 @@
  */
 package org.onosproject.net.group;
 
-/* Representation of generalized Key that would be used to store
- * groups in <Key, Value> store. Implementation of this interface
+/**
+ * Representation of generalized Key that would be used to store
+ * groups in &lt; Key, Value &gt; store. Implementation of this interface
  * MUST override "equals()" and "hashcode()" methods.
  */
 public interface GroupKey  {
diff --git a/core/api/src/main/java/org/onosproject/net/group/GroupOperation.java b/core/api/src/main/java/org/onosproject/net/group/GroupOperation.java
index a99ed07..44d7e88 100644
--- a/core/api/src/main/java/org/onosproject/net/group/GroupOperation.java
+++ b/core/api/src/main/java/org/onosproject/net/group/GroupOperation.java
@@ -19,6 +19,11 @@
 
 import org.onosproject.core.GroupId;
 
+/**
+ * Group operation definition to be used between core and provider
+ * layers of group subsystem.
+ *
+ */
 public final class GroupOperation {
     private final Type opType;
     private final GroupId groupId;
@@ -64,7 +69,6 @@
      * @param groupId group Identifier
      * @param groupType type of the group
      * @param buckets immutable list of group buckets to be part of group
-     *
      * @return add group operation object
      */
     public static GroupOperation createAddGroupOperation(GroupId groupId,
@@ -80,7 +84,6 @@
      * @param groupId group Identifier
      * @param groupType type of the group
      * @param buckets immutable list of group buckets to be part of group
-     *
      * @return modify group operation object
      */
     public static GroupOperation createModifyGroupOperation(GroupId groupId,
@@ -96,7 +99,6 @@
      *
      * @param groupId group Identifier
      * @param groupType type of the group
-     *
      * @return delete group operation object
      */
     public static GroupOperation createDeleteGroupOperation(GroupId groupId,
@@ -106,7 +108,7 @@
     }
 
     /**
-     * Return group operation type.
+     * Returns group operation type.
      *
      * @return GroupOpType group operation type
      */
@@ -115,7 +117,7 @@
     }
 
     /**
-     * Return group identifier attribute of the operation.
+     * Returns group identifier attribute of the operation.
      *
      * @return GroupId group identifier
      */
@@ -124,7 +126,7 @@
     }
 
     /**
-     * Return group type attribute of the operation.
+     * Returns group type attribute of the operation.
      *
      * @return GroupType group type
      */
@@ -133,7 +135,7 @@
     }
 
     /**
-     * Return group buckets associated with the operation.
+     * Returns group buckets associated with the operation.
      *
      * @return GroupBuckets group buckets
      */
diff --git a/core/api/src/main/java/org/onosproject/net/group/GroupOperations.java b/core/api/src/main/java/org/onosproject/net/group/GroupOperations.java
index 629ecd3..bc03628 100644
--- a/core/api/src/main/java/org/onosproject/net/group/GroupOperations.java
+++ b/core/api/src/main/java/org/onosproject/net/group/GroupOperations.java
@@ -19,9 +19,13 @@
 
 import java.util.List;
 
-
 import com.google.common.collect.ImmutableList;
 
+/**
+ * Immutable collection of group operation to be used between
+ * core and provider layers of group subsystem.
+ *
+ */
 public final class GroupOperations {
     private final List<GroupOperation> operations;
 
@@ -35,7 +39,7 @@
     }
 
     /**
-     * Immutable list of group operation.
+     * Returns immutable list of group operation.
      *
      * @return list of group operation
      */
diff --git a/core/api/src/main/java/org/onosproject/net/group/GroupProvider.java b/core/api/src/main/java/org/onosproject/net/group/GroupProvider.java
index 35d949f..6757e66 100644
--- a/core/api/src/main/java/org/onosproject/net/group/GroupProvider.java
+++ b/core/api/src/main/java/org/onosproject/net/group/GroupProvider.java
@@ -19,12 +19,12 @@
 import org.onosproject.net.provider.Provider;
 
 /**
- * Abstraction of a flow rule provider.
+ * Abstraction of group provider.
  */
 public interface GroupProvider extends Provider {
 
     /**
-     * Perform a group operation in the specified device with the
+     * Performs a batch of group operation in the specified device with the
      * specified parameters.
      *
      * @param deviceId device identifier on which the batch of group
diff --git a/core/api/src/main/java/org/onosproject/net/group/GroupProviderService.java b/core/api/src/main/java/org/onosproject/net/group/GroupProviderService.java
index bfa0522..26c7bb1 100644
--- a/core/api/src/main/java/org/onosproject/net/group/GroupProviderService.java
+++ b/core/api/src/main/java/org/onosproject/net/group/GroupProviderService.java
@@ -26,6 +26,11 @@
  */
 public interface GroupProviderService extends ProviderService<GroupProvider> {
 
+    /**
+     * Notifies core if any failure from data plane during group operations.
+     *
+     * @param operation offended group operation
+     */
     void groupOperationFailed(GroupOperation operation);
 
     /**
diff --git a/core/api/src/main/java/org/onosproject/net/group/GroupService.java b/core/api/src/main/java/org/onosproject/net/group/GroupService.java
index eb733e1..1fd9984 100644
--- a/core/api/src/main/java/org/onosproject/net/group/GroupService.java
+++ b/core/api/src/main/java/org/onosproject/net/group/GroupService.java
@@ -36,7 +36,7 @@
 public interface GroupService {
 
     /**
-     * Create a group in the specified device with the provided buckets.
+     * Creates a group in the specified device with the provided buckets.
      * This API provides an option for application to associate a cookie
      * while creating a group, so that applications can look-up the
      * groups based on the cookies. These Groups will be retained by
@@ -55,7 +55,7 @@
     void addGroup(GroupDescription groupDesc);
 
     /**
-     * Return a group object associated to an application cookie.
+     * Returns a group object associated to an application cookie.
      *
      * NOTE1: The presence of group object in the system does not
      * guarantee that the "group" is actually created in device.
@@ -64,14 +64,13 @@
      *
      * @param deviceId device identifier
      * @param appCookie application cookie to be used for lookup
-     *
      * @return group associated with the application cookie or
      *               NULL if Group is not found for the provided cookie
      */
     Group getGroup(DeviceId deviceId, GroupKey appCookie);
 
     /**
-     * Append buckets to existing group. The caller can optionally
+     * Appends buckets to existing group. The caller can optionally
      * associate a new cookie during this updation. GROUP_UPDATED or
      * GROUP_UPDATE_FAILED notifications would be provided along with
      * cookie depending on the result of the operation on the device
@@ -89,7 +88,7 @@
                            ApplicationId appId);
 
     /**
-     * Remove buckets from existing group. The caller can optionally
+     * Removes buckets from existing group. The caller can optionally
      * associate a new cookie during this updation. GROUP_UPDATED or
      * GROUP_UPDATE_FAILED notifications would be provided along with
      * cookie depending on the result of the operation on the device
@@ -107,7 +106,7 @@
                                 ApplicationId appId);
 
     /**
-     * Delete a group associated to an application cookie.
+     * Deletes a group associated to an application cookie.
      * GROUP_DELETED or GROUP_DELETE_FAILED notifications would be
      * provided along with cookie depending on the result of the
      * operation on the device
@@ -119,12 +118,11 @@
     void removeGroup(Device deviceId, GroupKey appCookie, ApplicationId appId);
 
     /**
-     * Retrieve all groups created by an application in the specified device
+     * Retrieves all groups created by an application in the specified device
      * as seen by current controller instance.
      *
      * @param deviceId device identifier
      * @param appId application id
-     *
      * @return collection of immutable group objects created by the application
      */
     Iterable<Group> getGroups(Device deviceId, ApplicationId appId);
diff --git a/core/api/src/main/java/org/onosproject/net/group/GroupStore.java b/core/api/src/main/java/org/onosproject/net/group/GroupStore.java
new file mode 100644
index 0000000..22914f9
--- /dev/null
+++ b/core/api/src/main/java/org/onosproject/net/group/GroupStore.java
@@ -0,0 +1,105 @@
+/*
+ * 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.net.group;
+
+import org.onosproject.net.DeviceId;
+import org.onosproject.store.Store;
+
+/**
+ * Manages inventory of groups per device; not intended for direct use.
+ */
+public interface GroupStore extends Store<GroupEvent, GroupStoreDelegate> {
+
+    public enum UpdateType {
+        /**
+         * Modify existing group entry by adding provided information.
+         */
+        ADD,
+        /**
+         * Modify existing group by removing provided information from it.
+         */
+        REMOVE
+    }
+
+    /**
+     * Returns the number of groups for the specified device in the store.
+     *
+     * @param deviceId the device ID
+     * @return number of groups for the specified device
+     */
+    int getGroupCount(DeviceId deviceId);
+
+    /**
+     * Returns the groups associated with a device.
+     *
+     * @param deviceId the device ID
+     * @return the group entries
+     */
+    Iterable<Group> getGroups(DeviceId deviceId);
+
+    /**
+     * Returns the stored group entry.
+     *
+     * @param deviceId the device ID
+     * @param appCookie the group key
+     * @return a group associated with the key
+     */
+    Group getGroup(DeviceId deviceId, GroupKey appCookie);
+
+    /**
+     * Stores a new group entry using the information from group description.
+     *
+     * @param groupDesc group description to be used to store group entry
+     */
+    void storeGroupDescription(GroupDescription groupDesc);
+
+    /**
+     * Updates the existing group entry with the information
+     * from group description.
+     *
+     * @param deviceId the device ID
+     * @param oldAppCookie the current group key
+     * @param type update type
+     * @param newGroupDesc group description with updates
+     */
+    void updateGroupDescription(DeviceId deviceId,
+                                GroupKey oldAppCookie,
+                                UpdateType type,
+                                GroupDescription newGroupDesc);
+
+    /**
+     * Triggers deleting the existing group entry.
+     *
+     * @param deviceId the device ID
+     * @param appCookie the group key
+     */
+    void deleteGroupDescription(DeviceId deviceId,
+                                GroupKey appCookie);
+
+    /**
+     * Stores a new group entry, or updates an existing entry.
+     *
+     * @param group group entry
+     */
+    void addOrUpdateGroupEntry(Group group);
+
+    /**
+     * Removes the group entry from store.
+     *
+     * @param group group entry
+     */
+    void removeGroupEntry(Group group);
+}
diff --git a/core/api/src/main/java/org/onosproject/net/group/GroupStoreDelegate.java b/core/api/src/main/java/org/onosproject/net/group/GroupStoreDelegate.java
new file mode 100644
index 0000000..308ebb1
--- /dev/null
+++ b/core/api/src/main/java/org/onosproject/net/group/GroupStoreDelegate.java
@@ -0,0 +1,24 @@
+/*
+ * 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.net.group;
+
+import org.onosproject.store.StoreDelegate;
+
+/**
+ * Group store delegate abstraction.
+ */
+public interface GroupStoreDelegate extends StoreDelegate<GroupEvent> {
+}
diff --git a/core/api/src/main/java/org/onosproject/net/group/StoredGroupEntry.java b/core/api/src/main/java/org/onosproject/net/group/StoredGroupEntry.java
new file mode 100644
index 0000000..b3557b4
--- /dev/null
+++ b/core/api/src/main/java/org/onosproject/net/group/StoredGroupEntry.java
@@ -0,0 +1,52 @@
+/*
+ * 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.net.group;
+
+/**
+ * Interface that defines set methods for a group entry
+ * that is stored in the system.
+ */
+public interface StoredGroupEntry extends Group {
+
+    /**
+     * Sets the new state for this entry.
+     *
+     * @param newState new group entry state.
+     */
+    void setState(Group.GroupState newState);
+
+    /**
+     * Sets how long this entry has been entered in the system.
+     *
+     * @param life epoch time
+     */
+    void setLife(long life);
+
+    /**
+     * Sets number of packets processed by this group entry.
+     *
+     * @param packets a long value
+     */
+    void setPackets(long packets);
+
+    /**
+     * Sets number of bytes processed by this group entry.
+     *
+     * @param bytes a long value
+     */
+    void setBytes(long bytes);
+
+}
