Here's my understanding of how Persistent Attribute Providers work: Persistent Internal Attribute Provider DataSkins and Attributes are ultimately stored like this: Rack's BTree | | | Slots: key:value | |-('ZPatterns.Rack','Self') : DataSkin instance ...which has the attribute __dict__ containing its attributes {'id':object_id, 'foo':value for foo, 'bar':value for bar} Persistent External Attribute Provider Rack's BTree | | | Slots: key:value | |-('ZPatterns.Rack','Self') : DataSkin instance | ...which has the attribute __dict__ | containing 'id':object_id |-foo:value for attribute foo |-bar:value for attribute bar The key ('ZPatterns.Rack','Self') is the special SelfKey that racks use to ensure there is a unique place in a slot to put the slot's object. Do I have this right? -- Steve Alexander Software Engineer Cat-Box limited http://www.cat-box.net