Hi Russell,
> I'd not heard that row buffering was done in a kludgey way.
Not "kludgey". ;-) Row buffering is implemented on top of table buffering. If you enable buffering, VFP uses table buffering for all four modes. With row buffering VFP uses additional code to commit changes when you move the record pointer. In addition, some functions such as GETNEXTMODIFIED() and commands like INDEX ON check this flag.
Because row buffering happens in addition to table buffering code, you have the various strange effects such as record getting updated even if you don't move the record pointer, or row-buffered tables with multiple uncommitted records.
--
Christof