diff --git a/core/java/android/os/image/DynamicSystemClient.java b/core/java/android/os/image/DynamicSystemClient.java
index 0fe8894106852a1a505b55dce3a43be57f64fa45..5aa4e27fc2f3d21ce1ac47affd7f3cf74904970d 100644
--- a/core/java/android/os/image/DynamicSystemClient.java
+++ b/core/java/android/os/image/DynamicSystemClient.java
@@ -35,8 +35,6 @@ import android.os.Message;
 import android.os.Messenger;
 import android.os.ParcelableException;
 import android.os.RemoteException;
-import android.os.SystemProperties;
-import android.util.FeatureFlagUtils;
 import android.util.Slog;
 
 import java.lang.annotation.Retention;
@@ -251,13 +249,7 @@ public class DynamicSystemClient {
                 mService.send(msg);
             } catch (RemoteException e) {
                 Slog.e(TAG, "Unable to get status from installation service");
-                if (mExecutor != null) {
-                    mExecutor.execute(() -> {
-                        mListener.onStatusChanged(STATUS_UNKNOWN, CAUSE_ERROR_IPC, 0, e);
-                    });
-                } else {
-                    mListener.onStatusChanged(STATUS_UNKNOWN, CAUSE_ERROR_IPC, 0, e);
-                }
+                notifyOnStatusChangedListener(STATUS_UNKNOWN, CAUSE_ERROR_IPC, 0, e);
             }
         }
 
@@ -311,6 +303,20 @@ public class DynamicSystemClient {
         mExecutor = null;
     }
 
+    private void notifyOnStatusChangedListener(
+            int status, int cause, long progress, Throwable detail) {
+        if (mListener != null) {
+            if (mExecutor != null) {
+                mExecutor.execute(
+                        () -> {
+                            mListener.onStatusChanged(status, cause, progress, detail);
+                        });
+            } else {
+                mListener.onStatusChanged(status, cause, progress, detail);
+            }
+        }
+    }
+
     /**
      * Bind to {@code DynamicSystem} installation service. Binding to the installation service
      * allows it to send status updates to {@link #OnStatusChangedListener}. It is recommanded
@@ -320,11 +326,6 @@ public class DynamicSystemClient {
     @RequiresPermission(android.Manifest.permission.INSTALL_DYNAMIC_SYSTEM)
     @SystemApi
     public void bind() {
-        if (!featureFlagEnabled()) {
-            Slog.w(TAG, FeatureFlagUtils.DYNAMIC_SYSTEM + " not enabled; bind() aborted.");
-            return;
-        }
-
         Intent intent = new Intent();
         intent.setClassName("com.android.dynsystem",
                 "com.android.dynsystem.DynamicSystemInstallationService");
@@ -395,11 +396,6 @@ public class DynamicSystemClient {
     @RequiresPermission(android.Manifest.permission.INSTALL_DYNAMIC_SYSTEM)
     public void start(@NonNull Uri systemUrl, @BytesLong long systemSize,
             @BytesLong long userdataSize) {
-        if (!featureFlagEnabled()) {
-            Slog.w(TAG, FeatureFlagUtils.DYNAMIC_SYSTEM + " not enabled; start() aborted.");
-            return;
-        }
-
         Intent intent = new Intent();
 
         intent.setClassName("com.android.dynsystem",
@@ -407,6 +403,7 @@ public class DynamicSystemClient {
 
         intent.setData(systemUrl);
         intent.setAction(ACTION_START_INSTALL);
+        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
 
         intent.putExtra(KEY_SYSTEM_SIZE, systemSize);
         intent.putExtra(KEY_USERDATA_SIZE, userdataSize);
@@ -414,11 +411,6 @@ public class DynamicSystemClient {
         mContext.startActivity(intent);
     }
 
-    private boolean featureFlagEnabled() {
-        return SystemProperties.getBoolean(
-                FeatureFlagUtils.PERSIST_PREFIX + FeatureFlagUtils.DYNAMIC_SYSTEM, false);
-    }
-
     private void handleMessage(Message msg) {
         switch (msg.what) {
             case MSG_POST_STATUS:
@@ -432,13 +424,7 @@ public class DynamicSystemClient {
 
                 Throwable detail = t == null ? null : t.getCause();
 
-                if (mExecutor != null) {
-                    mExecutor.execute(() -> {
-                        mListener.onStatusChanged(status, cause, progress, detail);
-                    });
-                } else {
-                    mListener.onStatusChanged(status, cause, progress, detail);
-                }
+                notifyOnStatusChangedListener(status, cause, progress, detail);
                 break;
             default:
                 // do nothing