Further work on general-purpose virtual properties (not quite complete yet)