added per-row lock