 
       drop_blocks: ->
         return unless @info.in_progress
+        return if @info.removing
+        last_row_x = @info.rows - 1
         for block in @blocks
           continue unless block
           continue if block.sliding
-          active_or_not_locked = block.active || !block.locked
-          if block.x == @info.rows - 1 && active_or_not_locked
-            block.locked = true
-            block.active = false
-            @on_block_land block
-          if @is_block_directly_below(block.x, block.y) && active_or_not_locked
-            block.locked = true
-            block.active = false
-            @on_block_land block
+          if block.active || !block.locked
+            if block.x == last_row_x
+              block.locked = true
+              block.active = false
+              @on_block_land block
+            if @is_block_directly_below(block.x, block.y)
+              block.locked = true
+              block.active = false
+              @on_block_land block
           continue if block.locked
           block.x++
 


      check_for_tetrominos: ->
        return unless @info.in_progress
        return if @info.checking
        @info.checking = true
        for block in @blocks
          continue unless block && block.locked && !block.active


      # Animate dropping the given block to the given x coordinate.
      plummet_block: (block, x, on_land_callback) ->
        return if block.x == x
        drop_single_block_interval = undefined
        drop_single_block = =>
          block.plummetting = true
