diff --git a/apps/recorder/recording.c b/apps/recorder/recording.c
index 9adb3c1..ea17106 100644
--- a/apps/recorder/recording.c
+++ b/apps/recorder/recording.c
@@ -309,12 +309,30 @@ static void set_gain(void)
 #ifdef HAVE_MIC_REC
     if(global_settings.rec_source == AUDIO_SRC_MIC)
     {
+        if (global_settings.rec_mic_gain > sound_max(SOUND_MIC_GAIN))
+            global_settings.rec_mic_gain = sound_max(SOUND_MIC_GAIN);
+        
+        if (global_settings.rec_mic_gain < sound_min(SOUND_MIC_GAIN))
+            global_settings.rec_mic_gain = sound_min(SOUND_MIC_GAIN);
+
         audio_set_recording_gain(global_settings.rec_mic_gain,
                                  0, AUDIO_GAIN_MIC);
     }
     else
 #endif /* MIC */
     {
+        if (global_settings.rec_left_gain > sound_max(SOUND_LEFT_GAIN))
+            global_settings.rec_left_gain = sound_max(SOUND_LEFT_GAIN);
+
+        if (global_settings.rec_left_gain < sound_min(SOUND_LEFT_GAIN))
+            global_settings.rec_left_gain = sound_min(SOUND_LEFT_GAIN);
+
+        if (global_settings.rec_right_gain > sound_max(SOUND_RIGHT_GAIN))
+            global_settings.rec_right_gain = sound_max(SOUND_RIGHT_GAIN);
+
+        if (global_settings.rec_right_gain < sound_min(SOUND_RIGHT_GAIN))
+            global_settings.rec_right_gain = sound_min(SOUND_RIGHT_GAIN);
+      
         /* AUDIO_SRC_LINEIN, AUDIO_SRC_FMRADIO, AUDIO_SRC_SPDIF */
         audio_set_recording_gain(global_settings.rec_left_gain,
                                  global_settings.rec_right_gain,
@@ -1402,37 +1420,34 @@ bool recording_screen(bool no_source)
                 switch (listid_to_enum[gui_synclist_get_sel_pos(&lists)])
                 {
                     case ITEM_VOLUME:
-                        global_settings.volume++;
+                        global_settings.volume += sound_steps(SOUND_VOLUME);
                         setvol();
                         break;
                     case ITEM_GAIN:
 #ifdef HAVE_MIC_REC
                         if(global_settings.rec_source == AUDIO_SRC_MIC)
                         {
-                            if(global_settings.rec_mic_gain <
-                               sound_max(SOUND_MIC_GAIN))
-                                global_settings.rec_mic_gain++;
+                            global_settings.rec_mic_gain +=
+                                sound_steps(SOUND_MIC_GAIN);
                         }
                         else
 #endif /* MIC */
                         {
-                            if(global_settings.rec_left_gain <
-                               sound_max(SOUND_LEFT_GAIN))
-                                global_settings.rec_left_gain++;
-                            if(global_settings.rec_right_gain <
-                               sound_max(SOUND_RIGHT_GAIN))
-                                global_settings.rec_right_gain++;
+                            global_settings.rec_left_gain +=
+                                sound_steps(SOUND_LEFT_GAIN);
+                            global_settings.rec_right_gain +=
+                                sound_steps(SOUND_RIGHT_GAIN);
                         }
                         break;
                     case ITEM_GAIN_L:
-                        if(global_settings.rec_left_gain <
-                           sound_max(SOUND_LEFT_GAIN))
-                            global_settings.rec_left_gain++;
+                        global_settings.rec_left_gain +=
+                            sound_steps(SOUND_LEFT_GAIN);
+
                         break;
                     case ITEM_GAIN_R:
-                        if(global_settings.rec_right_gain <
-                           sound_max(SOUND_RIGHT_GAIN))
-                            global_settings.rec_right_gain++;
+                        global_settings.rec_right_gain +=
+                            sound_steps(SOUND_RIGHT_GAIN);
+
                         break;
 #ifdef HAVE_AGC
                     case ITEM_AGC_MODE:
@@ -1475,37 +1490,37 @@ bool recording_screen(bool no_source)
                 switch (listid_to_enum[gui_synclist_get_sel_pos(&lists)])
                 {
                     case ITEM_VOLUME:
-                        global_settings.volume--;
+                        global_settings.volume -= sound_steps(SOUND_VOLUME);
+
+                        /* check range and update */
                         setvol();
                         break;
                     case ITEM_GAIN:
 #ifdef HAVE_MIC_REC
                         if(global_settings.rec_source == AUDIO_SRC_MIC)
                         {
-                            if(global_settings.rec_mic_gain >
-                               sound_min(SOUND_MIC_GAIN))
-                                global_settings.rec_mic_gain--;
+                            global_settings.rec_mic_gain -= 
+                                sound_steps(SOUND_MIC_GAIN);
                         }
                         else
 #endif /* MIC */
                         {
-                            if(global_settings.rec_left_gain >
-                               sound_min(SOUND_LEFT_GAIN))
-                                global_settings.rec_left_gain--;
-                            if(global_settings.rec_right_gain >
-                               sound_min(SOUND_RIGHT_GAIN))
-                                global_settings.rec_right_gain--;
+                            global_settings.rec_left_gain -=
+                                sound_steps(SOUND_LEFT_GAIN);
+
+                            global_settings.rec_right_gain -=
+                                sound_steps(SOUND_RIGHT_GAIN);
                         }
                         break;
                     case ITEM_GAIN_L:
-                        if(global_settings.rec_left_gain >
-                           sound_min(SOUND_LEFT_GAIN))
-                            global_settings.rec_left_gain--;
+                        global_settings.rec_left_gain -=
+                            sound_steps(SOUND_LEFT_GAIN);
+
                         break;
                     case ITEM_GAIN_R:
-                        if(global_settings.rec_right_gain >
-                           sound_min(SOUND_RIGHT_GAIN))
-                            global_settings.rec_right_gain--;
+                        global_settings.rec_right_gain -=
+                            sound_steps(SOUND_RIGHT_GAIN);
+
                         break;
 #ifdef HAVE_AGC
                     case ITEM_AGC_MODE:
