diff --git a/.github/workflows/moodle-ci.yml b/.github/workflows/moodle-ci.yml
index a33cf36cd6463aa81da510b1a6830a099dcf3a8e..70640034cb465c0214a761775926385e69e6786c 100644
--- a/.github/workflows/moodle-ci.yml
+++ b/.github/workflows/moodle-ci.yml
@@ -39,6 +39,10 @@ jobs:
           - php: '8.2'
             moodle-branch: 'MOODLE_404_STABLE'
             database: 'pgsql'
+            maxima: 'SBCL'
+          - php: '8.1'
+            moodle-branch: 'MOODLE_403_STABLE'
+            database: 'pgsql'
             maxima: 'GCL'
           - php: '8.1'
             moodle-branch: 'MOODLE_402_STABLE'
diff --git a/api/config_sample.txt b/api/config_sample.txt
index dd5bbaa0da563c4fa88daff0de6c1f76954cd2e5..65020a242a25954941fee9b9a9d0e0930fa7ba21 100644
--- a/api/config_sample.txt
+++ b/api/config_sample.txt
@@ -91,8 +91,8 @@ $CFG->inputmustverify = 1;
 $CFG->inputshowvalidation = 1;
 
 // These should match the version of goemaxima in docker-compose.
-$CFG->stackmaximaversion = "2024060300";
-$CFG->version = "2024060300";
+$CFG->stackmaximaversion = "2025072400";
+$CFG->version = "2025072400";
 
 // Do not change this setting.
 $CFG->mathsdisplay = 'api';
diff --git a/api/docker/docker-compose.dev.yml b/api/docker/docker-compose.dev.yml
index 268a66b5103817ad5cfbaea88328252a25f38920..548f6fc22156215be30ecbf762c6786bf593e7be 100644
--- a/api/docker/docker-compose.dev.yml
+++ b/api/docker/docker-compose.dev.yml
@@ -1,7 +1,7 @@
 version: "4.0"
 services:
   maxima:
-    image: mathinstitut/goemaxima:2024060300-latest
+    image: mathinstitut/goemaxima:2025072400-latest
     tmpfs:
       - "/tmp"
     restart: unless-stopped
diff --git a/api/docker/docker-compose.yml b/api/docker/docker-compose.yml
index fdb6bda3bfe05243733a5b7bd7c4ccfc2b74ba71..054c3dee214133e3b8b3551ef2bd9d066d669182 100644
--- a/api/docker/docker-compose.yml
+++ b/api/docker/docker-compose.yml
@@ -1,7 +1,7 @@
 version: "4.0"
 services:
   maxima:
-    image: mathinstitut/goemaxima:2024060300-latest
+    image: mathinstitut/goemaxima:2025072400-latest
     tmpfs:
       - "/tmp"
     restart: unless-stopped
diff --git a/doc/en/Authoring/Answer_Tests/Results/AlgEquiv.md b/doc/en/Authoring/Answer_Tests/Results/AlgEquiv.md
index 9f47e219954ce991a0aeafb58905ee09db1463fa..c3c39dc8f39ec3474dc6feffce896efa7c924dc2 100644
--- a/doc/en/Authoring/Answer_Tests/Results/AlgEquiv.md
+++ b/doc/en/Authoring/Answer_Tests/Results/AlgEquiv.md
@@ -1688,7 +1688,7 @@ i,i),i,8)</pre></td>
 </tr>
 <tr class="pass">
   <td class="cell c0"><td colspan="2"></td></td>
-  <td class="cell c1"><td colspan="4">The following entries are incorrect, although they may appear in a simplified form from that which you actually entered. <span class="filter_mathjaxloader_equation"><span class="nolink">\[\left \{5-x > 0\,{\text{ and }}\, x-1 > 0 \right \}\]</span></span></td></td>
+  <td class="cell c1"><td colspan="4">The following entries are incorrect, although they may appear in a simplified form from that which you actually entered. <span class="filter_mathjaxloader_equation"><span class="nolink">\[\left \{5-x &gt; 0\,{\text{ and }}\, x-1 > 0 \right \}\]</span></span></td></td>
 </tr>
 <tr class="notes">
   <td class="cell c0"><td colspan="6">Equivalence for elements of sets is different from expressions: see docs.</td></td>
diff --git a/doc/en/Developer/Development_history.md b/doc/en/Developer/Development_history.md
index c4fd6ac945160cbfb45d75dfa56640df9d66755f..dcc451aa644fc92c2bbce189d6a42d2ad28baf54 100644
--- a/doc/en/Developer/Development_history.md
+++ b/doc/en/Developer/Development_history.md
@@ -2,6 +2,17 @@
 
 For current and future plans, see [Development track](Development_track.md) and [Future plans](Future_plans.md).
 
