Index: src/services/ActivityPubService.js
===================================================================
--- src/services/ActivityPubService.js	(revision 2365630ab021a71f43e25e7e022b986fc67ac6d6)
+++ src/services/ActivityPubService.js	(revision dc802b4223862381c3a03fc87973462a7b333346)
@@ -706,5 +706,14 @@
     } catch { /* non-fatal */ }
   }
-  body = body.replace(/\[\[(track|album|playlist):[^\]]+\]\]/gi, '');
+  // ONVERTAALD voor een verhuizing (FEP-1580). De doelinstantie IS een Klonkt:
+  // die rendert [[track:]], [[album:]] en [[playlist:]] zelf en maakt er een
+  // speler van. Bakken we ze eerst om, dan komt er een tekstlink aan en is de
+  // speler weg. Onherstelbaar bovendien: het bakken STRIPT de shorthand en
+  // plakt achteraan hooguit VIER titels, dus een album van tien nummers
+  // overleeft het niet.
+  //
+  // Dezelfde regel als bij de outbox en de tracks: wie ondertekend vraagt
+  // namens de actor waar wij naartoe verhuisd zijn, krijgt onze eigen kijk.
+  if (!opts.rauweInhoud) body = body.replace(/\[\[(track|album|playlist):[^\]]+\]\]/gi, '');
   // External embeds ([[embed:url]]) → emit the bare URL as a link so Mastodon
   // renders its OWN preview/player card (YouTube/Spotify/SoundCloud/etc) instead
@@ -714,5 +723,5 @@
     return `<p><a href="${u}">${u}</a></p>`;
   });
-  if (hadAudio) {
+  if (hadAudio && !opts.rauweInhoud) {
     // Elke titel als eigen link naar zijn anker; een titel zonder id (een
     // albumnaam zonder tracks) blijft gewone tekst.
@@ -1039,6 +1048,6 @@
 }
 
-export function buildCreate(base, site, post) {
-  const note = buildNote(base, site, post);
+export function buildCreate(base, site, post, opts = {}) {
+  const note = buildNote(base, site, post, opts);
   return {
     '@context': AP_CONTEXT,
@@ -1123,9 +1132,9 @@
 }
 
-export function buildOutbox(base, site, posts, tracks = [], { page = false, totalItems, alGesneden = false } = {}) {
+export function buildOutbox(base, site, posts, tracks = [], { page = false, totalItems, alGesneden = false, rauweInhoud = false } = {}) {
   const id = `${actorId(base, site.slug)}/outbox`;
   const wanneer = (x) => Date.parse(x && x.published ? x.published : 0) || 0;
   const items = [
-    ...(posts || []).map((p) => buildCreate(base, site, p)),
+    ...(posts || []).map((p) => buildCreate(base, site, p, { rauweInhoud })),
     // Eén zoekopdracht voor alle tracks samen, niet per stuk.
     ...(() => {
