diff --git a/doc/NewVersion.md b/doc/NewVersion.md
index 80f117d057cd77bae06b6126dc3c259232a5dfda..923c7d9f34bfc3a70be012321290e30ebd033851 100644
--- a/doc/NewVersion.md
+++ b/doc/NewVersion.md
@@ -6,13 +6,19 @@ Neue Versionsnummer
    * extension/Documentation/_make/conf.py: release, version
    * extension/Documentation/Settings.yml: version
    * extension/ext_emconf.php: version
+   * extension/RELEASE.txt
+
+2) Im Projektverzeichnis:
+
+   make t3sphinx   (dadurch fallen Fehler in RESTdoc Syntax auf)
 
-2) Im Projectverzeichnis:
-  make t3sphinx   (nicht sicher ob das noetig ist)
   
 3) Merge auf master Branch
+
+   git checkout master
+   git merge crose_work
   
-4) Neuen Tag vergeben: git tag 0.8
+4) Neuen Tag vergeben: git tag 0.10
 
 5) Alle Files, inkl. Tags, in GIT einchecken.
 
@@ -20,6 +26,7 @@ Neue Versionsnummer
 
 7) In T3 Instanz Dokumentation rendern lassen.
   
- T3 6.2:  Admin Tools > Extension Manager > QFQ > Doku HTML: rechts oben 'Render Documentation'
+    T3 6.2:  Admin Tools > Extension Manager > QFQ > Doku HTML: rechts oben 'Render Documentation'
+    
+    
   
-Note
\ No newline at end of file
diff --git a/extension/Documentation/Settings.yml b/extension/Documentation/Settings.yml
index 0033e03ae500b91de02807b884c63bb1ab5a6ef3..a426140571cfc741dfe5d7645f02ba94a62a3690 100644
--- a/extension/Documentation/Settings.yml
+++ b/extension/Documentation/Settings.yml
@@ -6,8 +6,8 @@
 conf.py:
   copyright: 2017
   project: QFQ Extension
-  version: 0.8
-  release: 0.8.0
+  version: 0.10
+  release: 0.10.0
   latex_documents:
   - - Index
     - qfq.tex
diff --git a/extension/Documentation/UsersManual/Index.rst b/extension/Documentation/UsersManual/Index.rst
index 4c382400226ea5e8eb381889deeaca08dbfd363f..0be0815a3b31b156f0e678afa46b0029c622e421 100644
--- a/extension/Documentation/UsersManual/Index.rst
+++ b/extension/Documentation/UsersManual/Index.rst
@@ -228,7 +228,7 @@ Only variables that are known in a specified store can be substituted.
  +-----+----------------------------------------------------------------------------------------+----------------------------------------------------------------------------+
  |Name |Description                                                                             | Content                                                                    |
  +=====+========================================================================================+============================================================================+
- | F   | :ref:`STORE_FORM`: data not saved in database yet.                                     | All native form elements. Recent values from the Browser.                  |
+ | F   | :ref:`STORE_FORM`: data not saved in database yet.                                     | All native *FormElements*. Recent values from the Browser.                 |
  +-----+----------------------------------------------------------------------------------------+----------------------------------------------------------------------------+
  | S   | :ref:`STORE_SIP`: Client parameter 's' will indicate the current SIP, which will be    | sip, r (record_id), form                                                   |
  |     | loaded from the SESSION repo to the SIP-Store.                                         |                                                                            |
@@ -277,14 +277,14 @@ Store: *FORM* - F
 * Represents the values in the form, typically before saving them.
 * Used for:
 
-  * Formelements who will be rerendered, after a parent element has been changed by the user.
-  * Formelement actions, before saving the form.
-  * Values will be sanitized by the class configured in corresponding the formelement. By default, the sanitize class is `alnumx`.
+  * *FormElements* who will be rerendered, after a parent *FormElement* has been changed by the user.
+  * *FormElement* actions, before saving the form.
+  * Values will be sanitized by the class configured in corresponding the *FormElement*. By default, the sanitize class is `alnumx`.
 
  +-------------------------+--------------------------------------------------------------------------------------------------------------------------------------------+
  | Name                    | Explanation                                                                                                                                |
  +=========================+============================================================================================================================================+
- | FormElement name        | Name of native formelement. To get, exactly and only, the specified form element (for 'p_id'): *{{p_id:F}}*                                |
+ | FormElement name        | Name of native *FormElement*. To get, exactly and only, the specified *FormElement* (for 'p_id'): *{{p_id:F}}*                             |
  +-------------------------+--------------------------------------------------------------------------------------------------------------------------------------------+
 
 .. _STORE_SIP:
@@ -321,11 +321,11 @@ Store: *RECORD* - R
 * Current record loaded in Form.
 * If r=0, alle values are empty.
 
- +------------------------+--------------------------------------------------------------------------------------------------------------------------------------------+
- | Name                   | Explanation                                                                                                                                |
- +========================+============================================================================================================================================+
- | <column name>          | Name of a column of the primary table (as defined in the current form). To get, exactly and only, the specified form element: *{{p_id:R}}* |
- +------------------------+--------------------------------------------------------------------------------------------------------------------------------------------+
+ +------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------+
+ | Name                   | Explanation                                                                                                                                      |
+ +========================+==================================================================================================================================================+
+ | <column name>          | Name of a column of the primary table (as defined in the current form). To get, exactly and only, the specified form *FormElement*: *{{p_id:R}}* |
+ +------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------+
 
 .. _STORE_CLIENT:
 
@@ -386,7 +386,7 @@ Store: *TYPO3* (Bodytext) - T
 
 * **note**: not available
   * in 'dynamicUpdate' or
-  * by FormElement class 'action' with type 'beforeSave', 'afterSave', 'beforeDelete', 'afterDelete'.
+  * by *FormElement* class 'action' with type 'beforeSave', 'afterSave', 'beforeDelete', 'afterDelete'.
 
 .. _STORE_VARS:
 
@@ -398,7 +398,7 @@ Store: *VARS* - V
  +=========================+============================================================================================================================================+
  | random                  | random string with length of 32 chars, alphanum                                                                                            |
  +-------------------------+--------------------------------------------------------------------------------------------------------------------------------------------+
- | slaveId                 | see FormElement `action`                                                                                                                   |
+ | slaveId                 | see *FormElement* `action`                                                                                                                 |
  +-------------------------+--------------------------------------------------------------------------------------------------------------------------------------------+
 
 
@@ -512,7 +512,7 @@ Form: main
 +------------------------+----------------------------------------------------------+-----------------------------------------------------------------------------------------+
 |bsLabelColumns          | string                                                   | The bootstrap grid system is based on 12 columns. The sum of *bsLabelColumns*,          |
 +------------------------+----------------------------------------------------------+ *bsInputColumns* and *bsNoteColumns* should be 12. These values here are the base values|
-|bsInputColumns          | string                                                   | for all formelements. Exceptions per formelement can be specified per formelement.      |
+|bsInputColumns          | string                                                   | for all *FormElements*. Exceptions per *FormElement* can be specified per *FormElement*.|
 +------------------------+----------------------------------------------------------+ Default: label=3, input=6, note=3                                                       |
 |bsNoteColumns           | string                                                   |                                                                                         |
 +------------------------+----------------------------------------------------------+-----------------------------------------------------------------------------------------+
@@ -531,7 +531,7 @@ showButton
 Display or hide the button `new`, `delete`, `close`, `save`.
 
 * *new*: Creates a new record. If the form needs any special parameter via SIP or Client, hide this 'new' button - the necessary parameter are not provided.
-* *delete*: This either deletes the current record only, or (if defined via action form element 'before Delete' ) any specified subrecords.
+* *delete*: This either deletes the current record only, or (if defined via action *FormElement* 'before Delete' ) any specified subrecords.
 * *close*: Close the current form. If there are changes, a popup opens and ask to save / close / cancel. The last page from the history will be shown.
 * *save*: Save the form.
 
@@ -553,10 +553,12 @@ parameter
 +------------------------+--------+----------------------------------------------------------------------------------------------------------+
 | classPill              | string | HTML div with given class, surrounding the `pill` title line.                                            |
 +------------------------+--------+----------------------------------------------------------------------------------------------------------+
