Even though all SimulationVector classes are almost identical in functionality, we found that it was very usefull to develop a separate subclasses for each possible use of a SimulationVector. Doing so made the code much easier to read, and greatly reduced the risk that a developer might accidentally mix up objects (e.g. by manipulating a query that he mistakenly believes is an answer).