Most of the changes since the last full release (3.1) are provided in the release notes of 3.1a and 3.1b. The most significant changes since release 3.1b are as follows: a) A settings tool can be opened from the SDML launcher (from the "File" menu). This tool has several pages, each of which has a "Help" button describing the options. The most important page is labelled "Memory" - these settings can make a big difference to the efficiency of SDML. b) Lists of bugs plus bug fixes and enhancements were available for earlier releases of SDML were obtainable as two separate files - one containing text descriptions and the other containing additional information, including the patches to SDML themselves. These are now combined into a single "patches file", called "sdml3-2.pat". The file also contains some additional information - dates and times, plus distributions (details of which releases of SDML that the bugs and patches are applicable to, and whether they are "local"). Patches can now be developed for multiple releases of SDML simultaneously, and some of them may initially be "local" enabling them to be tested at the Centre for Policy Modelling before distributing them to other users. c) A "bug report" generation facility is provided, to make it easier to report bugs in SDML so that (hopefully) I, Steve Wallis, can solve them. The bug reports can be generated via the notifiers that appear when Smalltalk errors occur outside simulations or experimentations - or from a menu option in the top pane of the debugger. d) A new "constructedList" higher-order primitive is provided, which repeatedly evaluates another predicate to yield elements of a new list. e) A new "if" primitive is provided, which is similar to "if-then-else" in other languages. f) An additional menu, labelled "Window", is added to the SDML launcher and workspace browser. The menu options can be used to refresh, collapse or restore all windows on the screen - or to make a specific window visible. g) Every backward chaining rule in a clause definition's rulebase must have a single consequent with the appropriate predicate. This is enforced by initialising the consequents to that predicate (with no arguments), checking for the predicate when the user edits the rule, and changing the consequent when the user copies the rule. h) Inverse operations, which are created when an operation is undone without being redone, are shown in italics in the operation list. [The inverse of an inverse is the original operation, so it is shown in the normal font.] This makes it easier to determine which operations need to be performed to return SDML to a particular state. Additionally, representing inverses in the operation list facilitates optimisation when multiple operations are performed at once. i) Type "UniversalAgent" is now a subtype of "CompositeAgent" rather than "ParallelCompositeAgent", and the universe can only have one sub-agent (typically the model). [If multiple models are required within the same simulation, this can still be done by making the models sub-agents of the single sub-agent of the universe; in practice this was necessary anyway in earlier releases since the universe cannot use any time levels apart from eternity.] It should be noted that two of the features introduced in release 3.1a still have not been fully implemented. The user interface extensions are planned to change drastically in the (fairly) near future so users are strongly discouraged from using them. The "sole" facility is only implemented for forward chaining predicates where all the arguments are defined as "sole"; it can be used for arguments in other clause definitions but no optimisation or type checking will be performed for them.