diff -ur orig/apps/main.c apps/main.c
--- orig/apps/main.c	Tue Jul 23 12:58:26 2002
+++ apps/main.c	Tue Jul 23 13:00:58 2002
@@ -150,7 +150,8 @@
                global_settings.bass,
                global_settings.treble,
                global_settings.loudness,
-               global_settings.bass_boost );
+               global_settings.bass_boost,
+               global_settings.avc );
 
     status_init();
     usb_start_monitoring();
diff -ur orig/apps/settings.c apps/settings.c
--- orig/apps/settings.c	Tue Jul 23 12:58:26 2002
+++ apps/settings.c	Tue Jul 23 13:03:43 2002
@@ -54,6 +54,7 @@
 0x0e    0x22    <shuffle mode & directory filter byte>
 0x0f    0x23    <scroll speed & WPS display byte>
 0x10    0x24    <playlist options byte>
+0x11    0x25    <AVC byte>
   
         <all unused space filled with 0xff>
 
@@ -216,6 +217,8 @@
         ((global_settings.scroll_speed << 3) |
          (global_settings.wps_display & 7));
     
+    rtc_config_block[0x11] = (unsigned char)global_settings.avc;
+    
     memcpy(&rtc_config_block[0x24], &global_settings.total_uptime, 4);
     memcpy(&rtc_config_block[0x28], &global_settings.total_boots, 2);
     
@@ -277,6 +280,9 @@
         c = rtc_config_block[0xf] & 7;
         if (c != 7)
             global_settings.wps_display = c;
+        
+        if (rtc_config_block[0x11] != 0xFF)
+            global_settings.avc = rtc_config_block[0x11];
     
         if (rtc_config_block[0x24] != 0xFF)
             memcpy(&global_settings.total_uptime, &rtc_config_block[0x24], 4);
@@ -300,6 +306,7 @@
     global_settings.treble      = mpeg_sound_default(SOUND_TREBLE);
     global_settings.loudness    = DEFAULT_LOUDNESS_SETTING;
     global_settings.bass_boost  = DEFAULT_BASS_BOOST_SETTING;
+    global_settings.avc         = DEFAULT_AVC_SETTING;
     global_settings.contrast    = DEFAULT_CONTRAST_SETTING;
     global_settings.poweroff    = DEFAULT_POWEROFF_SETTING;
     global_settings.backlight   = DEFAULT_BACKLIGHT_SETTING;
diff -ur orig/apps/settings.h apps/settings.h
--- orig/apps/settings.h	Tue Jul 23 12:58:26 2002
+++ apps/settings.h	Tue Jul 23 13:04:17 2002
@@ -38,7 +38,8 @@
     int treble;     /* treble eq:            0-100 0=low   100=high          */
     int loudness;   /* loudness eq:          0-100 0=off   100=max           */
     int bass_boost; /* bass boost eq:        0-100 0=off   100=max           */
-
+    int avc;        /* auto volume correct:  0=disable, 1=2s 2=4s 3=8s       */
+    
     /* device settings */
 
     int contrast;   /* lcd contrast:         0-100 0=low 100=high            */
@@ -97,6 +98,7 @@
 #define DEFAULT_TREBLE_SETTING     50/2
 #define DEFAULT_LOUDNESS_SETTING    0
 #define DEFAULT_BASS_BOOST_SETTING  0
+#define DEFAULT_AVC_SETTING         0
 #define DEFAULT_CONTRAST_SETTING    0
 #define DEFAULT_POWEROFF_SETTING    0
 #define DEFAULT_BACKLIGHT_SETTING   5
diff -ur orig/apps/sound_menu.c apps/sound_menu.c
--- orig/apps/sound_menu.c	Tue Jul 23 12:58:26 2002
+++ apps/sound_menu.c	Tue Jul 23 13:04:49 2002
@@ -128,6 +128,13 @@
 {
     set_sound("Bass boost", &global_settings.bass_boost, SOUND_SUPERBASS);
 };
+
+static void avc(void)
+{
+    char* names[] = { "off", "2s ", "4s ", "8s " };
+    set_option("[AVC decay time]", &global_settings.avc, names, 4 );
+    mpeg_sound_set(SOUND_AVC, global_settings.avc);
+}
 #endif /* ARCHOS_RECORDER */
 
 void sound_menu(void)
@@ -139,7 +146,8 @@
         { "Treble", treble },
 #ifdef ARCHOS_RECORDER
         { "Loudness", loudness },
-        { "Bass Boost", bass_boost }
+        { "Bass Boost", bass_boost },
+        { "AVC", avc }
 #endif
     };
     
