Index: trunk/doc/manual/en_US/man_VBoxManage-modifyvm.xml
===================================================================
--- trunk/doc/manual/en_US/man_VBoxManage-modifyvm.xml	(revision 98031)
+++ trunk/doc/manual/en_US/man_VBoxManage-modifyvm.xml	(revision 98032)
@@ -426,5 +426,16 @@
           <arg choice="plain"><replaceable>IO-base</replaceable> <replaceable>IRQ</replaceable></arg>
         </group></arg>
-      <arg>--audio=<group choice="plain">
+      <arg>--audio-controller=<group choice="plain">
+          <arg choice="plain">ac97</arg>
+          <arg choice="plain">hda</arg>
+          <arg choice="plain">sb16</arg>
+        </group></arg>
+      <arg>--audio-codec=<group choice="plain">
+          <arg choice="plain">stac9700</arg>
+          <arg choice="plain">ad1980</arg>
+          <arg choice="plain">stac9221</arg>
+          <arg choice="plain">sb16</arg>
+        </group></arg>
+      <arg>--audio-driver=<group choice="plain">
           <arg choice="plain">none</arg>
           <arg choice="plain">default</arg>
@@ -437,14 +448,7 @@
           <arg choice="plain">coreaudio</arg>
         </group></arg>
-      <arg>--audio-controller=<group choice="plain">
-          <arg choice="plain">ac97</arg>
-          <arg choice="plain">hda</arg>
-          <arg choice="plain">sb16</arg>
-        </group></arg>
-      <arg>--audio-codec=<group choice="plain">
-          <arg choice="plain">stac9700</arg>
-          <arg choice="plain">ad1980</arg>
-          <arg choice="plain">stac9221</arg>
-          <arg choice="plain">sb16</arg>
+      <arg>--audio-enabled=<group choice="plain">
+          <arg choice="plain">on</arg>
+          <arg choice="plain">off</arg>
         </group></arg>
       <arg>--audio-in=<group choice="plain">
@@ -1935,8 +1939,25 @@
         </varlistentry>
         <varlistentry>
-          <term><option>--audio=<replaceable>type</replaceable></option></term>
-          <listitem><para>
-              Specifies whether the VM has audio support, and if so,
-              which type. Valid audio type values are:
+          <term><option>--audio-controller=<replaceable>controller-type</replaceable></option></term>
+          <listitem><para>
+              Specifies the audio controller to be used with the VM.
+              Valid audio controller type values are:
+              <literal>ac97</literal>, <literal>hda</literal>, and
+              <literal>sb16</literal>.
+            </para></listitem>
+        </varlistentry>
+        <varlistentry>
+          <term><option>--audio-codec=<replaceable>codec-type</replaceable></option></term>
+          <listitem><para>
+              Specifies the audio codec to be used with the VM. Valid
+              audio codec type values are: <literal>stac9700</literal>,
+              <literal>ad1980</literal>, <literal>stac9221</literal>,
+              and <literal>sb16</literal>.
+            </para></listitem>
+        </varlistentry>
+        <varlistentry>
+          <term><option>--audio-driver=<replaceable>type</replaceable></option></term>
+          <listitem><para>
+              Specifies whether which audio driver (backend) to use.
               <literal>none</literal>, <literal>default</literal>,
               <literal>null</literal>, <literal>dsound</literal>,
@@ -1945,26 +1966,24 @@
               <literal>coreaudio</literal>.
             </para><para>
-              Note that the audio types are dependent on the host
+              Note that the audio driver are dependent on the host
               operating system. Use the <command>VBoxManage
               modifyvm</command> command usage output to determine the
               supported audio types for your host system.
-            </para></listitem>
-        </varlistentry>
-        <varlistentry>
-          <term><option>--audio-controller=<replaceable>controller-type</replaceable></option></term>
-          <listitem><para>
-              Specifies the audio controller to be used with the VM.
-              Valid audio controller type values are:
-              <literal>ac97</literal>, <literal>hda</literal>, and
-              <literal>sb16</literal>.
-            </para></listitem>
-        </varlistentry>
-        <varlistentry>
-          <term><option>--audio-codec=<replaceable>codec-type</replaceable></option></term>
-          <listitem><para>
-              Specifies the audio codec to be used with the VM. Valid
-              audio codec type values are: <literal>stac9700</literal>,
-              <literal>ad1980</literal>, <literal>stac9221</literal>,
-              and <literal>sb16</literal>.
+            </para>
+            <para>
+              For maximum interoperability between hosts, the default
+              audio driver can be used. The VM will then automatically select
+              the most appropriate audio driver for the current host available.
+            </para></listitem>
+        </varlistentry>
+        <varlistentry>
+          <term><option>--audio-enabled=on|off</option></term>
+          <listitem><para>
+              Specifies whether to enable or disable audio for the VM.
+            </para>
+            <para>
+              This option has precedence over the --audio-on and --audio-off
+              options, i.e. turning off audio via this option will turn off
+              both, input and output, audio.
             </para></listitem>
         </varlistentry>
