Issues: + All TVTK objects in the MayaVi pipeline can be "used" only when the MayaVi object is "running". This is a pain. Consider for example the case when you create an IsoSurface module. You cannot realistically set any properties at construction time since there is no data. This means you can't specify contours at initialization. If the object would have to support this, then the objects will need to check to see if it is running or not. Two options: 1. Any attribute that only supports things at runtime could cache the setting till later. 2. Create special 'pre_start' and 'post_start' methods that can be used for such things. Either option is problematic. In case 1 there is additional complication for every single attribute and the feedback is never immediate. In case 2, you can't set attrs at initialization -- very unPythonic. + Should the components have a reference to their parent object? This seems handy. Why am I making a fuss about this? I can't think of a problem right now, but my gut feeling says something is wrong with doing this. + Fred had a problem that brought out a particular problem with extensibility of the design. See this message and the next: http://mail.enthought.com/pipermail/enthought-dev/2006-June/001756.html """ Hmm, looking at some of the m2 code I see some design problems with the components. I thought of the following option for you: class FredContour(Contour): ... def _update_ranges(self): ... i = IsoSurface() i.contour = FredContour() [...] script.add_module(i) If this would work, it would be awesome. But it won't because there isn't a handler for i._contour_changed. Besides, Module.components should also be more intelligent. """