diff --git a/CHANGELOG.md b/CHANGELOG.md
index 755f26bc7a5ba653b21ca1713ff0b50e0b5592c5..c44fc8d33280a8106715348a05031774c28c745b 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -12,6 +12,7 @@
 .. --------------------------------------------used to the update the records specified ------
 .. Best Practice T3 reST: https://docs.typo3.org/m/typo3/docs-how-to-document/master/en-us/WritingReST/CheatSheet.html
 .. Reference: https://docs.typo3.org/m/typo3/docs-how-to-document/master/en-us/WritingReST/Index.html
+..
 .. Italic *italic*
 .. Bold **bold**
 .. Code ``text``
@@ -19,7 +20,6 @@
 .. Internal Link: :ref:`downloadButton` (default url text) or :ref:`download Button<downloadButton>` (explicit url text)
 .. Add Images:    .. image:: ./Images/a4.jpg
 ..
-..
 .. Admonitions
 .. .. note::   .. important::     .. tip::     .. warning::
 .. Color:   (blue)       (orange)           (green)      (red)
@@ -52,6 +52,30 @@ Features
 Bug Fixes
 ^^^^^^^^^
 
+Version 23.10.1
+---------------
+
+Date: 22.10.2023
+
+Notes
+^^^^^
+
+Features
+^^^^^^^^
+
+* #15682 / Subrecord hide please save record first if there is no table title.
+* #15098 / Implemented qfqFunction in QFQ variable for usage in forms.
+* Doc: Replace many places single back tick by double back tick. Add hint for 'Row size too large'. Added Enis & Jan
+  as Developer. Add hint use mysqldump with one row per record.
+
+Bug Fixes
+^^^^^^^^^
+
+* #17003 / inline edit - dark mode has wrong css path.
+* #17075 / Fix broken '... AS _restClient'.
+* #17091 / upload_Incorrect_integer_value_fileSize.
+* RTD: Fix broken readthedocs rendering.
+
 Version 23.10.0
 ---------------
 
@@ -128,6 +152,7 @@ Notes
 Bug Fixes
 ^^^^^^^^^
 
+* #16372 / Upload Element 'Undefined index htmlDownloadButton' und 'unknown mode ID'
 * #16381 / Form title dynamic update broken.
 * #16392 / Reevaluate sanitize class for each store.
 * Fix db column enum dropdown 'data truncated'
@@ -369,9 +394,9 @@ Notes
   per QFQ installation and/or per form.
 * Subrecord:
 
-    * Dynamically computed 'new' button in subrecord: FE.parameter.new. Use regular `... AS _link` syntax.
-    * Per row customizeable edit and delete button. Use special column name `_rowEdit` and `_rowDelete`. Use
-      regular `... AS _link` syntax.
+  * Dynamically computed 'new' button in subrecord: FE.parameter.new. Use regular `... AS _link` syntax.
+  * Per row customizeable edit and delete button. Use special column name `_rowEdit` and `_rowDelete`. Use
+    regular `... AS _link` syntax.
 
 * Link/Tablesorter: New link qualifier `|Y:...` which is invisible to the user, but will be respected by tablesorter and
   filter.
@@ -3724,11 +3749,10 @@ Changes
 
 * Table `FormElement`:
 
-    * Modified column: `checkType` - new value `numerical`.
+  * Modified column: `checkType` - new value `numerical`.
 
-      ALTER TABLE FormElement MODIFY COLUMN checkType ENUM('alnumx','digit','numerical','email','min|max','min|max
-      date',
-      'pattern','allbut','all') NOT NULL DEFAULT 'alnumx'
+    ALTER TABLE FormElement MODIFY COLUMN checkType ENUM('alnumx','digit','numerical','email','min|max','min|max date',
+    'pattern','allbut','all') NOT NULL DEFAULT 'alnumx'
 
 * Example Report for `forms` extended by a delete button per row.
 
@@ -3775,22 +3799,22 @@ Changes
 ^^^^^^^
 
 * Table 'FormElement'
-    * New column: rowLabelInputNote:
+  * New column: rowLabelInputNote:
 
