Index: trunk/packages/invirt-base/python/invirt/common.py
===================================================================
--- trunk/packages/invirt-base/python/invirt/common.py	(revision 2550)
+++ trunk/packages/invirt-base/python/invirt/common.py	(revision 2551)
@@ -13,6 +13,9 @@
     def __init__(self, d = {}, __prefix = None, **kwargs):
         'd is the dictionary or the items-iterable to update my __dict__ with.'
-        self.__dict__.update(d)
-        self.__dict__.update(kwargs)
+        dct = {}
+        dct.update(d)
+        dct.update(kwargs)
+        self.__dict__.update(dct)
+        self.__keys = set(dct)
         self.__prefix = __prefix
     def __getattr__(self, key):
@@ -25,4 +28,7 @@
             raise AttributeError("anonymous struct has no member '%s'"
                                  % (key,))
+    def __iter__(self):
+        for i in self.__keys:
+            yield i
 
 def dicts2struct(x, prefix = None):
@@ -119,4 +125,5 @@
         self.assertEqual(structs.list[0],     dicts['list'][0])
         self.assertEqual(structs.list[1].key, dicts['list'][1]['key'])
+        self.assertEqual(set(structs), set(['atom', 'dict', 'list']))
 
 if __name__ == '__main__':