diff -ur orig/firmware/drivers/mas.h firmware/drivers/mas.h
--- orig/firmware/drivers/mas.h	Tue Jul 23 12:58:26 2002
+++ firmware/drivers/mas.h	Tue Jul 23 13:05:58 2002
@@ -60,11 +60,18 @@
 #define	MAS_REG_KPRESCALE       0xe7
 #define	MAS_REG_KBASS           0x6b
 #define	MAS_REG_KTREBLE         0x6f
+#ifdef ARCHOS_RECORDER
 #define MAS_REG_KMDB_SWITCH     0x21
 #define MAS_REG_KMDB_STR        0x22
 #define MAS_REG_KMDB_HAR        0x23
 #define MAS_REG_KMDB_FC         0x24
 #define MAS_REG_KLOUDNESS       0x1e
+#define MAS_REG_QPEAK_L         0x0a
+#define MAS_REG_QPEAK_R   	 0x0b
+#define MAS_REG_DQPEAK_L	 0x0c
+#define MAS_REG_DQPEAK_R        0x0d
+#define MAS_REG_KAVC            0x12
+#endif
 
 /*
  * MAS commands
diff -ur orig/firmware/mpeg.c firmware/mpeg.c
--- orig/firmware/mpeg.c	Tue Jul 23 12:58:25 2002
+++ firmware/mpeg.c	Tue Jul 23 13:08:34 2002
@@ -1007,6 +1007,28 @@
             tmp = MAX(MIN(value * 4, 0x44), 0);
             mas_codec_writereg(MAS_REG_KLOUDNESS, (tmp & 0xff) << 8);
             break;
+            
+        case SOUND_AVC:
+            switch (value) {
+                case 1: /* 2s */
+                    tmp = (0x2 << 8) | (0x8 << 12);
+                    break;
+                case 2: /* 4s */
+                    tmp = (0x4 << 8) | (0x8 << 12);
+                    break;
+                case 3: /* 8s */
+                    tmp = (0x8 << 8) | (0x8 << 12);
+                    break;
+                case -1: /* turn off and then turn on again to decay quickly */
+                    tmp = mas_codec_readreg(MAS_REG_KAVC);
+                    mas_codec_writereg(MAS_REG_KAVC, 0);  
+                    break;
+                default: /* off */
+                    tmp = 0;
+                    break;  
+            }
+            mas_codec_writereg(MAS_REG_KAVC, tmp);
+            break;
 #endif
     }
 #endif /* SIMULATOR */
@@ -1051,16 +1073,16 @@
     return result;
 }
 
-void mpeg_init(int volume, int bass, int treble, int loudness, int bass_boost)
+void mpeg_init(int volume, int bass, int treble, int loudness, int bass_boost, int avc)
 {
 #ifdef SIMULATOR
-    volume = bass = treble = loudness = bass_boost;
+    volume = bass = treble = loudness = bass_boost = avc;
 #else
 #ifdef ARCHOS_RECORDER
     int rc;
     unsigned long val;
 #else
-    loudness = bass_boost;
+    loudness = bass_boost = avc;
 #endif
 
     setup_sci0();
@@ -1127,6 +1149,7 @@
 #ifdef ARCHOS_RECORDER
     mpeg_sound_set(SOUND_LOUDNESS, loudness);
     mpeg_sound_set(SOUND_SUPERBASS, bass_boost);
+    mpeg_sound_set(SOUND_AVC, avc);
 #endif
 #endif /* SIMULATOR */
 }
diff -ur orig/firmware/mpeg.h firmware/mpeg.h
--- orig/firmware/mpeg.h	Tue Jul 23 12:58:25 2002
+++ firmware/mpeg.h	Tue Jul 23 13:09:43 2002
@@ -21,7 +21,7 @@
 
 #include <stdbool.h>
 
-void mpeg_init(int volume, int bass, int treble, int loudness, int bass_boost);
+void mpeg_init(int volume, int bass, int treble, int loudness, int bass_boost, int avc);
 void mpeg_play(char* trackname);
 void mpeg_stop(void);
 void mpeg_pause(void);
@@ -46,7 +46,8 @@
 #ifdef ARCHOS_RECORDER
 #define SOUND_LOUDNESS 4
 #define SOUND_SUPERBASS 5
-#define SOUND_NUMSETTINGS 6
+#define SOUND_AVC 6
+#define SOUND_NUMSETTINGS 7
 #else
 #define SOUND_DEEMPH 4
 #define SOUND_NUMSETTINGS 5
