Index: src/assets/js/mod/download.js
===================================================================
--- src/assets/js/mod/download.js	(revision a8364eebcd86a4ed81e5828536e10f189505da2e)
+++ src/assets/js/mod/download.js	(revision 3ca7bdf670788b368fa71765ae6b93f739f56b8f)
@@ -13,4 +13,4 @@
 function run() {
         // Auto-start de download (zelfde-origin attachment-link).
-        setTimeout(function(){ try { window.location.href = (pageData().fileUrl || ''); } catch(e){} }, 600);
+        setTimeout(function(){ try { var u = pageData().fileUrl; if (u) window.location.href = u; } catch(e){} }, 600);
 }
Index: src/routes/download.js
===================================================================
--- src/routes/download.js	(revision a8364eebcd86a4ed81e5828536e10f189505da2e)
+++ src/routes/download.js	(revision 3ca7bdf670788b368fa71765ae6b93f739f56b8f)
@@ -85,5 +85,4 @@
   const fan = req.session && req.session.user;
   renderPage(req, res, 'pages/download', {
-    pageJs: 'download',
     pageTitle: track.title + ' — download',
     bodyClass: 'on-download',
@@ -114,4 +113,8 @@
   req.session.dl[track.id] = Date.now();
   renderPage(req, res, 'pages/download', {
+    // De auto-start hoort ALLEEN bij ready: op het formulier zou hij de
+    // e-mailvraag omzeilen. Het script stond v66r shaer-bqr dan ook binnen
+    // de ready-tak van de template.
+    pageJs: 'download',
     pageTitle: track.title + ' — download', bodyClass: 'on-download',
     dlState: 'ready', dlTrack: track,
Index: src/routes/posts.js
===================================================================
--- src/routes/posts.js	(revision a8364eebcd86a4ed81e5828536e10f189505da2e)
+++ src/routes/posts.js	(revision 3ca7bdf670788b368fa71765ae6b93f739f56b8f)
@@ -447,4 +447,7 @@
 
   renderPage(req, res, 'pages/post-edit', {
+    // Zelfde modules als de nieuw-route hierboven: zonder deze regel laadt de
+    // editor niet, en dan wist een opslag de post (shaer-5s1, de beet van 7-8).
+    pageJs: 'post-edit playlist-editor',
     post,
     isNew: false,
Index: src/views/pages/post-edit.ejs
===================================================================
--- src/views/pages/post-edit.ejs	(revision a8364eebcd86a4ed81e5828536e10f189505da2e)
+++ src/views/pages/post-edit.ejs	(revision 3ca7bdf670788b368fa71765ae6b93f739f56b8f)
@@ -208,5 +208,7 @@
         <%# Hidden field is what actually submits to the server. The visible
             contenteditable's serialized HTML is copied here on submit. %>
-        <input type="hidden" name="content" id="content-hidden" value="">
+        <%# value = de BESTAANDE inhoud: laadt de module niet (oude cache, js uit),
+    dan slaat het formulier de post ongewijzigd op in plaats van hem te wissen. %>
+        <input type="hidden" name="content" id="content-hidden" value="<%= post.content || '' %>">
 
         <%# Initial content is injected as a JSON string in a script tag so we