Index: trunk/doc/manual/ru_RU/man_VBoxManage-modifyvm.xml
===================================================================
--- trunk/doc/manual/ru_RU/man_VBoxManage-modifyvm.xml	(revision 98031)
+++ trunk/doc/manual/ru_RU/man_VBoxManage-modifyvm.xml	(revision 98032)
@@ -423,5 +423,16 @@
           <arg choice="plain"><replaceable>IO-база</replaceable> <replaceable>IRQ</replaceable></arg>
         </group></arg>
-      <arg>--audio=<group choice="plain">
+      <arg>--audio-controller=<group choice="plain">
+          <arg choice="plain">ac97</arg>
+          <arg choice="plain">hda</arg>
+          <arg choice="plain">sb16</arg>
+        </group></arg>
+      <arg>--audio-codec=<group choice="plain">
+          <arg choice="plain">stac9700</arg>
+          <arg choice="plain">ad1980</arg>
+          <arg choice="plain">stac9221</arg>
+          <arg choice="plain">sb16</arg>
+        </group></arg>
+      <arg>--audio-driver=<group choice="plain">
           <arg choice="plain">none</arg>
           <arg choice="plain">default</arg>
@@ -434,14 +445,7 @@
           <arg choice="plain">coreaudio</arg>
         </group></arg>
-      <arg>--audio-controller=<group choice="plain">
-          <arg choice="plain">ac97</arg>
-          <arg choice="plain">hda</arg>
-          <arg choice="plain">sb16</arg>
-        </group></arg>
-      <arg>--audio-codec=<group choice="plain">
-          <arg choice="plain">stac9700</arg>
-          <arg choice="plain">ad1980</arg>
-          <arg choice="plain">stac9221</arg>
-          <arg choice="plain">sb16</arg>
+      <arg>--audio-enabled=<group choice="plain">
+          <arg choice="plain">on</arg>
+          <arg choice="plain">off</arg>
         </group></arg>
       <arg>--audio-in=<group choice="plain">
@@ -1882,5 +1886,23 @@
         </varlistentry>
         <varlistentry>
-          <term><option>--audio=<replaceable>тип</replaceable></option></term>
+          <term><option>--audio-controller=<replaceable>тип-контроллера</replaceable></option></term>
+          <listitem><para>
+              Задает аудио контроллер, используемый в ВМ.
+              Допустимые значения:
+              <literal>ac97</literal>, <literal>hda</literal> и
+              <literal>sb16</literal>.
+            </para></listitem>
+        </varlistentry>
+        <varlistentry>
+          <term><option>--audio-codec=<replaceable>тип-кодека</replaceable></option></term>
+          <listitem><para>
+              Указывает аудио кодек, используемый в ВМ. Допустимые
+              значения: <literal>stac9700</literal>,
+              <literal>ad1980</literal>, <literal>stac9221</literal>
+              и <literal>sb16</literal>.
+            </para></listitem>
+        </varlistentry>
+        <varlistentry>
+          <term><option>--audio-driver=<replaceable>тип</replaceable></option></term>
           <listitem><para>
               Указывает, что ВМ имеет поддержку аудио определенного типа.
@@ -1896,22 +1918,22 @@
               modifyvm</command> поможет определить поддерживаемые
               типы аудио для вашей операционной системы.
-            </para></listitem>
-        </varlistentry>
-        <varlistentry>
-          <term><option>--audio-controller=<replaceable>тип-контроллера</replaceable></option></term>
-          <listitem><para>
-              Задает аудио контроллер, используемый в ВМ.
-              Допустимые значения:
-              <literal>ac97</literal>, <literal>hda</literal> и
-              <literal>sb16</literal>.
-            </para></listitem>
-        </varlistentry>
-        <varlistentry>
-          <term><option>--audio-codec=<replaceable>тип-кодека</replaceable></option></term>
-          <listitem><para>
-              Указывает аудио кодек, используемый в ВМ. Допустимые
-              значения: <literal>stac9700</literal>,
-              <literal>ad1980</literal>, <literal>stac9221</literal>
-              и <literal>sb16</literal>.
+            </para>
+            <para>
+              Для обеспечения максимальной совместимости между хостами можно
+              использовать стандартный можно использовать аудиодрайвер по
+              умолчанию. Затем виртуальная машина автоматически выберет
+              наиболее подходящий аудиодрайвер для текущего доступного хоста.
+            </para></listitem>
+        </varlistentry>
+        <varlistentry>
+          <term><option>--audio-enabled=on|off</option></term>
+          <listitem><para>
+              Указывает, следует ли включить или отключить звук для виртуальной
+              машины.
+            </para>
+            <para>
+              Эта опция имеет приоритет над опциями --audio-on и --audio-off
+              т.е. отключение звука с помощью этой опции приведет к отключению
+              как входной, так и выходной звук.
             </para></listitem>
         </varlistentry>
