--- sound.orig	2002-12-12 20:52:56 +0300
+++ sound	2002-12-12 21:26:18 +0300
@@ -32,6 +32,8 @@
 
 AUMIX=
 [ -x /usr/bin/aumix ] && AUMIX=/usr/bin/aumix
+ALSACTL=
+[ -x /usr/sbin/alsactl ] && ALSACTL=/usr/sbin/alsactl
 
 function LookupDevices()
 {
@@ -71,7 +73,7 @@
 
 function unload_alsa()
 {
-	RETVAL=0 stop_mixer;
+	RETVAL=0 SOUND_ALSA=1 stop_mixer;
 	/sbin/lsmod |grep "^snd" |
 		while read line; do
 			/sbin/rmmod `echo $line |cut -d\  -f 1`
@@ -81,20 +83,28 @@
 
 function start_mixer()
 {
-	if [ -n "$AUMIX" -a "$RETVAL" -eq 0 ] && LookupDevices; then
-		if [ -s /etc/.aumixrc ]; then
-			action "Loading mixer settings:" "$AUMIX" -f /etc/.aumixrc -L
-		elif [ -n "$SOUND_ALSA" ]; then
-			action "Loading mixer settings:" "$AUMIX" -v90 -w90
+	if [ "$RETVAL" -eq 0 ] && LookupDevices; then
+		if [ -n "$SOUND_ALSA" -a -n "$ALSACTL" -a -s /etc/asound.state ]; then
+			action "Loading mixer settings:" "$ALSACTL" restore
+		elif [ -n "$AUMIX" ]; then
+			if [ -s /etc/.aumixrc ]; then
+				action "Loading mixer settings:" "$AUMIX" -f /etc/.aumixrc -L
+			elif [ -n "$SOUND_ALSA" ]; then
+				action "Loading mixer settings:" "$AUMIX" -v90 -w90
+			fi
 		fi
 	fi
 }
 
 function stop_mixer()
 {
-	if [ -n "$AUMIX" ] && LookupDevices; then
-		action "Saving mixer settings:" "$AUMIX" -f /etc/.aumixrc -S
-	fi    
+	if LookupDevices; then
+		if [ -n "$SOUND_ALSA" -a -n "$ALSACTL" ]; then
+			action "Saving mixer settings:" "$ALSACTL" store
+		elif [ -n "$AUMIX" ]; then
+			action "Saving mixer settings:" "$AUMIX" -f /etc/.aumixrc -S
+		fi
+	fi
 }
 
 start()
