diff --git a/res/values-eu/strings.xml b/res/values-eu/strings.xml
index 87874f2..2e1dc22 100644
--- a/res/values-eu/strings.xml
+++ b/res/values-eu/strings.xml
@@ -30,7 +30,7 @@
     <skip />
     <string name="service_notification_title" msgid="8085444675783592744">"Multimedia-edukiaren iturburura konektatzen"</string>
     <string name="menu_item_sound_settings_title" msgid="58887078120809669">"Soinuaren ezarpenak"</string>
-    <string name="menu_item_app_selector_title" msgid="4587248991114338595">"Aldatu aplikazioa"</string>
+    <string name="menu_item_app_selector_title" msgid="4587248991114338595">"Aldatu aplikazioz"</string>
     <string name="blocking_activity_exit_button" msgid="2311235552215881142">"Irten gidatzeko ikuspegitik"</string>
     <string name="blocking_activity_time_separator" msgid="194457998199565809">"/"</string>
     <string name="blocking_activity_no_media_text" msgid="5619524033914901715">"Ezin duzu erabili eginbidea gidatu bitartean"</string>
diff --git a/src/com/android/car/media/CarMediaApp.java b/src/com/android/car/media/CarMediaApp.java
index 4a79fcd..87ee8b2 100644
--- a/src/com/android/car/media/CarMediaApp.java
+++ b/src/com/android/car/media/CarMediaApp.java
@@ -22,8 +22,12 @@
 import static com.android.car.media.common.MediaConstants.KEY_ROOT_HINT_MAX_QUEUE_ITEMS_WHILE_RESTRICTED;
 
 import android.app.Application;
+import android.content.res.Configuration;
 import android.os.Bundle;
 
+import androidx.annotation.NonNull;
+
+import com.android.car.media.common.MediaItemMetadata;
 import com.android.car.media.common.source.MediaBrowserConnector;
 import com.android.car.media.common.source.MediaModels;
 import com.android.car.media.widgets.AppBarController;
@@ -35,6 +39,12 @@
     private MediaModels mMediaModelsPlayback = null;
 
     @Override
