diff --git a/tetrarcade.py b/tetrarcade.py
index 61e29f0..a2700f4 100644
--- a/tetrarcade.py
+++ b/tetrarcade.py
@@ -13,7 +13,7 @@ You can install it with:
 python -m pip install --user arcade"""
     )
 
-from tetrislogic import TetrisLogic, State, NB_LINES
+from tetrislogic import TetrisLogic, State
 
 
 # Constants
@@ -27,8 +27,8 @@ HIGHLIGHT_TEXT_DISPLAY_DELAY = 0.7
 
 # Transparency (0=invisible, 255=opaque)
 NORMAL_ALPHA = 200
-PRELOCKED_ALPHA = 127
-GHOST_ALPHA = 50
+PRELOCKED_ALPHA = 100
+GHOST_ALPHA = 30
 MATRIX_SPRITE_ALPHA = 100
 
 # Paths
@@ -183,57 +183,50 @@ class TetrArcade(TetrisLogic, arcade.Window):
     def load_next(self):
         super().load_next()
         for tetromino in self.next:
-            self.load_minoes_sprite(tetromino)
+            self.load_minoes(tetromino)
 
     def new_current(self):
         super().new_current()
-        self.update_sprites_position(self.current)
-        self.load_minoes_sprite(self.next[-1])
-        self.load_minoes_sprite(self.ghost, GHOST_ALPHA)
+        self.update_tetromino(self.current)
+        self.load_minoes(self.next[-1])
+        self.load_minoes(self.ghost, GHOST_ALPHA)
         for tetromino in [self.current, self.ghost] + self.next:
-            self.update_sprites_position(tetromino)
-            self.reload_all_tetrominoes_sprites()
+            self.update_tetromino(tetromino)
+            self.reload_all_tetrominoes()
 
-    def move(self, movement, prelock=False):
-        if super().move(movement, prelock):
+    def move(self, movement, prelock=True):
+        moved = super().move(movement, prelock)
+        if moved or self.current.prelocked:
             for tetromino in (self.current, self.ghost):
-                self.update_sprites_position(tetromino)
-            return True
-        else:
-            return False
+                self.update_tetromino(tetromino)
+        return moved
 
     def rotate(self, rotation):
         if super().rotate(rotation):
             for tetromino in (self.current, self.ghost):
-                self.update_sprites_position(tetromino)
+                self.update_tetromino(tetromino)
             return True
         else:
             return False
 
     def swap(self):
         super().swap()
-        self.load_minoes_sprite(self.ghost, GHOST_ALPHA)
+        self.load_minoes(self.ghost, GHOST_ALPHA)
         for tetromino in [self.held, self.current, self.ghost]:
             if tetromino:
-                self.update_sprites_position(tetromino)
-        self.reload_all_tetrominoes_sprites()
+                self.update_tetromino(tetromino)
+        self.reload_all_tetrominoes()
 
     def lock(self):
-        self.update_sprites_position(self.current)
+        self.update_tetromino(self.current)
         super().lock()
         self.matrix.minoes_sprites = arcade.SpriteList()
-        for line in self.matrix:
-            for mino in line:
+        for y, line in enumerate(self.matrix):
+            for x, mino in enumerate(line):
                 if mino:
+                    self.update_mino(mino, x, y, NORMAL_ALPHA)
                     self.matrix.minoes_sprites.append(mino.sprite)
 
-    def remove_line_of_matrix(self, line):
-        super().remove_line_of_matrix(line)
-        for line in self.matrix[line:NB_LINES+2]:
-            for mino in line:
-                if mino:
-                    mino.sprite.center_y -= mino.sprite.height-1
-
     def game_over(self):
         super().game_over()
 
@@ -322,21 +315,21 @@ class TetrArcade(TetrisLogic, arcade.Window):
                 anchor_y = 'center'
             )
 
-    def load_minoes_sprite(self, tetromino, alpha=NORMAL_ALPHA):
+    def load_minoes(self, tetromino, alpha=NORMAL_ALPHA):
         path = MINOES_SPRITES_PATHS[tetromino.MINOES_COLOR]
         tetromino.alpha = alpha
         for mino in tetromino:
             mino.sprite = arcade.Sprite(path)
             mino.sprite.alpha = alpha
 
-    def reload_all_tetrominoes_sprites(self):
+    def reload_all_tetrominoes(self):
         self.tetrominoes_sprites = arcade.SpriteList()
         for tetromino in [self.held, self.current, self.ghost] + self.next:
             if tetromino:
                 for mino in tetromino:
                     self.tetrominoes_sprites.append(mino.sprite)
 
-    def update_sprites_position(self, tetromino):
+    def update_tetromino(self, tetromino):
         alpha = (
             PRELOCKED_ALPHA
             if tetromino.prelocked
@@ -344,9 +337,12 @@ class TetrArcade(TetrisLogic, arcade.Window):
         )
         for mino in tetromino:
             coord = mino.coord + tetromino.coord
-            mino.sprite.left = self.matrix.sprite.left + coord.x*(mino.sprite.width-1)
-            mino.sprite.bottom = self.matrix.sprite.bottom + coord.y*(mino.sprite.height-1)
-            mino.sprite.alpha = alpha
+            self.update_mino(mino, coord.x, coord.y, alpha)
+
+    def update_mino(self, mino, x, y, alpha):
+        mino.sprite.left = self.matrix.sprite.left + x*(mino.sprite.width-1)
+        mino.sprite.bottom = self.matrix.sprite.bottom + y*(mino.sprite.height-1)
+        mino.sprite.alpha = alpha
 
     def load_high_score(self):
         try:
diff --git a/tetrislogic/tetrislogic.py b/tetrislogic/tetrislogic.py
index 7244bd3..b8e5c32 100644
--- a/tetrislogic/tetrislogic.py
+++ b/tetrislogic/tetrislogic.py
@@ -258,7 +258,7 @@ class TetrisLogic():
         for y, line in reversed(list(enumerate(self.matrix))):
             if all(mino for mino in line):
                 nb_lines_cleared += 1
-                self.remove_line_of_matrix(y)
+                self.matrix.pop(y)
                 self.append_new_line_to_matrix()
         if nb_lines_cleared:
             self.nb_lines_cleared += nb_lines_cleared
@@ -295,9 +295,6 @@ class TetrisLogic():
         else:
             self.new_current()
 
-    def remove_line_of_matrix(self, line):
-        self.matrix.pop(line)
-
     def can_move(self, potential_coord, minoes_coords):
         return all(
             self.matrix.cell_is_free(potential_coord+mino_coord)