diff --git a/src/com/android/settings/Utils.java b/src/com/android/settings/Utils.java
index 9b257b6..8a96484 100644
--- a/src/com/android/settings/Utils.java
+++ b/src/com/android/settings/Utils.java
@@ -81,7 +81,6 @@
 import android.text.format.DateUtils;
 import android.text.style.TtsSpan;
 import android.util.ArraySet;
-import android.util.FeatureFlagUtils;
 import android.util.IconDrawableFactory;
 import android.util.Log;
 import android.view.LayoutInflater;
@@ -101,7 +100,6 @@
 import com.android.internal.app.UnlaunchableAppActivity;
 import com.android.internal.util.ArrayUtils;
 import com.android.internal.widget.LockPatternUtils;
-import com.android.settings.core.FeatureFlags;
 import com.android.settings.dashboard.profileselector.ProfileFragmentBridge;
 import com.android.settings.dashboard.profileselector.ProfileSelectFragment;
 import com.android.settings.password.ChooseLockSettingsHelper;
@@ -1051,8 +1049,7 @@
                 == ProfileSelectFragment.ProfileType.PERSONAL : false;
         final boolean isWork = args != null ? args.getInt(ProfileSelectFragment.EXTRA_PROFILE)
                 == ProfileSelectFragment.ProfileType.WORK : false;
-        if (FeatureFlagUtils.isEnabled(activity, FeatureFlags.PERSONAL_WORK_PROFILE)
-                && activity.getSystemService(UserManager.class).getUserProfiles().size() > 1
+        if (activity.getSystemService(UserManager.class).getUserProfiles().size() > 1
                 && ProfileFragmentBridge.FRAGMENT_MAP.get(fragmentName) != null
                 && !isWork && !isPersonal) {
             f = Fragment.instantiate(activity, ProfileFragmentBridge.FRAGMENT_MAP.get(fragmentName),
diff --git a/src/com/android/settings/core/FeatureFlags.java b/src/com/android/settings/core/FeatureFlags.java
index 4f20a01..3321c05 100644
--- a/src/com/android/settings/core/FeatureFlags.java
+++ b/src/com/android/settings/core/FeatureFlags.java
@@ -26,7 +26,6 @@
     public static final String SETTINGS_FUSE_FLAG = "settings_fuse";
     public static final String WIFI_DETAILS_DATAUSAGE_HEADER =
             "settings_wifi_details_datausage_header";
-    public static final String PERSONAL_WORK_PROFILE = "settings_work_profile";
     public static final String CONTROLLER_ENHANCEMENT = "settings_controller_loading_enhancement";
     public static final String CONDITIONAL_CARDS = "settings_conditionals";
 }
diff --git a/src/com/android/settings/deviceinfo/storage/SecondaryUserController.java b/src/com/android/settings/deviceinfo/storage/SecondaryUserController.java
index 6e471e4..5d58547 100644
--- a/src/com/android/settings/deviceinfo/storage/SecondaryUserController.java
+++ b/src/com/android/settings/deviceinfo/storage/SecondaryUserController.java
@@ -20,7 +20,6 @@
 import android.content.pm.UserInfo;
 import android.graphics.drawable.Drawable;
 import android.os.UserManager;
-import android.util.FeatureFlagUtils;
 import android.util.SparseArray;
 
 import androidx.annotation.NonNull;
@@ -30,7 +29,6 @@
 import androidx.preference.PreferenceScreen;
 
 import com.android.settings.Utils;
-import com.android.settings.core.FeatureFlags;
 import com.android.settings.core.PreferenceControllerMixin;
 import com.android.settings.deviceinfo.StorageItemPreference;
 import com.android.settingslib.core.AbstractPreferenceController;
@@ -70,10 +68,6 @@
             Context context, UserManager userManager) {
 
         List<AbstractPreferenceController> controllers = new ArrayList<>();
-        if (FeatureFlagUtils.isEnabled(context, FeatureFlags.PERSONAL_WORK_PROFILE)) {
-            controllers.add(new NoSecondaryUserController(context));
-            return controllers;
-        }
         UserInfo primaryUser = userManager.getPrimaryUser();
         boolean addedUser = false;
         List<UserInfo> infos = userManager.getUsers();
@@ -84,8 +78,6 @@
             }
 
             if (info == null || Utils.isProfileOf(primaryUser, info)) {
-                controllers.add(
-                        new UserProfileController(context, info, USER_PROFILE_INSERTION_LOCATION));
                 continue;
             }
 
diff --git a/src/com/android/settings/deviceinfo/storage/StorageItemPreferenceController.java b/src/com/android/settings/deviceinfo/storage/StorageItemPreferenceController.java
index e7d1387..f87ff33 100644
--- a/src/com/android/settings/deviceinfo/storage/StorageItemPreferenceController.java
+++ b/src/com/android/settings/deviceinfo/storage/StorageItemPreferenceController.java
@@ -30,7 +30,6 @@
 import android.os.UserHandle;
 import android.os.UserManager;
 import android.os.storage.VolumeInfo;
-import android.util.FeatureFlagUtils;
 import android.util.Log;
 import android.util.SparseArray;
 
@@ -44,10 +43,8 @@
 import com.android.settings.SettingsActivity;
 import com.android.settings.Utils;
 import com.android.settings.applications.manageapplications.ManageApplications;
-import com.android.settings.core.FeatureFlags;
 import com.android.settings.core.PreferenceControllerMixin;
 import com.android.settings.core.SubSettingLauncher;
-import com.android.settings.dashboard.profileselector.ProfileSelectFragment;
 import com.android.settings.deviceinfo.PrivateVolumeSettings.SystemInfoFragment;
 import com.android.settings.deviceinfo.StorageItemPreference;
 import com.android.settings.overlay.FeatureFactory;
@@ -438,19 +435,10 @@
     }
 
     private Bundle getWorkAnnotatedBundle(int additionalCapacity) {
-        if (FeatureFlagUtils.isEnabled(mContext, FeatureFlags.PERSONAL_WORK_PROFILE)) {
-            final Bundle args = new Bundle(1 + additionalCapacity);
-            args.putInt(SettingsActivity.EXTRA_SHOW_FRAGMENT_TAB,
-                    mIsWorkProfile ? WORK_TAB : PERSONAL_TAB);
-            return args;
-        } else {
-            final Bundle args = new Bundle(2 + additionalCapacity);
-            args.putInt(ProfileSelectFragment.EXTRA_PROFILE,
-                    mIsWorkProfile ? ProfileSelectFragment.ProfileType.WORK
-                            : ProfileSelectFragment.ProfileType.ALL);
-            args.putInt(ManageApplications.EXTRA_WORK_ID, mUserId);
-            return args;
-        }
+        final Bundle args = new Bundle(1 + additionalCapacity);
+        args.putInt(SettingsActivity.EXTRA_SHOW_FRAGMENT_TAB,
+                mIsWorkProfile ? WORK_TAB : PERSONAL_TAB);
+        return args;
     }
 
     private Intent getFilesIntent() {