-      ALTER TABLE  `FormElement` ADD `rowLabelInputNote` set('row','label','/label','input','/input','note','/note','
-      /row')
-      NOT NULL DEFAULT 'row,label,/label,input,/input,note,/note,/row' AFTER  `bsNoteColumns` ;
+    ALTER TABLE  `FormElement` ADD `rowLabelInputNote` set('row','label','/label','input','/input','note','/note','
+    /row')
+    NOT NULL DEFAULT 'row,label,/label,input,/input,note,/note,/row' AFTER  `bsNoteColumns` ;
 
-    * Modified column: 'type' - new value 'templateGroup':
+  * Modified column: 'type' - new value 'templateGroup':
 
-      ALTER TABLE  `FormElement` CHANGE  `type`  `type` ENUM(  'checkbox',  'date',  'datetime',  'dateJQW',  '
-      datetimeJQW',  'extra',
-      'gridJQW',  'text',  'editor',  'time',  'note',  'password',  'radio',  'select',  'subrecord',  'upload',  '
-      fieldset', 'pill',
-      'templateGroup',  'beforeLoad',  'beforeSave',  'beforeInsert',  'beforeUpdate',  'beforeDelete',  'afterLoad',  '
-      afterSave',
-      'afterInsert',  'afterUpdate',  'afterDelete',  'sendMail' ) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL
-      DEFAULT  'text'
+    ALTER TABLE  `FormElement` CHANGE  `type`  `type` ENUM(  'checkbox',  'date',  'datetime',  'dateJQW',  '
+    datetimeJQW',  'extra',
+    'gridJQW',  'text',  'editor',  'time',  'note',  'password',  'radio',  'select',  'subrecord',  'upload',  '
+    fieldset', 'pill',
+    'templateGroup',  'beforeLoad',  'beforeSave',  'beforeInsert',  'beforeUpdate',  'beforeDelete',  'afterLoad',  '
+    afterSave',
+    'afterInsert',  'afterUpdate',  'afterDelete',  'sendMail' ) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL
+    DEFAULT  'text'
 
 * formEditor.sql: Added HTML 'placeholder' in FormEditor for bs*Columns.
 
@@ -3871,9 +3895,9 @@ Bug fixes
 * Skip unwanted parameter expansion during save.
 * Fixed bug with uninitialized FE_SLAVE_ID.
 * formEditor.sql:
-    * The defintion as 'editor' (not text) for FormElement 'note' has been lost - reinserted.
-    * Fixed problem while playing SQL query - deleting old FormElements of Formeditor deleted also FormElements of other
-      forms.
+  * The defintion as 'editor' (not text) for FormElement 'note' has been lost - reinserted.
+  * Fixed problem while playing SQL query - deleting old FormElements of Formeditor deleted also FormElements of other
+    forms.
 * #3066 / help-text with-error - CSS class 'hidden' will be rendered by default (as long there is no error).
 * Labels are skipped, if FormElement.bsLabelColumns=0.
 * Respect attribute `data-class-on-change` on save buttons.
diff --git a/Documentation-develop/NewVersion.md b/Documentation-develop/NewVersion.md
index b6dc5c863603932fa60735c2eb696348eab4dcd4..fb21eb29beb424b5d41609b4d43a624a94b469ce 100644
--- a/Documentation-develop/NewVersion.md
+++ b/Documentation-develop/NewVersion.md
@@ -44,7 +44,7 @@ Neue Versionsnummer
    **Achtung**: die Release Minor darf KEINE fuehrenden Nullen enthalten!!! Ansonsten funktioniert die Verteilung vie
    TER nicht.
 
-   **Auto**: ./setVersion.sh 23.10.0
+   **Auto**: ./setVersion.sh 23.10.1
 
    Manuell:
 
@@ -56,7 +56,7 @@ Neue Versionsnummer
 
     * **Commit & Push** to develop branch:
 
-   New version v23.10.0
+   New version v23.10.1
 
 6)
     * Merge 'Develop' to **Master**: git.math.uzh.ch > QFQ > Merge Requests > New merge request > 'Develop >> Master'
@@ -66,10 +66,10 @@ Neue Versionsnummer
 
     * Neuen tag via Browser auf dem **master** branch setzen: git.math.uzh.ch > QFQ > Repository > Tags > New tag
 
-   Tag: v23.10.0
+   Tag: v23.10.1
 
    # Den tag mit diesem Command zu setzen scheint den Build Prozess nicht zu triggern.
-   git tag -a v23.10.0 -m 'New version v23.10.0' git push
+   git tag -a v23.10.1 -m 'New version v23.10.1' git push
 
 
 7) **Merge 'master' into 'develop'**
