diff --git a/pom.xml b/pom.xml
index 9d635e4..462f72f 100644
--- a/pom.xml
+++ b/pom.xml
@@ -39,7 +39,7 @@
         <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>1.9.0</aaa.api.version>
+        <aaa.api.version>1.10.0-SNAPSHOT</aaa.api.version>
         <olt.api.version>3.0.1</olt.api.version>
         <dhcpl2relay.api.version>1.6.0</dhcpl2relay.api.version>
         <sadis.api.version>3.1.0</sadis.api.version>
@@ -91,6 +91,12 @@
             <version>${dhcpl2relay.api.version}</version>
         </dependency>
 
+        <dependency>
+            <groupId>org.opencord</groupId>
+            <artifactId>sadis-api</artifactId>
+            <version>${sadis.api.version}</version>
+        </dependency>
+
     </dependencies>
 
     <build>
diff --git a/src/main/java/org/opencord/kafka/integrations/AaaKafkaIntegration.java b/src/main/java/org/opencord/kafka/integrations/AaaKafkaIntegration.java
index f0ad67f..754a7f9 100644
--- a/src/main/java/org/opencord/kafka/integrations/AaaKafkaIntegration.java
+++ b/src/main/java/org/opencord/kafka/integrations/AaaKafkaIntegration.java
@@ -15,9 +15,8 @@
  */
 
 package org.opencord.kafka.integrations;
-import com.fasterxml.jackson.databind.JsonNode;
-import com.fasterxml.jackson.databind.ObjectMapper;
-import com.fasterxml.jackson.databind.node.ObjectNode;
+import java.time.Instant;
+
 import org.apache.felix.scr.annotations.Activate;
 import org.apache.felix.scr.annotations.Component;
 import org.apache.felix.scr.annotations.Deactivate;
@@ -29,14 +28,16 @@
 import org.opencord.aaa.AuthenticationEvent;
 import org.opencord.aaa.AuthenticationEventListener;
 import org.opencord.aaa.AuthenticationService;
-import org.opencord.kafka.EventBusService;
 import org.opencord.aaa.AuthenticationStatisticsEvent;
 import org.opencord.aaa.AuthenticationStatisticsEventListener;
 import org.opencord.aaa.AuthenticationStatisticsService;
+import org.opencord.kafka.EventBusService;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import java.time.Instant;
+import com.fasterxml.jackson.databind.JsonNode;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.node.ObjectNode;
 
 /**
  * Listens for AAA events and pushes them on a Kafka bus.
@@ -65,7 +66,7 @@
 
     private final AuthenticationEventListener listener = new InternalAuthenticationListener();
     private final AuthenticationStatisticsEventListener authenticationStatisticsEventListener =
-             new InternalAuthenticationStatisticsListner();
+            new InternalAuthenticationStatisticsListner();
 
     // topics
     private static final String TOPIC = "authentication.events";
@@ -91,6 +92,7 @@
     private static final String UNKNOWN_SERVER_RX = "unknownServerRx";
     private static final String REQUEST_RTT_MILLIS = "requestRttMillis";
     private static final String REQUEST_RE_TX = "requestReTx";
+    private static final String TIMED_OUT_PACKETS = "timedOutPackets";
 
     protected void bindAuthenticationService(AuthenticationService authenticationService) {
         log.info("bindAuthenticationService");
@@ -189,11 +191,12 @@
         authMetricsEvent.put(UNKNOWN_SERVER_RX, event.subject().getUnknownServerRx());
         authMetricsEvent.put(REQUEST_RTT_MILLIS, event.subject().getRequestRttMilis());
         authMetricsEvent.put(REQUEST_RE_TX, event.subject().getRequestReTx());
+        authMetricsEvent.put(TIMED_OUT_PACKETS, event.subject().getTimedOutPackets());
         return authMetricsEvent;
     }
 
     private class InternalAuthenticationListener implements
-            AuthenticationEventListener {
+    AuthenticationEventListener {
         @Override
         public void event(AuthenticationEvent authenticationEvent) {
             handle(authenticationEvent);
