The main changes in this release are an improved assumptions mechanism, extra instance manipulation facilities and a new undo facility. Two new primitives, "randomChoice" and "arbitraryChoice", are provided instead of "random" and "any". They work in conjunction with backward chaining keyword "possibleChoice" which defines the possible choices that can be randomly or abitrarily selected. Assumptions are generated for these keywords where necessary, and backtracking is used to try other possibilites if a contradiction arises. These primitives cause extra dependencies to be added to the forward dependency graph - rules using these primitives are dependent upon themselves and other rules with compatible defining terms. Another new primitive, "thereExists", is provided to determine if there are any values of variables such that a clause is true. Primitive "any" could be used for such checks in earlier releases. The backtracking facilities of the assumptions mechanism are vastly improved. In previous releases, the mechanism always backtracked to the previous partition whenever a contradiction was encountered. The new mechanism only backtracks to partitions which can affect the contradiction, and tries to avoid firing other partitions again. The same partition may have multiple "encounters", due to different results of previous encounters, and the same encounter may have multiple "resolutions" of the assumptions generated in it. The new assumptions browser contains a pane showing the partitions in the current rulebase (corresponding to a forward dependency browser, with every partition numbered according to firing order) - thus the browser can be useful even when assumptions are not used. Partitions which may generate assumptions are shown in bold. The current partition is shown in orange and completed partitions are shown in green; this colour scheme is also used in other panes in the browser. The other panes display the rules in each partition, the encounters of each partition, and assumptions and resolutions for each encounter. There is a new browser in this release called the "instance browser", which can be opened from the sector model browser. It displays types that users can create instances of, and shows the instances of those types that have been created. It displays both "persistent" instances which remain when a simulation is restarted and "transient" instances which are generated during a simulation using primitive "generatedInstance". Menu options to add, remove, rename and copy persistent instances are provided. Removing an instance may involve removing clauses and/or rules referring to it - and similarly renaming and copying instances may involve modifying or copying clauses/rules. This browser thus provides general facilities similar to the specific facilities in the sector model browser. Another facility is the "symbol search", which can be used to search databases and rulebases in the model and groups for a specific symbol. It can be used to search for keywords of clauses as well as user-defined instances. Browsers to perform such searches can be opened from the sector model browser and instance browser. A new "undo list" browser, which can be opened from the sector model browser or SDML launcher, is also provided. This replaces the previous less powerful undo facility in the sector model browser. There is a separate undo list associated with each model, plus one with the launcher, to remember changes and allow them to be undone and redone. Most user operations can be undone, but some (in particular running a simulation) cause undo lists to be reset. New "mappedList" and "applied" primitives have been added to repeatedly evaluate "functions" (defined using backward chaining rules) on elements of lists. Error handling is improved to differentiate between "Smalltalk errors" which are probably due to a bug in SDML and "SDML errors" which are generated when SDML discovers that the user is doing something wrong. The words "Smalltalk Error:" appear for Smalltalk errors. It should be noted, however, that this is just a guide - some errors may be classified wrongly, and SDML errors may sometimes be caused by a bug. Also, a nicer view is used when an error occurs outside of a simulation. Random numbers and answers to user interface primitives are now specific to the firing of a single rulebase, rather than for a date or iteration. This prevents interaction between agents firing rules in parallel, and is consistent with the treatment of randomChoice and arbitraryChoice. Compilation is improved for backward chaining keywords to avoid rules that cannot be fired because the consequents do not unify with the clause in the antecedents of the calling rule. This is particularly effective when there are many backward chaining rules for the same keyword. If simulation stops in the middle of a rulebase and the rulebase, or a clause definition group affecting it, is modified then continuing with the simulation automatically restarts the rulebase. Previously an error may have resulted. The name of the initialization file, previously called "sdml.ini", now includes the release number (i.e. "sdml2-6.ini" for this release). This change is because the file is release-dependent, and different releases of SDML may be installed into the same directory. The following primitive has been renamed (and models and groups using it are automatically translated when they are filed in): agentName --> self However, rules involving "random" and "any" are too difficult to translate automatically to use "randomChoice" and "arbitraryChoice" (or "thereExists"), so this task is left to the modeller.