diff --git a/res/layout-land/music_main.xml b/res/layout-land/music_main.xml
index 11fcf5e..905a602 100644
--- a/res/layout-land/music_main.xml
+++ b/res/layout-land/music_main.xml
@@ -124,6 +124,13 @@
                             android:paddingTop="2dip"
                             android:paddingLeft="20dip"
                             android:paddingRight="20dip" />
+                        <Switch
+                            android:id="@+id/vIStrengthToggle"
+                            android:layout_width="wrap_content"
+                            android:layout_height="wrap_content"
+                            android:paddingTop="2dip"
+                            android:paddingLeft="20dip"
+                            android:paddingRight="20dip" />
                     </LinearLayout>
 
                     <Spinner android:id="@+id/prSpinner"
diff --git a/res/layout/music_main.xml b/res/layout/music_main.xml
index 367d5a2..be32c96 100644
--- a/res/layout/music_main.xml
+++ b/res/layout/music_main.xml
@@ -114,6 +114,13 @@
                     android:paddingTop="2dip"
                     android:paddingLeft="20dip"
                     android:paddingRight="20dip" />
+                <Switch
+                    android:id="@+id/vIStrengthToggle"
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:paddingTop="2dip"
+                    android:paddingLeft="20dip"
+                    android:paddingRight="20dip" />
             </LinearLayout>
 
             <Spinner android:id="@+id/prSpinner"
diff --git a/src/com/android/musicfx/ActivityMusic.java b/src/com/android/musicfx/ActivityMusic.java
index 0d14729..6f9718a 100644
--- a/src/com/android/musicfx/ActivityMusic.java
+++ b/src/com/android/musicfx/ActivityMusic.java
@@ -351,6 +351,16 @@
                         }
                     }
                 });
+
+                final Switch sw = (Switch) findViewById(R.id.vIStrengthToggle);
+                sw.setOnCheckedChangeListener(new OnCheckedChangeListener() {
+                    @Override
+                    public void onCheckedChanged(final CompoundButton buttonView,
+                            final boolean isChecked) {
+                        ControlPanelEffect.setParameterBoolean(mContext, mCallingPackageName,
+                                mAudioSession, ControlPanelEffect.Key.virt_enabled, isChecked);
+                    }
+                });
             }
 
             // Initialize the Bass Boost elements.
@@ -559,9 +569,21 @@
         updateUIHeadset();
 
         if (mVirtualizerSupported) {
-            ((SeekBar) findViewById(R.id.vIStrengthSeekBar)).setProgress(ControlPanelEffect
+            SeekBar bar = (SeekBar) findViewById(R.id.vIStrengthSeekBar);
+            Switch sw = (Switch) findViewById(R.id.vIStrengthToggle);
+            int strength = ControlPanelEffect
                     .getParameterInt(mContext, mCallingPackageName, mAudioSession,
-                            ControlPanelEffect.Key.virt_strength));
+                            ControlPanelEffect.Key.virt_strength);
+            bar.setProgress(strength);
+            boolean hasStrength = ControlPanelEffect.getParameterBoolean(mContext,
+                    mCallingPackageName, mAudioSession,
+                    ControlPanelEffect.Key.virt_strength_supported);
+            if (hasStrength) {
+                sw.setVisibility(View.GONE);
+            } else {
+                bar.setVisibility(View.GONE);
+                sw.setChecked(sw.isEnabled() && strength != 0);
+            }
         }
         if (mBassBoostSupported) {
             ((SeekBar) findViewById(R.id.bBStrengthSeekBar)).setProgress(ControlPanelEffect
diff --git a/src/com/android/musicfx/ControlPanelEffect.java b/src/com/android/musicfx/ControlPanelEffect.java
index db46c3e..810ab01 100644
--- a/src/com/android/musicfx/ControlPanelEffect.java
+++ b/src/com/android/musicfx/ControlPanelEffect.java
@@ -59,7 +59,12 @@
     }
 
     static enum Key {
-        global_enabled, virt_enabled, virt_strength, virt_type, bb_enabled, bb_strength, te_enabled, te_strength, avl_enabled, lm_enabled, lm_strength, eq_enabled, eq_num_bands, eq_level_range, eq_center_freq, eq_band_level, eq_num_presets, eq_preset_name, eq_preset_user_band_level, eq_preset_user_band_level_default, eq_preset_opensl_es_band_level, eq_preset_ci_extreme_band_level, eq_current_preset, pr_enabled, pr_current_preset
+        global_enabled, virt_enabled, virt_strength_supported, virt_strength, virt_type, bb_enabled,
+        bb_strength, te_enabled, te_strength, avl_enabled, lm_enabled, lm_strength, eq_enabled,
+        eq_num_bands, eq_level_range, eq_center_freq, eq_band_level, eq_num_presets, eq_preset_name,
+        eq_preset_user_band_level, eq_preset_user_band_level_default,
+        eq_preset_opensl_es_band_level, eq_preset_ci_extreme_band_level, eq_current_preset,
+        pr_enabled, pr_current_preset
     }
 
     // Effect/audio session Mappings
@@ -171,6 +176,22 @@
                     VIRTUALIZER_STRENGTH_DEFAULT);
             editor.putBoolean(Key.virt_enabled.toString(), isVIEnabled);
             editor.putInt(Key.virt_strength.toString(), vIStrength);
+            {
+                final MediaPlayer mediaPlayer = new MediaPlayer();
+                final int session = mediaPlayer.getAudioSessionId();
+                Virtualizer virtualizerEffect = null;
+                try {
+                    virtualizerEffect = new Virtualizer(PRIORITY, session);
+                    editor.putBoolean(Key.virt_strength_supported.toString(),
+                            virtualizerEffect.getStrengthSupported());
+                } finally {
+                    if (virtualizerEffect != null) {
+                        Log.d(TAG, "Releasing dummy Virtualizer effect");
+                        virtualizerEffect.release();
+                    }
+                    mediaPlayer.release();
+                }
+            }
 
             // BassBoost
             final boolean isBBEnabled = prefs.getBoolean(Key.bb_enabled.toString(),
