diff --git a/packages/SystemUI/src/com/android/systemui/theme/ThemeOverlayApplier.java b/packages/SystemUI/src/com/android/systemui/theme/ThemeOverlayApplier.java
index bc9ce4e..de2fb67 100644
--- a/packages/SystemUI/src/com/android/systemui/theme/ThemeOverlayApplier.java
+++ b/packages/SystemUI/src/com/android/systemui/theme/ThemeOverlayApplier.java
@@ -203,18 +203,6 @@
             Set<UserHandle> managedProfiles,
             Runnable onComplete
     ) {
-    applyCurrentUserOverlays(categoryToPackage, pendingCreation, currentUser, managedProfiles,
-                             onComplete, true);
-    }
-
-    /** @hide */
-    public void applyCurrentUserOverlays(
-            Map<String, OverlayIdentifier> categoryToPackage,
-            FabricatedOverlay[] pendingCreation,
-            int currentUser,
-            Set<UserHandle> managedProfiles,
-            Runnable onComplete,
-            boolean enable) {
 
         mBgExecutor.execute(() -> {
 
@@ -246,20 +234,17 @@
                 }
             }
 
-             // if we disable monet we want everything but the final setEnabled call
-            if (enable) {
-                for (Pair<String, String> packageToDisable : overlaysToDisable) {
-                    OverlayIdentifier overlayInfo = new OverlayIdentifier(packageToDisable.second);
-                    setEnabled(transaction, overlayInfo, packageToDisable.first, currentUser,
-                            managedProfiles, false, identifiersPending.contains(overlayInfo));
-                }
+            for (Pair<String, String> packageToDisable : overlaysToDisable) {
+                OverlayIdentifier overlayInfo = new OverlayIdentifier(packageToDisable.second);
+                setEnabled(transaction, overlayInfo, packageToDisable.first, currentUser,
+                        managedProfiles, false, identifiersPending.contains(overlayInfo));
+            }
 
-                for (String category : THEME_CATEGORIES) {
-                    if (categoryToPackage.containsKey(category)) {
-                        OverlayIdentifier overlayInfo = categoryToPackage.get(category);
-                        setEnabled(transaction, overlayInfo, category, currentUser, managedProfiles,
-                                true, identifiersPending.contains(overlayInfo));
-                    }
+            for (String category : THEME_CATEGORIES) {
+                if (categoryToPackage.containsKey(category)) {
+                    OverlayIdentifier overlayInfo = categoryToPackage.get(category);
+                    setEnabled(transaction, overlayInfo, category, currentUser, managedProfiles,
+                            true, identifiersPending.contains(overlayInfo));
                 }
             }
 
diff --git a/packages/SystemUI/src/com/android/systemui/theme/ThemeOverlayController.java b/packages/SystemUI/src/com/android/systemui/theme/ThemeOverlayController.java
index 4cbe4a5..9c8ef04 100644
--- a/packages/SystemUI/src/com/android/systemui/theme/ThemeOverlayController.java
+++ b/packages/SystemUI/src/com/android/systemui/theme/ThemeOverlayController.java
@@ -89,8 +89,6 @@
 import com.google.ux.material.libmonet.dynamiccolor.DynamicColor;
 import com.google.ux.material.libmonet.dynamiccolor.MaterialDynamicColors;
 
-import org.omnirom.omnilib.utils.OmniSettings;
-
 import kotlinx.coroutines.flow.Flow;
 import kotlinx.coroutines.flow.StateFlow;
 
@@ -809,8 +807,6 @@
         }
 
         FabricatedOverlay[] fOverlays = null;
-        final boolean enableOverlays = Settings.System.getIntForUser(mContext.getContentResolver(),
-                                            OmniSettings.OMNI_MONET_DISABLE, 0, currentUser) == 0;
 
         if (mNeedsOverlayCreation) {
             mNeedsOverlayCreation = false;
@@ -820,7 +816,7 @@
         }
 
         mThemeManager.applyCurrentUserOverlays(categoryToPackage, fOverlays, currentUser,
-                managedProfiles, onCompleteCallback, enableOverlays);
+                managedProfiles, onCompleteCallback);
 
     }
 