-| classBody              | string | HTML div with given class, surrounding all `form elements`.                                              |
+| classBody              | string | HTML div with given class, surrounding all *FormElement*.                                                |
 +------------------------+--------+----------------------------------------------------------------------------------------------------------+
 | submitButtonText       | string | Show save button, with the <submitButtonText> at the bottom of the form                                  |
 +------------------------+--------+----------------------------------------------------------------------------------------------------------+
+| extraDeleteForm        | string | Name of a form which specifies how to delete the primary record and optional slave records               |
++------------------------+--------+----------------------------------------------------------------------------------------------------------+
 
 * Example:
 
@@ -605,12 +607,31 @@ classBody
 * Check `typo3conf/ext/qfq/Resources/Public/Css/qfq-bs.css` for predefined classes.
 * Typical use:
 
-  1) adjust the background color of the `form element` area.
+  1) adjust the background color of the *FormElement* area.
   1) make all form labels right align: `qfq-form-right`.
 
 * Predefined background colors: `qfq-color-white`, `qfq-color-grey-1` (dark), `qfq-color-grey-2` (light),
   `qfq-color-blue-1` (dark), `qfq-color-blue-2`. (light)
 
+submitButtonText
+''''''''''''''''
+
+If specified and non empty, display a regular submit button at the bottom of the page with the given text.
+This gives the form a ordinary HTML-form look'n' feel. With this option, the standard buttons on the top right border
+should be hided to not confuse the user.
+
+extraDeleteForm
+'''''''''''''''
+
+Depending on the database definition, it might be necessary to delete the primary record *and* corresponding slave records.
+To not repeat such 'slave record delete definition', an 'extraDeleteForm' can be specified. If the user opens a record
+in a form and clicks on the 'delete' button, a defined 'extraDeleteForm'-form will be used to delete primary and slave
+records instead of using the current form.
+E.g. if there are multiple different forms to work on the same table, all of theses forms might reference to the same
+'extraDeleteForm'-form. This simplifies the maintenance.
+
+The 'extraDeleteForm' parameter might be specified for a 'form' and/or for 'subrecords'
+
 FormElements
 ------------
 * Each *form* contains one or more *FormElement*.
@@ -620,7 +641,7 @@ FormElements
   * :ref:`class-native`
   * :ref:`class-action`
 
-* Ordering and grouping: Native Form-Elements and Container-Elements (both with feIdContainer=0) will be ordered by 'ord'.
+* Ordering and grouping: Native *FormElements* and Container-Elements (both with feIdContainer=0) will be ordered by 'ord'.
 * Inside of a container, all nested elements will be displayed.
 
 .. _class-container:
@@ -628,13 +649,13 @@ FormElements
 Class: Container
 ----------------
 
-* Pills are containers for 'fieldset' *and* / *or* 'native' Form-Elements.
-* Fieldsets are containers for 'native' Form-Elements
+* Pills are containers for 'fieldset' *and* / *or* 'native' *FormElements*.
+* Fieldsets are containers for 'native' *FormElements*.
 
 Type: fieldset
 ^^^^^^^^^^^^^^
 
-* Native Formelements can be assigned to a fieldset.
+* Native *FormElements* can be assigned to a fieldset.
 * name: technical name, used as HTML identifier.
 * label: Shown title of the fieldset.
 
@@ -643,15 +664,15 @@ Type: pill
 
 * Pill is synonymous for a tab. A pill looks like a tab.
 * Pills are only available with mode render='bootstrap'.
-* If there is at least one pill defined, every native Formelement needs to be assigned to a pill or to a fieldset.
+* If there is at least one pill defined, every native *FormElement* needs to be assigned to a pill or to a fieldset.
 * If there is at least one pill defined, every fieldset needs to be assigned to a pill.
 
 * Parameter:
 
-  * FormElement.'''name''': technical name, used as HTML identifier.
-  * FormElement.'''label''': Label shown on the corresponding pill button or inside the dropdown menu.
-  * FormElement.'''type''': *pill*
-  * FormElement.'''feIdContainer''': 0  # Pill's can't be nested.
+  * FormElement.*name*: technical name, used as HTML identifier.
+  * FormElement.*label*: Label shown on the corresponding pill button or inside the dropdown menu.
+  * FormElement.*type*: *pill*
+  * FormElement.*feIdContainer*: 0  # Pill's can't be nested.
   * Form.'''Parameter''': *maxVisiblePill=<nr>* Number of Pill-Buttons shown. Undefined means unlimited. Excess Pill buttons will be displayed as a dropdown menu.
 
 .. _class-native:
@@ -659,6 +680,8 @@ Type: pill
 Class: Native
 -------------
 
+Fields:
+
 +---------------+-----------------------------+---------------------------------------------------------------------------------------------------+
 | Name          | Type                        | Description                                                                                       |
 +===============+=============================+===================================================================================================+
@@ -670,17 +693,17 @@ Class: Native
 +---------------+-----------------------------+---------------------------------------------------------------------------------------------------+
 |enabled        | enum('yes'|'no')            |                                                                                                   |
 +---------------+-----------------------------+---------------------------------------------------------------------------------------------------+
-|dynamicUpdate  | enum('yes'|'no')            | In the browser, formelements with "dynamicUpdate='yes'"  will be updated depending on user input. |
-|               |                             | :ref:`dynamic-update`                                                                             |
+|dynamicUpdate  | enum('yes'|'no')            | In the browser, *FormElements* with "dynamicUpdate='yes'"  will be updated depending on user      |
+|               |                             | input. :ref:`dynamic-update`                                                                      |
 +---------------+-----------------------------+---------------------------------------------------------------------------------------------------+
 |name           | string                      |                                                                                                   |
 +---------------+-----------------------------+---------------------------------------------------------------------------------------------------+
-|label          | string                      | Label of formelement. Depending on layout model, left or on top of the formelement                |
+|label          | string                      | Label of *FormElement*. Depending on layout model, left or on top of the *FormElement*            |
 +---------------+-----------------------------+---------------------------------------------------------------------------------------------------+
 |mode           | enum('show', 'readonly',    | *Show*: regular user input field. This is the default.                                            |
 |               | 'required',                 | *Required*: User has to specify a value. Typically, an <empty string> represents 'no value'.      |
 |               | 'disabled' )                | *Readonly*: user can't change any data. Data not saved.                                           |
-|               |                             | *Disabled*: form element is not visible.                                                          |
+|               |                             | *Disabled*: *FormElement* is not visible.                                                         |
 +---------------+-----------------------------+---------------------------------------------------------------------------------------------------+
 |class          | enum('native', 'action',    | Details below.                                                                                    |
 |               | 'container')                |                                                                                                   |
@@ -693,12 +716,12 @@ Class: Native
 |checkType      | enum('min|max', 'pattern',  |                                                                                                   |
 |               | 'number', 'email')          |                                                                                                   |
 +---------------+-----------------------------+---------------------------------------------------------------------------------------------------+
-|checkPattern   | 'regexp'                    |if $check_type=='pattern': pattern to match                                                        |
+|checkPattern   | 'regexp'                    |If $check_type=='pattern': pattern to match                                                        |
 +---------------+-----------------------------+---------------------------------------------------------------------------------------------------+
-|onChange       | string                      |list of 'form element names' of current form, separated by ', ', If one of the named form elements |
+|onChange       | string                      |List of *FormElement*-names of current form, separated by ', ', If one of the named *FormElements* |
 |               |                             | change, reload own data / status / mode                                                           |
 +---------------+-----------------------------+---------------------------------------------------------------------------------------------------+
-|ord            | string                      |display order of form elements ('order' is a reserved keyword)                                     |
+|ord            | string                      | Display order of *FormElements* ('order' is a reserved keyword)                                   |
 +---------------+-----------------------------+---------------------------------------------------------------------------------------------------+
 |tabindex       | string                      |HTML tabindex attribute                                                                            |
 +---------------+-----------------------------+---------------------------------------------------------------------------------------------------+
@@ -713,34 +736,33 @@ Class: Native
 +---------------+-----------------------------+---------------------------------------------------------------------------------------------------+
 |maxLength      | string                      |Maximum characters for input.                                                                      |
 +---------------+-----------------------------+---------------------------------------------------------------------------------------------------+
-|note           | string                      |Note of formelement. Depending on layout model, right or below of the formelement                  |
+|note           | string                      |Note of *FormElement*. Depending on layout model, right or below of the *FormElement*.             |
 +---------------+-----------------------------+---------------------------------------------------------------------------------------------------+