diff --git a/Documentation/Form.rst b/Documentation/Form.rst
index 9c5ba9f8b9cc6104cb63a7aa30a8e9c12460ad06..23f25081d7dbe32da48a1df36b7b4a450914d4b2 100644
--- a/Documentation/Form.rst
+++ b/Documentation/Form.rst
@@ -1986,6 +1986,10 @@ will be rendered inside the form as a HTML table.
 
         subrecordAppendExtraDeleteForm = address2
 
+  * *subrecordEmptyText*: Optional. Define the text displayed when subrecord has no records::
+
+        subrecordEmptyText = my custom text
+
 **Subrecord DragAndDrop**
 
 Subrecords inherently support drag-and-drop, see also :ref:`drag_and_drop`.
diff --git a/Documentation/GeneralTips.rst b/Documentation/GeneralTips.rst
index 818a8dcc73782e1a25c6a0cac2421a6f3a740869..57643e80ef033f0a54d837b68c7d23a44a2c1194 100644
--- a/Documentation/GeneralTips.rst
+++ b/Documentation/GeneralTips.rst
@@ -301,13 +301,21 @@ Row size too large
 
 * Details: https://mariadb.com/kb/en/troubleshooting-row-size-too-large-errors-with-innodb/
 * Typically too many columns per table on an InnoDB Table.
-* First try is to check (and to change) ROW_FORMAT::
+* First try is to check (and to change) ROW_FORMAT: ::
 
-  ALTER TABLE tab ROW_FORMAT=DYNAMIC;
+    ALTER TABLE tab ROW_FORMAT=DYNAMIC;
 
-* Bad workaround for creating a wide table::
+* Bad workaround for creating a wide table: ::
 
-  SET SESSION innodb_strict_mode=OFF;
-  CREATE TABLE ...
+    SET SESSION innodb_strict_mode=OFF;
+    CREATE TABLE ...
+
+* Best is to change as much columns as neccessary from ``varchar()`` to ``tinytext`` / ``text``
+
+SQL Dump with one record per line
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+Sometimes it's helpful to have SQL dumps with each record on a single line::
+
+    msyqldump --skip-opt <DB-Name>
 
-* Best is to change as much columns as neccessary from ``varchar()`` to ``tinytext`` / ``text``
\ No newline at end of file
diff --git a/Documentation/Release.rst b/Documentation/Release.rst
index 92355cdcd7605d31db78e0cc1c56373afe57f85b..073b0f2041f6a5220e42eef9307dc05c24964ee7 100644
--- a/Documentation/Release.rst
+++ b/Documentation/Release.rst
@@ -12,6 +12,7 @@
 .. --------------------------------------------used to the update the records specified ------
 .. Best Practice T3 reST: https://docs.typo3.org/m/typo3/docs-how-to-document/master/en-us/WritingReST/CheatSheet.html
 ..             Reference: https://docs.typo3.org/m/typo3/docs-how-to-document/master/en-us/WritingReST/Index.html
+..
 .. Italic *italic*
 .. Bold **bold**
 .. Code ``text``
@@ -19,7 +20,6 @@
 .. Internal Link: :ref:`downloadButton` (default url text) or :ref:`download Button<downloadButton>` (explicit url text)
 .. Add Images:    .. image:: ./Images/a4.jpg
 ..
-..
 .. Admonitions
 ..           .. note::   .. important::     .. tip::     .. warning::
 .. Color:   (blue)       (orange)           (green)      (red)
@@ -52,6 +52,30 @@ Features
 Bug Fixes
 ^^^^^^^^^
 
