diff --git a/apps/menu.c b/apps/menu.c
index 98cce52..df786dd 100644
--- a/apps/menu.c
+++ b/apps/menu.c
@@ -334,12 +334,12 @@
     
     menu = menu->submenus[selected_item];
     
-    if (menu->flags&MENU_DYNAMIC_DESC)
+    if ((menu->flags&MENU_DYNAMIC_DESC) && (type != MT_SETTING_W_TEXT))
         return menu->menu_get_name_and_icon->list_get_name(selected_item,
                     menu->menu_get_name_and_icon->list_get_name_data, buffer);
     
     type = (menu->flags&MENU_TYPE_MASK);
-    if (type == MT_SETTING)
+    if ((type == MT_SETTING) || (type == MT_SETTING_W_TEXT))
     {
         const struct settings_list *v
                 = find_setting(menu->variable, NULL);
@@ -353,7 +353,7 @@
 static void menu_get_icon(int selected_item, void * data, ICON * icon)
 {
     const struct menu_item_ex *menu = (const struct menu_item_ex *)data;
-    int menu_icon;
+    int menu_icon = Icon_NOICON;
     selected_item = get_menu_selection(selected_item, menu);
     
     menu = menu->submenus[selected_item];
@@ -365,6 +365,7 @@
     switch (menu->flags&MENU_TYPE_MASK)
     {
         case MT_SETTING:
+        case MT_SETTING_W_TEXT:
             *icon = bitmap_icons_6x8[Icon_Menu_setting];
             break;
         case MT_MENU:
@@ -438,12 +439,14 @@
                     struct gui_synclist *lists)
 {
     int id = -1;
+    int type;
     if (global_settings.talk_menu)
     {
         int sel = get_menu_selection(gui_synclist_get_sel_pos(lists),menu);
         if ((menu->flags&MENU_TYPE_MASK) == MT_MENU)
         {
-            if ((menu->submenus[sel]->flags&MENU_TYPE_MASK) == MT_SETTING)
+            type = menu->submenus[sel]->flags&MENU_TYPE_MASK;
+            if ((type == MT_SETTING) || (type == MT_SETTING_W_TEXT))
                 talk_setting(menu->submenus[sel]->variable);
             else 
             {
@@ -463,8 +466,14 @@
                                                temp->variable,
                                                &setting_id);
     bool ret_val = false;
+    unsigned char *title;
     if (setting)
     {
+        if ((temp->flags&MENU_TYPE_MASK) == MT_SETTING_W_TEXT)
+            title = temp->callback_and_desc->desc;
+        else
+            title = ID2P(setting->lang_id);
+
         if ((setting->flags&F_BOOL_SETTING) == F_BOOL_SETTING)
         {
             bool temp_var, *var;
@@ -478,7 +487,7 @@
             {
                 var = (bool*)setting->setting;
             }
-            set_bool_options(str(setting->lang_id),var,
+            set_bool_options(P2STR(title), var,
                         STR(setting->bool_setting->lang_yes),
                         STR(setting->bool_setting->lang_no),
                         setting->bool_setting->option_callback);
@@ -489,7 +498,7 @@
         }
         else if (setting->flags&F_T_SOUND)
         {
-            set_sound(str(setting->lang_id), setting->setting,
+            set_sound(P2STR(title), setting->setting,
                         setting->sound_setting->setting);
         }
         else /* other setting, must be an INT type */
@@ -519,8 +528,7 @@
                     min = setting->int_setting->min;
                     step = setting->int_setting->step;
                 }
-                set_int_ex(str(setting->lang_id),
-                        NULL,
+                set_int_ex(P2STR(title), NULL,
                         setting->int_setting->unit,var,
                         setting->int_setting->option_callback,
                         step, min, max,
@@ -561,7 +569,7 @@
                         j++;
                     }
                 }
-                set_option(str(setting->lang_id), var, INT,
+                set_option(P2STR(title), var, INT,
                             options,j,
                             setting->
                                choice_setting->option_callback);
@@ -721,6 +729,7 @@
                                     temp->func_with_param->param);
                     break;
                 case MT_SETTING:
+                case MT_SETTING_W_TEXT:
                 {
                     if (do_setting_from_menu(temp))
                         init_menu_lists(menu, &lists, 0, true);
diff --git a/apps/menu.h b/apps/menu.h
index f5bc2dd..fa5d7e5 100644
--- a/apps/menu.h
+++ b/apps/menu.h
@@ -60,6 +60,9 @@
 enum menu_item_type {
     MT_MENU = 0,
     MT_SETTING,
+    MT_SETTING_W_TEXT, /* same as setting, but uses different
+                          text for the setting title,
+                          ID2P() or "literal" for the str param */
     MT_FUNCTION_CALL, /* used when the standard code wont work */
     MT_FUNCTION_WITH_PARAM,
     MT_RETURN_ID, /* returns the position of the selected item (starting at 0)*/
@@ -134,6 +137,14 @@
     static const struct menu_item_ex name =                  \
         {MT_SETTING, {.variable = (void*)var},{callback}};
 
+/*  Use this for settings which have a differnt title in their
+    setting screen than in the menu (e.g scroll options */
+#define MENUITEM_SETTING_W_TEXT(name, var, str, callback )              \
+    static const struct menu_callback_with_desc name##__ = {callback,str, Icon_NOICON};\
+    static const struct menu_item_ex name =                             \
+        {MT_SETTING_W_TEXT|MENU_HAS_DESC, {.variable = (void*)var },     \
+            {.callback_and_desc = & name##__}};
+
 /*  Use this To create a list of NON-XLATABLE (for the time being) Strings
     When the user enters this list and selects one, the menu will exits
     and its return value will be the index of the chosen item */
diff --git a/apps/menus/display_menu.c b/apps/menus/display_menu.c
index 26eac23..1cd6f0e 100644
--- a/apps/menus/display_menu.c
+++ b/apps/menus/display_menu.c
@@ -279,16 +279,20 @@
 
 /***********************************/
 /*    SCROLL MENU                  */
-MENUITEM_SETTING(scroll_speed, &global_settings.scroll_speed, NULL);
+MENUITEM_SETTING_W_TEXT(scroll_speed, &global_settings.scroll_speed,
+                         ID2P(LANG_SCROLL), NULL);
 MENUITEM_SETTING(scroll_delay, &global_settings.scroll_delay, NULL);
 #ifdef HAVE_LCD_BITMAP
-MENUITEM_SETTING(scroll_step, &global_settings.scroll_step, NULL);
+MENUITEM_SETTING_W_TEXT(scroll_step, &global_settings.scroll_step,
+                        ID2P(LANG_SCROLL_STEP_EXAMPLE), NULL);
 #endif
 MENUITEM_SETTING(bidir_limit, &global_settings.bidir_limit, NULL);
 #ifdef HAVE_REMOTE_LCD
-MENUITEM_SETTING(remote_scroll_speed, &global_settings.remote_scroll_speed, NULL);
+MENUITEM_SETTING_W_TEXT(remote_scroll_speed, &global_settings.remote_scroll_speed,
+                         ID2P(LANG_SCROLL), NULL);
 MENUITEM_SETTING(remote_scroll_delay, &global_settings.remote_scroll_delay, NULL);
-MENUITEM_SETTING(remote_scroll_step, &global_settings.remote_scroll_step, NULL);
+MENUITEM_SETTING_W_TEXT(remote_scroll_step, &global_settings.remote_scroll_step,
+                        ID2P(LANG_SCROLL_STEP_EXAMPLE), NULL);
 MENUITEM_SETTING(remote_bidir_limit, &global_settings.remote_bidir_limit, NULL);
 MAKE_MENU(remote_scroll_sets, ID2P(LANG_REMOTE_SCROLL_SETS), 0, Icon_NOICON,
           &remote_scroll_speed, &remote_scroll_delay,