-|tooltip        | text                        |Display this text as tooltip on mouse over                                                         |
+|tooltip        | text                        |Display this text as tooltip on mouse over.                                                        |
 +---------------+-----------------------------+---------------------------------------------------------------------------------------------------+
-|placeholder    | string                      |Text, displayed inside the input element in light grey                                             |
+|placeholder    | string                      |Text, displayed inside the input element in light grey.                                            |
 +---------------+-----------------------------+---------------------------------------------------------------------------------------------------+
-|clientJs       | text                        |Javascript called on 'on change' formelements                                                      |
+|clientJs       | text                        |Javascript called on 'on change' *FormElement*                                                     |
 +---------------+-----------------------------+---------------------------------------------------------------------------------------------------+
 |value          | text                        |Default value                                                                                      |
 +---------------+-----------------------------+---------------------------------------------------------------------------------------------------+
-|sql1           | text                        |SQL query  ('sql' is a reserved keyword)                                                           |
-+---------------+-----------------------------+---------------------------------------------------------------------------------------------------+
-|sql2           | text                        |second SQL query                                                                                   |
+|sql1           | text                        |SQL query                                                                                          |
 +---------------+-----------------------------+---------------------------------------------------------------------------------------------------+
-|parameter      | text                        |might contain misc parameter. Depends on the type of formelement.                                  |
+|parameter      | text                        |Might contain misc parameter. Depends on the type of *FormElement*.                                |
 +---------------+-----------------------------+---------------------------------------------------------------------------------------------------+
 |feGroup        | string                      | Comma-separated list of Typo3 FE Group ID. NOT SURE IF THIS WILL BE IMPLEMENTED. Native           |
-|               |                             | formElements, fieldsets and pills can be assigned to feGroups. Group status: show, hidden,        |
-|               |                             | disabled. Group Access: FE-Groups. User will be assigned to FE-Groups and the form defintion      |
+|               |                             | *FormElements*, fieldsets and pills can be assigned to feGroups. Group status: show, hidden,      |
+|               |                             | disabled. Group Access: FE-Groups. User will be assigned to FE-Groups and the form definition     |
 |               |                             | reference such FE-groups. Easy way of granting permission.                                        |
 +---------------+-----------------------------+---------------------------------------------------------------------------------------------------+
 |deleted        | string                      | 'yes'|'no'.                                                                                       |
 +---------------+-----------------------------+---------------------------------------------------------------------------------------------------+
-|modified       | timestamp                   |updated autmatically through stored procedure                                                      |
+|modified       | timestamp                   |updated automatically through stored procedure                                                     |
 +---------------+-----------------------------+---------------------------------------------------------------------------------------------------+
 |created        | datetime                    |set once through QFQ                                                                               |
 +---------------+-----------------------------+---------------------------------------------------------------------------------------------------+
 
+Implications
 
 +------------------+----------+---------+-------------+----------+--------+-------+------+----------+-------+--------+-----------+---------+--------+--------+
 | Attribute        | checkbox | dateJQW | datetimeJQW |  gridJQW | extra  | text  | note | password | radio | select | subrecord | timeJQW | upload | editor |
@@ -749,11 +771,11 @@ Class: Native
 +------------------+----------+---------+-------------+----------+--------+-------+------+----------+-------+--------+-----------+---------+--------+--------+
 |formId            |Form                                                                                                                            |        |
 +------------------+----------+---------+-------------+----------+--------+-------+------+----------+-------+--------+-----------+---------+--------+--------+
-|containerId       |Assign the Formelement to user defined fieldSet or pill                                                                         |        |
+|containerId       |Assign the *FormElement* to user defined fieldSet or pill                                                                       |        |
 +------------------+----------+---------+-------------+----------+--------+-------+------+----------+-------+--------+-----------+---------+--------+--------+
-|enabled           |Formelement is active or not                                                                                                    |        |
+|enabled           |*FormElement* is active or not                                                                                                  |        |
 +------------------+----------+---------+-------------+----------+--------+-------+------+----------+-------+--------+-----------+---------+--------+--------+
-|name              |Name of a column of the primary table. Formelements with a corresponding table will be saved automatically.                     |        |
+|name              |Name of a column of the primary table. *FormElements* with a corresponding table will be saved automatically.                   |        |
 +------------------+----------+---------+-------------+----------+--------+-------+------+----------+-------+--------+-----------+---------+--------+--------+
 |label             |Label shown to the user.                                                                                                        |        |
 +------------------+----------+---------+-------------+----------+--------+-------+------+----------+-------+--------+-----------+---------+--------+--------+
@@ -824,7 +846,14 @@ Class: Native
 * 2: Any number >1 makes the 'select' input 'multiple' ready.
 * See: https://www.w3.org/TR/html5/forms.html#file-upload-state-(type=file)
 
-* All 'native' Formelements like 'input', 'checkbox', ...
+* All 'native' *FormElements* like 'input', 'checkbox', ...
+
+'autofocus': The first *FormElement* with this attribute will get the focus after form load. If there is no such attribute
+ given to any *FormElement*, the attribute will be automatically assigned to the first editable *FormElement*.
+
+To disable 'autofocus' on a form, set 'autofocus=0' on the first editable *FormElement*.
+
+Note: If there are multiple pills defined on a form, only the first pill will be set with 'autofocus'.
 
 Type: checkbox
 ^^^^^^^^^^^^^^
@@ -864,7 +893,7 @@ Checkboxes can be rendered in mode:
       * ``itemList=1:red,2:blue,3:orange``
       * ``itemList={{!SELECT id, value FROM someTable}}``
 
-  * FormElement '''Maxlength''' - vertical or horizontal alignment:
+  * *FormElement* Maxlength - vertical or horizontal alignment:
 
      * Value: '', 0, 1 - The radios will be aligned vertical.
      * Value: >1 - The readios will be aligned horizontal, with a linebreak every 'value' elements.
@@ -888,7 +917,7 @@ Type: datetime
 Type: extra
 ^^^^^^^^^^^
 * Element is not shown in the browser.
-* The element can be used to define / precalculate values for a column, which do not already exist as a native FormElement.
+* The element can be used to define / precalculate values for a column, which do not already exist as a native *FormElement*.
 * The element is build /computed on form load.
 
 Type: text
@@ -947,22 +976,22 @@ Type: radio
       * One column in resultset >> first column represents *label*
       * Two or more columns in resultset >> first column represents *id* and second column represents *label*.
 
-  * b) FormElement.'''parameter''':
+  * b) *FormElement*.'''parameter''':
 
     * '''itemList''' attribute. E.g.: *itemList=red,blue,orange* or *itemList=1:red,2:blue:3:orange*
 
   * c) Definition of the *enum* or *set* field (only labels, no ids are possible).
 
-* FormElement '''Maxlength''' - *vertical* or *horizontal* alignment:
+* *FormElement* '''Maxlength''' - *vertical* or *horizontal* alignment:
 
    * Value: '', 0, 1 - The radios will be aligned vertical.
    * Value: >1 - The readios will be aligned horizontal, with a linebreak every 'value' elements.
 
-* FormElement.'''parameter''':
+* *FormElement*.'''parameter''':
 
   * '''emptyItemAtStart''': Existence of this item inserts an empty entry at the beginning of the selectlist.
   * '''emptyItemAtEnd''': Existence of this item inserts an empty entry at the end of the selectlist.
-  * '''emptyHide''': Existence of this item hides the empty entry. This is usefull for e.g. Enums, which have a en empty
+  * '''emptyHide''': Existence of this item hides the empty entry. This is useful for e.g. Enums, which have a en empty
     entry and the empty value should not be an option to be selected.
 
 Type: select
@@ -978,29 +1007,29 @@ Type: select
       * One column in resultset >> first column represents *label*
       * Two or more columns in resultset >> first column represents *id* and second column represents *label*.
 
-  * b) FormElement.'''parameter''':
+  * b) *FormElement*.'''parameter''':
 
     * '''itemList''' attribute. E.g.: *itemList=red,blue,orange* or *itemList=1:red,2:blue:3:orange*
 
   * c) Definition of the *enum* or *set* field (only labels, no ids are possible).
 
-* FormElement.'''size''':
+* *FormElement*.'''size''':
 
   * <empty>|0|1: Dropdown list.
   * >1: Select field with 'size' rows height. Multiple selection of items is possible.
 