+Version 23.10.1
+---------------
+
+Date: 22.10.2023
+
+Notes
+^^^^^
+
+Features
+^^^^^^^^
+
+* #15682 / Subrecord hide please save record first if there is no table title.
+* #15098 / Implemented qfqFunction in QFQ variable for usage in forms.
+* Doc: Replace many places single back tick by double back tick. Add hint for 'Row size too large'.  Added Enis & Jan
+  as Developer. Add hint use mysqldump with one row per record.
+
+Bug Fixes
+^^^^^^^^^
+
+* #17003 / inline edit - dark mode has wrong css path.
+* #17075 / Fix broken '... AS _restClient'.
+* #17091 / upload_Incorrect_integer_value_fileSize.
+* RTD: Fix broken readthedocs rendering.
+
 Version 23.10.0
 ---------------
 
diff --git a/Documentation/Report.rst b/Documentation/Report.rst
index c90f25f883c26ebc55d5788d58a50cd9c8c67490..72dd4a5195931a9c47ae9a9fb6209cd4083d4d85 100644
--- a/Documentation/Report.rst
+++ b/Documentation/Report.rst
@@ -345,8 +345,8 @@ Text across several lines
 ^^^^^^^^^^^^^^^^^^^^^^^^^
 
 To get better human readable SQL queries, it's possible to split a line across several lines. Lines
-with keywords are on their own (:ref:`QFQ Keywords (Bodytext)<qfq_keywords>` start a new line). If a line is not a 'keyword' line, it will
-be appended to the last keyword line. 'Keyword' lines are detected on::
+with keywords are on their own (:ref:`QFQ Keywords (Bodytext)<qfq_keywords>` start a new line). If a line is not a
+'keyword' line, it will be appended to the last keyword line. 'Keyword' lines are detected on::
 
     <level>.<keyword> =
     {
diff --git a/Documentation/Settings.cfg b/Documentation/Settings.cfg
index d2a1ef89395dacf293401146d8384dab9ec5ac36..b048b0981e9ad6f184c88bda9afb10ee6834ce44 100644
--- a/Documentation/Settings.cfg
+++ b/Documentation/Settings.cfg
@@ -22,7 +22,7 @@
 
 project = QFQ - Quick Form Query
 version = 23.10
-release = 23.10.0
+release = 23.10.1
 t3author = Carsten Rose
 copyright = since 2017 by the author
 
diff --git a/Documentation/Variable.rst b/Documentation/Variable.rst
index 0f58273e66717d055883eadf79cf6d96584f632f..12b6552e24d8e900a60e6e21bf92f154130c028f 100644
--- a/Documentation/Variable.rst
+++ b/Documentation/Variable.rst
@@ -44,7 +44,7 @@ provided. Access to:
 * :ref:`store-variables`
 * :ref:`sql-variables`
 * :ref:`row-column-variables`
-* :ref:`link-column-variables`
+* :ref:`link-function-column-variables`
 
 Some examples, including nesting::
 
@@ -72,6 +72,12 @@ Some examples, including nesting::
   # Link Columns
   {{p:form=Person&r=1|t:Edit Person|E|s AS link}}
 
+  # Function Columns: output in {{fullname:R}}
+  {{getFullname(pId) => fullname AS function}}
+
+  # Function Columns: output direct tt_content
+  {{getFullname(pId) AS function}}
+
 Leading and trailing spaces inside curly braces are removed.
 
 * ``{{ SELECT "Hello World"   }}`` becomes ``{{SELECT "Hello World"}}``
@@ -421,21 +427,42 @@ General note: using this type of variables is only the second choice. First choi
 :ref:`access-column-values`) - using the STORE_RECORD is more portable cause no renumbering is needed if the level keys change.
 
 
-.. _`link-column-variables`:
+.. _`link-function-column-variables`:
 
-Link column variables
----------------------
+Link/Function column variables
+------------------------------
+
+Link column
+^^^^^^^^^^^
 
 These variables return a link, completely rendered in HTML. The syntax and all features of :ref:`column-link` are available.
 The following code will render a *new person* button::
 
   {{p:form&form=Person|s|N|t:new person AS link}}
 
-For better reading, the format string might be wrapped in single or double quotes (this is optional): ::
+Optional: For better reading, the format string might be wrapped in single or double quotes: ::
 
   {{"p:form&form=Person|s|N|t:new person" AS link}}
 
-These variables are especially helpful in:
+
+Function column
+^^^^^^^^^^^^^^^
+
+Function column variables are helpful in:
 
 * `report`, to create create links or buttons outside of an SQL statement. E.g. in `head`, `rbeg`, ...
 * `form`, to create links and buttons in labels or notes.
