Index: src/routes/admin-circle.js
===================================================================
--- src/routes/admin-circle.js	(revision 682d50402b538f249bed5b329a1b7f78be26b8bf)
+++ src/routes/admin-circle.js	(revision 62b899d95ceecddb71c476a3a1f292529c006d92)
@@ -16,5 +16,5 @@
 import db from '../config/database.js';
 import { getTenancy } from '../services/SettingsService.js';
-import { syncOne } from '../services/CircleService.js';
+import { syncOne, sync } from '../services/CircleService.js';
 
 const router = express.Router();
@@ -95,4 +95,15 @@
 });
 
+// Alles in één keer verversen (handig "voor de zekerheid").
+router.post('/sync-all', requireGod, async (req, res) => {
+  try {
+    const r = await sync();
+    const n = (r && r.results) ? r.results.filter((x) => x && x.ok).length : 0;
+    res.redirect('/admin/circle?success=' + encodeURIComponent(`Cirkel gesynchroniseerd (${n} site(s) bijgewerkt)`));
+  } catch (e) {
+    res.redirect('/admin/circle?error=' + encodeURIComponent(String((e && e.message) || e).slice(0, 200)));
+  }
+});
+
 router.post('/allow', requireGod, (req, res) => {
   const site = primarySite();
Index: src/services/CircleFederation.js
===================================================================
--- src/services/CircleFederation.js	(revision 682d50402b538f249bed5b329a1b7f78be26b8bf)
+++ src/services/CircleFederation.js	(revision 62b899d95ceecddb71c476a3a1f292529c006d92)
@@ -78,5 +78,9 @@
 
 function stripHtml(s) {
-  return String(s || '').replace(/<[^>]+>/g, ' ').replace(/\s+/g, ' ').trim();
+  return String(s || '')
+    .replace(/<[^>]+>/g, ' ')
+    .replace(/\[\[[^\]]*\]\]/g, ' ')   // [[playlist:..]]/[[track:..]]/[[album:..]]-shortcodes weg
+    .replace(/\s+/g, ' ')
+    .trim();
 }
 
Index: src/services/CircleService.js
===================================================================
--- src/services/CircleService.js	(revision 682d50402b538f249bed5b329a1b7f78be26b8bf)
+++ src/services/CircleService.js	(revision 62b899d95ceecddb71c476a3a1f292529c006d92)
@@ -14,5 +14,9 @@
 
 function stripHtml(s) {
-  return String(s || '').replace(/<[^>]+>/g, ' ').replace(/\s+/g, ' ').trim();
+  return String(s || '')
+    .replace(/<[^>]+>/g, ' ')
+    .replace(/\[\[[^\]]*\]\]/g, ' ')   // [[playlist:..]]/[[track:..]]/[[album:..]]-shortcodes weg
+    .replace(/\s+/g, ' ')
+    .trim();
 }
 function iso(d) {
Index: src/views/pages/admin-circle.ejs
===================================================================
--- src/views/pages/admin-circle.ejs	(revision 682d50402b538f249bed5b329a1b7f78be26b8bf)
+++ src/views/pages/admin-circle.ejs	(revision 62b899d95ceecddb71c476a3a1f292529c006d92)
@@ -52,4 +52,7 @@
       <p class="set-help">Nog geen bronnen. Voeg er hierboven een toe.</p>
     <% } else { %>
+      <form method="post" action="/admin/circle/sync-all" style="margin:0 0 .9rem">
+        <button type="submit" class="btn">&#8635; Alles nu synchroniseren</button>
+      </form>
       <ul class="circ-list">
         <% links.forEach(function(l){ %>
