diff --git a/TetrArcade.py b/TetrArcade.py
index 3cf8684..366993d 100644
--- a/TetrArcade.py
+++ b/TetrArcade.py
@@ -1,21 +1,21 @@
 # -*- coding: utf-8 -*-
 import sys
-import locale
-import time
-import os
-
-import configparser
-
 try:
     import arcade
 except ImportError as e:
     sys.exit(
-        str(e)
-        + """
+        str(e) + """
 This game require arcade library.
 You can install it with:
 python -m pip install --user arcade"""
     )
+import pyglet
+
+import locale
+import time
+import os
+import itertools
+import configparser
 
 from tetrislogic import TetrisLogic, Color, State, Coord
 
@@ -61,18 +61,19 @@ MINO_SPRITE_SIZE = 21
 
 if getattr(sys, 'frozen', False):
     # The application is frozen
-    DATA_DIR = os.path.dirname(sys.executable)
+    PROGRAM_DIR = os.path.dirname(sys.executable)
 else:
     # The application is not frozen
-    DATA_DIR = os.path.dirname(__file__)
-DATA_DIR = os.path.join(DATA_DIR, "res")
+    PROGRAM_DIR = os.path.dirname(__file__)
+RESOURCES_DIR = os.path.join(PROGRAM_DIR, "resources")
 
 # Sprites
-WINDOW_BG_PATH = os.path.join(DATA_DIR, "bg.jpg")
-MATRIX_BG_PATH = os.path.join(DATA_DIR, "matrix.png")
-HELD_BG_PATH = os.path.join(DATA_DIR, "held.png")
-NEXT_BG_PATH = os.path.join(DATA_DIR, "next.png")
-MINOES_SPRITES_PATH = os.path.join(DATA_DIR, "minoes.png")
+IMAGES_DIR = os.path.join(RESOURCES_DIR, "images")
+WINDOW_BG_PATH = os.path.join(IMAGES_DIR, "bg.jpg")
+MATRIX_BG_PATH = os.path.join(IMAGES_DIR, "matrix.png")
+HELD_BG_PATH = os.path.join(IMAGES_DIR, "held.png")
+NEXT_BG_PATH = os.path.join(IMAGES_DIR, "next.png")
+MINOES_SPRITES_PATH = os.path.join(IMAGES_DIR, "minoes.png")
 Color.PRELOCKED = 7
 MINOES_COLOR_ID = {
     Color.BLUE: 0,
@@ -90,11 +91,12 @@ TEXTURES = arcade.load_textures(
 TEXTURES = {color: TEXTURES[i] for color, i in MINOES_COLOR_ID.items()}
 
 # Music
-MUSIC_PATH = os.path.join(DATA_DIR, "Tetris - Song A.mp3")
+MUSIC_DIR = os.path.join(RESOURCES_DIR, "musics")
+MUSICS_PATHS = (entry.path for entry in os.scandir(MUSIC_DIR))
 
 # Text
 TEXT_COLOR = arcade.color.BUBBLES
-FONT_NAME = os.path.join(DATA_DIR, "joystix monospace.ttf")
+FONT_NAME = os.path.join(RESOURCES_DIR, "fonts/joystix monospace.ttf")
 STATS_TEXT_MARGIN = 40
 STATS_TEXT_SIZE = 14
 STATS_TEXT_WIDTH = 150
@@ -165,7 +167,11 @@ class MatrixSprites(MinoesSprites):
             for x, mino in enumerate(line):
                 if mino:
                     mino.sprite.refresh(x, y)
-                    self.append(mino.sprite)
+
+    def remove_line(self, y):
+        for mino in self.matrix[y]:
+            if mino:
+                self.remove(mino.sprite)
 
 
 class TetrArcade(TetrisLogic, arcade.Window):
@@ -219,9 +225,14 @@ class TetrArcade(TetrisLogic, arcade.Window):
         self.next.bg.alpha = BAR_ALPHA
         self.matrix.sprites = MatrixSprites(self.matrix)
         self.on_resize(self.init_width, self.init_height)
+
         if self.play_music:
-            self.music = arcade.Sound(MUSIC_PATH)
-            self.music_player = None
+            self.music = pyglet.media.Player()
+            playlist = itertools.cycle(
+                pyglet.media.load(path)
+                for path in MUSICS_PATHS
+            )
+            self.music.queue(playlist)
 
     def new_conf(self):
         self.conf["WINDOW"] = {"width": WINDOW_WIDTH, "height": WINDOW_HEIGHT, "fullscreen": False}
@@ -308,13 +319,10 @@ AGAIN""".format(
     def new_game(self):
         self.highlight_texts = []
         super().new_game()
+        self.matrix.sprites = MatrixSprites(self.matrix)
         if self.play_music:
-            if self.music_player:
-                self.music_player.seek(0)
-                self.music_player.play()
-            else:
-                self.music_player = self.music.player.play()
-                self.music_player.loop = True
+            self.music.seek(0)
+            self.music.play()
 
     def new_tetromino(self):
         tetromino = super().new_tetromino()
@@ -322,7 +330,6 @@ AGAIN""".format(
         return tetromino
 
     def new_matrix_piece(self):
-        self.matrix.sprites = MatrixSprites(self.matrix)
         super().new_matrix_piece()
         self.matrix.ghost.sprites = TetrominoSprites(self.matrix.ghost, self, GHOST_ALPHA)
         for tetromino in [self.matrix.piece, self.matrix.ghost] + self.next.pieces:
@@ -353,21 +360,31 @@ AGAIN""".format(
         self.matrix.piece.prelocked = False
         self.matrix.piece.sprites.refresh()
         super().lock()
+        self.matrix.sprites.refresh()
+
+    def enter_the_matrix(self):
+        super().enter_the_matrix()
+        for mino in self.matrix.piece:
+            self.matrix.sprites.append(mino.sprite)
+
+    def remove_line(self, y):
+        self.matrix.sprites.remove_line(y)
+        super().remove_line(y)
 
     def pause(self):
         super().pause()
         if self.play_music:
-            self.music_player.pause()
+            self.music.pause()
 
     def resume(self):
         super().resume()
         if self.play_music:
-            self.music_player.play()
+            self.music.play()
 
     def game_over(self):
         super().game_over()
         if self.play_music:
-            self.music_player.pause()
+            self.music.pause()
 
     def on_key_press(self, key, modifiers):
         for key_or_modifier in (key, modifiers):
@@ -552,7 +569,7 @@ High score could not be saved:
     def on_close(self):
         self.save_high_score()
         if self.play_music:
-            self.music_player.pause()
+            self.music.pause()
         super().on_close()
 
 
diff --git a/res/joystix monospace.ttf b/resources/fonts/joystix monospace.ttf
similarity index 100%
rename from res/joystix monospace.ttf
rename to resources/fonts/joystix monospace.ttf
diff --git a/res/bg.jpg b/resources/images/bg.jpg
similarity index 100%
rename from res/bg.jpg
rename to resources/images/bg.jpg
diff --git a/res/held.png b/resources/images/held.png
similarity index 100%
rename from res/held.png
rename to resources/images/held.png
diff --git a/res/matrix.png b/resources/images/matrix.png
similarity index 100%
rename from res/matrix.png
rename to resources/images/matrix.png
diff --git a/res/minoes.png b/resources/images/minoes.png
similarity index 100%
rename from res/minoes.png
rename to resources/images/minoes.png
diff --git a/res/next.png b/resources/images/next.png
similarity index 100%
rename from res/next.png
rename to resources/images/next.png
diff --git a/res/Tetris - Song A.mp3 b/resources/musics/1-Song A.mp3
similarity index 100%
rename from res/Tetris - Song A.mp3
rename to resources/musics/1-Song A.mp3
diff --git a/resources/musics/2-!!!.mp3 b/resources/musics/2-!!!.mp3
new file mode 100644
index 0000000..4b13be3
Binary files /dev/null and b/resources/musics/2-!!!.mp3 differ
diff --git a/resources/musics/3-Boogie!.mp3 b/resources/musics/3-Boogie!.mp3
new file mode 100644
index 0000000..dd00dbf
Binary files /dev/null and b/resources/musics/3-Boogie!.mp3 differ
diff --git a/resources/musics/4-Riff Blues.mp3 b/resources/musics/4-Riff Blues.mp3
new file mode 100644
index 0000000..2d9519a
Binary files /dev/null and b/resources/musics/4-Riff Blues.mp3 differ
diff --git a/setup.py b/setup.py
index 1d903c0..d0852df 100644
--- a/setup.py
+++ b/setup.py
@@ -35,7 +35,7 @@ options = {
 }
 setup(
     name = "TetrArcade",
-    version = "0.2",
+    version = "0.3",
     description = "Tetris clone",
     author = "AdrienMalin",
     executables = [executable],
diff --git a/test.py b/test.py
index 40d1eb1..f2eac16 100644
--- a/test.py
+++ b/test.py
@@ -11,6 +11,7 @@ game.rotate_clockwise()
 game.rotate_counter()
 for i in range(12):
     game.soft_drop()
+game.matrix.sprites.refresh()
 game.on_draw()
 while game.state != State.OVER:
     game.hard_drop()
diff --git a/tetrislogic/tetrislogic.py b/tetrislogic/tetrislogic.py
index 75e88a1..476a2df 100644
--- a/tetrislogic/tetrislogic.py
+++ b/tetrislogic/tetrislogic.py
@@ -255,18 +255,14 @@ class TetrisLogic:
         else:
             t_spin = T_Spin.NONE
 
-        for mino in self.matrix.piece:
-            coord = mino.coord + self.matrix.piece.coord
-            del mino.coord
-            if coord.y <= self.NB_LINES + 3:
-                self.matrix[coord.y][coord.x] = mino
+        self.enter_the_matrix()
 
         # Clear complete lines
         nb_lines_cleared = 0
         for y, line in reversed(list(enumerate(self.matrix))):
             if all(mino for mino in line):
                 nb_lines_cleared += 1
-                self.matrix.pop(y)
+                self.remove_line(y)
                 self.append_new_line_to_matrix()
         if nb_lines_cleared:
             self.nb_lines_cleared += nb_lines_cleared
@@ -303,6 +299,15 @@ class TetrisLogic:
         else:
             self.new_matrix_piece()
 
+    def enter_the_matrix(self):
+        for mino in self.matrix.piece:
+            coord = mino.coord + self.matrix.piece.coord
+            if coord.y <= self.NB_LINES + 3:
+                self.matrix[coord.y][coord.x] = mino
+
+    def remove_line(self, y):
+        self.matrix.pop(y)
+
     def can_move(self, potential_coord, minoes_coords):
         return all(self.matrix.cell_is_free(potential_coord + mino_coord) for mino_coord in minoes_coords)