     $scope.blocks = Tetromino.blocks
     $scope.upcoming = []
     $scope.game_info = Tetromino.info
-    game_interval = null
+    game_interval = undefined
     colors = ['magenta', 'yellow', 'blue', 'green', 'white', 'orange']
 
     get_color = ->
       colors[Math.floor(Math.random() * colors.length)]
 
+    cancel_game_interval = ->
+      if angular.isDefined(game_interval)
+        $interval.cancel game_interval
+        game_interval = undefined
+
     game_over = ->
       $scope.game_info.in_progress = false
       $scope.game_info.game_over = true
-      $interval.cancel game_interval
+      cancel_game_interval()
 
     queue_block = ->
       $scope.upcoming[1] = new Block

      block.locked = true
      block.active = false
      Tetromino.on_block_land block
      $interval.cancel game_interval
      drop_queued_block()
      game_interval = $interval(game_loop, $scope.game_info.tick_length)

    $scope.$watch 'game_info.level', ->
      if $scope.game_info.level > 1
        $scope.game_info.tick_length -=
            $scope.game_info.tick_length *
            $scope.game_info.tick_length_decrement_pct
        $interval.cancel game_interval
      game_interval = $interval(game_loop, $scope.game_info.tick_length)

    $scope.new_game = ->
      $window.location.reload();

      Tetromino.drop_blocks()
      drop_queued_block_if_no_active()

    start_game_interval = ->
      return if angular.isDefined(game_interval)
      game_interval = $interval(game_loop, $scope.game_info.tick_length)

    $scope.upcoming.push new Block
      color: get_color()
    $scope.upcoming.push new Block
