diff --git a/extension/Documentation/Manual.rst b/extension/Documentation/Manual.rst
index 05f9960d94fb8c4beb99a7ada4f0bd77af58e3c9..fc1b1fb60fb70c61a38fc61c4c635b6350e2f78c 100644
--- a/extension/Documentation/Manual.rst
+++ b/extension/Documentation/Manual.rst
@@ -3067,7 +3067,7 @@ SQL
   * *typeAheadSql* = `SELECT ... AS 'id', ... AS 'value' WHERE name LIKE ? OR firstName LIKE ? LIMIT 100`
 
     * If there is only one column in the SELECT statement, that one will be used and there is no dict (key/value pair).
-    * If there is no column `id` or no column `value`, than the first column becomes `id` and the second column becomes `value`.
+    * If there is no column `id` or no column `value`, then the first column becomes `id` and the second column becomes `value`.
     * The query will be fired as a 'prepared statement'.
     * The value, typed by the user, will be replaced on all places where a `?` appears.
     * All `?` will be automatically surrounded by '%'. Therefore wildcard search is implemented: `... LIKE '%<?>%' ...`
diff --git a/extension/qfq/api/delete.php b/extension/qfq/api/delete.php
index e2ea1072093a11126ab04f51fb2f794d24ec3fe5..c471b57d1f2b97ddefd1ba08db1caa7146ed55e7 100644
--- a/extension/qfq/api/delete.php
+++ b/extension/qfq/api/delete.php
@@ -82,7 +82,7 @@ try {
         // in case everything is fine, an empty string is returned. Else an Array.
         $flagSuccess = ($answer === '');
 
-        $targetUrl = Store::getVar(SIP_TARGET_URL, STORE_SIP);
+        $targetUrl = str_replace('{{amp}}', '&', Store::getVar(SIP_TARGET_URL, STORE_SIP));
         $modeAnswer = Store::getVar(SIP_MODE_ANSWER, STORE_SIP);
 
         switch ($modeAnswer) {
diff --git a/extension/qfq/qfq/report/Link.php b/extension/qfq/qfq/report/Link.php
index bcb3d3a0947f086661fb45db55069208358acbd7..ffe6a75a732ee70bca0ad8758d773b35126103a2 100644
--- a/extension/qfq/qfq/report/Link.php
+++ b/extension/qfq/qfq/report/Link.php
@@ -915,7 +915,8 @@ class Link {
                 break;
             case TOKEN_ACTION_DELETE_REPORT:
                 $nameUrlParam .= '&' . SIP_MODE_ANSWER . '=' . MODE_HTML;
-                $nameUrlParam .= '&' . SIP_TARGET_URL . '=' . $_SERVER['REQUEST_URI'];
+                // Encode '&' in url to preserve parameters (#4545) - need to decode on use.
+                $nameUrlParam .= '&' . SIP_TARGET_URL . '=' . str_replace('&', '{{amp}}', $_SERVER['REQUEST_URI']);
                 break;
             case TOKEN_ACTION_DELETE_CLOSE:
                 // TODO: Implement for Form (primary Record wird geloescht)