diff --git a/images/assets/11_sprites.png b/images/assets/11_sprites.png
index d1ba08e..3a39a64 100644
Binary files a/images/assets/11_sprites.png and b/images/assets/11_sprites.png differ
diff --git a/main.py b/main.py
index fdf59c1..4ac977b 100644
--- a/main.py
+++ b/main.py
@@ -616,23 +616,6 @@ def play_sound():
     sound.set_volume(volume)
     pygame.mixer.Sound.play(sound)
 
-def render_settings():
-    size_to_y = {"small": 15, "medium": 25, "big": 55}
-    y = size_to_y[settings_data["size"]]
-
-    for setting in enumerate(settings_data):
-        render_text(setting[1], (size[1]-20, y), screen)
-        setting_rect = pygame.Rect(size[0], y, size[2], size[3])
-        setting_hover = setting_rect.collidepoint(pygame.mouse.get_pos())
-
-        if setting_hover and pygame.mouse.get_pressed()[0]:
-            setting_name = setting
-            if setting_name != setting:
-                setting_name = None
-
-            return setting
-
-        y += cons[0]
 
 def set_hue():
     global hue_value
@@ -855,6 +838,13 @@ def data_check(current_mode):
 
     return background_image, current_buttons
 
+scroll_offset = 0
+space_between_settings = 5
+settings_x_position = size[1] - 18
+settings_y_offset = 5
+total_settings_height = len(settings_data) * (cons[0] + space_between_settings)
+max_scroll_offset = max(0, total_settings_height - non_movable_area.height)
+
 # Game state
 run = True
 current_mode = "menu"
@@ -963,6 +953,14 @@ while run:
             clicked_piece = False
             can_move = False
 
+        elif event.type == pygame.MOUSEBUTTONDOWN and current_mode == "settings":
+            if event.button == 4:
+                scroll_offset -= 20
+                scroll_offset = max(0, scroll_offset)
+            elif event.button == 5:
+                scroll_offset += 20
+                scroll_offset = min(scroll_offset, max_scroll_offset)
+
     if current_mode == "game":
         if timer_running:
             current_time = pygame.time.get_ticks() - timer_start_time
@@ -1052,7 +1050,14 @@ while run:
                 pygame.time.delay(16)
     
     if current_mode == "settings":
-        render_settings()
+        clipped_rect = pygame.Rect(settings_x_position, non_movable_area.y, size[2], non_movable_area.height)
+        screen.set_clip(clipped_rect)
+
+        for index, setting_name in enumerate(settings_data):
+            y = size[1] - scroll_offset + index * (cons[0] + space_between_settings)
+            render_text(setting_name, (settings_x_position, y - settings_y_offset), screen)
+
+        screen.set_clip(None)
 
     pygame.display.flip()
 
diff --git a/main_data.json b/main_data.json
index 5011883..9a6adb6 100644
--- a/main_data.json
+++ b/main_data.json
@@ -5,10 +5,10 @@
             0,
             0,
             0,
-            194,
-            "00:00:09",
-            "00:00:09",
-            13
+            1094,
+            "00:00:11",
+            "00:00:11",
+            16
          ],
          "2.png": [
             0,
diff --git a/main_puzzle.json b/main_puzzle.json
index 2e72898..3c04bfb 100644
--- a/main_puzzle.json
+++ b/main_puzzle.json
@@ -1 +1 @@
-{"puzzle 4x4": [[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12], [13, 14, 15, 0]], "puzzle 3x3": [[1, 2, 3], [4, 5, 6], [7, 8, 0]], "current 4x4": {"matrix": [[0, 4, 9, 7], [13, 1, 8, 3], [2, 12, 5, 11], [15, 14, 6, 10]], "selected_image": "images/albums/Original images/1.png"}, "current 3x3": {"matrix": [[3, 6, 7], [5, 4, 1], [0, 8, 2]], "selected_image": "/images/albums/Birds/1.png"}}
\ No newline at end of file
+{"puzzle 4x4": [[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12], [13, 14, 15, 0]], "puzzle 3x3": [[1, 2, 3], [4, 5, 6], [7, 8, 0]], "current 4x4": {"matrix": [[4, 9, 7, 0], [13, 1, 8, 3], [2, 12, 5, 11], [15, 14, 6, 10]], "selected_image": "images/albums/Original images/1.png"}, "current 3x3": {"matrix": [[3, 6, 7], [5, 4, 1], [0, 8, 2]], "selected_image": "/images/albums/Birds/1.png"}}
\ No newline at end of file