                     position[i] = 0
 
             entity.positionHistory.unshift oldPosition
-            entity.positionHistory.pop()
+            oldestPosition = entity.positionHistory.pop()
+
+            # If there is already an entity at the entity's latest position,
+            # we have a collision on our hands
+            target = room.level.world[position[0]][position[1]][position[2]]
+            if target
+                # A collision with an apple entity means we gain a "point",
+                # whereas anything else means we've lost
+                if target.constructor.name == Game.AppleEntity.name
+                    # Replace apple
+                    room.removeEntity target
+                    room.spawnApple()
+
+                    # Increase the size of our player
+                    entity.positionHistory.push oldestPosition
+                    oldestPosition = null
+                else
+                    # @TODO Lose a life here, or lose the game
+                    # Fail movement
+                    moveOk = false
+
+            if moveOk
+                # Place the entity at its newest position
+                room.level.world[position[0]][position[1]][position[2]] = entity
+
+                # Remove the entity from its oldest position if required
+                if oldestPosition
+                    room.level.world[oldestPosition[0]][oldestPosition[1]][oldestPosition[2]] = null
 
         # Generate status update
         status = room.getAsObject()

            difficulty: @difficulty
            level: @level.getAsObject()
            entities: (v.getAsObject() for k, v of @entities)


class Game.Client extends Game.Loggable

    ###


class Game.AppleEntity extends Game.Entity

    ###
    Apple entity.
    ###


class Game.EventManager extends Game.StartStoppable

    ###
