diff --git a/.readthedocs.yaml b/.readthedocs.yaml
new file mode 100644
index 00000000..a07b47cd
--- /dev/null
+++ b/.readthedocs.yaml
@@ -0,0 +1,33 @@
+# Read the Docs configuration file for Sphinx projects
+# See https://docs.readthedocs.io/en/stable/config-file/v2.html for details
+
+# Required
+version: 2
+# Set the OS, Python version and other tools you might need
+build:
+ os: ubuntu-22.04
+ tools:
+ python: "3.11"
+ # You can also specify other tool versions:
+ # nodejs: "20"
+ # rust: "1.70"
+ # golang: "1.20"
+
+# Build documentation in the "docs/" directory with Sphinx
+sphinx:
+ configuration: doc/conf.py
+ # You can configure Sphinx to use a different builder, for instance use the dirhtml builder for simpler URLs
+ # builder: "dirhtml"
+ # Fail on all warnings to avoid broken references
+ # fail_on_warning: true
+
+# Optionally build your docs in additional formats such as PDF and ePub
+formats:
+ - pdf
+# - epub
+# Optional but recommended, declare the Python requirements required
+# to build your documentation
+# See https://docs.readthedocs.io/en/stable/guides/reproducible-builds.html
+# python:
+# install:
+# - requirements: docs/requirements.txt
diff --git a/doc/101.rst b/doc/101.rst
index f33620a7..7afb1722 100644
--- a/doc/101.rst
+++ b/doc/101.rst
@@ -226,8 +226,8 @@ Examples
For example, in case of :xml:`` on "unchecked"
and "clickable" (not greyed-out) checkbox:
- * `action` - clicking on the checkbox
- * `desired state` - checkbox is "checked"
+* `action` - clicking on the checkbox
+* `desired state` - checkbox is "checked"
In this case (action="enable"), checkbox that is already checked is not
clicked on because it's already in `desired state`. Clicking on it would make
diff --git a/doc/conf.py b/doc/conf.py
index 7b369e06..70f4f933 100644
--- a/doc/conf.py
+++ b/doc/conf.py
@@ -33,6 +33,7 @@
'sphinx.ext.todo',
'sphinx.ext.coverage',
'sphinx.ext.mathjax',
+ 'sphinx.ext.autosectionlabel'
]
# Add any paths that contain templates here, relative to this directory.
@@ -263,3 +264,6 @@
#texinfo_no_detailmenu = False
sys.path.append("../")
+
+# Make sure the target is unique
+autosectionlabel_prefix_document = True
\ No newline at end of file
diff --git a/doc/index.rst b/doc/index.rst
index e3994dbc..303948b3 100644
--- a/doc/index.rst
+++ b/doc/index.rst
@@ -52,6 +52,7 @@ Contents
decorators
history
debugging
+ recipe_elements/index
Indices and tables
diff --git a/doc/recipe_elements/advanced_partitioning.rst b/doc/recipe_elements/advanced_partitioning.rst
new file mode 100644
index 00000000..874505cb
--- /dev/null
+++ b/doc/recipe_elements/advanced_partitioning.rst
@@ -0,0 +1,548 @@
+============================
+Manual Partitioning subspoke
+============================
+
+
+/installation/hub/partitioning/advanced/add
+===========================================
+Handles *add* (*+*) button and resulting dialog to add a new partition/LV.
+
+Attributes:
+
+* ``dialog`` - ``accept`` or ``reject``
+
+/installation/hub/partitioning/advanced/add/mountpoint
+======================================================
+*Mount Point* input field for a newly added partition or LV.
+
+Attributes:
+
+* ``value``
+* ``checked`` - ``yes`` or ``no``
+
+/installation/hub/partitioning/advanced/add/size
+================================================
+Mount point for a newly added partition or LV in *Add a New Mount Point* dialog.
+
+
+Attributes:
+
+* ``value``
+
+/installation/hub/partitioning/advanced/autopart
+================================================
+Desired capacity for a newly added partition or LV in *Add a New Mount Point* dialog.
+
+Attributes:
+
+* ``value``
+
+/installation/hub/partitioning/advanced/details
+===============================================
+Handles device details for a selected partition/LV (the right part of the spoke).
+
+/installation/hub/partitioning/advanced/details/device_type
+===========================================================
+*Device Type* combo box.
+
+Attributes:
+
+* ``select`` - device type according to following schema:
+ * ``native`` - standard partition
+ * ``btrfs``
+ * ``lvm``
+ * ``raid``
+ * ``lvm thinp``
+
+/installation/hub/partitioning/advanced/details/devices
+=======================================================
+Handles devices selection for a selected partition/LV (*Device(s):*/*Modify...*) button
+and resulting dialog.
+
+Attributes:
+
+* ``dialog`` - ``accept`` or ``reject``
+
+/installation/hub/partitioning/advanced/details/devices/deselect
+================================================================
+Deselects a device in *Configure Mount Point* dialog.
+
+Attributes:
+
+* ``device`` - device name or glob pattern
+
+/installation/hub/partitioning/advanced/details/devices/select
+==============================================================
+Selects a device in *Configure Mount Point* dialog.
+
+Attributes:
+
+* ``device`` - device name or glob pattern
+
+/installation/hub/partitioning/advanced/details/edit_volume_group
+=================================================================
+Handles *Modify...* button for Volume Group related to selected LV and
+resulting *Configure Volume Group* dialog.
+
+Attributes:
+
+* ``dialog`` - ``accept`` or ``reject``
+
+/installation/hub/partitioning/advanced/details/edit_volume_group/devices
+=========================================================================
+Handles selection of devices related to a particular VG in
+*Configure Volume Group* dialog. **Currently not implemented.**
+
+/installation/hub/partitioning/advanced/details/edit_volume_group/encrypt
+=========================================================================
+*Encrypt* check box in *Configure Volume Group* dialog.
+
+Attributes:
+
+* ``value`` - ``yes`` or ``no``
+
+/installation/hub/partitioning/advanced/details/edit_volume_group/luks_version
+==============================================================================
+*LUKS Version* combo box in in *Configure Volume Group* dialog.
+
+Attributes:
+
+* ``value``
+
+/installation/hub/partitioning/advanced/details/edit_volume_group/name
+======================================================================
+VG *name* in *Configure Volume Group* dialog.
+
+Attributes:
+
+* ``value``
+
+/installation/hub/partitioning/advanced/details/edit_volume_group/raid
+======================================================================
+*RAID Level* combo box in *Configure Volume Group* dialog.
+
+Attributes:
+
+* ``select`` - level of RAID
+
+/installation/hub/partitioning/advanced/details/edit_volume_group/size
+======================================================================
+Size field value in *Configure Volume Group* dialog.
+
+Attributes:
+
+* ``value``
+
+/installation/hub/partitioning/advanced/details/edit_volume_group/size_policy
+=============================================================================
+*Size policy* combo box in *Configure Volume Group* dialog.
+
+Attributes:
+
+* ``select`` - size policy type (``fixed``, ``maximum`` or ``auto``)
+
+/installation/hub/partitioning/advanced/details/encrypt
+=======================================================
+*Encrypt* check box in partition/LV details.
+
+Attributes:
+
+* ``action`` - ``enable`` or ``disable``
+
+/installation/hub/partitioning/advanced/details/filesystem
+==========================================================
+*File System* combo box in partition/LV details.
+
+Attributes:
+
+* ``select`` - FS type
+
+/installation/hub/partitioning/advanced/details/label
+=====================================================
+*Label* input field in partition/LV details.
+
+Attributes:
+
+* ``value``
+
+/installation/hub/partitioning/advanced/details/mountpoint
+==========================================================
+*Mount Point* input field in partition/LV details.
+
+Attributes:
+
+* ``value``
+
+/installation/hub/partitioning/advanced/details/name
+====================================================
+*Name* input field in partition/LV details.
+
+Attributes:
+
+* ``value``
+
+/installation/hub/partitioning/advanced/details/new_volume_group
+================================================================
+Creates a new volume group using *Volume Group* combo box →
+*Create a new volume group...*
+
+Attributes:
+
+* ``value``
+* ``checked`` - ``yes`` or ``no``
+
+/installation/hub/partitioning/advanced/details/new_volume_group/devices
+========================================================================
+Functionally equivalent to `/installation/hub/partitioning/advanced/details/edit_volume_group/devices`_
+
+/installation/hub/partitioning/advanced/details/new_volume_group/encrypt
+========================================================================
+Functionally equivalent to `/installation/hub/partitioning/advanced/details/edit_volume_group/encrypt`_
+
+/installation/hub/partitioning/advanced/details/new_volume_group/luks_version
+=============================================================================
+Functionally equivalent to `/installation/hub/partitioning/advanced/details/edit_volume_group/luks_version`_
+
+/installation/hub/partitioning/advanced/details/new_volume_group/name
+=====================================================================
+Functionally equivalent to `/installation/hub/partitioning/advanced/details/edit_volume_group/name`_
+
+/installation/hub/partitioning/advanced/details/new_volume_group/raid
+=====================================================================
+Functionally equivalent to `/installation/hub/partitioning/advanced/details/edit_volume_group/raid`_
+
+/installation/hub/partitioning/advanced/details/new_volume_group/size
+=====================================================================
+Functionally equivalent to `/installation/hub/partitioning/advanced/details/edit_volume_group/size`_
+
+/installation/hub/partitioning/advanced/details/new_volume_group/size_policy
+============================================================================
+Functionally equivalent to `/installation/hub/partitioning/advanced/details/edit_volume_group/size_policy`_
+
+/installation/hub/partitioning/advanced/details/raid_type
+=========================================================
+*RAID Level* combo box in partition/LV details.
+
+Attributes:
+
+* ``select``
+
+/installation/hub/partitioning/advanced/details/reformat
+========================================================
+*Reformat* check box in partition/LV details.
+
+Attributes:
+
+* ``action`` - ``check`` or ``uncheck``
+
+/installation/hub/partitioning/advanced/details/size
+====================================================
+*Desired Capacity* input field in partition/LV details.
+
+Attributes:
+
+* ``value``
+
+/installation/hub/partitioning/advanced/details/update
+======================================================
+Clicks on *Update Settings* button in partition/LV details.
+
+/installation/hub/partitioning/advanced/done
+============================================
+*Done* button
+
+/installation/hub/partitioning/advanced/encrypt_data
+====================================================
+*Encrypt my data* check box on the left side of *Manual Partitioning* subspoke
+present before automated creation of partitioning layout.
+
+Attributes:
+
+* ``action`` - ``enable`` or ``disable``
+
+/installation/hub/partitioning/advanced/luks_dialog
+===================================================
+Equivalent to :ref:`recipe_elements/partitioning:/installation/hub/partitioning/luks_dialog`
+(including child elements).
+
+..
+ /installation/hub/partitioning/advanced/luks_dialog/cancel
+ ==========================================================
+ Cancels the *Disk Encryption Passphrase* dialog.
+
+ /installation/hub/partitioning/advanced/luks_dialog/confirm_password
+ ====================================================================
+ *Confirm:* password field in *Disk Encryption Passphrase* dialog.
+
+ Attributes:
+
+ * ``value``
+
+ /installation/hub/partitioning/advanced/luks_dialog/keyboard
+ ============================================================
+ Switches keyboard layout to a required one in *Disk Encryption Passphrase* dialog.
+
+ Attributes:
+
+ * ``layout``
+
+ /installation/hub/partitioning/advanced/luks_dialog/password
+ ============================================================
+ *Passphrase* field in *Disk Encryption Passphrase* dialog.
+
+ Attributes:
+
+ * ``value``
+
+ /installation/hub/partitioning/advanced/luks_dialog/save
+ ========================================================
+ Confirms the *Disk Encryption Passphrase* dialog (clicks on *Save Passphrase* button).
+
+/installation/hub/partitioning/advanced/remove
+==============================================
+Handles *remove* (*-*) button and the resulting confirmation dialog.
+
+Attributes:
+
+* ``dialog`` - ``accept`` or ``reject``
+
+/installation/hub/partitioning/advanced/remove/also_related
+===========================================================
+Handles *Delete all file systems which are only used by Red Hat Enterprise Linux X.Y
+for * check box.
+
+Attributes:
+
+* ``value`` - ``yes`` or ``no``
+
+/installation/hub/partitioning/advanced/rescan
+==============================================
+Handles *Reload storage configuration from disk* (rescan) button and related dialog.
+
+Attributes:
+
+* ``dialog`` - ``accept`` or ``reject``
+
+/installation/hub/partitioning/advanced/rescan/push_rescan
+==========================================================
+Clicks on *Rescan Disks* button in *Rescan Disks* dialog.
+
+/installation/hub/partitioning/advanced/schema
+==============================================
+Handles partitioning schema (*New mount points will use the following
+partitioning scheme:*) combo box.
+
+Attributes:
+
+* ``value`` - device type according to following schema:
+ * ``native`` - standard partition
+ * ``btrfs``
+ * ``lvm``
+ * ``raid``
+ * ``lvm thinp``
+
+/installation/hub/partitioning/advanced/select
+==============================================
+Shortcut to select and handle a set of available partitions/LVs based
+on specified criteria.
+
+Attributes:
+
+* ``device`` - device name (e. g. `/dev/vda`) or glob pattern
+* ``mountpoint`` - mount point path (or glob pattern)
+
+/installation/hub/partitioning/advanced/select/details
+======================================================
+Configures details for selected partition(s)/LV(s) in the same way as
+`/installation/hub/partitioning/advanced/details`_, including child elements.
+
+..
+ It's likely not necessary to repeat the already mentioned paths/elements:
+
+ /installation/hub/partitioning/advanced/select/details/device_type
+ ==================================================================
+ Equivalent to `/installation/hub/partitioning/advanced/details/device_type`_.
+
+ /installation/hub/partitioning/advanced/select/details/devices
+ ==============================================================
+ Equivalent to `/installation/hub/partitioning/advanced/details/devices`_.
+
+ /installation/hub/partitioning/advanced/select/details/devices/deselect
+ =======================================================================
+ Equivalent to `/installation/hub/partitioning/advanced/details/devices/deselect`_.
+
+ /installation/hub/partitioning/advanced/select/details/devices/select
+ =====================================================================
+ Equivalent to `/installation/hub/partitioning/advanced/details/devices/select`_.
+
+ /installation/hub/partitioning/advanced/select/details/edit_volume_group
+ ========================================================================
+ Equivalent to `/installation/hub/partitioning/advanced/details/edit_volume_group`_.
+
+ /installation/hub/partitioning/advanced/select/details/edit_volume_group/devices
+ ================================================================================
+ Equivalent to `/installation/hub/partitioning/advanced/details/edit_volume_group/devices`_.
+
+ /installation/hub/partitioning/advanced/select/details/edit_volume_group/encrypt
+ ================================================================================
+ Equivalent to `/installation/hub/partitioning/advanced/details/edit_volume_group/encrypt`_.
+
+ /installation/hub/partitioning/advanced/select/details/edit_volume_group/luks_version
+ =====================================================================================
+ Equivalent to `/installation/hub/partitioning/advanced/details/edit_volume_group/luks_version`_.
+
+ /installation/hub/partitioning/advanced/select/details/edit_volume_group/name
+ =============================================================================
+ Equivalent to `/installation/hub/partitioning/advanced/details/edit_volume_group/name`_.
+
+ /installation/hub/partitioning/advanced/select/details/edit_volume_group/raid
+ =============================================================================
+ Equivalent to `/installation/hub/partitioning/advanced/details/edit_volume_group/raid`_.
+
+ /installation/hub/partitioning/advanced/select/details/edit_volume_group/size
+ =============================================================================
+ Equivalent to `/installation/hub/partitioning/advanced/details/edit_volume_group/size`_.
+
+ /installation/hub/partitioning/advanced/select/details/edit_volume_group/size_policy
+ ====================================================================================
+ Equivalent to `/installation/hub/partitioning/advanced/details/edit_volume_group/size_policy`_.
+
+ /installation/hub/partitioning/advanced/select/details/encrypt
+ ==============================================================
+ Equivalent to `/installation/hub/partitioning/advanced/details/encrypt`_.
+
+ /installation/hub/partitioning/advanced/select/details/filesystem
+ =================================================================
+ Equivalent to `/installation/hub/partitioning/advanced/details/filesystem`_.
+
+ /installation/hub/partitioning/advanced/select/details/label
+ ============================================================
+ Equivalent to `/installation/hub/partitioning/advanced/details/label`_.
+
+ /installation/hub/partitioning/advanced/select/details/mountpoint
+ =================================================================
+ Equivalent to `/installation/hub/partitioning/advanced/details/mountpoint`_.
+
+ /installation/hub/partitioning/advanced/select/details/name
+ ===========================================================
+ Equivalent to `/installation/hub/partitioning/advanced/details/name`_.
+
+ /installation/hub/partitioning/advanced/select/details/new_volume_group
+ =======================================================================
+ Equivalent to `/installation/hub/partitioning/advanced/details/new_volume_group`_.
+
+ /installation/hub/partitioning/advanced/select/details/new_volume_group/devices
+ ===============================================================================
+
+
+ Attributes:
+
+ * ``value``
+ * ``checked`` - ``yes`` or ``no``
+
+ /installation/hub/partitioning/advanced/select/details/new_volume_group/encrypt
+ ===============================================================================
+
+
+ Attributes:
+
+ * ``value``
+ * ``checked`` - ``yes`` or ``no``
+
+ /installation/hub/partitioning/advanced/select/details/new_volume_group/luks_version
+ ====================================================================================
+
+
+ Attributes:
+
+ * ``value``
+ * ``checked`` - ``yes`` or ``no``
+
+ /installation/hub/partitioning/advanced/select/details/new_volume_group/name
+ ============================================================================
+
+
+ Attributes:
+
+ * ``value``
+ * ``checked`` - ``yes`` or ``no``
+
+ /installation/hub/partitioning/advanced/select/details/new_volume_group/raid
+ ============================================================================
+
+
+ Attributes:
+
+ * ``value``
+ * ``checked`` - ``yes`` or ``no``
+
+ /installation/hub/partitioning/advanced/select/details/new_volume_group/size
+ ============================================================================
+
+
+ Attributes:
+
+ * ``value``
+ * ``checked`` - ``yes`` or ``no``
+
+ /installation/hub/partitioning/advanced/select/details/new_volume_group/size_policy
+ ===================================================================================
+
+
+ Attributes:
+
+ * ``value``
+ * ``checked`` - ``yes`` or ``no``
+
+ /installation/hub/partitioning/advanced/select/details/raid_type
+ ================================================================
+
+
+ Attributes:
+
+ * ``value``
+ * ``checked`` - ``yes`` or ``no``
+
+ /installation/hub/partitioning/advanced/select/details/reformat
+ ===============================================================
+
+
+ Attributes:
+
+ * ``value``
+ * ``checked`` - ``yes`` or ``no``
+
+ /installation/hub/partitioning/advanced/select/details/size
+ ===========================================================
+
+
+ Attributes:
+
+ * ``value``
+ * ``checked`` - ``yes`` or ``no``
+
+ /installation/hub/partitioning/advanced/select/details/update
+ =============================================================
+
+
+ Attributes:
+
+ * ``value``
+ * ``checked`` - ``yes`` or ``no``
+
+/installation/hub/partitioning/advanced/select/remove
+=====================================================
+Equivalent to `/installation/hub/partitioning/advanced/remove`_.
+
+
+/installation/hub/partitioning/advanced/select/remove/also_related
+==================================================================
+Equivalent to `/installation/hub/partitioning/advanced/remove/also_related`_.
+
+/installation/hub/partitioning/advanced/summary
+===============================================
+Handles *Summary of Changes* dialog.
+
+Attributes:
+
+* ``dialog`` - ``accept`` or ``reject``
diff --git a/doc/recipe_elements/configuration.rst b/doc/recipe_elements/configuration.rst
new file mode 100644
index 00000000..c15e0ed3
--- /dev/null
+++ b/doc/recipe_elements/configuration.rst
@@ -0,0 +1,107 @@
+========================================
+Configuration/Installation process spoke
+========================================
+
+/installation/configuration
+===========================
+Used for *configuration* spoke that appears during installation process and displays EULA
+notice and Reboot button when installation is complete.
+
+.. note::
+ This element originally provided options to create a user and set root password.
+ The elements for user/root configuration are internally equivalent to
+ :ref:`recipe_elements/hub:/installation/hub/create_user` and
+ :ref:`recipe_elements/hub:/installation/hub/root_password`.
+
+/installation/configuration/eula_notice
+=======================================
+Checks presence of warning bar on the bottom of the screen containing a proper message
+about EULA which appears when the installation is complete. It has only a check implemented
+(no handler), thus has to be used with ``policy=just_check``.
+
+/installation/configuration/finish_configuration
+================================================
+Handles button used for finishing configuration during installation process (RHEL-7 only).
+
+/installation/configuration/reboot
+==================================
+Clicks *Reboot* button after installation is complete.
+
+/installation/configuration/root
+================================
+A shortcut element usable only within the ``ez:`` namespace, functionally equivalent to
+:ref:`recipe_elements/hub:/installation/hub/root`.
+
+/installation/configuration/root_password
+=========================================
+Functionally equivalent to :ref:`recipe_elements/hub:/installation/hub/root_password`.
+
+/installation/configuration/wait_until_complete
+===============================================
+A special element not used to directly handle any Anaconda's function, but to wait
+until for the installation process to finish. It is a necessary part before
+clicking on the Reboot button as the button is inactive during installation.
+
+/installation/configuration/create_user/advanced
+================================================
+Equivalent to :ref:`recipe_elements/create_user:/installation/hub/create_user/advanced`.
+
+/installation/configuration/create_user/advanced/cancel
+=======================================================
+Equivalent to :ref:`recipe_elements/create_user:/installation/hub/create_user/advanced/cancel`.
+
+/installation/configuration/create_user/advanced/gid
+====================================================
+Equivalent to :ref:`recipe_elements/create_user:/installation/hub/create_user/advanced/gid`.
+
+/installation/configuration/create_user/advanced/groups
+=======================================================
+Equivalent to :ref:`recipe_elements/create_user:/installation/hub/create_user/advanced/groups`.
+
+/installation/configuration/create_user/advanced/home
+=====================================================
+Equivalent to :ref:`recipe_elements/create_user:/installation/hub/create_user/advanced/home`.
+
+/installation/configuration/create_user/advanced/manual_gid
+===========================================================
+Equivalent to :ref:`recipe_elements/create_user:/installation/hub/create_user/advanced/manual_gid`.
+
+/installation/configuration/create_user/advanced/manual_uid
+===========================================================
+Equivalent to :ref:`recipe_elements/create_user:/installation/hub/create_user/advanced/manual_uid`.
+
+/installation/configuration/create_user/advanced/save
+=====================================================
+Equivalent to :ref:`recipe_elements/create_user:/installation/hub/create_user/advanced/save`.
+
+/installation/configuration/create_user/advanced/uid
+====================================================
+Equivalent to :ref:`recipe_elements/create_user:/installation/hub/create_user/advanced/uid`.
+
+/installation/configuration/create_user/confirm_password
+========================================================
+Equivalent to :ref:`recipe_elements/create_user:/installation/hub/create_user/confirm_password`.
+
+/installation/configuration/create_user/done
+============================================
+Equivalent to :ref:`recipe_elements/create_user:/installation/hub/create_user/done`.
+
+/installation/configuration/create_user/full_name
+=================================================
+Equivalent to :ref:`recipe_elements/create_user:/installation/hub/create_user/full_name`.
+
+/installation/configuration/create_user/is_admin
+================================================
+Equivalent to :ref:`recipe_elements/create_user:/installation/hub/create_user/is_admin`.
+
+/installation/configuration/create_user/password
+================================================
+Equivalent to :ref:`recipe_elements/create_user:/installation/hub/create_user/password`.
+
+/installation/configuration/create_user/require_password
+========================================================
+Equivalent to :ref:`recipe_elements/create_user:/installation/hub/create_user/require_password`.
+
+/installation/configuration/create_user/username
+================================================
+Equivalent to :ref:`recipe_elements/create_user:/installation/hub/create_user/username`.
\ No newline at end of file
diff --git a/doc/recipe_elements/connect_to_redhat.rst b/doc/recipe_elements/connect_to_redhat.rst
new file mode 100644
index 00000000..22df883c
--- /dev/null
+++ b/doc/recipe_elements/connect_to_redhat.rst
@@ -0,0 +1,314 @@
+========================
+Connect to Red Hat spoke
+========================
+
+/installation/hub/connect_to_redhat/account_organization
+========================================================
+Combo box that appears for user in multiple organizations.
+
+Attributes:
+
+* ``value``
+
+/installation/hub/connect_to_redhat/activation_key
+==================================================
+Input field - *Activation Key*.
+
+Attributes:
+
+* ``value``
+
+/installation/hub/connect_to_redhat/authentication
+==================================================
+*Authentication* radio button.
+
+Attributes:
+
+* ``type`` - ``account`` or ``activation key``
+
+/installation/hub/connect_to_redhat/insights
+============================================
+*Connect to Red Hat Insights* check box.
+
+Attributes:
+
+* ``checked`` - ``yes`` or ``no``
+
+/installation/hub/connect_to_redhat/options
+===========================================
+Connection *Options* (HTTP proxy, custom server URL and base URL).
+
+/installation/hub/connect_to_redhat/options/custom_base_url
+===========================================================
+*Custom base URL* input field.
+
+Attributes:
+
+* ``value``
+
+/installation/hub/connect_to_redhat/options/custom_server_url
+=============================================================
+*Custom server URL* input field.
+
+Attributes:
+
+* ``value``
+
+/installation/hub/connect_to_redhat/options/http_proxy
+======================================================
+*Use HTTP proxy* checkbox (and related proxy settings handled
+in child elements - see below).
+
+Attributes:
+
+* ``used`` - ``yes`` = enabled, anything else = disabled
+
+/installation/hub/connect_to_redhat/options/http_proxy/location
+===============================================================
+HTTP proxy *Location* input field.
+
+Attributes:
+
+* ``value``
+
+/installation/hub/connect_to_redhat/options/http_proxy/password
+===============================================================
+HTTP proxy *Password* input field.
+
+Attributes:
+
+* ``value``
+
+/installation/hub/connect_to_redhat/options/http_proxy/username
+===============================================================
+HTTP proxy *User name* input field.
+
+Attributes:
+
+* ``value``
+
+/installation/hub/connect_to_redhat/options/satellite_url
+=========================================================
+*Satellite URL* input field.
+
+Attributes:
+
+* ``value``
+
+/installation/hub/connect_to_redhat/options/use_custom_base_url
+===============================================================
+*Custom base URL* check box.
+
+Attributes:
+
+* ``checked`` - ``yes`` or ``no``
+
+/installation/hub/connect_to_redhat/options/use_custom_server_url
+=================================================================
+*Custom server URL* check box.
+
+Attributes:
+
+* ``checked`` - ``yes`` or ``no``
+
+/installation/hub/connect_to_redhat/options/use_satellite_url
+=============================================================
+*Satellite URL* check box.
+
+Attributes:
+
+* ``checked`` - ``yes`` or ``no``
+
+/installation/hub/connect_to_redhat/organization
+================================================
+*Organization* input field.
+
+Attributes:
+
+* ``value``
+
+/installation/hub/connect_to_redhat/password
+============================================
+*Organization* input field.
+
+Attributes:
+
+* ``value``
+
+/installation/hub/connect_to_redhat/register
+============================================
+*Register* button.
+
+/installation/hub/connect_to_redhat/registration
+================================================
+Information about registration in registered state.
+
+/installation/hub/connect_to_redhat/registration/account_organization
+=====================================================================
+Registered account organization.
+
+Attributes:
+
+* ``value``
+
+/installation/hub/connect_to_redhat/registration/insights
+=========================================================
+Insights status in registered state.
+
+Attributes:
+
+* ``used`` - ``yes`` or ``no``
+
+/installation/hub/connect_to_redhat/registration/method
+=======================================================
+Registration method in registered state.
+
+Attributes:
+
+* ``account``
+* ``organization``
+
+/installation/hub/connect_to_redhat/registration/subscriptions
+==============================================================
+Attached subscriptions in registered state.
+
+Attributes:
+
+* ``amount`` - amount of expected subscriptions; ``-1`` means that the amount
+ won't be checked, just the related label for 0/1/n subscriptions
+* ``minAmount`` - minimal expected amount of subscriptions
+* ``maxAmount`` - maximal expected amount of subscriptions
+
+/installation/hub/connect_to_redhat/registration/subscriptions/subscription
+===========================================================================
+Name of subscription present in registered state.
+
+Attributes:
+
+* ``name`` - name or *fnmatchcase* expression for expected subscription
+
+/installation/hub/connect_to_redhat/registration/subscriptions/subscription/contract
+====================================================================================
+Subscription contract in registered state.
+
+Attributes:
+
+* ``value``
+
+/installation/hub/connect_to_redhat/registration/subscriptions/subscription/end_date
+====================================================================================
+Subscription end date in registered state.
+
+Attributes:
+
+* ``value``
+
+/installation/hub/connect_to_redhat/registration/subscriptions/subscription/entitlements_consumed
+=================================================================================================
+Consumed entitlements in registered state.
+
+Attributes:
+
+* ``value``
+
+/installation/hub/connect_to_redhat/registration/subscriptions/subscription/service_level
+=========================================================================================
+Subscription service level in registered state.
+
+Attributes:
+
+* ``value``
+
+/installation/hub/connect_to_redhat/registration/subscriptions/subscription/sku
+===============================================================================
+Subscription SKU in registered state.
+
+Attributes:
+
+* ``value``
+
+/installation/hub/connect_to_redhat/registration/subscriptions/subscription/start_date
+======================================================================================
+Subscription start date in registered state.
+
+Attributes:
+
+* ``value``
+
+/installation/hub/connect_to_redhat/registration/system_purpose
+===============================================================
+System purpose in registered state, has no attributes.
+
+/installation/hub/connect_to_redhat/registration/system_purpose/role
+====================================================================
+System purpose role in registered state.
+
+Attributes:
+
+* ``value``
+
+/installation/hub/connect_to_redhat/registration/system_purpose/sla
+===================================================================
+System purpose SLA in registered state.
+
+Attributes:
+
+* ``value``
+
+/installation/hub/connect_to_redhat/registration/system_purpose/usage
+=====================================================================
+System purpose usage in registered state.
+
+Attributes:
+
+* ``value``
+
+/installation/hub/connect_to_redhat/system_purpose
+==================================================
+*Set System Purpose* check box.
+
+Attributes:
+
+* ``set`` - ``yes`` or ``no``
+
+/installation/hub/connect_to_redhat/system_purpose/role
+=======================================================
+System purpose *Role* combo box.
+
+Attributes:
+
+* ``value``
+
+/installation/hub/connect_to_redhat/system_purpose/sla
+======================================================
+System purpose *SLA* combo box.
+
+Attributes:
+
+* ``value``
+
+/installation/hub/connect_to_redhat/system_purpose/usage
+========================================================
+System purpose *Usage* combo box.
+
+Attributes:
+
+* ``value``
+
+/installation/hub/connect_to_redhat/unregister
+==============================================
+*Unregister* button.
+
+/installation/hub/connect_to_redhat/username
+============================================
+*User name* input field.
+
+Attributes:
+
+* ``value``
+
+/installation/hub/connect_to_redhat/wait_until_registered
+=========================================================
+Element with a special meaning, blocking processing of further elements
+until the registration process has completed, to ensure it took place
+completely (successfully or unsuccessfully).
diff --git a/doc/recipe_elements/create_user.rst b/doc/recipe_elements/create_user.rst
new file mode 100644
index 00000000..1bcb886a
--- /dev/null
+++ b/doc/recipe_elements/create_user.rst
@@ -0,0 +1,115 @@
+======================
+User Creation spoke
+======================
+
+/installation/hub/create_user/advanced
+======================================
+Handles *Advanced User Configuration* dialog in *User Creation* spoke.
+
+/installation/hub/create_user/advanced/cancel
+=============================================
+Clicks on *Cancel* button.
+
+/installation/hub/create_user/advanced/gid
+==========================================
+*Specify a group ID manually* field.
+
+Attributes:
+
+* ``value``
+
+/installation/hub/create_user/advanced/groups
+=============================================
+*Add user to the following groups* input field.
+
+Attributes:
+
+* ``value``
+
+/installation/hub/create_user/advanced/home
+===========================================
+*Home directory* input field.
+
+Attributes:
+
+* ``value``
+
+/installation/hub/create_user/advanced/manual_gid
+=================================================
+*Specify a group ID manually* check box.
+
+Attributes:
+
+* ``set`` - ``yes`` or ``no``
+
+/installation/hub/create_user/advanced/manual_uid
+=================================================
+*Specify a user ID manually* check box.
+
+Attributes:
+
+* ``set`` - ``yes`` or ``no``
+
+/installation/hub/create_user/advanced/save
+===========================================
+*Save Changes* button.
+
+/installation/hub/create_user/advanced/uid
+==========================================
+*Specify a user ID manually* field.
+
+Attributes:
+
+* ``value``
+
+/installation/hub/create_user/confirm_password
+==============================================
+*Confirm password* input field.
+
+Attributes:
+
+* ``value``
+
+/installation/hub/create_user/done
+==================================
+*Done* button.
+
+/installation/hub/create_user/full_name
+=======================================
+*Full name* input field.
+
+Attributes:
+
+* ``value``
+
+/installation/hub/create_user/is_admin
+======================================
+*Make this user administrator* check box.
+
+Attributes:
+
+* ``checked`` - ``yes`` or ``no``
+
+/installation/hub/create_user/password
+======================================
+*Password* input field.
+
+Attributes:
+
+* ``value``
+
+/installation/hub/create_user/require_password
+==============================================
+*Require a password to use this account* check box.
+
+Attributes:
+
+* ``checked`` - ``yes`` or ``no``
+
+/installation/hub/create_user/username
+======================================
+*Confirm password* input field.
+
+Attributes:
+
+* ``value``
diff --git a/doc/recipe_elements/datetime.rst b/doc/recipe_elements/datetime.rst
new file mode 100644
index 00000000..dda774c8
--- /dev/null
+++ b/doc/recipe_elements/datetime.rst
@@ -0,0 +1,133 @@
+=================
+Time & Date spoke
+=================
+
+/installation/hub/datetime/city
+===============================
+*City* combo box.
+
+Attributes:
+
+* ``value``
+
+/installation/hub/datetime/date
+===============================
+Date represented by the day/month/year combo boxes.
+
+/installation/hub/datetime/date/day
+===================================
+*Day* combo box.
+
+Attributes:
+
+* ``value``
+
+/installation/hub/datetime/date/month
+=====================================
+*Month* combo box.
+
+Attributes:
+
+* ``value``
+
+/installation/hub/datetime/date/year
+====================================
+*Year* combo box.
+
+
+Attributes:
+
+* ``value``
+
+/installation/hub/datetime/ntp
+==============================
+*Network time* toggle button.
+
+Attributes:
+
+* ``action`` - ``enable`` or ``disable``
+
+/installation/hub/datetime/ntp_settings
+=======================================
+Handles NTP settings dialog, accessed by the 'gears' NTP settings button.
+
+Attributes:
+
+* ``dialog`` - ``accept`` (confirms the settings), ``dialog`` (cancels the dialog)
+
+/installation/hub/datetime/ntp_settings/add
+===========================================
+Add an NTP server to the list.
+
+Attributes:
+
+* ``hostname`` - server hostname to add
+
+/installation/hub/datetime/ntp_settings/disable
+===============================================
+Disable an NTP server from the list.
+
+Attributes:
+
+* ``hostname`` - server hostname to disable
+
+/installation/hub/datetime/ntp_settings/enable
+==============================================
+Enable an NTP server from the list.
+
+Attributes:
+
+* ``hostname`` - server hostname to enable
+
+/installation/hub/datetime/ntp_settings/rename
+==============================================
+Rename an existing server from the list.
+
+Attributes:
+
+* ``old`` - (old) server hostname to rename
+* ``new`` - new server hostname
+
+/installation/hub/datetime/region
+=================================
+*Region* combo box.
+
+Attributes:
+
+* ``value``
+
+/installation/hub/datetime/time
+===============================
+Time-related configuration.
+
+/installation/hub/datetime/time/ampm
+====================================
+Set AM/PM.
+
+Attributes:
+
+* ``value``
+
+/installation/hub/datetime/time/format
+======================================
+Time format (24-hour or AM/PM) radio buttons.
+
+Attributes:
+
+* ``value`` - ``24`` for 24hour format or ``12`` for 12 (AM/PM) format
+
+/installation/hub/datetime/time/hours
+=====================================
+Hours value.
+
+Attributes:
+
+* ``value``
+
+/installation/hub/datetime/time/minutes
+=======================================
+Minutes value.
+
+Attributes:
+
+* ``value``
diff --git a/doc/recipe_elements/hub.rst b/doc/recipe_elements/hub.rst
new file mode 100644
index 00000000..4f6aeb22
--- /dev/null
+++ b/doc/recipe_elements/hub.rst
@@ -0,0 +1,126 @@
+==============================
+Installation Hub (main screen)
+==============================
+
+/installation/hub
+=================
+Handles main Anaconda hub (main screen with buttons for configuration of various areas - *spokes*), takes no attributes.
+
+/installation/hub/autopart
+==========================
+Shortcut element encompassing the following steps necessary to complete automatic partitioning:
+
+* Enter *Installation Destination* spoke,
+* select all available standard and specialized disks,
+* opt to reclaim additional space,
+* remove all available partitions in the reclaim dialog,
+* confirm the configuration.
+
+/installation/hub/begin_installation
+====================================
+Clicks on *Begin installation* button.
+
+/installation/hub/connect_to_redhat
+===================================
+Handles :doc:`Connect to Red Hat ` spoke.
+
+/installation/hub/create_user
+=============================
+Handles :doc:`User Creation ` spoke.
+
+/installation/hub/datetime
+==========================
+Handles :doc:`Time & Date ` spoke.
+
+/installation/hub/installation_source
+=====================================
+Handles :doc:`Installation Source ` spoke.
+
+/installation/hub/kdump
+=======================
+Handles *KDUMP* spoke. Only **entering/exiting** the spoke is implemented at this point,
+i. e. there are no subelements of ``/installation/hub/kdump``.
+
+/installation/hub/keyboard
+==========================
+Handles :doc:`Keyboard ` spoke.
+
+/installation/hub/language_spoke
+================================
+Handles :doc:`Language Support ` spoke.
+
+/installation/hub/luks_dialog
+=============================
+Equivalent to :ref:`recipe_elements/advanced_partitioning:/installation/hub/partitioning/advanced/luks_dialog`,
+including child elements.
+It can be used in this place with kickstart installations using
+``--encrypted`` without ``--passphrase``).
+
+..
+ /installation/hub/luks_dialog/cancel
+ ====================================
+ Equivalent to `/installation/hub/partitioning/advanced/luks_dialog/cancel`_
+
+ /installation/hub/luks_dialog/confirm_password
+ ==============================================
+ Equivalent to `/installation/hub/partitioning/advanced/luks_dialog/confirm_password`_
+
+ /installation/hub/luks_dialog/keyboard
+ ======================================
+ Equivalent to `/installation/hub/partitioning/advanced/luks_dialog/keyboard`_
+
+ /installation/hub/luks_dialog/password
+ ======================================
+ Equivalent to `/installation/hub/partitioning/advanced/luks_dialog/password`_
+
+ /installation/hub/luks_dialog/save
+ ==================================
+ Equivalent to `/installation/hub/partitioning/advanced/luks_dialog/save`_
+
+/installation/hub/oscap_addon
+=============================
+Handles `Security Profile ` spoke.
+
+Attributes:
+
+* ``fail_type`` - failure type shown on the spoke selector (button), depending
+ on the reason (``not_ready``, ``misconfiguration_detected``, ``warnings_appeared`` or
+ ``content_fetch_load_error``), used to distinguish the specific reason where necessary.
+* ``expected_message`` - expected status message on the spoke selector (button)
+
+/installation/hub/partitioning
+==============================
+Handles :doc:`Installation Destination ` spoke.
+
+/installation/hub/root
+======================
+Shortcut element usable only within ``ez:`` :ref:`namespace `
+to potentially make the recipe simpler by implicitly creating an `/installation/hub/root_password`_
+element after :ref:`preprocessing `.
+
+It also creates necessary subelements to arrange for automatic filling in of password
+and confirmation password based on ``password`` attribute value and successfully exiting
+the spoke by clicking on Done button twice, using ``may_fail`` policy.
+
+Attributes:
+
+* ``password``
+
+/installation/hub/root_password
+===============================
+Handles :doc:`Root Password ` spoke.
+
+/installation/hub/software_selection
+====================================
+Handles :doc:`Software Selection ` spoke.
+
+Attributes:
+
+* ``save-selection`` - save information about software selection (environment
+ and addons) into ``/root/anabot-packageset.txt`` in the installed system -
+ ``yes`` or ``no`` (default)
+
+/installation/hub/syspurpose
+============================
+Handles :doc:`System Purpose ` spoke.
+
diff --git a/doc/recipe_elements/index.rst b/doc/recipe_elements/index.rst
new file mode 100644
index 00000000..dc68157c
--- /dev/null
+++ b/doc/recipe_elements/index.rst
@@ -0,0 +1,190 @@
+###############
+Recipe elements
+###############
+
+********
+Overview
+********
+
+The Anabot recipe is an XML file consisting of specific elements.
+Here's an overview of supported elements, represented as a path in the
+tree-like structure of the file for a better readability.
+
+There are two main areas (applications) covered by Anabot - Anaconda and Initial Setup.
+
+As Anabot uses *handlers* (functions typically performing an actual action in the GUI)
+and *checks* (functions checking that the action took place in an expected way); they
+return results based on whether the action/check was successful.
+
+The expected outcome can be defined by ``policy`` attribute of any element in the recipe
+(when description of any element below states that it takes no attributes, it means arguments
+*specific* for the particular element) and it can contain the following values:
+
+* ``should_pass`` (implicit value) - the element's handler should be executed and
+ it is expected that check result should be successful
+* ``should_fail`` - similar, but the check is expected to fail
+* ``just_check`` - don't execute the handler (don't perform any action), only check
+ the expected resulting state (e. g. an input field contains expected text)
+* ``just_check_fail`` - don't perform any action, only check that the expected result
+ is **not** present
+
+A small subset of elements (e. g. :doc:`/installation/hub/oscap_addon `)
+also supports ``fail_type`` attribute, which can be used for a finer handling of the
+specific failure reason.
+
+.. note::
+
+ The elements description below describe available attributes and their meanings and values.
+ If a meaning and/or allowed values of an attribute aren't mentioned explicitly, they are
+ considered obvious from the context (i. e. ``value`` attribute for a text input field).
+
+ In a similar way, some attributes take binary values by nature (e. g. enable/disable,
+ accept/reject), but technically, on implementation level, one of the values is
+ exactly specified (e. g. ``enable``) and the complementary one can be
+ represented by any, unspecified value (e. g. ``disable``, ``disabled`` or even ``foobar``).
+ In such cases the following descriptions can specify a specific value even on places
+ where an arbitrary (complementary, unspecified) one could be used for the sake of
+ clarity. It is strongly advised to only use those specified values so as to
+ make things easy to understand and consistent, instead of some arbitrary ones,
+ despite their functional equivalence.
+
+********
+Anaconda
+********
+
+The *ez* namespace
+==================
+Anabot's preprocessor supports omitting parts of the recipe (elements or attributes)
+while creating the necessary attributes itself, thus making the recipe creation
+somewhat easier and more readable.
+
+This can be achieved by using the ``ez`` prefix within the supported elements
+(after first defining the namespace).
+
+For instance, a recipe containing just
+
+.. code-block:: xml
+
+
+
+
+
+
+
+will expand into a functionally complete minimal recipe containing the explicitly defined
+parts (````), with the rest generated automatically by preprocessor:
+
+.. code-block:: xml
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+The following elements can be used with the ``ez`` namespace (see specific sections for
+descriptions of particular elements):
+
+* `/installation`_
+* `/installation/welcome`_
+* :ref:`recipe_elements/hub:/installation/hub`
+* :ref:`recipe_elements/hub:/installation/hub/autopart`
+* :ref:`recipe_elements/hub:/installation/hub/root_password`
+* :ref:`recipe_elements/hub:/installation/hub/root`
+* :ref:`recipe_elements/configuration:/installation/configuration/root_password`
+* :ref:`recipe_elements/configuration:/installation/configuration/root`
+
+/installation
+=============
+This is the *main* element for Anaconda testing. It doesn't have any attributes.
+
+/installation/welcome
+=====================
+Handles welcome screen (*Welcome to Red Hat Enterprise Linux X.Y*).
+
+*************
+Initial Setup
+*************
+Described in :doc:`initial_setup`.
+
+****************
+Special elements
+****************
+There are two special elements that can be used in any place of the recipe:
+
+debug_stop
+==========
+When this element is handled, processing of the recipe stops. This can be, for instance, useful
+when designing a new recipe or handling issues with an existing one, without a need to process
+the whole recipe.
+Similarly it can be used when implementing new functionality in Anabot for debugging purposes.
+
+Processing of the recipe continues when Anabot detects existing ``/var/run/anabot/resume`` file
+(i. e. when you run ``touch /var/run/anabot/resume``).
+
+script
+======
+Arbitrary script snippet.
+
+Attributes:
+
+* ``interpret`` - interpreter used for script execution (``/bin/bash`` by default)
+* ``log_name`` - log name (for script output) relative to ``/var/run/anabot``
+ in installer environment
+
+***************************
+Detailed elements reference
+***************************
+.. toctree::
+ :caption: Anaconda
+ :maxdepth: 2
+
+ welcome
+ hub
+ keyboard
+ language
+ datetime
+ connect_to_redhat
+ create_user
+ root_password
+ installation_source
+ software_selection
+ partitioning
+ advanced_partitioning
+ oscap_addon
+ syspurpose
+ configuration
+
+.. toctree::
+ :caption: Initial Setup
+ :maxdepth: 2
+
+ initial_setup
\ No newline at end of file
diff --git a/doc/recipe_elements/initial_setup.rst b/doc/recipe_elements/initial_setup.rst
new file mode 100644
index 00000000..f734b79f
--- /dev/null
+++ b/doc/recipe_elements/initial_setup.rst
@@ -0,0 +1,181 @@
+=============
+Initial Setup
+=============
+
+/initial_setup
+==============
+Main element for *Initial Setup* testing.
+
+/initial_setup/create_user
+==========================
+Handles *User Creation* spoke. It is functionally equivalent to
+:doc:`/anaconda/hub/create_user `.
+
+/initial_setup/finish
+=====================
+Clicks on *Finish Configuration* button.
+
+/initial_setup/license
+======================
+Handles *License Information* spoke.
+
+/initial_setup/license/accept_license
+=====================================
+*I accept the license agreement* checkbox.
+
+Attributes:
+
+* checked - ``yes`` or ``no``
+
+/initial_setup/license/done
+===========================
+*Done* button.
+
+/initial_setup/license/eula
+===========================
+Useful only as a check (doesn't perform any action). It tests whether
+the displayed license text is equivalent to ``/usr/share/redhat-release/EULA``.
+
+/initial_setup/quit
+===================
+Clicks on *Quit* button.
+
+/initial_setup/subscription_manager
+===================================
+Handles *Subscription Manager* spoke.
+
+/initial_setup/subscription_manager/account_panel
+=================================================
+Configuration within subscription account panel.
+
+/initial_setup/subscription_manager/account_panel/back
+======================================================
+*Back* button.
+
+/initial_setup/subscription_manager/account_panel/login
+=======================================================
+*Login* input field.
+
+Attributes:
+
+* ``value``
+
+/initial_setup/subscription_manager/account_panel/password
+==========================================================
+*Password* input field.
+
+Attributes:
+
+* ``value``
+
+/initial_setup/subscription_manager/account_panel/register
+==========================================================
+*Register* button.
+
+/initial_setup/subscription_manager/account_panel/system_name
+=============================================================
+*System Name* input field.
+
+Attributes:
+
+* ``value``
+
+/initial_setup/subscription_manager/done
+========================================
+*Done* button.
+
+/initial_setup/subscription_manager/server_panel
+================================================
+Configuration within subscription server panel.
+
+/initial_setup/subscription_manager/server_panel/back
+=====================================================
+*Back* button.
+
+/initial_setup/subscription_manager/server_panel/default_server
+===============================================================
+Clicks on *Default* button (in handler) to setup a default server
+and checks (in check) whether the server field contains a default,
+expected value (**this is likely outdated**).
+
+/initial_setup/subscription_manager/server_panel/next
+=====================================================
+*Next* button.
+
+/initial_setup/subscription_manager/server_panel/proxy
+======================================================
+*Configure Proxy* button and related *Proxy Configuration* dialog.
+
+/initial_setup/subscription_manager/server_panel/proxy/cancel
+=============================================================
+Cancel the *Proxy Configuration* dialog.
+
+/initial_setup/subscription_manager/server_panel/proxy/proxy_server
+===================================================================
+*Proxy Location* input field.
+
+Attributes:
+
+* ``value``
+
+/initial_setup/subscription_manager/server_panel/proxy/save
+===========================================================
+*Save* button to accept proxy confguration dialog.
+
+/initial_setup/subscription_manager/server_panel/proxy/test_connection
+======================================================================
+*Test Connection* button.
+
+/initial_setup/subscription_manager/server_panel/proxy/use_proxy
+================================================================
+*I would like to connect via an HTTP proxy* checkbox.
+
+Attributes:
+
+* checked - ``yes`` or ``no``
+
+/initial_setup/subscription_manager/server_panel/server
+=======================================================
+Subscription server (*I will register with*) input field.
+
+Attributes:
+
+* ``value``
+
+/initial_setup/subscription_manager/sla_panel
+=============================================
+Configuration within service level agreement panel.
+
+/initial_setup/subscription_manager/sla_panel/back
+==================================================
+*Back* button.
+
+/initial_setup/subscription_manager/sla_panel/next
+==================================================
+*Next* button.
+
+/initial_setup/subscription_manager/sla_panel/sla
+=================================================
+Service level agreement combo box.
+
+Attributes:
+
+* ``value``
+
+/initial_setup/subscription_manager/subscription_panel
+======================================================
+Configuration within subscription panel.
+
+/initial_setup/subscription_manager/subscription_panel/attach
+=============================================================
+*Attach* button.
+
+/initial_setup/subscription_manager/subscription_panel/back
+===========================================================
+*Back* button.
+
+/initial_setup/subscription_manager/subscription_panel/subscriptions
+====================================================================
+No action, only checks that subscriptions table contains
+some subscription.
+
diff --git a/doc/recipe_elements/installation_source.rst b/doc/recipe_elements/installation_source.rst
new file mode 100644
index 00000000..270015fe
--- /dev/null
+++ b/doc/recipe_elements/installation_source.rst
@@ -0,0 +1,224 @@
+===================
+Installation Source
+===================
+
+/installation/hub/installation_source/additional_repo
+=====================================================
+Handles *Additional repositories*.
+
+/installation/hub/installation_source/additional_repo/add
+=========================================================
+Adds an additional repository to the list.
+
+Attributes:
+
+* ``name``
+* ``url``
+* ``url_type`` - ``repo``, ``mirrorlist``, ``metalink``
+* ``url_protocol`` - ``http://``, ``https://``, ``ftp://``, ``nfs``
+* ``proxy_url``
+* ``proxy_username``
+* ``proxy_password``
+* ``enabled`` - ``0|off|false`` or ``1|on|true``
+
+/installation/hub/installation_source/additional_repo/infobar
+=============================================================
+Equivalent to `/installation/hub/installation_source/infobar`_.
+
+/installation/hub/installation_source/additional_repo/reset
+===========================================================
+Reset the additional repositories to original state using the *Revert* button.
+
+/installation/hub/installation_source/additional_repo/select
+============================================================
+Selects repositories matching a name (fnmatchcase expression) and repo status
+and performs arbitrary changes on the selected set. Doesn't work with
+``policy="just_check"`` or ``policy="just_check_fail"``, as it relies
+on an existing action result in the check.
+
+Attributes:
+
+* ``name`` - repo name (fnmatchcase expression)
+* ``enabled`` - ``0|off|false`` or ``1|on|true``
+
+/installation/hub/installation_source/additional_repo/select/infobar
+====================================================================
+Equivalent to `/installation/hub/installation_source/infobar`_.
+
+/installation/hub/installation_source/additional_repo/select/name
+=================================================================
+Set/check *name* of selected repo(s).
+
+Attributes:
+
+* ``value``
+
+/installation/hub/installation_source/additional_repo/select/proxy_password
+===========================================================================
+Set/check proxy *password* of selected repo(s).
+
+Attributes:
+
+* ``value``
+
+/installation/hub/installation_source/additional_repo/select/proxy_url
+======================================================================
+Set/check *Proxy URL* of selected repo(s).
+
+Attributes:
+
+* ``value``
+
+/installation/hub/installation_source/additional_repo/select/proxy_username
+===========================================================================
+Set/check proxy *user name* of selected repo(s).
+
+Attributes:
+
+* ``value``
+
+/installation/hub/installation_source/additional_repo/select/remove
+===================================================================
+Remove selected repo(s).
+
+/installation/hub/installation_source/additional_repo/select/status
+===================================================================
+Enables or disables selected repo(s).
+
+Attributes:
+
+* ``enabled`` - ``0|off|false`` or ``1|on|true``
+
+/installation/hub/installation_source/additional_repo/select/url
+================================================================
+Sets URL for selected repo(s).
+
+Attributes:
+
+* ``value``
+
+/installation/hub/installation_source/additional_repo/select/url_protocol
+=========================================================================
+Sets URL protocol for selected repo(s).
+
+Attributes:
+
+* ``value``
+
+/installation/hub/installation_source/additional_repo/select/url_type
+=====================================================================
+Sets URL type for selected repo(s).
+
+Attributes:
+
+* ``value`` - ``http://``, ``https://``, ``ftp://``, ``nfs``
+
+/installation/hub/installation_source/choose_iso
+================================================
+*Choose an ISO* dialog. **Not implemented at this point.**
+
+/installation/hub/installation_source/infobar
+=============================================
+Check presence of info bar at the bottom of the screen and displayed message
+
+Attributes:
+
+* ``message`` - expected message; if ``*`` is used, only presence of info bar is checked
+* ``repo_name`` (optional) - repo name that will be put into the message after translation
+
+/installation/hub/installation_source/iso_device
+================================================
+*Device* combo box for ISO file. **Not implemented at this point.**
+
+/installation/hub/installation_source/main_repo_type
+====================================================
+Main repo *URL type* combo box.
+
+Attributes:
+
+* ``value`` - ``repo``, ``mirrorlist``, ``metalink``
+
+/installation/hub/installation_source/main_repo_url
+===================================================
+Main repo (*On the network* source) URL.
+
+Attributes:
+
+* ``value``
+
+/installation/hub/installation_source/main_repo_url_protocol
+============================================================
+Main repo (*On the network* source) URL protocol.
+
+Attributes:
+
+* ``value``
+
+/installation/hub/installation_source/proxy
+===========================================
+Handles installation source proxy setup dialog.
+
+/installation/hub/installation_source/proxy/authentication
+==========================================================
+*Use Authentication* check box.
+
+Attributes:
+
+* ``enable`` - ``0|off|false`` or ``1|on|true``
+
+/installation/hub/installation_source/proxy/cancel
+==================================================
+Cancels the proxy setup dialog.
+
+/installation/hub/installation_source/proxy/host
+================================================
+*Proxy Host* input field.
+
+Attributes:
+
+* ``value``
+
+/installation/hub/installation_source/proxy/ok
+==============================================
+Confirms the settings in the proxy setup dialog.
+
+/installation/hub/installation_source/proxy/password
+====================================================
+Proxy *password* input field.
+
+Attributes:
+
+* ``value``
+
+/installation/hub/installation_source/proxy/status
+==================================================
+*Enable HTTP Proxy* check box.
+
+Attributes:
+
+* ``enable`` - ``0|off|false`` or ``1|on|true``
+
+/installation/hub/installation_source/proxy/username
+====================================================
+*User name* input field.
+
+Attributes:
+
+* ``value``
+
+/installation/hub/installation_source/source
+============================================
+Installation source (radio button group) selection.
+
+Attributes:
+
+* ``type`` - ``media`` (*Auto-detected installation media*), ``cdn`` (*Red Hat CDN*),
+ ``iso`` (*ISO file*), ``network`` (*On the network*)
+
+/installation/hub/installation_source/verify_iso
+================================================
+Handles ISO verification (dialog). **Not implemented at this point**
+
+/installation/hub/installation_source/verify_media
+==================================================
+Handles verification of the auto-detected installation medium.
diff --git a/doc/recipe_elements/keyboard.rst b/doc/recipe_elements/keyboard.rst
new file mode 100644
index 00000000..aae083cf
--- /dev/null
+++ b/doc/recipe_elements/keyboard.rst
@@ -0,0 +1,120 @@
+==============
+Keyboard spoke
+==============
+
+.. _layout-name-mapping:
+
+Keyboard layout name mapping
+============================
+The keyboard layout names used by Anabot to manipulate with layouts listed in the
+Keyboard spoke may not always be easy to figure out as they are taken from X11
+configuration.
+
+To find a low-level keyboard layout name, have a look under ``! layout`` and ``! variant``
+sections of ``/usr/share/X11/xkb/rules/base.lst`` file in the installer environment.
+For instance, a record under ``! layout`` section consisting of ``cz Czech``
+appears as ``Czech`` in the layout list and is mapped to ``cz`` value of
+``name`` attribute of an element handling keyboard layout.
+
+In a similar way, a record ``dvorak fr: French (Dvorak)`` under ``! variant``
+section is listed as ``French (Dvorak)`` in the layout list in Anaconda,
+and is mapped to ``fr (dvorak)`` value of the ``name`` attribute.
+
+/installation/hub/keyboard/add_layout
+=====================================
+Handles *add* (*+*) button and resulting dialog.
+
+Attributes:
+
+* ``name`` - name of the layout, e. g. ``cz`` or ``de (deadgraveacute)`` (see
+ section about layout name :ref:`mapping `)
+* ``dialog`` - action to handle the dialog - ``accept`` (default) or ``reject``
+
+/installation/hub/keyboard/layout
+=================================
+Selects a layout from layouts list.
+
+Attributes:
+
+* ``name`` - name of the layout, e. g. ``de (nodeadkeys)``. A *glob* expression may be used.
+ Also see section about layout name :ref:`mapping `.
+
+/installation/hub/keyboard/layout/move_down
+===========================================
+Moves the selected layout one position down in the list using the *down* button.
+
+/installation/hub/keyboard/layout/move_up
+=========================================
+Moves the selected layout one position up in the list using the *up* button.
+
+/installation/hub/keyboard/layout/options
+=========================================
+Handles *Options* button and the resulting *Layout Switching Options* dialog.
+
+Attributes:
+
+* ``dialog`` - action to handle the dialog - ``accept`` (default) or ``reject``
+
+/installation/hub/keyboard/layout/options/shortcut
+==================================================
+Handles (de)activation of a layout switching shortcut in *Layout Switching Options* dialog.
+
+Attributes:
+
+* ``name`` - shortcut name (as in the list)
+* ``action`` - ``enable`` or ``disable``
+
+/installation/hub/keyboard/layout/position
+==========================================
+Handles layout position in the list. **Not implemented at this point.**
+
+/installation/hub/keyboard/layout/remove
+========================================
+Removes the selected layout from the list using *remove* (*-*) button.
+
+/installation/hub/keyboard/layout/show
+======================================
+Displays keyboard layout in graphical form using the appropriate button.
+**There is no check to test whether the displayed layout is correct at this point.**
+
+/installation/hub/keyboard/layout/test
+======================================
+Handles keyboard layout test in the *Test the layout configuration below:* field.
+**Not implemented at this point.**
+
+/installation/hub/keyboard/move_down
+====================================
+Equivalent to `/installation/hub/keyboard/layout/move_down`_
+
+/installation/hub/keyboard/move_up
+==================================
+Equivalent to `/installation/hub/keyboard/layout/move_up`_
+
+/installation/hub/keyboard/options
+==================================
+Equivalent to `/installation/hub/keyboard/layout/options`_
+
+/installation/hub/keyboard/options/shortcut
+===========================================
+Equivalent to `/installation/hub/keyboard/layout/options/shortcut`_
+
+/installation/hub/keyboard/remove
+=================================
+Equivalent to `/installation/hub/keyboard/layout/remove`_
+
+/installation/hub/keyboard/replace_layouts
+==========================================
+A shortcut to remove all existing layouts and add a new one.
+
+Attributes:
+
+* ``name`` - name of the replacement layout, e. g. ``cz`` or ``de (deadgraveacute)``
+ (see section about layout name :ref:`mapping `)
+
+/installation/hub/keyboard/show
+===============================
+Equivalent to `/installation/hub/keyboard/layout/show`_
+
+/installation/hub/keyboard/test
+===============================
+Equivalent to `/installation/hub/keyboard/layout/test`_
diff --git a/doc/recipe_elements/language.rst b/doc/recipe_elements/language.rst
new file mode 100644
index 00000000..8ea05a3c
--- /dev/null
+++ b/doc/recipe_elements/language.rst
@@ -0,0 +1,20 @@
+==============
+Language spoke
+==============
+
+/installation/hub/language_spoke/language
+=========================================
+Selects a language from language list.
+
+Attributes:
+
+* ``name``
+
+/installation/hub/language_spoke/language/locality
+==================================================
+Selects language locality from localities list (on the right).
+
+Attributes:
+
+* ``name`` - locality name (e. g. ``English (Antigua & Barbuda)``), beware of HTML entities where needed
+* ``action`` - action to take for the selected locality (``check`` or ``uncheck``)
diff --git a/doc/recipe_elements/oscap_addon.rst b/doc/recipe_elements/oscap_addon.rst
new file mode 100644
index 00000000..15c2cb4b
--- /dev/null
+++ b/doc/recipe_elements/oscap_addon.rst
@@ -0,0 +1,124 @@
+======================
+Security Profile spoke
+======================
+
+/installation/hub/oscap_addon/apply_policy
+==========================================
+Handles *Apply security policy:* toggle switch
+
+Attributes:
+
+* ``action`` - ``enable`` or ``disable``
+
+/installation/hub/oscap_addon/change_content
+============================================
+Handles *Change content* button and resulting subspoke for content selection.
+
+/installation/hub/oscap_addon/change_content/done
+=================================================
+Equivalent to `/installation/hub/oscap_addon/done`_
+
+/installation/hub/oscap_addon/change_content/fetch
+==================================================
+Handles *Fetch* button and error bar on the bottom of the screen if an error
+occurs during content fetching.
+
+Attributes:
+
+* ``fail_type`` - failure/error type related to content fetching:
+ * ``invalid_url``
+ * ``no_content_found``
+ * ``extraction_failed``
+ * ``invalid_content``
+ * ``network_error``
+ * ``unhandled_message`` - other, unspecified error
+
+/installation/hub/oscap_addon/change_content/source
+===================================================
+Handles security content source (URL) field.
+
+Attributes:
+
+* ``url``
+
+/installation/hub/oscap_addon/change_content/use_ssg
+====================================================
+Handles *Use SCAP Security Guide* button that makes the user return back to the
+main Security Profile spoke.
+
+/installation/hub/oscap_addon/changes
+=====================================
+Handles list of changes (*Changes that were done or need to be done:*)
+imposed by a selected security profile (usable only for checks).
+
+**Note:** The elements for error/information/warning messages in the list are functionally
+equivalent, as it's technically not possible to distinguish the exact type at this point.
+
+/installation/hub/oscap_addon/changes/error
+===========================================
+Handles a line (message) in the changes list. Not specific for an error message at this
+point (see related `note `_ for
+``/installation/hub/oscap_addon/changes`` element).
+
+Attributes:
+
+* ``text`` - message text in the raw form (unformatted string)
+* ``params`` (where applicable) - a space-separated list of parameters used for formatting
+ of the message string
+
+/installation/hub/oscap_addon/changes/info
+==========================================
+Functionally equivalent to `/installation/hub/oscap_addon/changes/error`_
+at this point (see related `note `_ for
+``/installation/hub/oscap_addon/changes`` element).
+
+/installation/hub/oscap_addon/changes/warning
+=============================================
+Functionally equivalent to `/installation/hub/oscap_addon/changes/error`_
+at this point (see related `note `_ for
+``/installation/hub/oscap_addon/changes`` element).
+
+/installation/hub/oscap_addon/choose
+====================================
+Chooses (in the sense of just highlighting an entry, not *activating* it) a security
+profile from the list.
+
+Attributes:
+
+* ``mode`` - profile selection mode
+ * ``manual`` (default) - profile with a particular name will be selected
+ * ``random`` - a random profile will be selected, potentially including
+ the current one
+ * ``random_strict`` - a random profile will be selected, excluding the
+ currently selected one
+* ``profile`` - profile name as shown in the list (the first, bold line)
+
+/installation/hub/oscap_addon/done
+==================================
+*Done* button.
+
+/installation/hub/oscap_addon/select
+====================================
+Handles *Select profile* button (i. e. activates the chosen profile).
+
+/installation/hub/oscap_addon/select_checklist
+==============================================
+Handles *Checklist* combo box (if available).
+
+Attributes:
+
+* ``id``
+
+/installation/hub/oscap_addon/select_datastream
+===============================================
+Handles *Data stream* combo box (if available).
+
+Attributes:
+
+* ``id``
+
+/installation/hub/oscap_addon/use_ssg
+=====================================
+Functionally equivalent to `/installation/hub/oscap_addon/change_content/use_ssg`_.
+Needs to be used from this path in special cases (e. g. kickstart installation
+with incorrect content fingerprint specified).
diff --git a/doc/recipe_elements/partitioning.rst b/doc/recipe_elements/partitioning.rst
new file mode 100644
index 00000000..1776007a
--- /dev/null
+++ b/doc/recipe_elements/partitioning.rst
@@ -0,0 +1,121 @@
+==============================
+Installation Destination spoke
+==============================
+
+/installation/hub/partitioning/add_specialized_disk
+===================================================
+Handles *Add a disk...* in *Specialized & Network Disks* and related subspoke.
+
+/installation/hub/partitioning/add_specialized_disk/done
+========================================================
+*Done* button.
+
+/installation/hub/partitioning/add_specialized_disk/select
+==========================================================
+Handles (de)selection of available specialized disks.
+
+Attributes:
+
+* ``action`` - ``select`` or ``deselect`` (or anything else == deselect)
+* ``invert_selection`` - inverts the selection logic (``0|off|false`` - default or ``1|on|true``)
+* ``name`` - disk name or *glob*-like expression
+
+/installation/hub/partitioning/additional_space
+===============================================
+*I would like to make additional space available.* check box.
+
+Attributes:
+
+* ``action`` - ``enable`` (default) or ``disable``
+
+/installation/hub/partitioning/advanced
+=======================================
+Handles *Manual partitioning* subspoke.
+
+
+/installation/hub/partitioning/disk
+===================================
+(De)selects disks from *Local Standard Disks* section of *Installation Destination*
+spoke. Note that the logic of disks handling is based on knowledge of Anaconda's
+behaviour of implicit disk selection in various scenarios (manual vs. interactive
+kickstart installation), not the (graphical) disk selection status in the GUI.
+The reason is that it's not possible to get the information about which disk icons
+contain the selection mark via Dogtail/ATK at this point.
+
+Attributes:
+
+* ``name`` - disk name or glob pattern
+* ``action`` - ``select`` or ``deselect``
+
+/installation/hub/partitioning/done
+===================================
+*Done* button.
+
+/installation/hub/partitioning/encrypt_data
+===========================================
+*Encrypt my data* check box at the bottom of *Installation Destination* spoke.
+
+Attributes:
+
+* ``action`` - ``enable`` or ``disable``
+
+/installation/hub/partitioning/luks_dialog
+===================================================
+Handles *Disk Encryption Passphrase* dialog.
+
+/installation/hub/partitioning/luks_dialog/cancel
+==========================================================
+Cancels the *Disk Encryption Passphrase* dialog.
+
+/installation/hub/partitioning/luks_dialog/confirm_password
+====================================================================
+*Confirm:* password field in *Disk Encryption Passphrase* dialog.
+
+Attributes:
+
+* ``value``
+
+/installation/hub/partitioning/luks_dialog/keyboard
+============================================================
+Switches keyboard layout to a required one in *Disk Encryption Passphrase* dialog.
+
+Attributes:
+
+* ``layout``
+
+/installation/hub/partitioning/luks_dialog/password
+============================================================
+*Passphrase* field in *Disk Encryption Passphrase* dialog.
+
+Attributes:
+
+* ``value``
+
+/installation/hub/partitioning/luks_dialog/save
+========================================================
+Confirms the *Disk Encryption Passphrase* dialog (clicks on *Save Passphrase* button).
+
+/installation/hub/partitioning/mode
+===================================
+Handles *Storage Configuration* radio buttons to choose partitioning mode.
+
+Attributes:
+
+* ``mode`` - partitioning mode:
+ * ``default`` - default, don't touch the preselected value
+ * ``automatic`` - *Automatic*
+ * ``manual`` - *Custom*
+ * ``blivet`` - *Advanced Custom (Blivet GUI)*
+
+/installation/hub/partitioning/reclaim
+======================================
+Handles *Reclaim Disk Space* dialog presented when Automatic partitioning
+mode is confirmed.
+
+Attributes:
+
+* ``action`` - **Not implemented at this point** - ``reclaim`` or ``cancel``
+
+/installation/hub/partitioning/reclaim/delete_all
+=================================================
+Handles *Delete all* button in *Reclaim Disk Space* dialog.
diff --git a/doc/recipe_elements/root_password.rst b/doc/recipe_elements/root_password.rst
new file mode 100644
index 00000000..c5280800
--- /dev/null
+++ b/doc/recipe_elements/root_password.rst
@@ -0,0 +1,55 @@
+===================
+Root Password spoke
+===================
+
+/installation/configuration/root_password
+=========================================
+Equivalent to :ref:`recipe_elements/hub:/installation/hub/root_password`.
+
+/installation/configuration/root_password/confirm_password
+==========================================================
+Equivalent to `/installation/hub/root_password/confirm_password`_.
+
+/installation/configuration/root_password/done
+==============================================
+Equivalent to `/installation/hub/root_password/done`_.
+
+/installation/configuration/root_password/password
+==================================================
+Equivalent to `/installation/hub/root_password/password`_.
+
+/installation/hub/root_password/allow_root_ssh_login_with_password
+==================================================================
+*Allow root SSH login with password* check box.
+
+Attributes:
+
+* ``checked`` - ``yes`` or ``no``
+
+/installation/hub/root_password/confirm_password
+================================================
+*Confirm* password input field.
+
+Attributes:
+
+* ``value``
+
+/installation/hub/root_password/done
+====================================
+*Done* button.
+
+/installation/hub/root_password/lock_root_account
+=================================================
+*Lock root account* check box.
+
+Attributes:
+
+* ``checked`` - ``yes`` or ``no``
+
+/installation/hub/root_password/password
+========================================
+*Root Password* input field.
+
+Attributes:
+
+* ``value``
diff --git a/doc/recipe_elements/software_selection.rst b/doc/recipe_elements/software_selection.rst
new file mode 100644
index 00000000..fb040251
--- /dev/null
+++ b/doc/recipe_elements/software_selection.rst
@@ -0,0 +1,25 @@
+========================
+Software Selection spoke
+========================
+
+/installation/hub/software_selection/addon
+==========================================
+Handles software addons (*Additional software for Selected Environment*) selection.
+
+Attributes:
+
+* ``action`` - ``select`` or ``deselect``
+* ``id`` - addon id (as defined in comps file) or glob pattern
+* ``subselect`` (optional)
+ * ``random`` - selects random subset of addons (``policy=just_check`` or
+ ``policy=just_check_fail`` logically conflicts with ``subselect=random``,
+ as it doesn't make sense to check a random selection).
+
+/installation/hub/software_selection/environment
+================================================
+Handles *Base Environment* selection.
+
+Attributes:
+
+* ``id`` - environment id (as defined in comps file)
+* ``select`` (optional) - ``random`` (random environment selection)
diff --git a/doc/recipe_elements/syspurpose.rst b/doc/recipe_elements/syspurpose.rst
new file mode 100644
index 00000000..8235617a
--- /dev/null
+++ b/doc/recipe_elements/syspurpose.rst
@@ -0,0 +1,27 @@
+====================
+System Purpose spoke
+====================
+
+/installation/hub/syspurpose/role
+=================================
+Selects a system *Role*.
+
+Attributes:
+
+* ``value``
+
+/installation/hub/syspurpose/sla
+================================
+Selects *Red Hat Service Level Agreement*.
+
+Attributes:
+
+* ``value``
+
+/installation/hub/syspurpose/usage
+==================================
+Selects system *Usage*.
+
+Attributes:
+
+* ``value``
diff --git a/doc/recipe_elements/welcome.rst b/doc/recipe_elements/welcome.rst
new file mode 100644
index 00000000..b5e39016
--- /dev/null
+++ b/doc/recipe_elements/welcome.rst
@@ -0,0 +1,42 @@
+==============
+Welcome screen
+==============
+
+/installation/welcome/beta_dialog
+=================================
+Handles Beta dialog.
+
+Attributes:
+
+* ``dialog`` - ``accept`` or ``reject``
+
+/installation/welcome/continue
+==============================
+*Continue* button on the welcome screen.
+
+/installation/welcome/language
+==============================
+Handles choice of language on the welcome screen.
+
+Attributes:
+
+* ``value``
+
+/installation/welcome/locality
+==============================
+Handles choice of language locality on the welcome screen.
+
+Attributes:
+
+* ``value``
+
+/installation/welcome/storage_error_dialog
+==========================================
+Handles storage error dialogs that appears in case of storage state issue
+(e. g. when two LVM volume groups with the same name are present).
+
+Attributes:
+
+* ``action`` - ``retry``, ``exit`` or ``noaction`` (doesn't touch the dialog)
+* ``err_type`` - *beginning* of the particular error string
+ (e. g. ``multiple LVM volume groups with the same name``)