diff --git a/tetrarcade.py b/tetrarcade.py
index 77bcca2..48d3bf3 100644
--- a/tetrarcade.py
+++ b/tetrarcade.py
@@ -23,8 +23,6 @@ WINDOW_HEIGHT = 600
 WINDOW_TITLE = "TETRARCADE"
 
 # Delays (seconds)
-AUTOREPEAT_DELAY = 0.220    # Official : 0.300
-AUTOREPEAT_INTERVAL = 0.010 # Official : 0.010
 HIGHLIGHT_TEXT_DISPLAY_DELAY = 1
 
 # Text
@@ -166,10 +164,8 @@ class TetrArcade(Tetris, arcade.Window):
                 arcade.key.ENTER:     self.new_game
             }
         }
-        self.autorepeatable_actions = (self.move_left, self.move_right, self.soft_drop)
 
         self.highlight_texts = []
-        self.pressed_actions = []
 
         arcade.Window.__init__(
             self,
@@ -199,8 +195,6 @@ class TetrArcade(Tetris, arcade.Window):
 
     def new_game(self):
         self.highlight_texts = []
-        self.pressed_actions = []
-        self.auto_repeat = False
         super().new_game()
 
     def new_current_piece(self):
@@ -211,23 +205,14 @@ class TetrArcade(Tetris, arcade.Window):
 
     def lock(self):
         super().lock()
-        if self.pressed_actions:
-            self.stop_autorepeat()
-            self.scheduler.start(self.repeat_action, AUTOREPEAT_DELAY)
 
     def swap(self):
         super().swap()
         self.reload_held_piece()
         self.reload_current_piece()
 
-    def pause(self):
-        super().pause()
-        self.pressed_actions = []
-        self.stop_autorepeat()
-
     def game_over(self):
         super().game_over()
-        self.scheduler.stop(self.repeat_action)
 
     def on_key_press(self, key, modifiers):
         for key_or_modifier in (key, modifiers):
@@ -236,11 +221,7 @@ class TetrArcade(Tetris, arcade.Window):
             except KeyError:
                 pass
             else:
-                action()
-                if action in self.autorepeatable_actions:
-                    self.stop_autorepeat()
-                    self.pressed_actions.append(action)
-                    self.scheduler.start(self.repeat_action, AUTOREPEAT_DELAY)
+                self.do_action(action)
 
     def on_key_release(self, key, modifiers):
         try:
@@ -248,27 +229,10 @@ class TetrArcade(Tetris, arcade.Window):
         except KeyError:
             pass
         else:
-            if action in self.autorepeatable_actions:
-                try:
-                    self.pressed_actions.remove(action)
-                except ValueError:
-                    pass
-
-    def repeat_action(self):
-        if self.pressed_actions:
-            self.pressed_actions[-1]()
-            if not self.auto_repeat:
-                self.auto_repeat = True
-                self.scheduler.stop(self.repeat_action)
-                self.scheduler.start(self.repeat_action, AUTOREPEAT_INTERVAL)
-        else:
-            self.stop_autorepeat()
-
-    def stop_autorepeat(self):
-        self.auto_repeat = False
-        self.scheduler.stop(self.repeat_action)
+            self.remove_action(action)
 
     def show_text(self, text):
+        self.scheduler.stop(self.del_highlight_text)
         self.highlight_texts.append(text)
         self.scheduler.start(self.del_highlight_text, HIGHLIGHT_TEXT_DISPLAY_DELAY)
 
diff --git a/tetris.py b/tetris.py
index df9135a..f435085 100644
--- a/tetris.py
+++ b/tetris.py
@@ -10,6 +10,8 @@ NB_NEXT_PIECES = 5
 # Delays (seconds)
 LOCK_DELAY = 0.5
 FALL_DELAY = 1
+AUTOREPEAT_DELAY = 0.220    # Official : 0.300
+AUTOREPEAT_PERIOD = 0.010   # Official : 0.010
 
 
 class Coord:
@@ -197,6 +199,8 @@ class Tetris():
         self.current_piece = None
         self.held_piece = None
         self.time = 0
+        self.autorepeatable_actions = (self.move_left, self.move_right, self.soft_drop)
+        self.pressed_actions = []
 
     def new_game(self):
         self.level = 0
@@ -205,6 +209,9 @@ class Tetris():
         self.goal = 0
         self.time = 0
 
+        self.pressed_actions = []
+        self.auto_repeat = False
+
         self.lock_delay = LOCK_DELAY
         self.fall_delay = FALL_DELAY
 
@@ -348,6 +355,9 @@ class Tetris():
 
         self.current_piece.prelocked = False
         self.scheduler.stop(self.lock)
+        if self.pressed_actions:
+            self.stop_autorepeat()
+            self.scheduler.start(self.repeat_action, AUTOREPEAT_DELAY)
 
         if all(
             (mino_position + self.current_piece.position).y >= NB_LINES
@@ -459,14 +469,46 @@ class Tetris():
             self.scheduler.start(self.lock, self.lock_delay)
         self.scheduler.start(self.clock, 1)
 
-    def clock(self, delta_time=1):
-        self.time += delta_time
-
     def game_over(self):
         self.status = Status.OVER
         self.scheduler.stop(self.drop)
         self.scheduler.stop(self.clock)
+        self.scheduler.stop(self.repeat_action)
+
+    def clock(self, delta_time=1):
+        self.time += delta_time
+
+    def do_action(self, action):
+        action()
+        if action in self.autorepeatable_actions:
+            self.stop_autorepeat()
+            self.pressed_actions.append(action)
+            if action == self.drop:
+                self.scheduler.start(self.repeat_action, AUTOREPEAT_PERIOD)
+            else:
+                self.scheduler.start(self.repeat_action, AUTOREPEAT_DELAY)
+
+    def repeat_action(self):
+        if self.pressed_actions:
+            self.pressed_actions[-1]()
+            if not self.auto_repeat:
+                self.auto_repeat = True
+                self.scheduler.stop(self.repeat_action)
+                self.scheduler.start(self.repeat_action, AUTOREPEAT_PERIOD)
+        else:
+            self.stop_autorepeat()
+
+    def remove_action(self, action):
+        if action in self.autorepeatable_actions:
+            try:
+                self.pressed_actions.remove(action)
+            except ValueError:
+                pass
+
+    def stop_autorepeat(self):
+        self.auto_repeat = False
+        self.scheduler.stop(self.repeat_action)
 
     def show_text(self, text):
-        print(text)
+        raise NotImplementedError