+
+Definition of a qfqFunction: Report with qfqFunction. Subheader: getFullname::
+
+    render = api
+    10.sql = SELECT CONCAT(lastName, ', ', firstName) FROM Person WHERE id = {{pId:R0}}
+
+a) Somewhere in a different report or form::
+
+    {{getFullname(pId) AS function}}
+
+b) Somewhere in a different report, output is returned in STORE_RECORD variable `fullname`::
+
+    {{getFullname(pId) => fullname AS function}}
+
diff --git a/Documentation/conf.py b/Documentation/conf.py
index 591b4a236a87b3e9014149e8789e0209ce487819..e4e23b99d032572ae41843981085b1d9459848a6 100644
--- a/Documentation/conf.py
+++ b/Documentation/conf.py
@@ -64,7 +64,7 @@ author = 'Carsten Rose, Benjamin Baer, Enis Nuredini, Jan Haller'
 # The short X.Y version.
 version = '23.10'
 # The full version, including alpha/beta/rc tags.
-release = '23.10.0'
+release = '23.10.1'
 
 # The language for content autogenerated by Sphinx. Refer to documentation
 # for a list of supported languages.
diff --git a/extension/Classes/Core/AbstractBuildForm.php b/extension/Classes/Core/AbstractBuildForm.php
index b4eeb1c09ecd490c758d15c41c781cac7505f5f4..65db9a2a32ed8340773adf60504d0988068a8569 100644
--- a/extension/Classes/Core/AbstractBuildForm.php
+++ b/extension/Classes/Core/AbstractBuildForm.php
@@ -2515,6 +2515,10 @@ abstract class AbstractBuildForm {
             }
             $htmlBody .= Support::wrapTag("<tr $rowAttribute>", $rowHtml, true);
         }
+        if(empty($formElement[$subrecordToken])){
+            $rowHtml .= Support::wrapTag("<td>", $formElement[SUBRECORD_EMPTY_TEXT] ?? SUBRECORD_DEFAULT_EMPTY_TEXT);
+            $htmlBody .= Support::wrapTag("<tr>", $rowHtml, true);
+        }
         return $htmlBody;
     }
 
diff --git a/extension/Classes/Core/Constants.php b/extension/Classes/Core/Constants.php
index 3f0256a83579cc55e99e47a365d70be40ffbee26..fd6c8745af7d855ef2daaabee9cc6c0a16d6694b 100644
--- a/extension/Classes/Core/Constants.php
+++ b/extension/Classes/Core/Constants.php
@@ -823,7 +823,6 @@ const SIP_EXCLUDE_XDEBUG_SESSION_START = 'XDEBUG_SESSION_START';
 // FURTHER: all extracted params from 'urlparam
 
 const ACTION_KEYWORD_SLAVE_ID = 'slaveId';
-
 const VAR_RANDOM = 'random';
 const VAR_FILE_DESTINATION = 'fileDestination';
 const VAR_SLAVE_ID = ACTION_KEYWORD_SLAVE_ID;
@@ -1004,6 +1003,8 @@ const QUESTION_DELETE = 'Do you really want to delete the record?';
 const SUBRECORD_COLUMN_DEFAULT_MAX_LENGTH = 20;
 const SUBRECORD_COLUMN_TITLE_EDIT = 'subrecordColumnTitleEdit';
 const SUBRECORD_COLUMN_TITLE_DELETE = 'subrecordColumnTitleDelete';
+const SUBRECORD_EMPTY_TEXT = 'subrecordEmptyText';
+const SUBRECORD_DEFAULT_EMPTY_TEXT = 'Currently no records exist.';
 const FORM_ELEMENTS_NATIVE = 'native';
 const FORM_ELEMENTS_SUBRECORD = 'subrecord';
 const FORM_ELEMENTS_NATIVE_SUBRECORD = 'native_subrecord';
@@ -1783,7 +1784,7 @@ const LINE_ALT_INSERT_ID = 'altInsertId';
 const COLUMN_LINK = 'link';
 const COLUMN_EXEC = 'exec';
 const COLUMN_THUMBNAIL = 'thumbnail';
