diff --git a/pom.xml b/pom.xml
index 3edf74f..89bc1a7 100644
--- a/pom.xml
+++ b/pom.xml
@@ -37,13 +37,13 @@
         <onos.app.title>Kafka integration</onos.app.title>
         <onos.app.url>http://opencord.org</onos.app.url>
         <onos.app.readme>Integration with Kafka event bus</onos.app.readme>
-        <aaa.api.version>2.0.2</aaa.api.version>
-        <olt.api.version>4.0.2</olt.api.version>
-        <dhcpl2relay.api.version>2.0.2</dhcpl2relay.api.version>
+        <aaa.api.version>2.1.0</aaa.api.version>
+        <olt.api.version>4.1.0</olt.api.version>
+        <dhcpl2relay.api.version>2.1.0</dhcpl2relay.api.version>
         <bng.api.version>1.0.0</bng.api.version>
-        <sadis.api.version>5.0.1</sadis.api.version>
-        <igmp.api.version>2.1.0-SNAPSHOT</igmp.api.version>
-        <mcast.api.version>2.0.0</mcast.api.version>
+        <sadis.api.version>5.1.0</sadis.api.version>
+        <igmp.api.version>2.1.0</igmp.api.version>
+        <mcast.api.version>2.1.0</mcast.api.version>
     </properties>
 
     <dependencies>
diff --git a/src/test/java/org/opencord/kafka/integrations/DhcpL2RelayKafkaIntegrationTest.java b/src/test/java/org/opencord/kafka/integrations/DhcpL2RelayKafkaIntegrationTest.java
index f726b22..fe45d40 100644
--- a/src/test/java/org/opencord/kafka/integrations/DhcpL2RelayKafkaIntegrationTest.java
+++ b/src/test/java/org/opencord/kafka/integrations/DhcpL2RelayKafkaIntegrationTest.java
@@ -70,7 +70,7 @@
                 DHCP.MsgType.DHCPREQUEST, ONU_SERIAL, OLT_MAC,
                 LOCAL_IP);
         DhcpL2RelayEvent event = new DhcpL2RelayEvent(DhcpL2RelayEvent.Type.STATS_UPDATE,
-                allocationInfo, OLT_CONNECT_POINT, entryCounter, DHCP_COUNTER_TOPIC, null);
+                allocationInfo, OLT_CONNECT_POINT, entryCounter, null);
         dhcpL2RelayListener.event(event);
         assertEquals(MockEventBusService.dhcpStats, 1);
         assertEquals(MockEventBusService.otherCounter, 0);
@@ -88,7 +88,7 @@
                 DHCP.MsgType.DHCPREQUEST, ONU_SERIAL, OLT_MAC,
                 LOCAL_IP);
         DhcpL2RelayEvent event = new DhcpL2RelayEvent(DhcpL2RelayEvent.Type.STATS_UPDATE,
-                allocationInfo, OLT_CONNECT_POINT, entryCounter, DHCP_COUNTER_TOPIC, ONU_SERIAL);
+                allocationInfo, OLT_CONNECT_POINT, entryCounter, ONU_SERIAL);
         dhcpL2RelayListener.event(event);
         assertEquals(MockEventBusService.dhcpStats, 1);
         assertEquals(MockEventBusService.otherCounter, 0);
@@ -106,7 +106,7 @@
                 DHCP.MsgType.DHCPREQUEST, ONU_SERIAL, OLT_MAC,
                 LOCAL_IP);
         DhcpL2RelayEvent event = new DhcpL2RelayEvent(DhcpL2RelayEvent.Type.UPDATED,
-                allocationInfo, cp, entryCounter, DHCP_COUNTER_TOPIC, null);
+                allocationInfo, cp, entryCounter, null);
         dhcpL2RelayListener.event(event);
         assertEquals(MockEventBusService.dhcpEvents, 1);
         assertEquals(MockEventBusService.otherCounter, 0);
@@ -149,5 +149,20 @@
         public void removeListener(DhcpL2RelayListener listener) {
             dhcpL2RelayListener = null;
         }
+
+        @Override
+        public Map<String, DhcpAllocationInfo> getAllocationInfo() {
+            return null;
+        }
+
+        @Override
+        public void clearAllocations() {
+
+        }
+
+        @Override
+        public boolean removeAllocationByConnectPoint(ConnectPoint connectPoint) {
+            return false;
+        }
     }
 }
\ No newline at end of file
diff --git a/src/test/java/org/opencord/kafka/integrations/KafkaIntegrationTestBase.java b/src/test/java/org/opencord/kafka/integrations/KafkaIntegrationTestBase.java
index e66e8e5..81fe499 100644
--- a/src/test/java/org/opencord/kafka/integrations/KafkaIntegrationTestBase.java
+++ b/src/test/java/org/opencord/kafka/integrations/KafkaIntegrationTestBase.java
@@ -131,9 +131,9 @@
     protected CordMcastStatisticsEvent getCordMcastStatisticsEvent() {
         List<CordMcastStatistics> statsList = Lists.newArrayList(
                 new CordMcastStatistics(IpAddress.valueOf("172.16.34.34"),
-                        "192.168.0.21", VlanId.vlanId("100")),
+                        "192.168.0.21", VlanId.vlanId("100"), VlanId.vlanId("200")),
                 new CordMcastStatistics(IpAddress.valueOf("172.16.35.35"),
-                        "192.168.0.22", VlanId.vlanId("101"))
+                        "192.168.0.22", VlanId.vlanId("101"), VlanId.vlanId("201"))
         );
         return new CordMcastStatisticsEvent(
                 CordMcastStatisticsEvent.Type.STATUS_UPDATE, statsList);
diff --git a/src/test/java/org/opencord/kafka/integrations/McastKafkaIntegrationTest.java b/src/test/java/org/opencord/kafka/integrations/McastKafkaIntegrationTest.java
index 135239a..86dc91e 100644
--- a/src/test/java/org/opencord/kafka/integrations/McastKafkaIntegrationTest.java
+++ b/src/test/java/org/opencord/kafka/integrations/McastKafkaIntegrationTest.java
@@ -84,6 +84,11 @@
         }
 
         @Override
+        public void setInnerVlanValue(VlanId vlanId) {
+
+        }
+
+        @Override
         public void addListener(CordMcastStatisticsEventListener listener) {
             mcastStatsListerner = listener;
         }
