New release of moellus is available, version 0.4.1, that you can find at: http://scoopics.com/software/moellus/ Change log (also for unannounced 0.4 from a few days back) is below. Most significant changes are switch to BTree for storage, much improved automatic invalidating of computed attrs, and a usable clone_db utility. Plus, the code is also a little more reader friendly ;) Thanks for the help from everyone. mario 0.4.1 (2005-07-12) - Correct problematic PersistentItem.__cmp__(), that is now domain-stable. - utils.clone_db() now works for databases that contain instances whose keybinding value tuple itself contains other instances of PersistentItem. This support is recursive, so supported depth of this nesting is arbitrary. 0.4 (2005-07-08) - PersistentContainer now stores its items in a BTree instead of PersistentList. This implies that any index declared on the container (e.g. the default one based on the item's keybindings) is also a BTree. - New optional init parameter for PersistentContainer, mimimum_degree, that will determine which node constructor to use for all the BTrees used by the container (primary one for storage of items, and one per index). - Implementation of automatic invalidation of all affected cattrs when a source value or item is modified or added. Note: as a consequence, a new container must be committed before items can be added to it. - Changes to an Item's schema involving addition of new attrs/cattrs are handled automatically, i.e. all items previously persisted are automatically modified (this will however still require a manual commit()). On the other hand, removal of an attr/cattr from an Item's schema is "cleaned" up from previously existing items by simply cloning the db. - New: PersistentContainer._imappings = PersistentDict() for cleaner and more flexible handling of intermediate computed mappings. - New: PersistentItem.__cmp__(), to handle stable comparisons between PersistentItems, required for BTree keys to work properly. - Different property getters, for simple attrs and for enum attrs, to reduce runtime access overhead for the non-enum general case. - Source items taken in consideration by the predefined 'inv/1:1' cattr may originate from across multiple containers. - Added convenience utility: utils.rebuild_indices_db(db)