The pure Python version doesn't seem too bad. def transact(call): if not callable(call): raise TypeError doc.BeginTransaction() try: try: call() except: # an error occurred part way through. make sure everything # is reverted (sort of a rollback) doc.AbortTransaction() finally: doc.EndTransaction() def something(): pass transact(something) --- Patrick K. O'Brien Orbtech