Preventing double evaluation, but bugs still persist. The problem is that (apply) blocks evaluation for too long.