Index: apps/lang/english.lang
===================================================================
--- apps/lang/english.lang	(revision 12132)
+++ apps/lang/english.lang	(working copy)
@@ -3195,13 +3195,13 @@
   desc: Backlight behaviour setting
   user:
   <source>
-    *: "First Keypress Enables Backlight Only"
+    *: "Keypress effects when backlight is off"
   </source>
   <dest>
-    *: "First Keypress Enables Backlight Only"
+    *: "Keypress effects when backlight is off"
   </dest>
   <voice>
-    *: "First Keypress Enables Backlight Only"
+    *: "Keypress effects when backlight is off"
   </voice>
 </phrase>
 <phrase>
@@ -10459,3 +10459,65 @@
     *: "Play Next"
   </voice>
 </phrase>
+<phrase>
+  id: LANG_BACKLIGHT_FILTER_MODE0
+  desc: Backlight behaviour setting
+  user:
+  <source>
+    *: "All: BL & action"
+  </source>
+  <dest>
+    *: "All: BL & action"
+  </dest>
+  <voice>
+    *: "All: BL & action"
+  </voice>
+</phrase>
+<phrase>
+  id: LANG_BACKLIGHT_FILTER_MODE1
+  desc: Backlight behaviour setting
+  user:
+  <source>
+    *: "All: BL & no action"
+  </source>
+  <dest>
+    *: "All: BL & no action"
+  </dest>
+  <voice>
+    *: "All: BL & no action"
+  </voice>
+</phrase>
+<phrase>
+  id: LANG_BACKLIGHT_FILTER_MODE2
+  desc: Backlight behaviour setting
+  user:
+  <source>
+    *: "Select: BL, others: action & BL"
+    h300: "NAVI: BL, others: action & BL"
+  </source>
+  <dest>
+    *: "Select: BL, others: action & BL"
+    h300: "NAVI: BL, others: action & BL"
+  </dest>
+  <voice>
+    *: "Select: BL, others: action & BL"
+    h300: "NAVI: BL, others: action & BL"
+  </voice>
+</phrase>
+<phrase>
+  id: LANG_BACKLIGHT_FILTER_MODE3
+  desc: Backlight behaviour setting
+  user:
+  <source>
+    *: "Select: BL, Mode: action & BL, others: action"
+    h300: "NAVI: BL, A-B: action & BL, others: action"
+  </source>
+  <dest>
+    *: "Select: BL, Mode: action & BL, others: action"
+    h300: "NAVI: BL, A-B: action & BL, others: action"
+  </dest>
+  <voice>
+    *: "Select: BL, Mode: action & BL, others: action"
+    h300: "NAVI: BL, A-B: action & BL, others: action"
+  </voice>
+</phrase>
Index: apps/settings.h
===================================================================
--- apps/settings.h	(revision 12132)
+++ apps/settings.h	(working copy)
@@ -478,7 +478,7 @@
     bool party_mode;    /* party mode - unstoppable music */
     
 #ifdef CONFIG_BACKLIGHT
-    bool bl_filter_first_keypress;   /* filter first keypress when dark? */
+    int bl_filter_first_keypress;   /* filter first keypress when dark? */
 #ifdef HAVE_REMOTE_LCD
     bool remote_bl_filter_first_keypress; /* filter first remote keypress when remote dark? */
 #endif
Index: apps/settings_menu.c
===================================================================
--- apps/settings_menu.c	(revision 12132)
+++ apps/settings_menu.c	(working copy)
@@ -1196,8 +1196,15 @@
 #ifdef CONFIG_BACKLIGHT
 static bool set_bl_filter_first_keypress(void)
 {
-    bool result = set_bool( str(LANG_BACKLIGHT_FILTER_FIRST_KEYPRESS),
-                            &global_settings.bl_filter_first_keypress );
+    static const struct opt_items names[] = {
+        { STR(LANG_BACKLIGHT_FILTER_MODE0) },
+        { STR(LANG_BACKLIGHT_FILTER_MODE1) },
+        { STR(LANG_BACKLIGHT_FILTER_MODE2) },
+        { STR(LANG_BACKLIGHT_FILTER_MODE3) }
+    };
+    bool result = set_option(str(LANG_BACKLIGHT_FILTER_FIRST_KEYPRESS),
+                             &global_settings.bl_filter_first_keypress,
+                             INT, names, 4, NULL );
     set_backlight_filter_keypress(global_settings.bl_filter_first_keypress);
     return result;
 }
