diff --git a/extension/Classes/Core/Evaluate.php b/extension/Classes/Core/Evaluate.php
index 86349f265260281b635a2099d024a121c94a30b4..ad9026d9419e17bc7acedc26d87566c0011d3929 100644
--- a/extension/Classes/Core/Evaluate.php
+++ b/extension/Classes/Core/Evaluate.php
@@ -146,7 +146,7 @@ class Evaluate {
      * @throws \UserFormException
      * @throws \UserReportException
      */
-    public function parse($line, $sqlMode = ROW_IMPLODE_ALL, $recursion = 0, &$debugStack = array(), &$foundInStore = '') {
+    public function parse($line, $sqlMode = ROW_IMPLODE_ALL, $recursion = 0, &$debugStack = array(), &$foundInStore = '', $frCmd = '') {
 
         if ($line === '') {
             return '';
@@ -185,7 +185,7 @@ class Evaluate {
             $match = substr($result, $posMatchOpen + $this->startDelimiterLength, $posFirstClose - $posMatchOpen - $this->startDelimiterLength);
 
             $tmpSqlMode = ($posFirstClose == $posLastClose) ? $sqlMode : ROW_IMPLODE_ALL;
-            $evaluated = $this->substitute($match, $foundInStore, $tmpSqlMode);
+            $evaluated = $this->substitute($match, $foundInStore, $tmpSqlMode, $frCmd);
 
             // newline
             $debugLocal[] = '';
@@ -215,7 +215,7 @@ class Evaluate {
                     $evaluated = Support::encryptDoubleCurlyBraces($evaluated);
                 } else {
                     if (strpos($evaluated, $this->endDelimiter) !== false) {
-                        $evaluated = $this->parse($evaluated, ROW_IMPLODE_ALL, $recursion + 1, $debugLocal, $foundInStore);
+                        $evaluated = $this->parse($evaluated, ROW_IMPLODE_ALL, $recursion + 1, $debugLocal, $foundInStore, $tokenName);
                     }
                 }
             }
@@ -315,7 +315,7 @@ class Evaluate {
      * @throws \UserFormException
      * @throws \UserReportException
      */
-    public function substitute($token, &$foundInStore = '', $sqlMode = ROW_IMPLODE_ALL) {
+    public function substitute($token, &$foundInStore = '', $sqlMode = ROW_IMPLODE_ALL, $frCmd = '') {
 
         $token = trim($token);
         $dbIndex = $this->dbIndex;
@@ -392,7 +392,7 @@ class Evaluate {
                     }
                     // create baseUrl attribute for tablesorter api
                     $baseUrlAttribute = DATA_TABLESORTER_BASE_URL . "='" . $this->store->getVar(SYSTEM_BASE_URL, STORE_SYSTEM) . "'";
-                    return ($this->tablesorter->inlineTablesorterView($arrToken[VAR_INDEX_VALUE], $foundInStore)) . $baseUrlAttribute;
+                    return ($this->tablesorter->inlineTablesorterView($arrToken[VAR_INDEX_VALUE], $foundInStore, $frCmd)) . $baseUrlAttribute;
                     break;
                 default:
                     break;
diff --git a/extension/Classes/Core/Report/Report.php b/extension/Classes/Core/Report/Report.php
index 371be74b879afaa1d19747e44b962776dcd7da85..ac0bfbba5c6e73626e4347de69c699bdbd54006e 100644
--- a/extension/Classes/Core/Report/Report.php
+++ b/extension/Classes/Core/Report/Report.php
@@ -595,7 +595,7 @@ class Report {
                 $this->doQfqFunction($this->frArray[$fullLevel . "." . TOKEN_FUNCTION]);
             }
 
-            $sql = $this->variables->doVariables($this->frArray[$fullLevel . "." . TOKEN_SQL]);
+            $sql = $this->variables->doVariables($this->frArray[$fullLevel . "." . TOKEN_SQL], TOKEN_SQL);
 
             $this->store->setVar(SYSTEM_SQL_FINAL, $sql, STORE_SYSTEM);
 
diff --git a/extension/Classes/Core/Report/Tablesorter.php b/extension/Classes/Core/Report/Tablesorter.php
index 5bcb051746f75ab37c64f38346da3464f049ef41..52a499cf675794c55832393f432bf58a2037962d 100644
--- a/extension/Classes/Core/Report/Tablesorter.php
+++ b/extension/Classes/Core/Report/Tablesorter.php
@@ -56,7 +56,7 @@ class Tablesorter {
      * @throws \UserFormException
      * @throws \UserReportException
      */
-    public function inlineTablesorterView($token, &$foundInStore) {
+    public function inlineTablesorterView($token, &$foundInStore, $frCmd = '') {
 
         $token = OnString::trimQuote($token);
         if (empty($token)) {
@@ -74,6 +74,11 @@ class Tablesorter {
         $s = $this->link->renderLink('U:' . SETTING_TABLESORTER_TABLE_ID . '=' . $token . '&' . SETTING_TABLESORTER_FE_USER . '=' . $feUser . '|s|r:8');
 
         $view = $this->getTableViewAsJson($token, $feUser);
+        // Improve twig compatibility with escaped double quotes
+        if ($frCmd === TOKEN_SQL) {
+            $view = addslashes($view);
+        }
+
         // data-tablesorter-sip='badcaffee1234' data-tablesorter-view='....'
         return "data-tablesorter-id='" . $token . "' " . DATA_TABLESORTER_SIP . "='" . $s . "' " . DATA_TABLESORTER_VIEW . "='" . $view . "' ";
     }
diff --git a/extension/Classes/Core/Report/Variables.php b/extension/Classes/Core/Report/Variables.php
index 79caaadba731280e45c825feb392f60a341d869d..834614f3fc08d8e3a8ed1fd575ac74a18bbb2b36 100644
--- a/extension/Classes/Core/Report/Variables.php
+++ b/extension/Classes/Core/Report/Variables.php
@@ -68,7 +68,7 @@ class Variables {
      * @throws \UserFormException
      * @throws \UserReportException
      */
-    public function doVariables($text) {
+    public function doVariables($text, $frCmd = '') {
 
         if ($text == '') {
             return '';
@@ -81,7 +81,7 @@ class Variables {
         $str = preg_replace_callback('/{{\s*(([0-9]+.)+[a-zA-Z0-9_.]+)(:[a-zA-Z-]*)*\s*}}/', 'self::replaceVariables', $text);
 
         // Try the Stores
-        return $this->eval->parse($str);
+        return $this->eval->parse($str, null, null, $dummyStack, $dummyStore, $frCmd);
     }
 
     /**