diff --git a/api/src/main/java/org/opencord/igmpproxy/IgmpLeadershipService.java b/api/src/main/java/org/opencord/igmpproxy/IgmpLeadershipService.java
index 1b8d0fe..c3563a4 100644
--- a/api/src/main/java/org/opencord/igmpproxy/IgmpLeadershipService.java
+++ b/api/src/main/java/org/opencord/igmpproxy/IgmpLeadershipService.java
@@ -15,6 +15,8 @@
  */
 package org.opencord.igmpproxy;
 
+import org.onosproject.cluster.Leadership;
+import org.onosproject.cluster.NodeId;
 import org.onosproject.net.DeviceId;
 
 /**
@@ -28,4 +30,34 @@
      * @return if it is leadership of this device, return true
      */
     boolean isLocalLeader(DeviceId deviceId);
+
+    /**
+     * Gets local node id.
+     *
+     * @return node id
+     */
+    NodeId getLocalNodeId();
+
+    /**
+     * Gets leader for topic.
+     *
+     * @param topic topic name
+     * @return leader of topic
+     */
+    NodeId getLeader(String topic);
+
+    /**
+     * Enters a leadership contest.
+     *
+     * @param topic leadership topic
+     * @return {@code Leadership} future
+     */
+    Leadership runForLeadership(String topic);
+
+    /**
+     * Withdraws from a leadership contest.
+     *
+     * @param topic leadership topic
+     */
+    void withdraw(String topic);
 }
diff --git a/api/src/main/java/org/opencord/igmpproxy/IgmpStatisticType.java b/api/src/main/java/org/opencord/igmpproxy/IgmpStatisticType.java
new file mode 100644
index 0000000..0a94569
--- /dev/null
+++ b/api/src/main/java/org/opencord/igmpproxy/IgmpStatisticType.java
@@ -0,0 +1,126 @@
+/*
+ * Copyright 2018-present Open Networking Foundation
+ *
+ * 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.opencord.igmpproxy;
+
+/**
+ * Types of igmp-statistics.
+ */
+public enum IgmpStatisticType {
+    /**
+     * Join request.
+     */
+    IGMP_JOIN_REQ,
+    /**
+     * Success re-join.
+     */
+    IGMP_SUCCESS_JOIN_RE_JOIN_REQ,
+    /**
+     * Fail join request.
+     */
+    IGMP_FAIL_JOIN_REQ,
+    /**
+     * Leave request.
+     */
+    IGMP_LEAVE_REQ,
+    /**
+     * Igmp disconnect.
+     */
+    IGMP_DISCONNECT,
+    /**
+     * Igmp v3 membership query.
+     */
+    IGMP_V3_MEMBERSHIP_QUERY,
+    /**
+     * Igmp v1 membership report.
+     */
+    IGMP_V1_MEMBERSHIP_REPORT,
+    /**
+     * Igmp v2 membeship report.
+     */
+    IGMP_V2_MEMBERSHIP_REPORT,
+    /**
+     * Igmp v3 membeship report.
+     */
+    IGMP_V3_MEMBERSHIP_REPORT,
+    /**
+     * Igmp v2 leave group.
+     */
+    IGMP_V2_LEAVE_GROUP,
+    /**
+     * Received total message.
+     */
+    TOTAL_MSG_RECEIVED,
+    /**
+     * Received igmp-message.
+     */
+    IGMP_MSG_RECEIVED,
+    /**
+     * Received invalid igmp-message.
+     */
+    INVALID_IGMP_MSG_RECEIVED,
+    /**
+     * Unknown igmp rx packets counter.
+     */
+    UNKNOWN_IGMP_TYPE_PACKETS_RX_COUNTER,
+    /**
+     * Wrong mode rx counter reports.
+     */
+    REPORTS_RX_WITH_WRONG_MODE_COUNTER,
+    /**
+     * Insuff permission access counter of fail join request.
+     */
+    FAIL_JOIN_REQ_INSUFF_PERMISSION_ACCESS_COUNTER,
+    /**
+     * Unknown mcast ip counter of fail join.
+     */
+    FAIL_JOIN_REQ_UNKNOWN_MULTICAST_IP_COUNTER,
+    /**
+     * Unconfigured group counter.
+     */
+    UNCONFIGURED_GROUP_COUNTER,
+    /**
+     * Valid igmp packet counter.
+     */
+    VALID_IGMP_PACKET_COUNTER,
+    /**
+     * Igmp channel join counter.
+     */
+    IGMP_CHANNEL_JOIN_COUNTER,
+    /**
+     * Current grp number counter.
+     */
+    CURRENT_GRP_NUMBER_COUNTER,
+    /**
+     * Igmp valid checksum counter.
+     */
+    IGMP_VALID_CHECKSUM_COUNTER,
+    /**
+     * Invalid igmp length.
+     */
+    INVALID_IGMP_LENGTH,
+    /**
+     * Igmp general membership query.
+     */
+    IGMP_GENERAL_MEMBERSHIP_QUERY,
+    /**
+     * Igmp grp specific membership query.
+     */
+    IGMP_GRP_SPECIFIC_MEMBERSHIP_QUERY,
+    /**
+     * Igmp grp and src spesific membership query.
+     */
+    IGMP_GRP_AND_SRC_SPESIFIC_MEMBERSHIP_QUERY;
+}
diff --git a/api/src/main/java/org/opencord/igmpproxy/IgmpStatistics.java b/api/src/main/java/org/opencord/igmpproxy/IgmpStatistics.java
index f330e9f..d101d60 100644
--- a/api/src/main/java/org/opencord/igmpproxy/IgmpStatistics.java
+++ b/api/src/main/java/org/opencord/igmpproxy/IgmpStatistics.java
@@ -15,14 +15,18 @@
  */
 package org.opencord.igmpproxy;
 