Index: apps/settings_list.c
===================================================================
--- apps/settings_list.c	(revision 12132)
+++ apps/settings_list.c	(working copy)
@@ -225,9 +225,8 @@
 #endif
 
 #ifdef CONFIG_BACKLIGHT
-    OFFON_SETTING(0,bl_filter_first_keypress,
-        LANG_BACKLIGHT_FILTER_FIRST_KEYPRESS, false,
-        "backlight filters first keypress", NULL),
+    {F_T_INT,GS(bl_filter_first_keypress), LANG_BACKLIGHT_FILTER_FIRST_KEYPRESS,
+        INT(0),"backlight filters first keypress", "mode0,mode1,mode2,mode3",UNUSED},
 #ifdef HAVE_REMOTE_LCD
     OFFON_SETTING(0,remote_bl_filter_first_keypress,
         LANG_BACKLIGHT_FILTER_FIRST_KEYPRESS, false,
Index: firmware/export/button.h
===================================================================
--- firmware/export/button.h	(revision 12132)
+++ firmware/export/button.h	(working copy)
@@ -35,7 +35,7 @@
 void button_set_flip(bool flip); /* turn 180 degrees */
 #endif
 #ifdef CONFIG_BACKLIGHT
-void set_backlight_filter_keypress(bool value);
+void set_backlight_filter_keypress(int value);
 #ifdef HAVE_REMOTE_LCD
 void set_remote_backlight_filter_keypress(bool value);
 #endif
Index: firmware/drivers/button.c
===================================================================
--- firmware/drivers/button.c	(revision 12132)
+++ firmware/drivers/button.c	(working copy)
@@ -44,7 +44,7 @@
 static bool flipped;  /* buttons can be flipped to match the LCD flip */
 #endif
 #ifdef CONFIG_BACKLIGHT
-static bool filter_first_keypress;
+static int filter_first_keypress;
 #ifdef HAVE_REMOTE_LCD
 static bool remote_filter_first_keypress;
 #endif
@@ -73,6 +73,7 @@
     static bool post = false;
 #ifdef CONFIG_BACKLIGHT
     static bool skip_release = false;
+    bool turn_backlight_on = true;
 #ifdef HAVE_REMOTE_LCD
     static bool skip_remote_release = false;
 #endif
@@ -227,10 +228,38 @@
                     }
                     else
 #endif
-                        if (!filter_first_keypress || is_backlight_on())
+                        if (is_backlight_on())
+                        {
                             queue_post(&button_queue, btn, 0);
+                        }
                         else
+                        {
+                            switch (filter_first_keypress)
+                            {
+                                case 0:
+                                    queue_post(&button_queue, btn, NULL);
+                                    break;
+                                case 1:
+                                    skip_release = true;
+                                    break;
+                                case 2:
+                                    if (btn == BUTTON_SELECT)
+                                        skip_release = true;
+                        else
+                                        queue_post(&button_queue, btn, NULL);
+                                    break;
+                                case 3:
+                                    if (btn == BUTTON_SELECT)
                             skip_release = true;
+                                    else
+                                    {
+                                        if (btn != BUTTON_MODE)
+                                            turn_backlight_on = false;
+                                        queue_post(&button_queue, btn, NULL);
+                                    }
+                                    break;
+                            }
+                        }
 #else /* no backlight, nothing to skip */
                     queue_post(&button_queue, btn, 0);
 #endif
@@ -241,11 +270,13 @@
                     remote_backlight_on();
                 else
 #endif
+                    if (turn_backlight_on)
+                    {
                     backlight_on();
-
                 reset_poweroff_timer();
             }
         }
+        }
         else
         {
             repeat = false;
@@ -289,7 +320,7 @@
     flipped = false;
 #endif
 #ifdef CONFIG_BACKLIGHT
-    filter_first_keypress = false;
+    filter_first_keypress = 0;
 #ifdef HAVE_REMOTE_LCD
     remote_filter_first_keypress = false;
 #endif    
@@ -361,7 +392,7 @@
 #endif /* HAVE_LCD_BITMAP */
 
 #ifdef CONFIG_BACKLIGHT
-void set_backlight_filter_keypress(bool value)
+void set_backlight_filter_keypress(int value)
 {
     filter_first_keypress = value;
 }
Index: uisimulator/sdl/button.c
===================================================================
--- uisimulator/sdl/button.c	(revision 12132)
+++ uisimulator/sdl/button.c	(working copy)
@@ -52,7 +52,7 @@
 #ifdef CONFIG_BACKLIGHT
 static bool filter_first_keypress;
 
-void set_backlight_filter_keypress(bool value)
+void set_backlight_filter_keypress(int value)
 {
     filter_first_keypress = value;
 }