+    public void onConfigurationChanged(@NonNull Configuration newConfig) {
+        super.onConfigurationChanged(newConfig);
+        MediaItemMetadata.clearPlaceholderCache();
+    }
+
+    @Override
     public void onCreate() {
         super.onCreate();
         Bundle mediaSessionRootHints = new Bundle();
diff --git a/src/com/android/car/media/MediaActivity.java b/src/com/android/car/media/MediaActivity.java
index 0890558..dfab2c9 100644
--- a/src/com/android/car/media/MediaActivity.java
+++ b/src/com/android/car/media/MediaActivity.java
@@ -38,9 +38,11 @@
 import android.car.content.pm.CarPackageManager;
 import android.car.drivingstate.CarUxRestrictions;
 import android.car.media.CarMediaIntents;
+import android.content.BroadcastReceiver;
 import android.content.ComponentName;
 import android.content.Context;
 import android.content.Intent;
+import android.content.IntentFilter;
 import android.content.res.Resources;
 import android.graphics.Bitmap;
 import android.graphics.drawable.Drawable;
@@ -125,6 +127,8 @@
     private float mCloseVectorNorm;
     private long mLatestIntentTimestamp = -1;
 
+    private PackageChangedReceiver mPackageChangedReceiver;
+
     /**
      * Possible modes of the application UI
      * Todo: refactor into non exclusive flags to allow concurrent modes (eg: play details & browse)
@@ -151,6 +155,22 @@
         localViewModel.init(new MediaModels(app, browsedSource));
     }
 
+    private class PackageChangedReceiver extends BroadcastReceiver {
+        @Override
+        public void onReceive(Context context, Intent intent) {
+            Uri data = intent.getData();
+            if (data != null) {
+                String packageName = data.getSchemeSpecificPart();
+                if (!TextUtils.isEmpty(packageName)) {
+                    mMediaActivityController.onPackageChanged(packageName);
+                    if (mErrorController != null) {
+                        mErrorController.onPackageChanged(packageName);
+                    }
+                }
+            }
+        }
+    }
+
     /**
      * Creates an intent to open a MediaActivity for the given source.
      * @param mediaId optional media id of the node to browse to.
@@ -306,6 +326,12 @@
         mMediaActivityController = new MediaActivityController(this, getInnerViewModel(),
                 mCarPackageManager, mBrowseContainer, mPlaybackContainer);
 
+        mPackageChangedReceiver = new PackageChangedReceiver();
+        IntentFilter filter = new IntentFilter();
+        filter.addAction(Intent.ACTION_PACKAGE_CHANGED);
+        filter.addDataScheme("package");
+        registerReceiver(mPackageChangedReceiver, filter);
+
         mPlaybackContainer.setOnTouchListener(new ClosePlaybackDetector(this));
 
         if (shouldHandleIntent(intent)) {
@@ -380,6 +406,7 @@
             mCar.disconnect();
             mCar = null;
         }
+        unregisterReceiver(mPackageChangedReceiver);
         mMediaActivityController.onDestroy();
         super.onDestroy();
     }
diff --git a/src/com/android/car/media/MediaActivityController.java b/src/com/android/car/media/MediaActivityController.java
index e6093a9..d7a694d 100644
--- a/src/com/android/car/media/MediaActivityController.java
+++ b/src/com/android/car/media/MediaActivityController.java
@@ -266,6 +266,12 @@
                     MediaItemMetadata fakeRootItem = MediaItemMetadata.createEmptyRootData(rootId);
                     mBrowseStack.pushRoot(fakeRootItem, BrowseViewController.newRootController(
                             fakeRootItem, mBrowseCallbacks, mBrowseArea, mMediaItemsRepository));
+                } else {
+                    // Make sure that all controllers are recreated if needed,
+                    // otherwise node updates would be missed (eg: after re-enabling bluetooth).
+                    for (BrowseStack.BrowseEntry entry : mBrowseStack.getEntries()) {
+                        maybeRecreateController(entry, true);
+                    }
                 }
                 showCurrentNode(true);
 
@@ -639,15 +645,11 @@
         controller.onPlaybackControlsChanged(mPlaybackControlsVisible);
     }
 
-    private void showCurrentNode(boolean show) {
-        BrowseStack.BrowseEntry entry = mBrowseStack.peek();
-        if (entry == null) {
-            Log.e(TAG, "Can't show a null entry!");
-            return;
-        }
-
+    private BrowseViewController maybeRecreateController(
+            BrowseStack.BrowseEntry entry,
+            boolean createIfMissing) {
         BrowseViewController controller = entry.getController();
-        if (controller == null && show) {
+        if (controller == null && createIfMissing) {
             // Controller was previously destroyed by a media source or UI config change, recreate.
             controller = recreateController(entry);
             if (controller != null) {
@@ -655,7 +657,17 @@
                 entry.setRecreatedController(controller);
             }
         }
+        return controller;
+    }
 
+    private void showCurrentNode(boolean show) {
+        BrowseStack.BrowseEntry entry = mBrowseStack.peek();
+        if (entry == null) {
+            Log.e(TAG, "Can't show a null entry!");
+            return;
+        }
+
+        BrowseViewController controller = maybeRecreateController(entry, show);
         if (controller != null) {
             showHideContentAnimated(show, controller.getContent(), mViewAnimEndListener);
             controller.onShow(show, entry.mType);
diff --git a/src/com/android/car/media/ViewControllerBase.java b/src/com/android/car/media/ViewControllerBase.java
index 28633a4..edb65cd 100644
--- a/src/com/android/car/media/ViewControllerBase.java
+++ b/src/com/android/car/media/ViewControllerBase.java
@@ -50,6 +50,8 @@
 import com.android.car.ui.core.CarUi;
 import com.android.car.ui.toolbar.ToolbarController;
 
+import java.util.Objects;
+
 /**
  * Functionality common to content view controllers. It mainly handles the AppBar view,
  * which is common to all of them.
@@ -160,6 +162,26 @@
         mAppBarController.setHasEqualizer(mShouldShowSoundSettings);
     }
 
+    /**
+     * Called after an ACTION_PACKAGE_CHANGED notification with the packageName that changed.
+     */
+    public void onPackageChanged(@NonNull String packageName) {
+        // Handle package changed to ensure preferences intent is resolved to the correct activity
+        // when the media app dynamically enables or disables its components.
+        MediaBrowserConnector.BrowsingState browsingState =
+                mMediaItemsRepository.getBrowsingState().getValue();
+        if (browsingState == null || browsingState.mConnectionStatus !=
+                MediaBrowserConnector.ConnectionStatus.CONNECTED) {
+            // Source preferences will be updated when status changes to CONNECTED
+            return;
+        }
+
+        if (Objects.equals(packageName, browsingState.mMediaSource.getPackageName())) {
+            Log.i(TAG, "Updating source preferences due to package changed");
+            updateSourcePreferences(browsingState);
+        }
+    }
+
     private void onMediaBrowsingStateChanged(MediaBrowserConnector.BrowsingState newBrowsingState) {
         if (newBrowsingState == null) {
             Log.e(TAG, "Null browsing state (no media source!)");
@@ -210,6 +232,8 @@
                 if (Log.isLoggable(TAG, Log.INFO)) {
                     Log.i(TAG, "Source: " + state.mMediaSource + " has prefs intent");
                 }
+            } else {
+                resetPreferencesState();
             }
         }
     }