Index: trunk/doc/manual/user_ChangeLogImpl.xml
===================================================================
--- trunk/doc/manual/user_ChangeLogImpl.xml	(revision 98031)
+++ trunk/doc/manual/user_ChangeLogImpl.xml	(revision 98032)
@@ -119,4 +119,11 @@
       </listitem>
 
+      <listitem>
+        <para>Audio: The "--audio" option in VBoxManage is now marked as
+          deprecated; please use "--audio-driver" and "--audio-enabled"
+          instead. This will allow more flexibility when changing the driver
+          and/or controlling the audio functionality</para>
+      </listitem>
+
     </itemizedlist>
   </sect1>
Index: trunk/src/VBox/Frontends/VBoxManage/VBoxManageModifyVM.cpp
===================================================================
--- trunk/src/VBox/Frontends/VBoxManage/VBoxManageModifyVM.cpp	(revision 98031)
+++ trunk/src/VBox/Frontends/VBoxManage/VBoxManageModifyVM.cpp	(revision 98032)
@@ -178,5 +178,7 @@
     MODIFYVM_AUDIOCONTROLLER,
     MODIFYVM_AUDIOCODEC,
-    MODIFYVM_AUDIO,
+    MODIFYVM_AUDIODRIVER,
+    MODIFYVM_AUDIOENABLED,
+    MODIFYVM_AUDIO,                   /* Deprecated; remove in the next major version. */
     MODIFYVM_AUDIOIN,
     MODIFYVM_AUDIOOUT,
@@ -391,4 +393,6 @@
     OPT2("--audio-codec",                   "--audiocodec",             MODIFYVM_AUDIOCODEC,                RTGETOPT_REQ_STRING),
     OPT1("--audio",                                                     MODIFYVM_AUDIO,                     RTGETOPT_REQ_STRING),
+    OPT2("--audio-driver",                  "--audiodriver",            MODIFYVM_AUDIODRIVER,               RTGETOPT_REQ_STRING),
+    OPT2("--audio-enabled",                 "--audioenabled",           MODIFYVM_AUDIOENABLED,              RTGETOPT_REQ_BOOL_ONOFF),
     OPT2("--audio-in",                      "--audioin",                MODIFYVM_AUDIOIN,                   RTGETOPT_REQ_BOOL_ONOFF),
     OPT2("--audio-out",                     "--audioout",               MODIFYVM_AUDIOOUT,                  RTGETOPT_REQ_BOOL_ONOFF),
@@ -2593,6 +2597,12 @@
             }
 
