                     // Go to object
                     i = 0;
                     do {
+                        while (isOtherVillagerGoingTo(home, home.objectFounds[i].pos))
+                        {
+                            i++;
+                        }
+                        if (i >= home.objectFounds.length - 1) break;
                         var path:Vector.<IntPoint> = mapModel.getPath(villager.position, home.objectFounds[i].pos);
                         i++;
                     } while (path == null && i < home.objectFounds.length)

                if (villager.destination)
                {
                    var destPoint:IntPoint = villager.destination.path[0];
                    var objectType:int = mapModel.map[destPoint.y][destPoint.x].objectType;
                    if (objectType == CMapNodeType.OBJECT_NULL || objectType == CMapNodeType.OBJECT_HOME)
                    {
                        villager.destination = null;
                    }
                    else
                    {
                        newPoint = villager.destination[villager.destination.currentEntry++];
                    }
                }
            }
            
            return newPoint;
        }
    }

}
            
        public function tick(villager:VillagerVO, mapModel:IMapModel, home:HomeVO):IntPoint
        {
            if ( villager.status == CVillagerStatus.IDLE && (villager.destination == null || villager.destination.currentEntry >= villager.destination.path.length - 1) )
            {
                var newPoint:IntPoint;
                
                var objectFounds:Vector.<MapNodeVO> = new Vector.<MapNodeVO>();
                // Ahead there be some code duplication we could avoid!
                // Check sight area
                for (var i:int = 0, count:int = sightOffset.length; i < count; i++)
                {