+## Version 4.6.0
+
+Released July 2024.
+
+1. Fix [issue #1160](https://github.com/maths/moodle-qtype_stack/issues/879) Allow configuring the MathJax URL
+2. Add in stack preamble via `%_stack_preamble_end;` in the question variables to allow some variables to be available in inputs.  This fixes [issue #1207](https://github.com/maths/moodle-qtype_stack/issues/1207]) and [issue #1133](https://github.com/maths/moodle-qtype_stack/issues/1133).
+3. Allow Maxima code in keyvals to terminate expressions with a `$` (as in Maxima) [issue #1019](https://github.com/maths/moodle-qtype_stack/issues/1019]).  This will allow better copy/paste to and from desktop maxima.
+4. Add in an option to fine-tune the multiplication sign used for scientific units:  `multsgnstackunits`.  See discussion in [issue #1080](https://github.com/maths/moodle-qtype_stack/issues/1080]).
+5. Add in the "Deploy from n to m" deature to systematically deploy seeds.
+
+
 ## Version 4.6.0
 
 Released June 2024.
diff --git a/doc/en/Developer/Development_track.md b/doc/en/Developer/Development_track.md
index 2bd678ae5e4ddc070ccc9e0cd3ff0ba0b340c86f..7d1a597bc5ad55b71567adf7222ef0b09c8b0b56 100644
--- a/doc/en/Developer/Development_track.md
+++ b/doc/en/Developer/Development_track.md
@@ -5,17 +5,9 @@ past development history is documented on [Development history](Development_hist
 
 We use the [github issue tracker](https://github.com/maths/moodle-qtype_stack/issues) to track "milestones".
 
-## Version 4.7.0
+## Version 4.8.0
 
-DONE
-
-1. Fix [issue #1160](https://github.com/maths/moodle-qtype_stack/issues/879) Allow configuring the MathJax URL
-2. Add in stack preamble via `%_stack_preamble_end;` in the question variables to allow some variables to be available in inputs.  This fixes [issue #1207](https://github.com/maths/moodle-qtype_stack/issues/1207]) and [issue #1133](https://github.com/maths/moodle-qtype_stack/issues/1133).
-3. Allow Maxima code in keyvals to terminate expressions with a `$` (as in Maxima) [issue #1019](https://github.com/maths/moodle-qtype_stack/issues/1019]).  This will allow better copy/paste to and from desktop maxima.
-4. Add in an option to fine-tune the multiplication sign used for scientific units:  `multsgnstackunits`.  See discussion in [issue #1080](https://github.com/maths/moodle-qtype_stack/issues/1080]).
-5. Add in the "Deploy from n to m" deature to systematically deploy seeds.
-
-Issues with [github milestone 4.7.0](https://github.com/maths/moodle-qtype_stack/issues?q=is%3Aissue+milestone%3A4.7.0) include
+Issues with [github milestone 4.8.0](https://github.com/maths/moodle-qtype_stack/issues?q=is%3Aissue+milestone%3A4.8.0) include
 
 1. Release "Adapt" block. [issue #975](https://github.com/maths/moodle-qtype_stack/issues/975)
 2. Fix [issue #406](https://github.com/maths/moodle-qtype_stack/issues/406)
diff --git a/doc/en/Developer/Releasing.md b/doc/en/Developer/Releasing.md
index bb7b8918a711c2288489e0705659a37b58ddf0da..454a986b66792407794cc68f0fd1bd0cad123331 100644
--- a/doc/en/Developer/Releasing.md
+++ b/doc/en/Developer/Releasing.md
@@ -42,16 +42,16 @@ Unless you want to discuss something confidential with the developers, please do
 * Spin up the STACK API in Docker and check it still works with a selection of questions, including download and JSXGraph.
 * Chances are it won't work because even the latest version of goemaxima is out of date.
 * You will need to create a local up-to-date image of goemaxima:
-  * Clone the goemaxima repo and create a folder stack/STACKVERSION e.g. `stack/2024050600` matching the latest STACK version.
+  * Clone the goemaxima repo and create a folder stack/STACKVERSION e.g. `stack/2025072400` matching the latest STACK version.
   * Copy the stack/maxima folder from STACK into this new folder.
   * Create `maximalocal.mac.template` as described in `Adding_new_version.md` in goemaxima docs (or just copy from previous goemaxima version).
   * In `buildimage.sh` set `maximaver` and `sbclver` e.g. `maximaver="5.45.1" sbclver="2.2.6"`. (`maximaver` should match `maximalocal.mac.template`)
   * `./buildweb.sh` (You may need to install `go` first: `sudo snap install go --classic`).
-  * `.buildimage.s 2024050600` (If Docker struggles to fetch metadata `sudo vi ~/.docker/config.json` and change `credsStore` to `credStore`).
-  * You should have now created a `goemaxima:2024050600-dev` image locally.
+  * `.buildimage.s 2025072400` (If Docker struggles to fetch metadata `sudo vi ~/.docker/config.json` and change `credsStore` to `credStore`).
+  * You should have now created a `goemaxima:2025072400-dev` image locally.
 * Temporarily update STACK API locally:
-  * Update maxima image in STACK API to `goemaxima:2024050600-dev` in `docker-compose.dev.yml`.
-  * Update `stackmaximaversion` and `version` in `config.php` for the API to e.g. 2024050600.
+  * Update maxima image in STACK API to `goemaxima:2025072400-dev` in `docker-compose.dev.yml`.
+  * Update `stackmaximaversion` and `version` in `config.php` for the API to e.g. 2025072400.
 * `docker compose -f docker-compose.dev.yml up`
 
 ### Version numbers
diff --git a/doc/en/Installation/STACK_versions.md b/doc/en/Installation/STACK_versions.md
index c355cb8dd8774d31d3d9f067228d1da39023d5fe..91073a89fa256f992d48ce298ab68b903a599980 100644
--- a/doc/en/Installation/STACK_versions.md
+++ b/doc/en/Installation/STACK_versions.md
@@ -9,6 +9,7 @@ when releasing.
 
 Release | Version number | Supported Maxima versions
 --------|----------------|--------------------------
+4.7.0 | 2025072400 | 5.40.0, 5.41.0, 5.42.0, 5.42.1, 5.42.2, 5.43.0, 5.43.1, 5.43.2, 5.44.0, 5.46.0, 5.47.0
 4.6.0 | 2024060300 | 5.40.0, 5.41.0, 5.42.0, 5.42.1, 5.42.2, 5.43.0, 5.43.1, 5.43.2, 5.44.0, 5.46.0, 5.47.0
 4.5.0 | 2023121100 | 5.40.0, 5.41.0, 5.42.0, 5.42.1, 5.42.2, 5.43.0, 5.43.1, 5.43.2, 5.44.0, 5.46.0, 5.47.0
 4.4.5 | 2023072101 | 5.40.0, 5.41.0, 5.42.0, 5.42.1, 5.42.2, 5.43.0, 5.43.1, 5.43.2, 5.44.0, 5.46.0, 5.47.0
diff --git a/stack/maxima/contrib/prooflib_test.mac b/stack/maxima/contrib/prooflib_test.mac
index cc5c1e7061589df044fff095ba1675794cc203d7..0b91af3b2032ee8823d13866828d0ea7b8370616 100644
--- a/stack/maxima/contrib/prooflib_test.mac
+++ b/stack/maxima/contrib/prooflib_test.mac
@@ -59,7 +59,7 @@ s_test_case(proof_alternatives(proof_cases(A,B,C)), [proof_cases(A,B,C),proof_ca
 s_test_case(proof_alternatives(proof_goal(A,B,C)), [proof_goal(A,B,C),proof_goal(B,A,C)]);
 s_test_case(proof_alternatives(proof_iff(proof(proof_opt(A), B),C)), [proof_iff(proof(A,B),C),proof_iff(proof(B),C),proof_iff(C,proof(A,B)),proof_iff(C,proof(B))]);
 
-s_test_case(proof_parsons_interpret("{\"used\":[\"0\",\"3\",\"5\"],\"available\":[\"1\",\"2\",\"4\",\"6\",\"7\"]}"), proof("0","3","5"));
+s_test_case(proof_parsons_interpret("{\"used\":[[[\"0\",\"3\",\"5\"]]],\"available\":[\"1\",\"2\",\"4\",\"6\",\"7\"]}"), proof("0","3","5"));
 
 s_test_case(proof_inline_maths("\\[ 3 = 2^{\\frac{p}{q}}\\]"), "\\( 3 = 2^{\\frac{p}{q}}\\)");
 
diff --git a/stack/maxima/stackmaxima.mac b/stack/maxima/stackmaxima.mac
index ceee340430b26d5052d562398f9bdfd2a5d0e3bc..7d5d8e56f6a66f4356a163bd9dccd80c331d26d6 100644
--- a/stack/maxima/stackmaxima.mac
+++ b/stack/maxima/stackmaxima.mac
@@ -3331,4 +3331,4 @@ is_lang(code):=ev(is(%_STACK_LANG=code),simp=true)$
 
 /* Stack expects some output with the version number the output happens at */
 /* maximalocal.mac after additional library loading */
-stackmaximaversion:2024060301$
+stackmaximaversion:2025072400$
diff --git a/version.php b/version.php
index 6bbf9f24c32e729fc45dfa5163a6a427bd25ec9b..3ad00ac5550a095aa1047deb82104b70975db144 100644
--- a/version.php
+++ b/version.php
@@ -24,11 +24,11 @@
 
 defined('MOODLE_INTERNAL') || die();
 
-$plugin->version   = 2024060301;
+$plugin->version   = 2025072400;
 $plugin->requires  = 2022041900;
 $plugin->cron      = 0;
 $plugin->component = 'qtype_stack';
-$plugin->maturity  = MATURITY_ALPHA;
+$plugin->maturity  = MATURITY_STABLE;
 $plugin->release   = '4.7.0 for Moodle 4.0+';
 
 $plugin->dependencies = [