Tool development is an essential part of game development. Teams use graphical editors to create levels, virtual worlds, missions or graphical user interfaces (GUIs) for their games. An editor manipulates objects that typically correspond with C++ objects (i.e. instances of C++ classes). These objects might be things like labels and buttons in a GUI editor or trees, houses and animals in a 3D game level editor. Objects should expose their properties to the editor in a generic way. Ideally, it should be possible to add new properties to an object or add new objects to the game without adding any code to the editor. A good property system can be used for a lot of things beyond editors, for instance: • support undo/redo operations in tools or in the game • serialization, i.e. saving and restoring the state of an object in a generic way • animation of properties, i.e. menus flying into the screen, buttons changing colors etc. All that should be possible without adding any code for a new object or a new property.