The materials now have a variable for a name. It might seem like a small change, but it really is confusing to have a list of three materials and you don't remember which was which. Giving them names is a better way to document them.
It took quite long to implement, as I also was generalizing quite some code out. Instead of copying ~20 lines of code and changing various names and types I now just call a function template. Slowly it really gets easier to create the meta structure behind dialogs. So I now not only create dialogs from a description, I even generate the description by some generalized functions. I wonder if I will need another layer of abstraction, I think I might, if I ever really connect the object to some scripting language it could become necessary. On the other hand it might make more sense to create a new abstraction then.