-* FormElement.'''parameter''':
+* *FormElement*.'''parameter''':
 
   * '''emptyItemAtStart''': Existence of this item inserts an empty entry at the beginning of the selectlist.
   * '''emptyItemAtEnd''': Existence of this item inserts an empty entry at the end of the selectlist.
-  * '''emptyHide''': Existence of this item hides the empty entry. This is usefull for e.g. Enums, which have a en empty
+  * '''emptyHide''': Existence of this item hides the empty entry. This is useful for e.g. Enums, which have an empty
     entry and the empty value should not be an option to be selected.
 
 Type: subrecord
 ^^^^^^^^^^^^^^^
 
-The FormElement type 'subrecord' renders a list of records (so called secondary records), typically to show, edit, delete
-or add new records. The list is defined as a SQL query. The number of records shown is not limited. These FormElement
+The *FormElement* type 'subrecord' renders a list of records (so called secondary records), typically to show, edit, delete
+or add new records. The list is defined as a SQL query. The number of records shown is not limited. These *FormElement*
 will be rendered inside the form as a HTML table.
 
 * *sql1*: SQL query to select records. E.g.::
@@ -1048,6 +1077,7 @@ will be rendered inside the form as a HTML table.
   * *form*: Target form, e.g. *form=person*
   * *page*: Target page with detail form. If none specified, use the current page.
   * *title*: Title displayed over the table in the current form.
+  * *extraDeleteForm*: Optional. The per row delete Button will reference the form specified here (for deleting) instead of the default (*form*).
   * *detail*: Mapping of values from the primary form to the target form (defined via `form=...`).
 
     * Syntax::
@@ -1056,7 +1086,7 @@ will be rendered inside the form as a HTML table.
 
     * Example: *detail=id:personId,&12:xId,&{{a}}:personId*
     * By default, the given value will overwrite values on the target record. In most situations, this is the wished behaviour.
-    * Exceptions of the default behaviour have to be defined on the target form in the corresponding formelement in the
+    * Exceptions of the default behaviour have to be defined on the target form in the corresponding *FormElement* in the
       field *value* by changing the default Store priority definition. E.g. `{{<columnname>:RS0}}` - For existing records,
       the store `R` will provide a value. For new records, store `R` is empty and store S will be searched for a value:
       the value defined in `detail` will be choosen. At last the store '0' is defined as a fallback.
