diff --git a/hal/acdb.c b/hal/acdb.c
index 1614cc9..99599b8 100644
--- a/hal/acdb.c
+++ b/hal/acdb.c
@@ -29,7 +29,6 @@
 #include <platform_api.h>
 
 #define PLATFORM_CONFIG_KEY_SOUNDCARD_NAME "snd_card_name"
-#define PLATFORM_INFO_XML_PATH          "audio_platform_info.xml"
 
 int acdb_init(int snd_card_num)
 {
@@ -61,9 +60,6 @@
 
     list_init(&my_data->acdb_meta_key_list);
 
-    /* Extract META KEY LIST INFO */
-    //platform_info_init(PLATFORM_INFO_XML_PATH, my_data);
-
     my_data->acdb_handle = dlopen(LIB_ACDB_LOADER, RTLD_NOW);
     if (my_data->acdb_handle == NULL) {
         ALOGE("%s: DLOPEN failed for %s", __func__, LIB_ACDB_LOADER);
@@ -125,21 +121,13 @@
         goto cleanup;
     }
 
-    int key = 0;
-    struct listnode *node = NULL;
-    struct meta_key_list *key_info = NULL;
-
-    if (my_data->acdb_init_v3) {
+    if (my_data->acdb_init_v3)
         result = my_data->acdb_init_v3(snd_card_name, cvd_version,
                                        &my_data->acdb_meta_key_list);
-    } else if (my_data->acdb_init_v2) {
-        node = list_head(&my_data->acdb_meta_key_list);
-        key_info = node_to_item(node, struct meta_key_list, list);
-        key = key_info->cal_info.nKey;
-        result = my_data->acdb_init_v2(snd_card_name, cvd_version, key);
-    } else {
+    else if (my_data->acdb_init_v2)
+        result = my_data->acdb_init_v2(snd_card_name, cvd_version, 0);
+    else
         result = my_data->acdb_init();
-    }
 
 cleanup:
     if (NULL != my_data) {
@@ -162,26 +150,6 @@
     return result;
 }
 
-int acdb_set_metainfo_key(void *platform, char *name, int key) {
-
-    struct meta_key_list *key_info = (struct meta_key_list *)
-                                        calloc(1, sizeof(struct meta_key_list));
-    struct acdb_platform_data *pdata = (struct acdb_platform_data *)platform;
-    if (!key_info) {
-        ALOGE("%s: Could not allocate memory for key %d", __func__, key);
-        return -ENOMEM;
-    }
-
-    key_info->cal_info.nKey = key;
-    strlcpy(key_info->name, name, sizeof(key_info->name));
-    list_add_tail(&pdata->acdb_meta_key_list, &key_info->list);
-
-    ALOGD("%s: successfully added module %s and key %d to the list", __func__,
-               key_info->name, key_info->cal_info.nKey);
-
-    return 0;
-}
-
 int acdb_set_parameters(void *platform, struct str_parms *parms)
 {
     struct acdb_platform_data *my_data = (struct acdb_platform_data *)platform;
diff --git a/hal/audio_hw.c b/hal/audio_hw.c
index 9fad3fd..3318cc1 100644
--- a/hal/audio_hw.c
+++ b/hal/audio_hw.c
@@ -801,7 +801,9 @@
     bool switch_device[AUDIO_USECASE_MAX];
     int i, num_uc_to_switch = 0;
 
-    platform_check_and_set_playback_backend_cfg(adev, uc_info, snd_device);
+    bool force_routing =  platform_check_and_set_playback_backend_cfg(adev,
+                                                                      uc_info,
+                                                                      snd_device);
 
     /*
      * This function is to make sure that all the usecases that are active on
@@ -820,11 +822,13 @@
 
     list_for_each(node, &adev->usecase_list) {
         usecase = node_to_item(node, struct audio_usecase, list);
-        if (usecase->type != PCM_CAPTURE &&
-                usecase != uc_info &&
-                usecase->out_snd_device != snd_device &&
-                usecase->devices & AUDIO_DEVICE_OUT_ALL_CODEC_BACKEND &&
-                platform_check_backends_match(snd_device, usecase->out_snd_device)) {
+        if (usecase->type == PCM_CAPTURE || usecase == uc_info)
+            continue;
+
+        if (force_routing ||
+            (usecase->out_snd_device != snd_device &&
+             usecase->devices & AUDIO_DEVICE_OUT_ALL_CODEC_BACKEND &&
+             platform_check_backends_match(snd_device, usecase->out_snd_device))) {
             ALOGV("%s: Usecase (%s) is active on (%s) - disabling ..",
                   __func__, use_case_table[usecase->id],
                   platform_get_snd_device_name(usecase->out_snd_device));
