diff --git a/core/api/src/main/java/org/onlab/onos/core/DefaultGroupId.java b/core/api/src/main/java/org/onlab/onos/core/DefaultGroupId.java
new file mode 100644
index 0000000..7e51114
--- /dev/null
+++ b/core/api/src/main/java/org/onlab/onos/core/DefaultGroupId.java
@@ -0,0 +1,66 @@
+/*
+ * Copyright 2014 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.onlab.onos.core;
+
+import com.google.common.base.MoreObjects;
+
+import java.util.Objects;
+
+/**
+ * Default implementation of {@link GroupId}.
+ */
+public class DefaultGroupId implements GroupId {
+
+    private final int id;
+
+    public DefaultGroupId(int id) {
+        this.id = id;
+    }
+
+    // Constructor for serialization
+    private DefaultGroupId() {
+        this.id = 0;
+    }
+
+    @Override
+    public int id() {
+        return 0;
+    }
+
+    @Override
+    public int hashCode() {
+        return Objects.hash(id);
+    }
+
+    @Override
+    public boolean equals(Object obj) {
+        if (this == obj) {
+            return true;
+        }
+        if (!(obj instanceof DefaultGroupId)) {
+            return false;
+        }
+        final DefaultGroupId other = (DefaultGroupId) obj;
+        return Objects.equals(this.id, other.id);
+    }
+
+    @Override
+    public String toString() {
+        return MoreObjects.toStringHelper(this)
+                .add("id", id)
+                .toString();
+    }
+}
diff --git a/core/api/src/main/java/org/onlab/onos/core/GroupId.java b/core/api/src/main/java/org/onlab/onos/core/GroupId.java
new file mode 100644
index 0000000..6757fcd
--- /dev/null
+++ b/core/api/src/main/java/org/onlab/onos/core/GroupId.java
@@ -0,0 +1,31 @@
+/*
+ * Copyright 2014 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.onlab.onos.core;
+
+/**
+ * Group identifier.
+ */
+public interface GroupId {
+
+    /**
+     * Returns a group ID as short value.
+     * The method is not intended for use by application developers.
+     * Return data type may change in the future release.
+     *
+     * @return a group ID as short value
+     */
+    int id();
+}
diff --git a/core/api/src/main/java/org/onlab/onos/net/statistic/StatisticService.java b/core/api/src/main/java/org/onlab/onos/net/statistic/StatisticService.java
index cc97474..de59886 100644
--- a/core/api/src/main/java/org/onlab/onos/net/statistic/StatisticService.java
+++ b/core/api/src/main/java/org/onlab/onos/net/statistic/StatisticService.java
@@ -15,11 +15,15 @@
  */
 package org.onlab.onos.net.statistic;
 
+import org.onlab.onos.core.ApplicationId;
+import org.onlab.onos.core.GroupId;
 import org.onlab.onos.net.ConnectPoint;
 import org.onlab.onos.net.Link;
 import org.onlab.onos.net.Path;
 import org.onlab.onos.net.flow.FlowRule;
 
+import java.util.Optional;
+
 /**
  * Service for obtaining statistic information about link in the system.
  * Statistics are obtained from the FlowRuleService in order to minimize the
@@ -68,4 +72,14 @@
      */
     FlowRule highestHitter(ConnectPoint connectPoint);
 
+    /**
+     * Obtain the load for a the ingress to the given link used by
+     * the specified application ID and group ID.
+     *
+     * @param link    link to query
+     * @param appId   application ID to filter with
+     * @param groupId group ID to filter with
+     * @return {@link Load Load}
+     */
+    Load load(Link link, ApplicationId appId, Optional<GroupId> groupId);
 }
