Index: apps/lang/russian.lang
===================================================================
--- apps/lang/russian.lang	(revision 29795)
+++ apps/lang/russian.lang	(working copy)
@@ -12665,3 +12665,20 @@
     *: "Только в заданных папках"
   </voice>
 </phrase>
+<phrase>
+  id: LANG_CAR_ADAPTER_MODE_DELAY
+  desc: Displayed for setting car adapter mode delay
+  user: core
+  <source>
+    *: none
+    charging: "Delay Before Resume"
+  </source>
+  <dest>
+    *: none
+    charging: "Задержка перед возобновлением"
+  </dest>
+  <voice>
+    *: none
+    charging: "Задержка перед возобновлением"
+  </voice>
+</phrase>
Index: apps/lang/english.lang
===================================================================
--- apps/lang/english.lang	(revision 29795)
+++ apps/lang/english.lang	(working copy)
@@ -12744,3 +12744,20 @@
     *: "In custom directories only"
   </voice>
 </phrase>
+<phrase>
+  id: LANG_CAR_ADAPTER_MODE_DELAY
+  desc: Displayed for setting car adapter mode delay
+  user: core
+  <source>
+    *: none
+    charging: "Delay Before Resume"
+  </source>
+  <dest>
+    *: none
+    charging: "Delay Before Resume"
+  </dest>
+  <voice>
+    *: none
+    charging: "Delay Before Resume"
+  </voice>
+</phrase>
Index: apps/settings.h
===================================================================
--- apps/settings.h	(revision 29795)
+++ apps/settings.h	(working copy)
@@ -513,6 +513,7 @@
     bool audioscrobbler; /* Audioscrobbler logging  */
     bool cuesheet;
     bool car_adapter_mode; /* 0=off 1=on */
+    int car_adapter_mode_delay; /* delay before resume,  in seconds*/
     int start_in_screen;
 #if defined(HAVE_RTC_ALARM) && \
     (defined(HAVE_RECORDING) || CONFIG_TUNER)
Index: apps/menus/settings_menu.c
===================================================================
--- apps/menus/settings_menu.c	(revision 29795)
+++ apps/menus/settings_menu.c	(working copy)
@@ -255,6 +255,9 @@
 #endif
 #if CONFIG_CHARGING
 MENUITEM_SETTING(car_adapter_mode, &global_settings.car_adapter_mode, NULL);
+MENUITEM_SETTING(car_adapter_mode_delay, &global_settings.car_adapter_mode_delay, NULL);
+MAKE_MENU(car_adapter_mode_menu, ID2P(LANG_CAR_ADAPTER_MODE), 0, Icon_NOICON,
+           &car_adapter_mode, &car_adapter_mode_delay);
 #endif
 #ifdef IPOD_ACCESSORY_PROTOCOL
 MENUITEM_SETTING(serial_bitrate, &global_settings.serial_bitrate, NULL);
@@ -305,7 +308,7 @@
             &line_in,
 #endif
 #if CONFIG_CHARGING
-            &car_adapter_mode,
+            &car_adapter_mode_menu,
 #endif
 #ifdef IPOD_ACCESSORY_PROTOCOL
             &serial_bitrate,
Index: apps/settings_list.c
===================================================================
--- apps/settings_list.c	(revision 29795)
+++ apps/settings_list.c	(working copy)
@@ -792,6 +792,9 @@
 #if CONFIG_CHARGING
     OFFON_SETTING(NVRAM(1), car_adapter_mode,
                   LANG_CAR_ADAPTER_MODE, false, "car adapter mode", NULL),
+    INT_SETTING_NOWRAP(0, car_adapter_mode_delay, LANG_CAR_ADAPTER_MODE_DELAY,
+                5, "delay before resume", UNIT_SEC, 5, 30, 5,
+		NULL, NULL, NULL),
 #endif
 #ifdef IPOD_ACCESSORY_PROTOCOL
     CHOICE_SETTING(0, serial_bitrate, LANG_SERIAL_BITRATE, 0, "serial bitrate",
Index: apps/misc.c
===================================================================
--- apps/misc.c	(revision 29795)
+++ apps/misc.c	(working copy)
@@ -428,6 +428,7 @@
 
 #if CONFIG_CHARGING
 static bool waiting_to_resume_play = false;
+static bool paused_on_unplugged = false;
 static long play_resume_tick;
 
 static void car_adapter_mode_processing(bool inserted)
@@ -439,10 +440,10 @@
             /*
              * Just got plugged in, delay & resume if we were playing
              */
-            if (audio_status() & AUDIO_STATUS_PAUSE)
+            if ((audio_status() & AUDIO_STATUS_PAUSE) && paused_on_unplugged)
             {
                 /* delay resume a bit while the engine is cranking */
-                play_resume_tick = current_tick + HZ*5;
+                play_resume_tick = current_tick + HZ*global_settings.car_adapter_mode_delay;
                 waiting_to_resume_play = true;
             }
         }
@@ -458,7 +459,9 @@
                     fade(false, false);
                 else
                     audio_pause();
+                paused_on_unplugged = true;
             }
+            else if (!waiting_to_resume_play) paused_on_unplugged = false;
             waiting_to_resume_play = false;
         }
     }
@@ -468,6 +471,9 @@
 {
     if (waiting_to_resume_play)
     {
+        if ((audio_status() & AUDIO_STATUS_PLAY) &&
+                !(audio_status() & AUDIO_STATUS_PAUSE))
+                waiting_to_resume_play = false;
         if (TIME_AFTER(current_tick, play_resume_tick))
         {
             if (audio_status() & AUDIO_STATUS_PAUSE)
