diff --git a/CHANGES.md b/CHANGES.md
index b41a627cb818f2e892128f669f3fb0ddfbd3d9e5..6dd41824d839f9cd98e0c836d4f143ddea251a63 100644
--- a/CHANGES.md
+++ b/CHANGES.md
@@ -11,6 +11,23 @@ Next version
   should update to using the async/await version `complete_sso_login_async` which
   includes additional checks. The non-async version is considered deprecated.
 
+Synapse 1.12.4rc1 (2020-04-22)
+==============================
+
+Features
+--------
+
+- Always send users their own device updates. ([\#7160](https://github.com/matrix-org/synapse/issues/7160))
+- Add support for handling GET requests for `account_data` on a worker. ([\#7311](https://github.com/matrix-org/synapse/issues/7311))
+
+
+Bugfixes
+--------
+
+- Fix a bug that prevented cross-signing with users on worker-mode synapses. ([\#7255](https://github.com/matrix-org/synapse/issues/7255))
+- Do not treat display names as globs in push rules. ([\#7271](https://github.com/matrix-org/synapse/issues/7271))
+- Fix a bug with cross-signing devices belonging to remote users who did not share a room with any user on the local homeserver. ([\#7289](https://github.com/matrix-org/synapse/issues/7289))
+
 Synapse 1.12.3 (2020-04-03)
 ===========================
 
diff --git a/changelog.d/7160.feature b/changelog.d/7160.feature
deleted file mode 100644
index c1205969a18f9c9842adc71cac50f0fb4ff31679..0000000000000000000000000000000000000000
--- a/changelog.d/7160.feature
+++ /dev/null
@@ -1 +0,0 @@
-Always send users their own device updates.
diff --git a/changelog.d/7255.bugfix b/changelog.d/7255.bugfix
deleted file mode 100644
index a96d52256fcd45d98bb66ac2827dfe3dd02349ef..0000000000000000000000000000000000000000
--- a/changelog.d/7255.bugfix
+++ /dev/null
@@ -1 +0,0 @@
-Fix a bug that prevented cross-signing with users on worker-mode synapses.
\ No newline at end of file
diff --git a/changelog.d/7271.bugfix b/changelog.d/7271.bugfix
deleted file mode 100644
index e8315e4ce457476858765e3957f254ac41a59688..0000000000000000000000000000000000000000
--- a/changelog.d/7271.bugfix
+++ /dev/null
@@ -1 +0,0 @@
-Do not treat display names as globs in push rules.
diff --git a/changelog.d/7289.bugfix b/changelog.d/7289.bugfix
deleted file mode 100644
index 84699e50a9ad6f8846f8c99c1128992eabe1bd7f..0000000000000000000000000000000000000000
--- a/changelog.d/7289.bugfix
+++ /dev/null
@@ -1 +0,0 @@
-Fix a bug with cross-signing devices belonging to remote users who did not share a room with any user on the local homeserver.
diff --git a/changelog.d/7311.feature b/changelog.d/7311.feature
deleted file mode 100644
index c3adc1d6e7255a022dc6a20f19bae856eb1b769c..0000000000000000000000000000000000000000
--- a/changelog.d/7311.feature
+++ /dev/null
@@ -1 +0,0 @@
-Add support for handling GET requests for account_data on a worker.
diff --git a/synapse/__init__.py b/synapse/__init__.py
index 3bf2d0245051c68a82617206daa85e20152cd0b4..fff9d311f341b1163738b6a6019655295dfc4b2f 100644
--- a/synapse/__init__.py
+++ b/synapse/__init__.py
@@ -36,7 +36,7 @@ try:
 except ImportError:
     pass
 
-__version__ = "1.12.3"
+__version__ = "1.12.4rc1"
 
 if bool(os.environ.get("SYNAPSE_TEST_PATCH_LOG_CONTEXTS", False)):
     # We import here so that we don't have to install a bunch of deps when