From discussions with Karin :-) concerning IO:
- It is probably worthwhile to have a name for each particle which uniquely identifies the particle. The ID doesn't really serve this purpose as adding a particle changes the ids of particles which are added later. My proposed mechanism would look something like like adding get and set name methods to particles (and perhaps an argument to the constructor). When a particle is added to a model, if there is a name conflict then an exception would be thrown (or we could append something to the name to make it unique). If no name was specified before the particle is added to the Model, a unique name would be generated ("particle 3").
These names mean that logging and XML-based IO could use something nicer and more stable to identify particles. And logging could print names instead of particle ids since the names are always non-empty and meaningful.