better mark-and-expand