+import org.slf4j.Logger;
+
 import java.util.concurrent.atomic.AtomicLong;
 
+import static org.slf4j.LoggerFactory.getLogger;
+
 /**
- *
  * Records metrics for IgmpProxy application.
- *
  */
 public class IgmpStatistics {
+    private final Logger log = getLogger(getClass());
+    private static final long RESET_VALUE = 0L;
 
     //Total number of join requests
     private AtomicLong igmpJoinReq = new AtomicLong();
@@ -77,212 +81,239 @@
     //Total number of group and source specific IGMP membership query messages received
     private AtomicLong igmpGrpAndSrcSpecificMembershipQuery = new AtomicLong();
 
-    public Long getIgmpJoinReq() {
-        return igmpJoinReq.get();
+    public void setStats(IgmpStatistics current) {
+        igmpJoinReq.set(current.igmpJoinReq.get());
+        igmpSuccessJoinRejoinReq.set(current.igmpSuccessJoinRejoinReq.get());
+        igmpFailJoinReq.set(current.igmpFailJoinReq.get());
+        igmpLeaveReq.set(current.igmpLeaveReq.get());
+        igmpDisconnect.set(current.igmpDisconnect.get());
+        igmpv3MembershipQuery.set(current.igmpv3MembershipQuery.get());
+        igmpv1MembershipReport.set(current.igmpv1MembershipReport.get());
+        igmpv3MembershipReport.set(current.igmpv3MembershipReport.get());
+        igmpv2MembershipReport.set(current.igmpv2MembershipReport.get());
+        igmpv2LeaveGroup.set(current.igmpv2LeaveGroup.get());
+        totalMsgReceived.set(current.totalMsgReceived.get());
+        igmpMsgReceived.set(current.igmpMsgReceived.get());
+        invalidIgmpMsgReceived.set(current.invalidIgmpMsgReceived.get());
+        unknownIgmpTypePacketsRxCounter.set(current.unknownIgmpTypePacketsRxCounter.get());
+        reportsRxWithWrongModeCounter.set(current.reportsRxWithWrongModeCounter.get());
+        failJoinReqInsuffPermissionAccessCounter.set(current.failJoinReqInsuffPermissionAccessCounter.get());
+        failJoinReqUnknownMulticastIpCounter.set(current.failJoinReqUnknownMulticastIpCounter.get());
+        unconfiguredGroupCounter.set(current.unconfiguredGroupCounter.get());
+        validIgmpPacketCounter.set(current.validIgmpPacketCounter.get());
+        igmpChannelJoinCounter.set(current.igmpChannelJoinCounter.get());
+        currentGrpNumCounter.set(current.currentGrpNumCounter.get());
+        igmpValidChecksumCounter.set(current.igmpValidChecksumCounter.get());
+        invalidIgmpLength.set(current.invalidIgmpLength.get());
+        igmpGeneralMembershipQuery.set(current.igmpGeneralMembershipQuery.get());
+        igmpGrpSpecificMembershipQuery.set(current.igmpGrpSpecificMembershipQuery.get());
+        igmpGrpAndSrcSpecificMembershipQuery.set(current.igmpGrpAndSrcSpecificMembershipQuery.get());
     }
 
-    public Long getIgmpSuccessJoinRejoinReq() {
-        return igmpSuccessJoinRejoinReq.get();
+    public void resetAll() {
+        igmpJoinReq.set(RESET_VALUE);
+        igmpLeaveReq.set(RESET_VALUE);
+        igmpDisconnect.set(RESET_VALUE);
+        totalMsgReceived.set(RESET_VALUE);
+        igmpv2LeaveGroup.set(RESET_VALUE);
+        invalidIgmpLength.set(RESET_VALUE);
+        igmpv3MembershipQuery.set(RESET_VALUE);
+        igmpChannelJoinCounter.set(RESET_VALUE);
+        igmpv1MembershipReport.set(RESET_VALUE);
+        igmpv2MembershipReport.set(RESET_VALUE);
+        igmpv3MembershipReport.set(RESET_VALUE);
+        invalidIgmpMsgReceived.set(RESET_VALUE);
+        validIgmpPacketCounter.set(RESET_VALUE);
+        currentGrpNumCounter.set(RESET_VALUE);
+        igmpFailJoinReq.set(RESET_VALUE);
+        unconfiguredGroupCounter.set(RESET_VALUE);
+        igmpValidChecksumCounter.set(RESET_VALUE);
+        igmpGeneralMembershipQuery.set(RESET_VALUE);
+        igmpSuccessJoinRejoinReq.set(RESET_VALUE);
+        igmpGrpSpecificMembershipQuery.set(RESET_VALUE);
+        reportsRxWithWrongModeCounter.set(RESET_VALUE);
+        unknownIgmpTypePacketsRxCounter.set(RESET_VALUE);
+        failJoinReqUnknownMulticastIpCounter.set(RESET_VALUE);
+        igmpGrpAndSrcSpecificMembershipQuery.set(RESET_VALUE);
+        failJoinReqInsuffPermissionAccessCounter.set(RESET_VALUE);
     }
 
-    public Long getIgmpFailJoinReq() {
-        return igmpFailJoinReq.get();
+    public void increaseStat(IgmpStatisticType type) {
+        switch (type) {
+            case IGMP_JOIN_REQ:
+                igmpJoinReq.incrementAndGet();
+                break;
+            case IGMP_LEAVE_REQ:
+                igmpLeaveReq.incrementAndGet();
+                break;
+            case IGMP_DISCONNECT:
+                igmpDisconnect.incrementAndGet();
+                break;
+            case IGMP_MSG_RECEIVED:
+                break;
+            case TOTAL_MSG_RECEIVED:
+                totalMsgReceived.incrementAndGet();
+                break;
+            case IGMP_V2_LEAVE_GROUP:
+                igmpv2LeaveGroup.incrementAndGet();
+                igmpMsgReceived.incrementAndGet();
+                break;
+            case INVALID_IGMP_LENGTH:
+                invalidIgmpLength.incrementAndGet();
+                break;
+            case IGMP_V3_MEMBERSHIP_QUERY:
+                igmpv3MembershipQuery.incrementAndGet();
+                igmpMsgReceived.incrementAndGet();
+                break;
+            case IGMP_CHANNEL_JOIN_COUNTER:
+                igmpChannelJoinCounter.incrementAndGet();
+                break;
+            case IGMP_V1_MEMBERSHIP_REPORT:
+                igmpv1MembershipReport.incrementAndGet();
+                igmpMsgReceived.incrementAndGet();
+                break;
+            case IGMP_V2_MEMBERSHIP_REPORT:
+                igmpv2MembershipReport.incrementAndGet();
+                igmpMsgReceived.incrementAndGet();
+                break;
+            case IGMP_V3_MEMBERSHIP_REPORT:
+                igmpv3MembershipReport.incrementAndGet();
+                igmpMsgReceived.incrementAndGet();
+                break;
+            case INVALID_IGMP_MSG_RECEIVED:
+                invalidIgmpMsgReceived.incrementAndGet();
+                break;
+            case VALID_IGMP_PACKET_COUNTER:
+                validIgmpPacketCounter.incrementAndGet();
+                break;
+            case CURRENT_GRP_NUMBER_COUNTER:
+                currentGrpNumCounter.incrementAndGet();
+                break;
+            case IGMP_FAIL_JOIN_REQ:
+                igmpFailJoinReq.incrementAndGet();
+                break;
+            case UNCONFIGURED_GROUP_COUNTER:
+                unconfiguredGroupCounter.incrementAndGet();
+                break;
+            case IGMP_VALID_CHECKSUM_COUNTER:
+                igmpValidChecksumCounter.incrementAndGet();
+                break;
+            case IGMP_GENERAL_MEMBERSHIP_QUERY:
+                igmpGeneralMembershipQuery.incrementAndGet();
+                break;
+            case IGMP_SUCCESS_JOIN_RE_JOIN_REQ:
+                igmpSuccessJoinRejoinReq.incrementAndGet();
+                break;
+            case IGMP_GRP_SPECIFIC_MEMBERSHIP_QUERY:
+                igmpGrpSpecificMembershipQuery.incrementAndGet();
+                break;
+            case REPORTS_RX_WITH_WRONG_MODE_COUNTER:
+                reportsRxWithWrongModeCounter.incrementAndGet();
+                break;
+            case UNKNOWN_IGMP_TYPE_PACKETS_RX_COUNTER:
+                unknownIgmpTypePacketsRxCounter.incrementAndGet();
+                break;
+            case FAIL_JOIN_REQ_UNKNOWN_MULTICAST_IP_COUNTER:
+                failJoinReqUnknownMulticastIpCounter.incrementAndGet();
+                break;
+            case IGMP_GRP_AND_SRC_SPESIFIC_MEMBERSHIP_QUERY:
+                igmpGrpAndSrcSpecificMembershipQuery.incrementAndGet();
+                break;
+            case FAIL_JOIN_REQ_INSUFF_PERMISSION_ACCESS_COUNTER:
+                failJoinReqInsuffPermissionAccessCounter.incrementAndGet();
+                break;
+            default:
+                log.warn("Unhandled statistic type. {}", type);
+                break;
+        }
     }
 
-    public Long getIgmpLeaveReq() {
-        return igmpLeaveReq.get();
+    public Long getStat(IgmpStatisticType type) {
+        Long value;
+        switch (type) {
+            case IGMP_JOIN_REQ:
+                value = igmpJoinReq.get();
+                break;
+            case IGMP_LEAVE_REQ:
+                value = igmpLeaveReq.get();
+                break;
+            case IGMP_DISCONNECT:
+                value = igmpDisconnect.get();
+                break;
+            case IGMP_MSG_RECEIVED:
+                value = igmpMsgReceived.get();
+                break;
+            case TOTAL_MSG_RECEIVED:
+                value = totalMsgReceived.get();
+                break;
+            case IGMP_V2_LEAVE_GROUP:
+                value = igmpv2LeaveGroup.get();
+                break;
+            case INVALID_IGMP_LENGTH:
+                value = invalidIgmpLength.get();
+                break;
+            case IGMP_V3_MEMBERSHIP_QUERY:
+                value = igmpv3MembershipQuery.get();
+                break;
+            case IGMP_CHANNEL_JOIN_COUNTER:
+                value = igmpChannelJoinCounter.get();
+                break;
+            case IGMP_V1_MEMBERSHIP_REPORT:
+                value = igmpv1MembershipReport.get();
+                break;
+            case IGMP_V2_MEMBERSHIP_REPORT:
+                value = igmpv2MembershipReport.get();
+                break;
+            case IGMP_V3_MEMBERSHIP_REPORT:
+                value = igmpv3MembershipReport.get();
+                break;
+            case INVALID_IGMP_MSG_RECEIVED:
+                value = invalidIgmpMsgReceived.get();
+                break;
+            case VALID_IGMP_PACKET_COUNTER:
+                value = validIgmpPacketCounter.get();
+                break;
+            case CURRENT_GRP_NUMBER_COUNTER:
+                value = currentGrpNumCounter.get();
+                break;
+            case IGMP_FAIL_JOIN_REQ:
+                value = igmpFailJoinReq.get();
+                break;
+            case UNCONFIGURED_GROUP_COUNTER:
+                value = unconfiguredGroupCounter.get();
+                break;
+            case IGMP_VALID_CHECKSUM_COUNTER:
+                value = igmpValidChecksumCounter.get();
+                break;
+            case IGMP_GENERAL_MEMBERSHIP_QUERY:
+                value = igmpGeneralMembershipQuery.get();
+                break;
+            case IGMP_SUCCESS_JOIN_RE_JOIN_REQ:
+                value = igmpSuccessJoinRejoinReq.get();
+                break;
+            case IGMP_GRP_SPECIFIC_MEMBERSHIP_QUERY:
+                value = igmpGrpSpecificMembershipQuery.get();
+                break;
+            case REPORTS_RX_WITH_WRONG_MODE_COUNTER:
+                value = reportsRxWithWrongModeCounter.get();
+                break;
+            case UNKNOWN_IGMP_TYPE_PACKETS_RX_COUNTER:
+                value = unknownIgmpTypePacketsRxCounter.get();
+                break;
+            case FAIL_JOIN_REQ_UNKNOWN_MULTICAST_IP_COUNTER:
+                value = failJoinReqUnknownMulticastIpCounter.get();
+                break;
+            case IGMP_GRP_AND_SRC_SPESIFIC_MEMBERSHIP_QUERY:
+                value = igmpGrpAndSrcSpecificMembershipQuery.get();
+                break;
+            case FAIL_JOIN_REQ_INSUFF_PERMISSION_ACCESS_COUNTER:
+                value = failJoinReqInsuffPermissionAccessCounter.get();
+                break;
+            default:
+                value = null;
+                log.warn("Unhandled statistic type. {}", type);
+                break;
+        }
+        return value;
     }
-
-    public Long getIgmpDisconnect() {
-        return igmpDisconnect.get();
-    }
-
-    public Long getIgmpv3MembershipQuery() {
-        return igmpv3MembershipQuery.get();
-    }
-
-    public Long getIgmpv1MemershipReport() {
-        return igmpv1MembershipReport.get();
-    }
-
-    public Long getIgmpv3MembershipReport() {
-        return igmpv3MembershipReport.get();
-    }
-
-    public Long getIgmpv2MembershipReport() {
-        return igmpv2MembershipReport.get();
-    }
-
-    public Long getIgmpv2LeaveGroup() {
-        return igmpv2LeaveGroup.get();
-    }
-
-    public Long getTotalMsgReceived() {
-        return totalMsgReceived.get();
-    }
-
-    public Long getIgmpMsgReceived() {
-        return igmpMsgReceived.get();
-    }
-
-    public Long getInvalidIgmpMsgReceived() {
-        return invalidIgmpMsgReceived.get();
-    }
-
-    public void increaseIgmpJoinReq() {
-        igmpJoinReq.incrementAndGet();
-    }
-
-    public void increaseIgmpSuccessJoinRejoinReq() {
-        igmpSuccessJoinRejoinReq.incrementAndGet();
-    }
-
-    public void increaseIgmpFailJoinReq() {
-        igmpFailJoinReq.incrementAndGet();
-    }
-
-    public void increaseIgmpLeaveReq() {
-        igmpLeaveReq.incrementAndGet();
-    }
-
-    public void increaseIgmpDisconnect() {
-        igmpDisconnect.incrementAndGet();
-    }
-
-    public void increaseIgmpv3MembershipQuery() {
-        igmpv3MembershipQuery.incrementAndGet();
-        igmpMsgReceived.incrementAndGet();
-    }
-
-    public void increaseIgmpv2MembershipReport() {
-        igmpv2MembershipReport.incrementAndGet();
-        igmpMsgReceived.incrementAndGet();
-    }
-
-    public void increaseIgmpv1MembershipReport() {
-        igmpv1MembershipReport.incrementAndGet();
-        igmpMsgReceived.incrementAndGet();
-    }
-
-    public void increaseIgmpv3MembershipReport() {
-        igmpv3MembershipReport.incrementAndGet();
-        igmpMsgReceived.incrementAndGet();
-    }
-
-    public void increaseIgmpv2LeaveGroup() {
-        igmpv2LeaveGroup.incrementAndGet();
-        igmpMsgReceived.incrementAndGet();
-    }
-
-    public void increaseInvalidIgmpMsgReceived() {
-        invalidIgmpMsgReceived.incrementAndGet();
-    }
-
-    public void increaseTotalMsgReceived() {
-        totalMsgReceived.incrementAndGet();
-    }
-
-    public Long getValidIgmpPacketCounter() {
-        return validIgmpPacketCounter.get();
-    }
-
-    public void increaseValidIgmpPacketCounter() {
-        validIgmpPacketCounter.incrementAndGet();
-    }
-
-    public Long getCurrentGrpNumCounter() {
-        return currentGrpNumCounter.get();
-    }
-
-    public void increaseCurrentGrpNumCounter() {
-        currentGrpNumCounter.incrementAndGet();
-    }
-
-    public Long getIgmpChannelJoinCounter() {
-        return igmpChannelJoinCounter.get();
-    }
-    public Long getIgmpValidChecksumCounter() {
-        return igmpValidChecksumCounter.get();
-    }
-
-    public void increaseIgmpChannelJoinCounter() {
-        igmpChannelJoinCounter.incrementAndGet();
-    }
-
-    public void increaseIgmpValidChecksumCounter() {
-        igmpValidChecksumCounter.incrementAndGet();
-    }
-
-    public Long getUnconfiguredGroupCounter() {
-        return unconfiguredGroupCounter.get();
-    }
-
-    public void increaseUnconfiguredGroupCounter() {
-        unconfiguredGroupCounter.incrementAndGet();
-    }
-
-    public Long getFailJoinReqUnknownMulticastIpCounter() {
-        return failJoinReqUnknownMulticastIpCounter.get();
-    }
-
-    public void increaseFailJoinReqUnknownMulticastIpCounter() {
-        failJoinReqUnknownMulticastIpCounter.incrementAndGet();
-    }
-
-    public Long getFailJoinReqInsuffPermissionAccessCounter() {
-        return failJoinReqInsuffPermissionAccessCounter.get();
-    }
-
-    public void increaseFailJoinReqInsuffPermissionAccessCounter() {
-        failJoinReqInsuffPermissionAccessCounter.incrementAndGet();
-    }
-
-    public Long getReportsRxWithWrongModeCounter() {
-        return reportsRxWithWrongModeCounter.get();
-    }
-
-    public Long getUnknownIgmpTypePacketsRxCounter() {
-        return unknownIgmpTypePacketsRxCounter.get();
-    }
-
-    public void increaseUnknownIgmpTypePacketsRxCounter() {
-        unknownIgmpTypePacketsRxCounter.incrementAndGet();
-    }
-
-    public void increaseReportsRxWithWrongModeCounter() {
-        reportsRxWithWrongModeCounter.incrementAndGet();
-    }
-
-    public Long getInvalidIgmpLength() {
-        return invalidIgmpLength.get();
-    }
-
-    public void increaseInvalidIgmpLength() {
-        invalidIgmpLength.incrementAndGet();
-    }
-
-    public Long getIgmpGeneralMembershipQuery() {
-        return igmpGeneralMembershipQuery.get();
-    }
-
-    public Long getIgmpGrpSpecificMembershipQuery() {
-        return igmpGrpSpecificMembershipQuery.get();
-    }
-
-    public Long getIgmpGrpAndSrcSpecificMembershipQuery() {
-        return igmpGrpAndSrcSpecificMembershipQuery.get();
-    }
-
-    public void increaseIgmpGeneralMembershipQuery() {
-        igmpGeneralMembershipQuery.incrementAndGet();
-    }
-
-    public void increaseIgmpGrpSpecificMembershipQuery() {
-        igmpGrpSpecificMembershipQuery.incrementAndGet();
-    }
-
-    public void increaseIgmpGrpAndSrcSpecificMembershipQuery() {
-        igmpGrpAndSrcSpecificMembershipQuery.incrementAndGet();
-    }
-
 }
diff --git a/api/src/main/java/org/opencord/igmpproxy/IgmpStatisticsService.java b/api/src/main/java/org/opencord/igmpproxy/IgmpStatisticsService.java
index 3574ad5..2a5b228 100644
--- a/api/src/main/java/org/opencord/igmpproxy/IgmpStatisticsService.java
+++ b/api/src/main/java/org/opencord/igmpproxy/IgmpStatisticsService.java
@@ -23,11 +23,25 @@
  */
 public interface IgmpStatisticsService extends
         ListenerService<IgmpStatisticsEvent, IgmpStatisticsEventListener> {
+
     /**
-     * Returns IgmpStatistics object.
+     * Increases statistic-value for given type.
      *
-     * @return IgmpStatistics
-    */
-    public IgmpStatistics getIgmpStats();
+     * @param type type of igmp-statistic.
+     */
+    void increaseStat(IgmpStatisticType type);
+
+    /**
+     * Resets all statistic-values.
+     */
+    void resetAllStats();
+
+    /**
+     * Get statistic-value for given type.
+     *
+     * @param type type of igmp-statistic
+     * @return value of statistic
+     */
+    Long getStat(IgmpStatisticType type);
 
 }