@@ -1090,7 +1120,7 @@ Either the user is satisfied now or the user can delete the uploaded file (and m
 Until this point, the file is cached on the server but not copied to the final destination. The user have to save the
 current record, either to finalize the upload or to delete a previous uploaded file.
 
-* FormElement. *parameter*:
+* *FormElement*. *parameter*:
 
   * *fileDestination*: Destination where to copy the file. A good practice is to specify a relative `fileDestination` - such an
     installation (filesystem and database) are moveable.
@@ -1127,7 +1157,7 @@ Class: Action
 Type: before... | after...
 ^^^^^^^^^^^^^^^^^^^^^^^^^^
 
-These type of 'action' formelements will be used to implement data validation or creating/updating additional records.
+These type of 'action' *FormElements* will be used to implement data validation or creating/updating additional records.
 
 Types:
 
@@ -1156,15 +1186,15 @@ Validate
 
   Perform checks by fireing a SQL query and expecting a predefined number of selected records.
 
-  * OK: the `expectRecords` number of records has been selected. Continue processing the next FormElement.
+  * OK: the `expectRecords` number of records has been selected. Continue processing the next *FormElement*.
   * Fail: the `expectRecords` number of records has not been selected (less or more): Display the error message
-    `messageFail`and abort the whole (!) current form load or save.
+    `messageFail` and abort the whole (!) current form load or save.
 
-  FormElement.’‘’parameter’‘’:
+  *FormElement*.’‘’parameter’‘’:
 
-  * `requiredList` - List of `native`-formelement names: only if all of those elements are filled (!=0 and !=''), the *current*
-    `action`-FormElement will be processed. This will enable or disable the check, based on the user input! If no
-    `native`-formelement names are given, the specified check will always be performed.
+  * `requiredList` - List of `native`-*FormElement* names: only if all of those elements are filled (!=0 and !=''), the *current*
+    `action`-*FormElement* will be processed. This will enable or disable the check, based on the user input! If no
+    `native`-*FormElement* names are given, the specified check will always be performed.
   * `sqlValidate` - validation query. E.g.: `sqlValidate={{!SELECT id FROM Person AS p WHERE p.name LIKE {{name:F:all}} AND p.firstname LIKE {{firstname:F:all}} }}`
 
     * Pay attention to '{{!...' after the equal sign.
@@ -1180,14 +1210,15 @@ sqlInsert / sqlUpdate / sqlDelete
 '''''''''''''''''''''''''''''''''
 
   * Save values of a form to different record(s), optionally on different table(s).
-  * Typically usefull on 'afterSave' - be carefull when using it earlier, e.g. beforeLoad.
+  * Typically useful on 'afterSave' - be careful when using it earlier, e.g. beforeLoad.
 
-FormElement.’‘’parameter’‘’:
+*FormElement*.’‘’parameter’‘’:
 
-  * `requiredList` - List of `native`-FormElements: only if all of those elements are filled, the current
-    `action`-FormElement will be processed.
+  * `requiredList` - List of `native`-*FormElement*: only if all of those elements are filled, the current
+    `action`-*FormElement* will be processed.
   * `slaveId`:
-    * Auto fill: name the action `action`-FormElement equal to an existing column (table from the current form definition).
+
+    * Auto fill: name the action `action`-*FormElement* equal to an existing column (table from the current form definition).
       `slaveId` will be automatically filled with the value of the named column.
 
       * If there is no such named columnname, set `slaveId=0`.
@@ -1203,7 +1234,7 @@ Note:
 
   * `{{slaveId:V}}` can be used in any query as the current slaveId. It's *important* to Specify Store V!
 
-  * If the `action`-FormElement name exist as a column in the master record: Update that column *automatically* with the
+  * If the `action`-*FormElement* name exist as a column in the master record: Update that column *automatically* with the
     recent slaveId (after an INSERT the last_insert_id() acts as the new `slaveId`).
 
 
@@ -1237,9 +1268,9 @@ Type: sendmail
 
 * Send mail(s) after saving the record.
 
-* FormElement.'''value''': Body of the email.
+* *FormElement*.'''value''': Body of the email.
 
-* FormElement.’‘’parameter’‘’:
+* *FormElement*.’‘’parameter’‘’:
 
   * ‘’‘sendMailTo‘’‘ - Comma-separated list of receiver email addresses. Optional: 'realname <john@doe.com>. If there
     is no recipient email address, no mail will be sent.
@@ -1262,7 +1293,7 @@ Type: sendmail
 Dynamic Update
 --------------
 
-The 'Dynamic Update' feature makes a form more interactive. If a user change a FormElement who is tagged with
+The 'Dynamic Update' feature makes a form more interactive. If a user change a *FormElement* who is tagged with
 'dynamicUpdate', *all* elements who are tagged with 'DynamicUpdate', will be recalculated and rerendered.
 
 The following fields will be recalculated during 'Dynamic Update'
@@ -1272,13 +1303,13 @@ The following fields will be recalculated during 'Dynamic Update'
 
 To make a form dynamic:
 
- * Mark all FormElements with {dynamic update}=enabled, which should send **or** receive a 'do update' signal.
- * Define the receiving FormElements in a way, that they will interpret the recent user change. The form variable of the
-   specific sender FormElement `{{<sender element>:F:<sanitize>}}` should be part of one of the above fields to get an
+ * Mark all *FormElements* with {dynamic update}=enabled, which should send **or** receive a 'do update' signal.
+ * Define the receiving *FormElements* in a way, that they will interpret the recent user change. The form variable of the
+   specific sender *FormElement* `{{<sender element>:F:<sanitize>}}` should be part of one of the above fields to get an
    impact. E.g.:
    ::
 
-    [receiving formElement].parameter: itemList={{ SELECT IF({{carPriceRange:FE:alnumx}}='expensive','Ferrari,Tesla,Jaguar','General Motors,Honda,Seat,Fiat') }}
+    [receiving *FormElement*].parameter: itemList={{ SELECT IF({{carPriceRange:FE:alnumx}}='expensive','Ferrari,Tesla,Jaguar','General Motors,Honda,Seat,Fiat') }}
 
 * Label and Description are not 'Dynamic Update' aware (Feature Request #2081).
 
@@ -1419,8 +1450,8 @@ Text across several lines
 ^^^^^^^^^^^^^^^^^^^^^^^^^
 
 To make SQL queries, or QFQ records in general, more readable, it's possible to split a line across several lines. Lines
-with keywords are on their own (`QFQ Keywords (Bodytext)`_) starts a new line - if a line is not a 'keyword' line, it will
-be appended at the last keyword line. 'Keyword' lines are detected on:
+with keywords are on their own (`QFQ Keywords (Bodytext)`_ 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> =
  * {
@@ -1478,7 +1509,7 @@ last character of that line must be one of '{}[]()<>'. The corresponding braces
 
 Per QFQ tt-content record, only one type of nesting braces can be used.
 
-Be carefull to:
+Be careful to:
 
 * write nothing else than whitespaces/newline behind an **open brace**
 * the **closing brace** has to be alone on a line. ::
@@ -1592,7 +1623,7 @@ Special column names
 +------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
 |_exec                   |Run batch files or executables on the webserver.                                                                                                                                             |
 +------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
-|_vertical               |Render Text vertically. This is usefull for tables with limited column width.                                                                                                                |
+|_vertical               |Render Text vertically. This is useful for tables with limited column width.                                                                                                                 |
 +------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
 |_img                    |Display images.                                                                                                                                                                              |
 +------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
@@ -1663,7 +1694,7 @@ Column: _link
 +---+---+--------------+-----------------------------------+---------------------------+----------------------------------------------------------------------------------------------------------------------------------------+
 |   |   |SIP           |s[:0|1]                            |s, s:0, s:1                |If 's' or 's:1' a SIP entry is generated with all non Typo 3 Parameters. The URL contains only parameter 's' and Typo 3 parameter       |
 +---+---+--------------+-----------------------------------+---------------------------+----------------------------------------------------------------------------------------------------------------------------------------+
-|   |   |Delete record | x[:a|r|c]                         |x, x:r, x:c                |a: ajax (only QFQ internal used), r: report (default), c: close (current page, open last page)
+|   |   |Delete record | x[:a|r|c]                         |x, x:r, x:c                |a: ajax (only QFQ internal used), r: report (default), c: close (current page, open last page)                                          |
 +---+---+--------------+-----------------------------------+---------------------------+----------------------------------------------------------------------------------------------------------------------------------------+
 
 .. _render-mode:
@@ -1716,7 +1747,7 @@ Link Examples
 +-----------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------+
 |SELECT "p:form_person|c:e" AS _link                                    |<a class="external" href="?form_person">Text</a>                                                                                        |
 +-----------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------+
-|SELECT "p:form_person&note=Text|t:Person" AS _link                     |<a class="internal" href="?form_person&note=Text">Person</a>                                                                        |
+|SELECT "p:form_person&note=Text|t:Person" AS _link                     |<a class="internal" href="?form_person&note=Text">Person</a>                                                                            |
 +-----------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------+
 |SELECT "p:form_person|E" AS _link                                      |<a class="internal" href="?form_person"><img alttext="Edit" src="typo3conf/ext/qfq/Resources/Public/icons/edit.gif"></a>                |
 +-----------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------+
@@ -1878,7 +1909,7 @@ Mode: form
 * `r=<record id>`
 
 Deletes the record with id '<record id>' from the table specified in form '<form name>' as primary table.
-Additional action *formElement* of type *beforeDelete* or *afterDelete* will be fired too.
+Additional action *FormElement* of type *beforeDelete* or *afterDelete* will be fired too.
 
 Examples:
 '''''''''
@@ -2677,13 +2708,13 @@ via SIP parameter to the secondary form.
 On the secondary form: for 'new' records choose the computed value, for existing records leave the value
 unchanged.
 
-* Primary form, `subrecord` formelement, field `parameter`: set ::
+* Primary form, `subrecord` *FormElement*, field `parameter`: set ::
 
-    detail=id:formId,{{SELECT '&', IFNULL(fe.ord,0)+10 FROM Form AS f LEFT JOIN FormElement AS fe ON fe.formId=f.id WHERE
+    detail=id:formId,{{SELECT '&', IFNULL(fe.ord,0)+10 FROM Form AS f LEFT JOIN *FormElement* AS fe ON fe.formId=f.id WHERE
     f.id={{r:S0}} ORDER BY fe.ord DESC LIMIT 1}}:ord
 
 
-* Secondary form, `ord` formelement, field `value`: set
+* Secondary form, `ord` *FormElement*, field `value`: set
 
   ::
 
@@ -2694,7 +2725,7 @@ Version 2
 
 Compute the next 'ord' as default value direct inside the secondary form. No change is needed for the primary form.
 
-* Secondary form, `ord` formelement, field `value`: set `{{SELECT IF({{ord:R0}}=0,  MAX(IFNULL(fe.ord,0))+10,{{ord:R0}})  FROM (SELECT 1) AS a LEFT JOIN FormElement AS fe ON fe.formId={{formId:S0}} GROUP BY fe.formId}}`.
+* Secondary form, `ord` *FormElement*, field `value`: set `{{SELECT IF({{ord:R0}}=0,  MAX(IFNULL(fe.ord,0))+10,{{ord:R0}})  FROM (SELECT 1) AS a LEFT JOIN FormElement AS fe ON fe.formId={{formId:S0}} GROUP BY fe.formId}}`.
 
 Form: Person Wizard - firstname, city
 -------------------------------------
@@ -2704,7 +2735,7 @@ records not exist, the form should create it.
 
 Form primary table: Person
 
-Form salve table: Address
+Form slave table: Address
 
 Relation: `Person.id = Address.personId`
 
@@ -2715,14 +2746,14 @@ Relation: `Person.id = Address.personId`
   * Table: Person
   * Render: bootstrap
 
-* FormElement: firstname
+* *FormElement*: firstname
 
   * Class: **native**
   * Type: **text**
   * Name: firstname
   * Label: Firstname
 
-* FormElement: email, text, 20
+* *FormElement*: email, text, 20
 
   * Class: **native**
   * Type: **text**
@@ -2730,7 +2761,7 @@ Relation: `Person.id = Address.personId`
   * Label: City
   * Value: `{{SELECT city FROM Address WHERE personId={{r}} ORDER BY id LIMIT 1}}`
 
-* FormElement: insert/update address record
+* *FormElement*: insert/update address record
 
   * Class: **action**
   * Type: **afterSave**
@@ -2746,7 +2777,7 @@ Form: Person Wizard - firstname, single note
 --------------------------------------------
 
 Requirement: A form that displays the column 'firstname' from table 'Person' and 'note' from table 'Note'.
-If the records not exist, the form should create it.
+If the records don't exist, the form should create it.
 Column Person.noteId points to Note.id
 
 Form primary table: Person
@@ -2762,14 +2793,14 @@ Relation: `Person.id = Address.personId`
   * Table: Person
   * Render: bootstrap
 
-* FormElement: firstname
+* *FormElement*: firstname
 
   * Class: **native**
   * Type: **text**
   * Name: firstname
   * Label: Firstname
 
-* FormElement: email, text, 20
+* *FormElement*: email, text, 20
 
   * Class: **native**
   * Type: **text**
@@ -2777,7 +2808,7 @@ Relation: `Person.id = Address.personId`
   * Label: Note
   * Value: `{{SELECT Note FROM Note AS n, Person AS p WHERE p.id={{r}} AND p.noteId=n.id ORDER BY id }}`
 
-* FormElement: insert/update address record
+* *FormElement*: insert/update address record
 
   * Class: **action**
   * Type: **afterSave**
@@ -2853,4 +2884,4 @@ FAQ
 
  * Q: A variable {{<var>}} is shown as empty string, but there should be a value.
 
-   * A: The sanatize rule is violeted and therefore the value has been removed. Set {{<var>:<store>:all}} as a test.
\ No newline at end of file
+   * A: The sanatize rule is violeted and therefore the value has been removed. Set {{<var>:<store>:all}} as a test.
diff --git a/extension/Documentation/_make/conf.py b/extension/Documentation/_make/conf.py
index dd359d00eecc98adeb9fcf582da4a6379a10d7a5..9470e88de345ebe5bccc4117544743bd0ed57fa7 100644
--- a/extension/Documentation/_make/conf.py
+++ b/extension/Documentation/_make/conf.py
@@ -59,7 +59,7 @@ copyright = u'2017, Carsten Rose'
 # The short X.Y version.
 version = '0.8'
 # The full version, including alpha/beta/rc tags.
-release = '0.8.0'
+release = '0.10.0'
 
 # The language for content autogenerated by Sphinx. Refer to documentation
 # for a list of supported languages.
diff --git a/extension/RELEASE.txt b/extension/RELEASE.txt
new file mode 100644
index 0000000000000000000000000000000000000000..81f22c77334025a8be708b3e90d564d09b37f81f
--- /dev/null
+++ b/extension/RELEASE.txt
@@ -0,0 +1,54 @@
+Version 0.10
+============
+
+Features
+--------
+
+ * Implemented Parameter 'extraDeleteForm' for 'forms' and 'subrecords'. Update doc.
+
+Bug fixes
+---------
+
+ * Suppress rendering of form title during a 'delete' call. No one will see it and required parameters are not supplied.
+ * In case of broken SQL queries, print them in ajax error message.
+ * Remove parameter 'table' from Delete SIP URLs. ToolTip updated.
+
+Version 0.9
+===========
+
+Features
+--------
+ * FormEditor:
+   * design update - new default background color: grey.
+   * per form configureable background colors.
+   * Optional right align of all form element labels.
+   * Added config.qfq.ini values CSS_CLASS_QFQ_FORM_PILL, CSS_CLASS_QFQ_FORM_BODY, CSS_CLASS_QFQ_CONTAINER.
+
+Bug fixes
+---------
+
+ * BuildFormBootstrap.php: added new class name 'qfq-label' to form labels - needed to assign 'qfq-form-right' class. Changed wrapping of formelements from 'col-md-8' (wrong) to 'col-md-12'.
+ * QuickFormQuery.php: Set default for new F_CLASS_PILL & F_CLASS_BODY.
+ * formEditor.sql: New default background color for formElements is blue.
+ * qfq-bs.css.less: add classes qfq-form-pill, qfq-form-body, form-group (center), qfq-color-*, qfq-form-right.
+ * Index.rst: Add note to hierachy chars. Fixed uncomplete doc to a) bs*Columns, showButton. Add classPill, classBody. Rewrote form.paramter.class.
+ * QuickFormQuery.php: Button save/ close/ delete/ new - align to right border of form.
+ * UsersManual/index.rst: renamed chapter for formelements. Cleanup formelement types. Wrote chapter 'Detailed concept'.
+ * QuickFormQuery.php, FormAction.php: '#2931 / afterSave Hauptrecord xId nicht direkt verfügbar' - load master record again, after 'action'-elements has been processed.
+ * UsersManual/index.rst: Startet FAQ section.
+ * config.qfq.example.ini: Added comment where to save config.qfq.ini.
+ * UsersManual/index.rst: Rewrite of 'action'-FormElement definition.
+ * #2739: beforeDelete / afterDelete.
+ * PROTOCOL.md: update 'delete' description.
+ * delete.php: fixed unwanted loose of MSG_CONTENT.
+ * Report.php: Fixed double '&&' in building UrlParam.
+ * FormAction.php: In case of 'AFTER_DELETE', do not try to load primary record - that one is already deleted.
+ * Sip.php: Do not skip SIP_TARGET_URL as parameter for the SIP.
+ * #3001 Report: delete implementieren.
+ * Index.rst, Constants.php: reverted parameter '_table' in delete links back to 'table' - Reason: 'form' needs to be 'form' (instead of '_form') due to many used places already.
+ * Sip.php: move SIP_TARGET_URL back to stored inside SIP - it's necessary for 'delete'-links.
+ * Report.php, Constants.php: Remove code to handle unecessary 'p:' tag for delete links.
+ * Link.php: Check paged / Paged that the parameter r, table and form are given in the right combination.
+ * Link.php, Report.php: New '_link' token 'x'. '_paged' and '_Paged' are rendered via Link() class, Link() class now supports delete links.
+ * QuickFormQuery.php: for modeForm='Form Delete' the 'required param' are not respected - this makes sense, cause these parameters typically filled in newly created records.
+ * Fixed: #3076 Delete Button bei Subrecords erzeugt sporadisch Javascript Exceptions (Webkit: Chrome / Vivaldi) - kein loeschen moeglich.
\ No newline at end of file
diff --git a/extension/ext_emconf.php b/extension/ext_emconf.php
index e002a8a057c8a5ae5dc3113e9824c37f9ce2645d..fa3ccf410aa1b686e6258ddd465ae1fdbf694a09 100644
--- a/extension/ext_emconf.php
+++ b/extension/ext_emconf.php
@@ -10,5 +10,5 @@ $EM_CONF[$_EXTKEY] = array(
     'dependencies' => 'fluid,extbase',
     'clearcacheonload' => true,
     'state' => 'alpha',
-    'version' => '0.8'
+    'version' => '0.10'
 );
\ No newline at end of file
diff --git a/extension/qfq/qfq/AbstractBuildForm.php b/extension/qfq/qfq/AbstractBuildForm.php
index ba875bf14089f884263ea52753910d6fba1c40a2..1b3116a642d9ade534feb8665eee5de1ac6d7c09 100644
--- a/extension/qfq/qfq/AbstractBuildForm.php
+++ b/extension/qfq/qfq/AbstractBuildForm.php
@@ -349,6 +349,9 @@ abstract class AbstractBuildForm {
             $this->store->setVarArray($row, STORE_RECORD);
         }
 
+        $this->checkAutoFocus();
+
+
         // Iterate over all FormElements
         foreach ($this->feSpecNative as $fe) {
 
@@ -436,6 +439,55 @@ abstract class AbstractBuildForm {
         return $html;
     }
 
+    /**
+     * Check if there is an explicit 'autofocus' definition in at least one FE.
+     * Found: do nothing, it will be rendered at the correct position.
+     * Not found: set 'autofocus' on the first FE.
+     *
+     * Accepted misbehaviour on forms with pills: if there is at least one editable element on the first pill,
+     *   the other pills are not checked - independent if there was a definition on the first pill or not.
+     *   Reason: checks happens per pill - if there is no explizit definition on the first pill, take the first editable
+     *           element of that pill.
+     */
+    private function checkAutoFocus() {
+        static $found = false;
+        $idx = false;
+
+        if ($found) {
+            return;
+        }
+
+        // Search if there is an explicit autofocus definition.
+        for ($i = 0; $i < count($this->feSpecNative); ++$i) {
+            // Only check native elements which will be shown
+            if ($this->feSpecNative[$i][FE_CLASS] == FE_CLASS_NATIVE &&
+                ($this->feSpecNative[$i][FE_MODE] == FE_MODE_SHOW || $this->feSpecNative[$i][FE_MODE] == FE_MODE_REQUIRED)
+            ) {
+                // Check if there is an explicit definition.
+                if (isset($this->feSpecNative[$i][FE_AUTOFOCUS])) {
+                    if ($this->feSpecNative[$i][FE_AUTOFOCUS] == '' || $this->feSpecNative[$i][FE_AUTOFOCUS] == '1') {
+                        $this->feSpecNative[$i][FE_AUTOFOCUS] = '1'; // fix to '=1'
+                    } else {
+                        unset($this->feSpecNative[$i][FE_AUTOFOCUS]);
+                    }
+                    $found = true;
+                    return;
+                }
+
+                if ($idx === false) {
+                    $idx = $i;
+                }
+            }
+        }
+
+        // No explicit definition found: take the first found editable element.
+        if ($idx !== false) {
+            $found = true;
+            // No explicit definition found: set autofocus.
+            $this->feSpecNative[$idx][FE_AUTOFOCUS] = '1';
+        }
+    }
+
     abstract public function fillWrapLabelInputNote($label, $input, $note);
 
     abstract public function tail();
@@ -1403,6 +1455,9 @@ abstract class AbstractBuildForm {
 
         if (isset($formElement[SUBRECORD_PARAMETER_FORM])) {
 
+            Support::setIfNotSet($formElement, F_EXTRA_DELETE_FORM, '');
+            $formElement[F_FINAL_DELETE_FORM] = $formElement[F_EXTRA_DELETE_FORM] != '' ? $formElement[F_EXTRA_DELETE_FORM] : $formElement[SUBRECORD_PARAMETER_FORM];
+
             $linkNew = Support::wrapTag('<th>', $this->createFormLink($formElement, 0, $primaryRecord, $this->symbol[SYMBOL_NEW], 'New'));
 
             // Decode settings in subrecordOption
@@ -1423,8 +1478,9 @@ abstract class AbstractBuildForm {
             $columns .= '<th>' . implode('</th><th>', $control['title']) . '</th>';
         }
 
-        if ($flagDelete)
+        if ($flagDelete) {
             $columns .= '<th></th>';
+        }
 
         // Table head
         $html = Support::wrapTag('<tr>', $columns);
@@ -1449,17 +1505,16 @@ abstract class AbstractBuildForm {
                 $toolTip = 'Delete';
 
                 if ($this->showDebugInfo) {
-                    $toolTip .= PHP_EOL . "form = '" . $this->formSpec[F_NAME] . "'" . PHP_EOL . "table = '" . $this->formSpec[F_TABLE_NAME] . "'" . PHP_EOL . "r = '" . $row[$nameColumnId] . "'";
+                    $toolTip .= PHP_EOL . "form = '" . $formElement[F_FINAL_DELETE_FORM] . "'" . PHP_EOL . "r = '" . $row[$nameColumnId] . "'";
                 }
 
 //                $buttonDelete = $this->buildButtonCode('delete-button', $toolTip, GLYPH_ICON_DELETE, $disabled);
 
-                $s = $this->createDeleteUrl($formElement[SUBRECORD_PARAMETER_FORM], $targetTableName, $row[$nameColumnId], RETURN_SIP);
+                $s = $this->createDeleteUrl($formElement[F_FINAL_DELETE_FORM], '', $row[$nameColumnId], RETURN_SIP);
 //                $rowHtml .= Support::wrapTag('<td>', Support::wrapTag("<button type='button' class='record-delete btn btn-default' data-sip='$s'>", '<span class="glyphicon ' . GLYPH_ICON_DELETE . '"></span>'));
                 $rowHtml .= Support::wrapTag('<td>', Support::wrapTag("<button type='button' class='record-delete btn btn-default' data-sip='$s' " . Support::doAttribute('title', $toolTip) . ">", '<span class="glyphicon ' . GLYPH_ICON_DELETE . '"></span>'));
 
 
-
             }
 
             Support::setIfNotSet($row, FE_SUBRECORD_ROW_CLASS);
@@ -1753,15 +1808,19 @@ abstract class AbstractBuildForm {
      */
     public function createDeleteUrl($formName, $tableName, $recordId, $mode = RETURN_URL) {
 
-        //TODO: Umstellen auf Benutzung der Link Klasse.
-
         $queryStringArray = [
-            SIP_FORM => $formName,
-            SIP_TABLE => $tableName,
             SIP_RECORD_ID => $recordId,
             SIP_MODE_ANSWER => MODE_JSON
         ];
 
+        if ($formName !== '') {
+            $queryStringArray[SIP_FORM] = $formName;
+        }
+
+        if ($tableName !== '') {
+            $queryStringArray[SIP_TABLE] = $tableName;
+        }
+
         $queryString = Support::arrayToQueryString($queryStringArray);
 
         $sip = $this->store->getSipInstance();
diff --git a/extension/qfq/qfq/BuildFormBootstrap.php b/extension/qfq/qfq/BuildFormBootstrap.php
index 0a14ebf3d8e0a7d515e6ed0ca93e5515160a61e6..5e3e999afc1fb25ae0775ee9eb87a9b3f5d63a8d 100644
--- a/extension/qfq/qfq/BuildFormBootstrap.php
+++ b/extension/qfq/qfq/BuildFormBootstrap.php
@@ -158,10 +158,6 @@ class BuildFormBootstrap extends AbstractBuildForm {
         if (Support::findInSet(FORM_BUTTON_CLOSE, $this->formSpec['showButton'])) {
             $toolTip = 'Close';
 
-            if ($this->showDebugInfo) {
-                $toolTip .= PHP_EOL . "table = '" . $this->formSpec[F_TABLE_NAME] . "'" . PHP_EOL . "r = '" . $recordId . "'";
-            }
-
             $buttonClose = $this->buildButtonCode('close-button', 'Close', GLYPH_ICON_CLOSE);
         }
 
@@ -170,7 +166,7 @@ class BuildFormBootstrap extends AbstractBuildForm {
             $toolTip = 'Delete';
 
             if ($this->showDebugInfo && $recordId > 0) {
-                $toolTip .= PHP_EOL . "form = '" . $this->formSpec[F_NAME] . "'" . PHP_EOL . "table = '" . $this->formSpec[F_TABLE_NAME] . "'" . PHP_EOL . "r = '" . $recordId . "'";
+                $toolTip .= PHP_EOL . "form = '" . $this->formSpec[F_FINAL_DELETE_FORM] . "'" . PHP_EOL . "r = '" . $recordId . "'";
             }
             $disabled = ($recordId > 0) ? '' : 'disabled';
 
@@ -345,7 +341,7 @@ class BuildFormBootstrap extends AbstractBuildForm {
         $tabId = $this->getTabId();
 
         if (0 < ($recordId = $this->store->getVar(SIP_RECORD_ID, STORE_SIP))) {
-            $deleteUrl = $this->createDeleteUrl($this->formSpec[F_NAME], $this->formSpec[F_TABLE_NAME], $recordId);
+            $deleteUrl = $this->createDeleteUrl($this->formSpec[F_FINAL_DELETE_FORM], '', $recordId);
         }
 
         $actionUpload = FILE_ACTION . '=' . FILE_ACTION_UPLOAD;
diff --git a/extension/qfq/qfq/BuildFormTable.php b/extension/qfq/qfq/BuildFormTable.php
index f4e5a1ef0dd0a7eebb68f526004b2e1f8ee60752..4149457d713053c10b13d4355fd892b5c630282f 100644
--- a/extension/qfq/qfq/BuildFormTable.php
+++ b/extension/qfq/qfq/BuildFormTable.php
@@ -77,7 +77,7 @@ class BuildFormTable extends AbstractBuildForm {
         $formEditUrl = $this->createFormEditUrl();
         $html .= "<p><a " . Support::doAttribute('href', $formEditUrl) . ">Edit</a><small>[$sipParamString]</small></p>";
 
-        $deleteUrl = $this->createDeleteUrl($this->formSpec[F_NAME], $this->formSpec[F_TABLE_NAME], $this->store->getVar(SIP_RECORD_ID, STORE_SIP));
+        $deleteUrl = $this->createDeleteUrl($this->formSpec[F_FINAL_DELETE_FORM], '', $this->store->getVar(SIP_RECORD_ID, STORE_SIP));
         $html .= "<p><a " . Support::doAttribute('href', $deleteUrl) . ">Delete</a>";
 
         $html .= $this->wrapItem(WRAP_SETUP_TITLE, $this->formSpec['title'], true);
diff --git a/extension/qfq/qfq/Constants.php b/extension/qfq/qfq/Constants.php
index 444951bbf83f8492face9ee35a17f48329d9c010..9c600ed8200a8219b3eee0bad52c27dc05d5a20f 100644
--- a/extension/qfq/qfq/Constants.php
+++ b/extension/qfq/qfq/Constants.php
@@ -379,6 +379,7 @@ const TOKEN_VALID_LIST = 'sql|head|althead|tail|rbeg|rend|renr|rsep|fbeg|fend|fs
 // SQL logging Modes
 const SQL_LOG_MODE_ALL = 'all';
 const SQL_LOG_MODE_MODIFY = 'modify';
+const SQL_LOG_MODE_ERROR = 'error';  // write log entry, independent of global setting (e.g. broken Query)
 
 // api/save.php, api/delete.php, api/load.php
 const API_DELETE_PHP = 'delete.php';
@@ -443,8 +444,11 @@ const GLYPH_ICON_CLOSE = 'glyphicon-remove';
 
 // FORM
 const F_NAME = 'name';
+const F_TITLE = 'title';
 const F_TABLE_NAME = 'tableName';
 const F_REQUIRED_PARAMETER = 'requiredParameter';
+const F_EXTRA_DELETE_FORM = 'extraDeleteForm';
+const F_FINAL_DELETE_FORM = 'finalDeleteForm';
 
 const F_SUBMIT_BUTTON_TEXT = 'submitButtonText';
 
@@ -457,6 +461,10 @@ const FE_MODE_READONLY = 'readonly';
 const FE_MODE_REQUIRED = 'required';
 const FE_MODE_HIDDEN = 'hidden';
 
+const FE_CLASS_NATIVE = 'native';
+const FE_CLASS_ACTION = 'action';
+const FE_CLASS_CONTAINER = 'container';
+
 const FE_SUBRECORD_ROW_CLASS = '_rowClass';
 const FE_SUBRECORD_ROW_TITLE = '_rowTitle';
 
@@ -468,6 +476,7 @@ const FE_MODE_SQL = 'modeSql';
 // TODO: Konstante FE_DYNAMIC_UPDATE ueberall einsetzen
 const FE_DYNAMIC_UPDATE = 'dynamicUpdate';
 const FE_VALUE = 'value';
+const FE_CLASS = 'class';
 
 // FormElement columns: via parameter field
 const FE_DATE_FORMAT = 'dateFormat';  // value: FORMAT_DATE_INTERNATIONAL | FORMAT_DATE_GERMAN
@@ -492,6 +501,7 @@ const FE_SENDMAIL_REPLY_TO = 'sendMailReplyTo'; // Reply to email address
 const FE_SENDMAIL_FLAG_AUTO_SUBMIT = 'sendMailFlagAutoSubmit'; // on|off - if 'on', suppresses OoO answers from receivers.
 const FE_SENDMAIL_GR_ID = 'sendMailGrId'; // gr_id: used to classify mail log entries ind table mailLog
 const FE_SENDMAIL_X_ID = 'sendMailXId'; // x_id: used to classify mail log entries ind table mailLog
+const FE_AUTOFOCUS = 'autofocus'; // value: <none>|0|1  , <none>==1, this element becomes the focus during form load.
 
 
 // FormElement Types
diff --git a/extension/qfq/qfq/Database.php b/extension/qfq/qfq/Database.php
index 53e9e11d20eefc1466cd8266e08dc65a1fbf89d7..25c88e3a192234632736d20e949d7a2ead3d403d 100644
--- a/extension/qfq/qfq/Database.php
+++ b/extension/qfq/qfq/Database.php
@@ -246,16 +246,19 @@ class Database {
         $this->dbLog($sqlLogMode, $sql, $parameterArray);
 
         if (false === ($this->mysqli_stmt = $this->mysqli->prepare($sql))) {
+            $this->dbLog(SQL_LOG_MODE_ERROR, $sql, $parameterArray);
             throw new DbException('[ mysqli: ' . $this->mysqli->errno . ' ] ' . $this->mysqli->error, ERROR_DB_PREPARE);
         }
 
         if (count($parameterArray) > 0) {
             if (false === $this->prepareBindParam($parameterArray)) {
+                $this->dbLog(SQL_LOG_MODE_ERROR, $sql, $parameterArray);
                 throw new DbException('[ mysqli: ' . $this->mysqli_stmt->errno . ' ] ' . $this->mysqli_stmt->error, ERROR_DB_BIND);
             }
         }
 
         if (false === $this->mysqli_stmt->execute()) {
+            $this->dbLog(SQL_LOG_MODE_ERROR, $sql, $parameterArray);
             throw new DbException('[ mysqli: ' . $this->mysqli_stmt->errno . ' ] ' . $this->mysqli_stmt->error, ERROR_DB_EXECUTE);
         }
 
@@ -342,6 +345,8 @@ class Database {
      */
     private function dbLog($mode = SQL_LOG_MODE_ALL, $sql = '', $parameterArray = array()) {
 
+        $status = '';
+
         $sqlLogMode = $this->store->getVar(SYSTEM_SQL_LOG_MODE, STORE_SYSTEM);
 
         switch ($mode) {
@@ -354,6 +359,9 @@ class Database {
             case SQL_LOG_MODE_MODIFY:
                 break;
 
+            case SQL_LOG_MODE_ERROR:
+                break;
+
             default:
                 throw new UserFormException("Unknown SQL_LOG_MODE: $mode", ERROR_UNKNOWN_SQL_LOG_MODE);
         }
@@ -373,7 +381,10 @@ class Database {
         }
 
         if ($sql !== '') {
-            $msg .= '[' . $sql . ']';
+            if ($mode == SQL_LOG_MODE_ERROR) {
+                $status = 'FAILED: ';
+            }
+            $msg .= '[' . $status . $sql . ']';
         }
 
         Logger::logMessage($msg, $this->sqlLog);
diff --git a/extension/qfq/qfq/QuickFormQuery.php b/extension/qfq/qfq/QuickFormQuery.php
index be437ca653be754bcd8b8a98ea1b6dc620c8883b..c21158561fe4e0cc2c7504aa3671a25e8b4b61e0 100644
--- a/extension/qfq/qfq/QuickFormQuery.php
+++ b/extension/qfq/qfq/QuickFormQuery.php
@@ -233,7 +233,7 @@ class QuickFormQuery {
             $sipFound = $this->validateForm($foundInStore, $formMode);
 
         } else {
-            // FORM_DELETE without a form definition: Fake the form wiht only a tableName.
+            // FORM_DELETE without a form definition: Fake the form with only a tableName.
             $table = $this->store->getVar(SIP_TABLE, STORE_SIP);
             if ($table === false) {
                 throw new UserFormException("No 'form' and no 'table' definition found.", ERROR_MISSING_VALUE);
@@ -378,6 +378,8 @@ class QuickFormQuery {
         $form = $this->db->sql("SELECT * FROM Form AS f WHERE f." . F_NAME . " LIKE ? AND f.deleted='no'", ROW_EXPECT_1,
             [$formName], 'Form not found or multiple forms with the same name.');
 
+        $form = $this->modeAdjustFormConfig($mode, $form);
+
         $this->formSpec = $this->eval->parseArray($form);
         HelperFormElement::explodeParameter($this->formSpec);
 
@@ -388,6 +390,10 @@ class QuickFormQuery {
         Support::setIfNotSet($this->formSpec, F_BS_NOTE_COLUMNS, 3, '');
 
         Support::setIfNotSet($this->formSpec, F_SUBMIT_BUTTON_TEXT, '');
+        Support::setIfNotSet($this->formSpec, F_EXTRA_DELETE_FORM, '');
+
+        // Set F_FINAL_DELETE_FORM
+        $this->formSpec[F_FINAL_DELETE_FORM] = $this->formSpec[F_EXTRA_DELETE_FORM] != '' ? $this->formSpec[F_EXTRA_DELETE_FORM] : $this->formSpec[F_NAME];
 
         // Take default from config.ini
         $class = $this->store->getVar(SYSTEM_CSS_CLASS_QFQ_FORM_PILL, STORE_SYSTEM);
@@ -491,6 +497,27 @@ class QuickFormQuery {
         return $formName;
     }
 
+    /**
+     * Depending on $mode various formSpec fields might be adjusted.
+     * E.g.: the form title is not important during a delete.
+     *
+     * @param $mode
+     * @param array $form
+     * @return array
+     */
+    private function modeAdjustFormConfig($mode, array $form) {
+
+        switch ($mode) {
+            case FORM_DELETE:
+                $form[F_TITLE] = '';
+                break;
+            default:
+                break;
+        }
+
+        return $form;
+    }
+
     /**
      * Check if loading of the given form is permitted. If not, throw an exception.
      *
diff --git a/extension/qfq/qfq/exceptions/AbstractException.php b/extension/qfq/qfq/exceptions/AbstractException.php
index 861273bbafccaff373ee94f0b05eda66ec1732ab..b48a72ed35379c69404698942b27e107a5c6e782 100644
--- a/extension/qfq/qfq/exceptions/AbstractException.php
+++ b/extension/qfq/qfq/exceptions/AbstractException.php
@@ -39,7 +39,7 @@ class AbstractException extends \Exception {
         $this->messageArray['Line'] = $this->getLine();
         $this->messageArray['Message'] = $this->getMessage();
         $this->messageArray['Code'] = $this->getCode();
-
+        $this->messageArray['Timestamp'] = date('Y.m.d H:i:s O');
         $this->messageArray['Stacktrace'] = '<pre>' . $this->getTraceAsString() . '</pre>';
         if ($store !== null) {
             $this->messageArray['Page Id'] = $store->getVar(TYPO3_PAGE_ID, STORE_TYPO3);