diff --git a/hal/audio_extn/qaf.c b/hal/audio_extn/qaf.c
index 5dba1d2..90b054c 100644
--- a/hal/audio_extn/qaf.c
+++ b/hal/audio_extn/qaf.c
@@ -170,6 +170,7 @@
 
 struct qaf_module {
     audio_session_handle_t session_handle;
+    void *ip_hdlr_hdl;
     void *qaf_lib;
     int (*qaf_audio_session_open)(audio_session_handle_t* session_handle,
                                   audio_session_type_t s_type,
@@ -246,6 +247,7 @@
 static int qaf_out_pause(struct audio_stream_out* stream);
 static int qaf_out_flush(struct audio_stream_out* stream);
 static int qaf_out_drain(struct audio_stream_out* stream, audio_drain_type_t type);
+static int qaf_session_close();
 
 //Global handle of QAF. Access to this should be protected by mutex lock.
 static struct qaf *p_qaf = NULL;
@@ -1249,6 +1251,13 @@
     config.offload_info.bit_width = CODEC_BACKEND_DEFAULT_BIT_WIDTH;
     config.offload_info.channel_mask = config.channel_mask = AUDIO_CHANNEL_OUT_STEREO;
 
+    if (event_id == AUDIO_SEC_FAIL_EVENT) {
+        DEBUG_MSG("%s Security failed, closing session");
+        qaf_session_close(qaf_mod);
+        pthread_mutex_unlock(&p_qaf->lock);
+        return;
+    }
+
     if (event_id == AUDIO_DATA_EVENT) {
         data_buffer_p = (int8_t*)buf;
         buffer_size = size;
@@ -1733,6 +1742,11 @@
     }
 
     if (qaf_mod->session_handle != NULL && qaf_mod->qaf_audio_session_close) {
+#ifdef AUDIO_EXTN_IP_HDLR_ENABLED
+        if (qaf_mod == &p_qaf->qaf_mod[MS12]) {
+            audio_extn_ip_hdlr_intf_close(qaf_mod->ip_hdlr_hdl, false, qaf_mod->session_handle);
+        }
+#endif
         qaf_mod->qaf_audio_session_close(qaf_mod->session_handle);
         qaf_mod->session_handle = NULL;
         qaf_mod->is_vol_set = false;
@@ -1789,7 +1803,7 @@
 }
 
 /* Open a MM module session with QAF. */
-static int audio_extn_qaf_session_open(mm_module_type mod_type)
+static int audio_extn_qaf_session_open(mm_module_type mod_type, struct stream_out *out)
 {
     ALOGV("%s %d", __func__, __LINE__);
     unsigned char* license_data = NULL;
@@ -1812,6 +1826,7 @@
         return 0;
     }
 
+#ifndef AUDIO_EXTN_IP_HDLR_ENABLED
     if (mod_type == MS12) {
         //Getting the license
         license_data = platform_get_license((struct audio_hw_device *)(p_qaf->adev->platform),
@@ -1840,6 +1855,7 @@
             goto exit;
         }
     }
+#endif
 
     ret = qaf_mod->qaf_audio_session_open(&qaf_mod->session_handle,
                                           AUDIO_SESSION_BROADCAST,
@@ -1864,6 +1880,16 @@
 
     set_hdmi_configuration_to_module();
 
+#ifdef AUDIO_EXTN_IP_HDLR_ENABLED
+    if (mod_type == MS12) {
+        ret = audio_extn_ip_hdlr_intf_open(qaf_mod->ip_hdlr_hdl, false, qaf_mod->session_handle, out->usecase);
+        if (ret < 0) {
+            ERROR_MSG("audio_extn_ip_hdlr_intf_open failed, ret = %d", __func__, ret);
+            goto exit;
+        }
+    }
+#endif
+
 exit:
     if (license_data != NULL) {
         free(license_data);
@@ -1897,7 +1923,7 @@
     }
 
     //Open the module session, if not opened already.
-    status = audio_extn_qaf_session_open(mmtype);
+    status = audio_extn_qaf_session_open(mmtype, out);
     qaf_mod = &(p_qaf->qaf_mod[mmtype]);
 
     if ((status != 0) || (qaf_mod->session_handle == NULL)) {
@@ -2819,21 +2845,42 @@
 
         if (i == MS12) {
             property_get("vendor.audio.qaf.library", value, NULL);
-        } else if (i == DTS_M8) {
-            property_get("vendor.audio.qaf.m8.library", value, NULL);
-        } else {
+            snprintf(lib_name, PROPERTY_VALUE_MAX, "%s", value);
+#ifdef AUDIO_EXTN_IP_HDLR_ENABLED
+{
+        int ret = 0;
+        ret = audio_extn_ip_hdlr_intf_init(&qaf_mod->ip_hdlr_hdl, lib_name, &qaf_mod->qaf_lib,
+                                           adev, USECASE_AUDIO_PLAYBACK_OFFLOAD);
+        if (ret < 0) {
+            ERROR_MSG("audio_extn_ip_hdlr_intf_init failed, ret = %d", ret);
             continue;
         }
-
-        snprintf(lib_name, PROPERTY_VALUE_MAX, "%s", value);
-
+        if (qaf_mod->qaf_lib == NULL) {
+            ERROR_MSG("failed to get library handle");
+            continue;
+        }
+}
+#else
         qaf_mod->qaf_lib = dlopen(lib_name, RTLD_NOW);
         if (qaf_mod->qaf_lib == NULL) {
             ERROR_MSG("DLOPEN failed for %s", lib_name);
             continue;
         }
-
         DEBUG_MSG("DLOPEN successful for %s", lib_name);
+#endif
+        } else if (i == DTS_M8) {
+            property_get("audio.qaf.m8.library", value, NULL);
+            snprintf(lib_name, PROPERTY_VALUE_MAX, "%s", value);
+            qaf_mod->qaf_lib = dlopen(lib_name, RTLD_NOW);
+            if (qaf_mod->qaf_lib == NULL) {
+                ERROR_MSG("DLOPEN failed for %s", lib_name);
+                continue;
+            }
+            DEBUG_MSG("DLOPEN successful for %s", lib_name);
+        } else {
+            continue;
+        }
+
         qaf_mod->qaf_audio_session_open =
                     (int (*)(audio_session_handle_t* session_handle, audio_session_type_t s_type,
                                   void *p_data, void* license_data))dlsym(qaf_mod->qaf_lib,
@@ -2896,8 +2943,17 @@
             qaf_session_close(&p_qaf->qaf_mod[i]);
 
             if (p_qaf->qaf_mod[i].qaf_lib != NULL) {
-                dlclose(p_qaf->qaf_mod[i].qaf_lib);
-                p_qaf->qaf_mod[i].qaf_lib = NULL;
+                if (i == MS12) {
+#ifdef AUDIO_EXTN_IP_HDLR_ENABLED
+                    audio_extn_ip_hdlr_intf_deinit(p_qaf->qaf_mod[i].ip_hdlr_hdl);
+#else
+                    dlclose(p_qaf->qaf_mod[i].qaf_lib);
+#endif
+                    p_qaf->qaf_mod[i].qaf_lib = NULL;
+                } else {
+                    dlclose(p_qaf->qaf_mod[i].qaf_lib);
+                    p_qaf->qaf_mod[i].qaf_lib = NULL;
+                }
             }
         }
         if (p_qaf->passthrough_out) {
