             pool.remove(@word)
             if @word.full == inventory.name?.full
                 @score += inventory.scoring()
+                @lvl = Math.floor(Math.log(Math.max(Math.E, @score)))
                 inventory.clear()
             else if not @pair?
                 inventory.add(@word)
             else
                 inventory.remove(@word)
             pool.autofill()
-            # TODO wise leveling ;)
-            @lvl += 1
             @word = null
             @pair = null
 
     show: ->
-        'lives: ' + ('♥' for [0...@lives]).join(' ')
+        'lives: ' + ('♥' for [0...Math.max(@lives, 0)]).join(' ')
 
 
 class WordKeeper

            word.move()

    attack: ->
        @words.some (word) -> word.left <= 0

    clean: ->
        @words = @words.filter (word) -> word.left > 0

        $('#keep').html(inventory.show()).css_center(stage_width)
        $('#fps').html(fps.show()).css_center(stage_width)
        $('#playground').html(word.repr for word in pool.words)
        if (damage = pool.attack())
            player.lives -= damage
            pool.clean()
            pool.autofill()
        $('#lives').html(player.show())
        if player.lives <= 0
            @stop()
            @reset()
            $('#playground').css('background-color', 'darkred')
