diff --git a/README.md b/README.md
index 5a2d7a7..0a1bc29 100644
--- a/README.md
+++ b/README.md
@@ -711,8 +711,8 @@ screen, including ExportPrivKey, falls back to Home.
`[x]` delete button, plus a "+ Add wallet" button
- Tracked Tokens: one row per tracked token with an `[x]` remove button,
plus a "+ Add token" button
- - Display: "Show tracked tokens with zero balance" checkbox and a Theme
- selector (System / Light / Dark)
+ - Display: "Show tracked tokens with zero balance" checkbox, "UTC
+ Timestamps" checkbox, and a Theme selector (System / Light / Dark)
- Network: network selector (Ethereum Mainnet / Sepolia Testnet); switching
resets the RPC and Blockscout endpoints to that network's defaults
- Ethereum RPC: endpoint URL input + "Save" button (validated against
@@ -723,7 +723,6 @@ screen, including ExportPrivKey, falls back to Home.
- "Hide tokens with fewer than 1,000 holders" checkbox
- "Hide transactions from detected fraud contracts" checkbox
- "Hide dust transactions below N gwei" checkbox + threshold input
- - "UTC Timestamps" checkbox
- Allowed Sites: list with remove buttons
- Denied Sites: list with remove buttons
- About: project link, license, author, version, release date, and the
diff --git a/TODO.md b/TODO.md
index 6e39305..109deda 100644
--- a/TODO.md
+++ b/TODO.md
@@ -44,6 +44,9 @@ undefined identifiers, which is how
# Completed Steps
+- 2026-08-11: UTC Timestamps checkbox moved from the Token Spam Protection well
+ into Display, next to the theme selector
+ ([#212](https://git.eeqj.de/sneak/AutistMask/issues/212)).
- 2026-08-11: A dust threshold of `0` now means "hide nothing" instead of
falling back to the 100,000 gwei default, and every address comparison in
`src/shared/transactions.js` goes through one case-normalising helper so a
diff --git a/docs/README.md b/docs/README.md
index 7244b8e..08f244a 100644
--- a/docs/README.md
+++ b/docs/README.md
@@ -359,16 +359,16 @@ Click the gear icon on the home screen to access settings:
- **Wallets**: Your wallets, and "+ Add wallet".
- **Tracked Tokens**: The ERC-20 tokens tracked across all addresses, and "+ Add
token".
-- **Display**: Toggle whether tracked tokens with zero balance are shown, and
- choose the theme (System, Light, or Dark).
+- **Display**: Toggle whether tracked tokens with zero balance are shown, switch
+ timestamps to UTC, and choose the theme (System, Light, or Dark).
- **Network**: Switch between Ethereum Mainnet and Sepolia Testnet. Switching
resets the RPC and Blockscout endpoints to that network's defaults.
- **Ethereum RPC**: Change the Ethereum node endpoint. Default is a public RPC.
You can use your own node for maximum privacy.
- **Blockscout API**: Change the Blockscout instance used for token balances and
transaction history. You can use a self-hosted instance.
-- **Token Spam Protection**: Toggle individual scam filters, set the dust
- transaction threshold, and switch timestamps to UTC.
+- **Token Spam Protection**: Toggle individual scam filters and set the dust
+ transaction threshold.
- **Allowed Sites / Denied Sites**: View and manage web3 site permissions.
- **About**: License, author, version, release date, and a link to the commit
this build came from.
diff --git a/src/popup/index.html b/src/popup/index.html
index a38e901..d05f91e 100644
--- a/src/popup/index.html
+++ b/src/popup/index.html
@@ -869,6 +869,12 @@
/>
Show tracked tokens with zero balance
+
gwei
-
diff --git a/tests/settingsUtcTimestamps.test.js b/tests/settingsUtcTimestamps.test.js
new file mode 100644
index 0000000..91526db
--- /dev/null
+++ b/tests/settingsUtcTimestamps.test.js
@@ -0,0 +1,111 @@
+// Tests for the UTC Timestamps setting.
+//
+// The checkbox was moved out of the Token Spam Protection well and into the
+// Display well next to the theme selector. It is wired by id through the $()
+// helper, so the move cannot break the handler — but nothing in the suite said
+// so. These tests pin both halves down: the markup lives in Display and
+// nowhere else, and the value still round-trips through storage.
+
+const fs = require("fs");
+const path = require("path");
+
+const POPUP_HTML = fs.readFileSync(
+ path.join(__dirname, "..", "src", "popup", "index.html"),
+ "utf8",
+);
+
+// The body of one `
` well, selected by its heading.
+function wellWithHeading(html, heading) {
+ const headingIndex = html.indexOf(
+ '