-
+const COLUMN_FUNCTION = 'function';
 const COLUMN_PPAGE = 'Page';
 const COLUMN_PPAGEC = 'Pagec';
 const COLUMN_PPAGED = 'Paged';
diff --git a/extension/Classes/Core/Evaluate.php b/extension/Classes/Core/Evaluate.php
index e4f469630a19c9057e4b1f846b84467d6affe593..c82ba2f867dec33185f9746467b5a649851b4237 100644
--- a/extension/Classes/Core/Evaluate.php
+++ b/extension/Classes/Core/Evaluate.php
@@ -15,11 +15,11 @@ use IMATHUZH\Qfq\Core\Helper\OnString;
 use IMATHUZH\Qfq\Core\Helper\Path;
 use IMATHUZH\Qfq\Core\Helper\Support;
 use IMATHUZH\Qfq\Core\Report\Link;
+use IMATHUZH\Qfq\Core\Report\Report;
 use IMATHUZH\Qfq\Core\Report\Tablesorter;
 use IMATHUZH\Qfq\Core\Store\Sip;
 use IMATHUZH\Qfq\Core\Store\Store;
 
-
 const EVALUATE_DB_INDEX_DEFAULT = 0;
 /**
  * Class Evaluate
@@ -52,9 +52,8 @@ class Evaluate {
     private $endDelimiter = '';
     private $endDelimiterLength = 0;
     private $sqlKeywords = array('SELECT ', 'INSERT ', 'DELETE ', 'UPDATE ', 'SHOW ', 'REPLACE ', 'TRUNCATE ', 'DESCRIBE ', 'EXPLAIN ', 'SET ');
-
     private $escapeTypeDefault = '';
-
+    private $report = null;
 
 //    private $debugStack = array();
 
@@ -297,6 +296,34 @@ class Evaluate {
         return DND_DATA_DND_API . '="' . Path::urlApi(API_DRAG_AND_DROP_PHP) . '?s=' . $s . '"';
     }
 
+    /** Execute qfqFunction and output value. Content is accessible in record store
+     *
+     * @param $arrToken
+     * @param $foundInStore
+     * @return string
+     * @throws \CodeException
+     * @throws \UserFormException
+     * @throws \UserReportException
+     * @throws \DbException
+     */
+    private function inlineFunction($arrToken, &$foundInStore): string {
+        $output = '';
+        $token = OnString::trimQuote(trim(implode(' ', $arrToken)));
+        if ($this->report === null) {
+            $this->report = new Report(array(), $this);
+        }
+
+        $this->report->doQfqFunction($token);
+        $foundInStore = TOKEN_FOUND_AS_COLUMN;
+
+        // Check for => in qfqFunction. If not given then output content.
+        if (!strpos($token, '=>')) {
+            $output = $this->store::getVar(COLUMN_FUNCTION_OUTPUT, STORE_RECORD);
+        }
+
+        return $output;
+    }
+
     /**
      * Tries to substitute $token.
      * Token might be:
@@ -395,6 +422,10 @@ class Evaluate {
                     $baseUrlAttribute = DATA_TABLESORTER_BASE_URL . "='" . $this->store->getVar(SYSTEM_BASE_URL, STORE_SYSTEM) . "'";
                     return ($this->tablesorter->inlineTablesorterView($arrToken[VAR_INDEX_VALUE], $foundInStore, $frCmd)) . $baseUrlAttribute;
                     break;
+
+                case COLUMN_FUNCTION:
+                    return ($this->inlineFunction($arrToken, $foundInStore));
+                    break;
                 default:
                     break;
             }
diff --git a/extension/Classes/Core/Report/Report.php b/extension/Classes/Core/Report/Report.php
index b52fda83cc387284e1a2fe0fe6a182a5092b0d40..c5dad53c847bcc7ace1a5be6d0b1507dcf12cfe1 100644
--- a/extension/Classes/Core/Report/Report.php
+++ b/extension/Classes/Core/Report/Report.php
@@ -45,6 +45,7 @@ const DEFAULT_BOOTSTRAP_BUTTON = 'bootstrapButton';
 /**
  * Class Report
  * @package qfq
+ *
  */
 class Report {
 
@@ -424,7 +425,7 @@ class Report {
      * Return 'return values' in STORE_RECORD and QFQ function output in {{_output:R}}.
      * BTW: the QFQ function is cached and read only once. The evaluation is not cached.
      *
-     * @param $cmd  # 'getFirstName(pId) => firstName, myLink'
+     * @param string $cmd  # 'getFirstName(pId) => firstName, myLink'
      * @throws \CodeException
      * @throws \DbException
      * @throws \DownloadException
@@ -437,7 +438,7 @@ class Report {
      * @throws \UserFormException
      * @throws \UserReportException
      */
-    private function doQfqFunction($cmd) {
+    public function doQfqFunction(string $cmd): void {
         // QFQ function cache
         static $functionCache = array();
 
diff --git a/extension/RELEASE.txt b/extension/RELEASE.txt
index 8cb0860b922bdc43a1e9135cc14b112a88082b3d..073b0f2041f6a5220e42eef9307dc05c24964ee7 100644
--- a/extension/RELEASE.txt
+++ b/extension/RELEASE.txt
@@ -12,6 +12,7 @@
 .. --------------------------------------------used to the update the records specified ------
 .. Best Practice T3 reST: https://docs.typo3.org/m/typo3/docs-how-to-document/master/en-us/WritingReST/CheatSheet.html
 ..             Reference: https://docs.typo3.org/m/typo3/docs-how-to-document/master/en-us/WritingReST/Index.html
+..
 .. Italic *italic*
 .. Bold **bold**
 .. Code ``text``
@@ -19,7 +20,6 @@
 .. Internal Link: :ref:`downloadButton` (default url text) or :ref:`download Button<downloadButton>` (explicit url text)
 .. Add Images:    .. image:: ./Images/a4.jpg
 ..
-..
 .. Admonitions
 ..           .. note::   .. important::     .. tip::     .. warning::
 .. Color:   (blue)       (orange)           (green)      (red)
@@ -52,6 +52,30 @@ Features
 Bug Fixes
 ^^^^^^^^^
 
+Version 23.10.1
+---------------
+
+Date: 22.10.2023
+
+Notes
+^^^^^
+
+Features
+^^^^^^^^
+
+* #15682 / Subrecord hide please save record first if there is no table title.
+* #15098 / Implemented qfqFunction in QFQ variable for usage in forms.
+* Doc: Replace many places single back tick by double back tick. Add hint for 'Row size too large'.  Added Enis & Jan
+  as Developer. Add hint use mysqldump with one row per record.
+
+Bug Fixes
+^^^^^^^^^
+
+* #17003 / inline edit - dark mode has wrong css path.
+* #17075 / Fix broken '... AS _restClient'.
+* #17091 / upload_Incorrect_integer_value_fileSize.
+* RTD: Fix broken readthedocs rendering.
+
 Version 23.10.0
 ---------------
 
@@ -128,6 +152,7 @@ Notes
 Bug Fixes
 ^^^^^^^^^
 
+* #16372 / Upload Element 'Undefined index htmlDownloadButton' und 'unknown mode ID'
 * #16381 / Form title dynamic update broken.
 * #16392 / Reevaluate sanitize class for each store.
 * Fix db column enum dropdown 'data truncated'
diff --git a/extension/ext_emconf.php b/extension/ext_emconf.php
index 3e781ff4b54b95d4dc6f735096c2eec86038e651..776d94d9d8f8f282026da472b5127926cf71f4b5 100644
--- a/extension/ext_emconf.php
+++ b/extension/ext_emconf.php
@@ -12,7 +12,7 @@ $EM_CONF['qfq'] = array(
     'dependencies' => 'fluid,extbase',
     'clearcacheonload' => true,
     'state' => 'stable',
-    'version' => '23.10.0',
+    'version' => '23.10.1',
     'constraints' => [
         'depends' => [
             'typo3' => '8.0.0-11.9.99',
@@ -20,6 +20,5 @@ $EM_CONF['qfq'] = array(
         'conflicts' => [],
         'suggests' => [],
     ],
-
 );
 
diff --git a/version b/version
index 7d7a0702435d3d1f633fc95f064cdd3df32f6caa..16e4d40238a8232ecfa8ee3e49f874f4637fd3ad 100644
--- a/version
+++ b/version
@@ -1 +1 @@
-23.10.0
+23.10.1