diff --git a/CHANGELOG.md b/CHANGELOG.md
index 98093eb..fdcb411 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -10,6 +10,43 @@ follows [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
### Added
+- **`MarkupString.Pueblo`, a new package: Pueblo's own extensions.** `PuebloElements` builds the
+ `xch_` vocabulary a Pueblo client reads — `xch_pane`, `xch_page`, `xch_prefetch`, `xch_mudtext`, the
+ `xch_sound`/`xch_alert`/`xch_speech` family, the `xch_mode` switches, and an `` carrying
+ `xch_cmd`, `xch_hint` or `xch_graph` — from the client's own tag and attribute tables. They render as
+ Pueblo tags for `Pueblo`, as an image or a span for `Html` where one fits, and as nothing at all
+ everywhere else, carrier included.
+ - Plain HTML stays `HtmlMarkup`'s (Pueblo reads an HTML subset), and styling and links stay
+ `AnsiMarkup`'s, which already writes each dialect's own form. Only what is Pueblo's alone is here,
+ so nothing about the existing kinds changes.
+
+- **`MarkupString.Mxp`, a new package: MXP's own elements.** `MxpElements` builds what the
+ specification defines — `SOUND`, `MUSIC`, `IMAGE`, `GAUGE`, `STAT`, `FRAME`, `VAR`, `EXPIRE`,
+ `RELOCATE`, `USER`, `PASSWORD`, `NOBR`, `SBR` — and `MxpElement` writes one it does not. They render
+ as MXP tags for `Mxp`, as the nearest thing a browser has for `Html` (an ``, an `