-            case MODIFYVM_AUDIO:
-            {
+            case MODIFYVM_AUDIODRIVER:
+                RT_FALL_THROUGH();
+            case MODIFYVM_AUDIO: /** @todo Deprecated; remove. */
+            {
+                if (c == MODIFYVM_AUDIO)
+                    RTStrmPrintf(g_pStdErr,
+                                 ModifyVM::tr("Warning: --audio is deprecated and will be removed soon. Use --audio-driver instead!\n"));
+
                 ComPtr<IAudioSettings> audioSettings;
                 CHECK_ERROR_BREAK(sessionMachine, COMGETTER(AudioSettings)(audioSettings.asOutParam()));
@@ -2600,77 +2610,59 @@
                 CHECK_ERROR_BREAK(audioSettings, COMGETTER(Adapter)(audioAdapter.asOutParam()));
                 ASSERT(audioAdapter);
-/** @todo r=klaus: don't unconditionally bolt together setting the audio driver
- * and enabling the device. Doing this more cleverly allows changing the audio
- * driver for VMs in saved state, which can be very useful when moving VMs
- * between systems with different setup. The driver doesn't leave any traces in
- * saved state. The GUI also might learn this trick if it doesn't use it
- * already. */
                 /* disable? */
-                if (!RTStrICmp(ValueUnion.psz, "none"))
-                {
-                    CHECK_ERROR(audioAdapter, COMSETTER(Enabled)(false));
-                }
+                if (   !RTStrICmp(ValueUnion.psz, "none")
+                    || !RTStrICmp(ValueUnion.psz, "null"))
+                    CHECK_ERROR(audioAdapter, COMSETTER(AudioDriver)(AudioDriverType_Null));
                 else if (!RTStrICmp(ValueUnion.psz, "default"))
-                {
                     CHECK_ERROR(audioAdapter, COMSETTER(AudioDriver)(AudioDriverType_Default));
-                    CHECK_ERROR(audioAdapter, COMSETTER(Enabled)(true));
-                }
-                else if (!RTStrICmp(ValueUnion.psz, "null"))
-                {
-                    CHECK_ERROR(audioAdapter, COMSETTER(AudioDriver)(AudioDriverType_Null));
-                    CHECK_ERROR(audioAdapter, COMSETTER(Enabled)(true));
-                }
 #ifdef RT_OS_WINDOWS
-#ifdef VBOX_WITH_WINMM
+# ifdef VBOX_WITH_WINMM
                 else if (!RTStrICmp(ValueUnion.psz, "winmm"))
-                {
                     CHECK_ERROR(audioAdapter, COMSETTER(AudioDriver)(AudioDriverType_WinMM));
-                    CHECK_ERROR(audioAdapter, COMSETTER(Enabled)(true));
-                }
-#endif
+# endif
                 else if (!RTStrICmp(ValueUnion.psz, "dsound"))
-                {
                     CHECK_ERROR(audioAdapter, COMSETTER(AudioDriver)(AudioDriverType_DirectSound));
-                    CHECK_ERROR(audioAdapter, COMSETTER(Enabled)(true));
-                }
                 else if (!RTStrICmp(ValueUnion.psz, "was"))
-                {
                     CHECK_ERROR(audioAdapter, COMSETTER(AudioDriver)(AudioDriverType_WAS));
-                    CHECK_ERROR(audioAdapter, COMSETTER(Enabled)(true));
-                }
 #endif /* RT_OS_WINDOWS */
 #ifdef VBOX_WITH_AUDIO_OSS
                 else if (!RTStrICmp(ValueUnion.psz, "oss"))
-                {
                     CHECK_ERROR(audioAdapter, COMSETTER(AudioDriver)(AudioDriverType_OSS));
-                    CHECK_ERROR(audioAdapter, COMSETTER(Enabled)(true));
-                }
 #endif
 #ifdef VBOX_WITH_AUDIO_ALSA
                 else if (!RTStrICmp(ValueUnion.psz, "alsa"))
-                {
                     CHECK_ERROR(audioAdapter, COMSETTER(AudioDriver)(AudioDriverType_ALSA));
-                    CHECK_ERROR(audioAdapter, COMSETTER(Enabled)(true));
-                }
 #endif
 #ifdef VBOX_WITH_AUDIO_PULSE
                 else if (!RTStrICmp(ValueUnion.psz, "pulse"))
-                {
                     CHECK_ERROR(audioAdapter, COMSETTER(AudioDriver)(AudioDriverType_Pulse));
-                    CHECK_ERROR(audioAdapter, COMSETTER(Enabled)(true));
-                }
 #endif
 #ifdef RT_OS_DARWIN
                 else if (!RTStrICmp(ValueUnion.psz, "coreaudio"))
-                {
                     CHECK_ERROR(audioAdapter, COMSETTER(AudioDriver)(AudioDriverType_CoreAudio));
-                    CHECK_ERROR(audioAdapter, COMSETTER(Enabled)(true));
-                }
 #endif /* !RT_OS_DARWIN */
                 else
                 {
-                    errorArgument(ModifyVM::tr("Invalid --audio argument '%s'"), ValueUnion.psz);
+                    errorArgument(ModifyVM::tr("Invalid %s argument '%s'"),
+                                  c == MODIFYVM_AUDIO ? "--audio" : "--audio-driver", ValueUnion.psz);
                     hrc = E_FAIL;
                 }
+
+                if (   SUCCEEDED(hrc)
+                    && c == MODIFYVM_AUDIO) /* To keep the original behavior until we remove the command. */
+                    CHECK_ERROR(audioAdapter, COMSETTER(Enabled)(RTStrICmp(ValueUnion.psz, "none") == false ? false : true));
+
+                break;
+            }
+
+            case MODIFYVM_AUDIOENABLED:
+            {
+                ComPtr<IAudioSettings> audioSettings;
+                CHECK_ERROR_BREAK(sessionMachine, COMGETTER(AudioSettings)(audioSettings.asOutParam()));
+                ComPtr<IAudioAdapter> audioAdapter;
+                CHECK_ERROR_BREAK(audioSettings, COMGETTER(Adapter)(audioAdapter.asOutParam()));
+                ASSERT(audioAdapter);
+
+                CHECK_ERROR(audioAdapter, COMSETTER(Enabled)(ValueUnion.f));
                 break;
             }
