brian.r.brinegar.1 wrote: things created with the first constructor must be removed and recreated if 'horse' is to be added. Is there a way to go through and update old instances of a product to a newer version? Or should backwards compatibility be designed into the product? Generally Zope uses pickle to save the objects. And pickel will not save the methods, nor the class attributes:: class Person: meta_type = 'person' def __init__(self): self.name = 'Max Rasmussen' def hello(self, text): print 'hello %s' % text In this class '__init__()', 'hello()' and 'meta_type' will be automatically updated whenever you update you class, as they are shared globally. But the 'self.name' attribute is part if the object instance, not the class. So it will be saved in the ZODB. If you then want to change you object so that it has firstName and lastName attributes you must do it manually. Write an external script that walks through the objects one by one and then changes the attributes:: def updatePersons(self): # the ZopeFind() methods finds all of the objects with a given metatype # or other attributes. # It is defined in <zopesite>\lib\python\OFS\FindSupport.py persons = self.ZopeFind(self, obj_metatypes=['person'], search_sub=1) for person in persons: person.firstName = '' person.lastName = '' del(person.name) def updatePersons(self): # Or if you want to use the name value to create first and last name from from string import rfind persons = self.ZopeFind(self, obj_metatypes=['person'], search_sub=1) for person in persons: lastSpace = rfind(person.name, ' ') fName, lName = person.name[:lastSpace], person.name[lastSpace+1:] person.firstName = fName person.lastName = lName del(person.name) So as you can see, it is really hard to make a standard way of updating a product. But it is actually not hard to write a method to do it for you. But one thing that I wonder about is how do the rest of you make shure that you old products are updated? Shouldn't there be some kind of hook in Zope that calls an update method if it was present, and the version has changed? regards Max M