I've now checked in a revised version which I think represents the consensus we have reached so far. It allows some of the short cuts I want, the 4 attributes which Sebastian wants, and the abstract surface which Conal wants. Needs more testing -- testfacs doesnt do much.