diff --git a/aconfig/catalyst/sound_screen.aconfig b/aconfig/catalyst/sound_screen.aconfig
new file mode 100644
index 0000000..ea5f771
--- /dev/null
+++ b/aconfig/catalyst/sound_screen.aconfig
@@ -0,0 +1,9 @@
+package: "com.android.settings.flags"
+container: "system"
+
+flag {
+    name: "catalyst_sound_screen"
+    namespace: "android_settings"
+    description: "Flag for sound and vibration page"
+    bug: "323791114"
+}
\ No newline at end of file
diff --git a/src/com/android/settings/notification/SoundScreen.kt b/src/com/android/settings/notification/SoundScreen.kt
new file mode 100644
index 0000000..ecb0c85
--- /dev/null
+++ b/src/com/android/settings/notification/SoundScreen.kt
@@ -0,0 +1,47 @@
+/*
+ * Copyright (C) 2024 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.android.settings.notification
+
+import android.content.Context
+import androidx.fragment.app.Fragment
+import com.android.settings.R
+import com.android.settings.flags.Flags
+import com.android.settingslib.metadata.ProvidePreferenceScreen
+import com.android.settingslib.metadata.preferenceHierarchy
+import com.android.settingslib.preference.PreferenceScreenCreator
+
+@ProvidePreferenceScreen
+class SoundScreen : PreferenceScreenCreator {
+    override val key: String
+        get() = KEY
+
+    override val title: Int
+        get() = R.string.sound_settings
+
+    override val keywords: Int
+        get() = R.string.keywords_sounds
+
+    override fun isFlagEnabled(context: Context): Boolean = Flags.catalystSoundScreen()
+
+    override fun fragmentClass(): Class<out Fragment>? = SoundSettings::class.java
+
+    override fun getPreferenceHierarchy(context: Context) =
+        preferenceHierarchy(this) {}
+
+    companion object {
+        const val KEY = "sound_screen"
+    }
+}
\ No newline at end of file
diff --git a/src/com/android/settings/notification/SoundSettings.java b/src/com/android/settings/notification/SoundSettings.java
index 4575708..596f19b 100644
--- a/src/com/android/settings/notification/SoundSettings.java
+++ b/src/com/android/settings/notification/SoundSettings.java
@@ -29,6 +29,8 @@
 import android.preference.SeekBarVolumizer;
 import android.text.TextUtils;
 
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
 import androidx.annotation.VisibleForTesting;
 import androidx.preference.ListPreference;
 import androidx.preference.Preference;
@@ -193,21 +195,23 @@
     @Override
     public void onAttach(Context context) {
         super.onAttach(context);
-        ArrayList<VolumeSeekBarPreferenceController> volumeControllers = new ArrayList<>();
-        volumeControllers.add(use(AlarmVolumePreferenceController.class));
-        volumeControllers.add(use(MediaVolumePreferenceController.class));
-        volumeControllers.add(use(SeparateRingVolumePreferenceController.class));
-        volumeControllers.add(use(NotificationVolumePreferenceController.class));
-        volumeControllers.add(use(CallVolumePreferenceController.class));
+        if (!isCatalystEnabled()) {
+            ArrayList<VolumeSeekBarPreferenceController> volumeControllers = new ArrayList<>();
+            volumeControllers.add(use(AlarmVolumePreferenceController.class));
+            volumeControllers.add(use(MediaVolumePreferenceController.class));
+            volumeControllers.add(use(SeparateRingVolumePreferenceController.class));
+            volumeControllers.add(use(NotificationVolumePreferenceController.class));
+            volumeControllers.add(use(CallVolumePreferenceController.class));
 
-        use(HandsFreeProfileOutputPreferenceController.class).setCallback(listPreference ->
-                onPreferenceDataChanged(listPreference));
-        mHfpOutputControllerKey =
-                use(HandsFreeProfileOutputPreferenceController.class).getPreferenceKey();
+            use(HandsFreeProfileOutputPreferenceController.class).setCallback(listPreference ->
+                    onPreferenceDataChanged(listPreference));
+            mHfpOutputControllerKey =
+                    use(HandsFreeProfileOutputPreferenceController.class).getPreferenceKey();
 
-        for (VolumeSeekBarPreferenceController controller : volumeControllers) {
-            controller.setCallback(mVolumeCallback);
-            getSettingsLifecycle().addObserver(controller);
+            for (VolumeSeekBarPreferenceController controller : volumeControllers) {
+                controller.setCallback(mVolumeCallback);
+                getSettingsLifecycle().addObserver(controller);
+            }
         }
     }
 
@@ -321,4 +325,9 @@
             mDialogFragment.onListPreferenceUpdated(preference);
         }
     }
+
+    @Override
+    public @Nullable String getPreferenceScreenBindingKey(@NonNull Context context) {
+        return SoundScreen.KEY;
+    }
 }
diff --git a/tests/robotests/src/com/android/settings/notification/SoundScreenTest.kt b/tests/robotests/src/com/android/settings/notification/SoundScreenTest.kt
new file mode 100644
index 0000000..83b29d2
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/notification/SoundScreenTest.kt
@@ -0,0 +1,53 @@
+/*
+ * Copyright (C) 2024 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.android.settings.notification
+
+import android.content.Context
+import android.platform.test.annotations.DisableFlags
+import android.platform.test.annotations.EnableFlags
+import android.platform.test.flag.junit.SetFlagsRule
+import androidx.test.core.app.ApplicationProvider
+import androidx.test.ext.junit.runners.AndroidJUnit4
+import com.android.settings.flags.Flags
+import com.google.common.truth.Truth.assertThat
+import org.junit.Rule
+import org.junit.Test
+import org.junit.runner.RunWith
+
+@RunWith(AndroidJUnit4::class)
+class SoundScreenTest {
+    @get:Rule val setFlagsRule = SetFlagsRule()
+    private val context: Context = ApplicationProvider.getApplicationContext()
+    private val soundScreen = SoundScreen()
+
+    @Test
+    fun key() {
+        assertThat(soundScreen.key).isEqualTo(SoundScreen.KEY)
+    }
+
+    @Test
+    @EnableFlags(Flags.FLAG_CATALYST_SOUND_SCREEN)
+    fun isFlagEnabled_returnTrue() {
+        assertThat(soundScreen.isFlagEnabled(context)).isTrue()
+    }
+
+    @Test
+    @DisableFlags(Flags.FLAG_CATALYST_SOUND_SCREEN)
+    fun isFlagEnabled_returnFalse() {
+        assertThat(soundScreen.isFlagEnabled(context)).isFalse()
+    }
+
+}
\ No newline at end of file
