split into strict/lazy