From b690b7d230449215c9a66ccacbedfc6aca3a0207 Mon Sep 17 00:00:00 2001
From: Roman Derlemenko <romanderlemenko@gmail.com>
Date: Fri, 23 Apr 2021 12:12:40 +0300
Subject: [PATCH] [WIP][TASK] NL-3241 Add menu builder forms

---
 .gitignore                                    |   2 +
 Classes/Domain/Model/Menu.php                 |  58 ++---
 Classes/Domain/Model/MenuItem.php             | 169 +++++++++++++--
 Classes/Domain/Model/MenuItemContent.php      |  49 +----
 Classes/Domain/Model/MenuItemLink.php         | 106 +---------
 Classes/Domain/Model/MenuItemPage.php         | 104 +--------
 Configuration/Extbase/Persistence/Classes.php |  25 ---
 Configuration/ExtensionBuilder/settings.yaml  |   1 +
 .../tx_nlmenubuilder_domain_model_content.php | 148 -------------
 .../tx_nlmenubuilder_domain_model_link.php    | 200 ------------------
 .../tx_nlmenubuilder_domain_model_menu.php    |  51 ++---
 ...tx_nlmenubuilder_domain_model_menuitem.php | 153 ++++++++++++--
 .../tx_nlmenubuilder_domain_model_page.php    | 200 ------------------
 .../tx_nlmenubuilder_domain_model_submenu.php | 130 ------------
 ExtensionBuilder.json                         |  89 ++++++--
 Resources/Private/Language/locallang.xlf      |  27 ++-
 ..._tx_nlmenubuilder_domain_model_content.xlf |  14 --
 ...csh_tx_nlmenubuilder_domain_model_link.xlf |  20 --
 ...csh_tx_nlmenubuilder_domain_model_menu.xlf |   8 +-
 ...x_nlmenubuilder_domain_model_menugroup.xlf |   2 +-
 ...tx_nlmenubuilder_domain_model_menuitem.xlf |  21 +-
 ...csh_tx_nlmenubuilder_domain_model_page.xlf |  20 --
 ..._tx_nlmenubuilder_domain_model_submenu.xlf |  11 -
 Resources/Private/Language/locallang_db.xlf   |  30 ++-
 .../tx_nlmenubuilder_domain_model_menu.gif    | Bin 4209 -> 5491 bytes
 ...x_nlmenubuilder_domain_model_menugroup.gif | Bin 4681 -> 5236 bytes
 ...ubuilder_domain_model_menuitem-content.svg |   1 +
 ...menubuilder_domain_model_menuitem-link.svg |   1 +
 ...menubuilder_domain_model_menuitem-page.svg |   1 +
 ...ubuilder_domain_model_menuitem-submenu.svg |   1 +
 ...tx_nlmenubuilder_domain_model_menuitem.gif | Bin 533 -> 6108 bytes
 ...nubuilder_domain_model_menuitemcontent.svg |   3 -
 ext_emconf.php                                |   4 +-
 ext_localconf.php                             |  10 +-
 ext_tables.sql                                |  13 +-
 35 files changed, 523 insertions(+), 1149 deletions(-)
 delete mode 100644 Configuration/Extbase/Persistence/Classes.php
 delete mode 100644 Configuration/TCA/tx_nlmenubuilder_domain_model_content.php
 delete mode 100644 Configuration/TCA/tx_nlmenubuilder_domain_model_link.php
 delete mode 100644 Configuration/TCA/tx_nlmenubuilder_domain_model_page.php
 delete mode 100644 Configuration/TCA/tx_nlmenubuilder_domain_model_submenu.php
 delete mode 100644 Resources/Private/Language/locallang_csh_tx_nlmenubuilder_domain_model_content.xlf
 delete mode 100644 Resources/Private/Language/locallang_csh_tx_nlmenubuilder_domain_model_link.xlf
 delete mode 100644 Resources/Private/Language/locallang_csh_tx_nlmenubuilder_domain_model_page.xlf
 delete mode 100644 Resources/Private/Language/locallang_csh_tx_nlmenubuilder_domain_model_submenu.xlf
 create mode 100644 Resources/Public/Icons/tx_nlmenubuilder_domain_model_menuitem-content.svg
 create mode 100644 Resources/Public/Icons/tx_nlmenubuilder_domain_model_menuitem-link.svg
 create mode 100644 Resources/Public/Icons/tx_nlmenubuilder_domain_model_menuitem-page.svg
 create mode 100644 Resources/Public/Icons/tx_nlmenubuilder_domain_model_menuitem-submenu.svg
 delete mode 100644 Resources/Public/Icons/tx_nlmenubuilder_domain_model_menuitemcontent.svg

diff --git a/.gitignore b/.gitignore
index 629c224..997068d 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,5 +1,7 @@
 .idea
 .vscode
+.gitattributes
+.editorconfig
 /vendor/
 /Documentation/
 /Tests/
diff --git a/Classes/Domain/Model/Menu.php b/Classes/Domain/Model/Menu.php
index fd82a0d..7f83e89 100644
--- a/Classes/Domain/Model/Menu.php
+++ b/Classes/Domain/Model/Menu.php
@@ -27,19 +27,19 @@ class Menu extends \TYPO3\CMS\Extbase\DomainObject\AbstractEntity
     protected $title = '';
 
     /**
-     * menuItem
+     * menuGroup
      * 
-     * @var \TYPO3\CMS\Extbase\Persistence\ObjectStorage<\NL\NlMenubuilder\Domain\Model\MenuItem>
-     * @TYPO3\CMS\Extbase\Annotation\ORM\Cascade("remove")
+     * @var \NL\NlMenubuilder\Domain\Model\MenuGroup
      */
-    protected $menuItem = null;
+    protected $menuGroup = null;
 
     /**
-     * menuGroup
+     * menuItem
      * 
-     * @var \NL\NlMenubuilder\Domain\Model\MenuGroup
+     * @var \TYPO3\CMS\Extbase\Persistence\ObjectStorage<\NL\NlMenubuilder\Domain\Model\MenuItem>
+     * @TYPO3\CMS\Extbase\Annotation\ORM\Cascade("remove")
      */
-    protected $menuGroup = null;
+    protected $menuItem = null;
 
     /**
      * Returns the title
@@ -85,6 +85,27 @@ class Menu extends \TYPO3\CMS\Extbase\DomainObject\AbstractEntity
         $this->menuItem = new \TYPO3\CMS\Extbase\Persistence\ObjectStorage();
     }
 
+    /**
+     * Returns the menuGroup
+     * 
+     * @return \NL\NlMenubuilder\Domain\Model\MenuGroup menuGroup
+     */
+    public function getMenuGroup()
+    {
+        return $this->menuGroup;
+    }
+
+    /**
+     * Sets the menuGroup
+     * 
+     * @param \NL\NlMenubuilder\Domain\Model\MenuGroup $menuGroup
+     * @return void
+     */
+    public function setMenuGroup(\NL\NlMenubuilder\Domain\Model\MenuGroup $menuGroup)
+    {
+        $this->menuGroup = $menuGroup;
+    }
+
     /**
      * Adds a MenuItem
      * 
@@ -110,7 +131,7 @@ class Menu extends \TYPO3\CMS\Extbase\DomainObject\AbstractEntity
     /**
      * Returns the menuItem
      * 
-     * @return \TYPO3\CMS\Extbase\Persistence\ObjectStorage<\NL\NlMenubuilder\Domain\Model\MenuItem> $menuItem
+     * @return \TYPO3\CMS\Extbase\Persistence\ObjectStorage<\NL\NlMenubuilder\Domain\Model\MenuItem> menuItem
      */
     public function getMenuItem()
     {
@@ -127,25 +148,4 @@ class Menu extends \TYPO3\CMS\Extbase\DomainObject\AbstractEntity
     {
         $this->menuItem = $menuItem;
     }
-
-    /**
-     * Returns the menuGroup
-     * 
-     * @return \NL\NlMenubuilder\Domain\Model\MenuGroup $menuGroup
-     */
-    public function getMenuGroup()
-    {
-        return $this->menuGroup;
-    }
-
-    /**
-     * Sets the menuGroup
-     * 
-     * @param \NL\NlMenubuilder\Domain\Model\MenuGroup $menuGroup
-     * @return void
-     */
-    public function setMenuGroup(\NL\NlMenubuilder\Domain\Model\MenuGroup $menuGroup)
-    {
-        $this->menuGroup = $menuGroup;
-    }
 }
diff --git a/Classes/Domain/Model/MenuItem.php b/Classes/Domain/Model/MenuItem.php
index a30f667..b56df01 100644
--- a/Classes/Domain/Model/MenuItem.php
+++ b/Classes/Domain/Model/MenuItem.php
@@ -1,8 +1,6 @@
 <?php
 namespace NL\NlMenubuilder\Domain\Model;
 
-use ReflectionClass;
-
 /***
  *
  * This file is part of the "Menu Builder" Extension for TYPO3 CMS.
@@ -10,7 +8,7 @@ use ReflectionClass;
  * For the full copyright and license information, please read the
  * LICENSE.txt file that was distributed with this source code.
  *
- *  (c) 2021 
+ *  (c) 2021
  *
  ***/
 /**
@@ -18,26 +16,66 @@ use ReflectionClass;
  */
 class MenuItem extends \TYPO3\CMS\Extbase\DomainObject\AbstractEntity
 {
+    public const TYPE_PAGE = '0';
+    public const TYPE_LINK = '1';
+    public const TYPE_CONTENT = '2';
+    public const TYPE_SUBMENU = '3';
+
+    /**
+     * Type of the menu item
+     *
+     * @var int
+     * @TYPO3\CMS\Extbase\Annotation\Validate("NotEmpty")
+     */
+    protected $type = 0;
 
     /**
      * Name of the menu item
-     * 
+     *
      * @var string
      * @TYPO3\CMS\Extbase\Annotation\Validate("NotEmpty")
      */
     protected $title = '';
 
     /**
-     * type
-     * 
-     * @var int
-     * @TYPO3\CMS\Extbase\Annotation\Validate("NotEmpty")
+     * subtitle
+     *
+     * @var string
      */
-    protected $type = 0;
+    protected $subtitle = '';
+
+    /**
+     * Optional link image
+     *
+     * @var \TYPO3\CMS\Extbase\Domain\Model\FileReference
+     * @TYPO3\CMS\Extbase\Annotation\ORM\Cascade("remove")
+     */
+    protected $image = null;
+
+    /**
+     * page
+     *
+     * @var string
+     */
+    protected $page = '';
+
+    /**
+     * link
+     *
+     * @var string
+     */
+    protected $link = '';
+
+    /**
+     * content
+     *
+     * @var string
+     */
+    protected $content = '';
 
     /**
      * Returns the title
-     * 
+     *
      * @return string $title
      */
     public function getTitle()
@@ -47,7 +85,7 @@ class MenuItem extends \TYPO3\CMS\Extbase\DomainObject\AbstractEntity
 
     /**
      * Sets the title
-     * 
+     *
      * @param string $title
      * @return void
      */
@@ -58,7 +96,7 @@ class MenuItem extends \TYPO3\CMS\Extbase\DomainObject\AbstractEntity
 
     /**
      * Returns the type
-     * 
+     *
      * @return int $type
      */
     public function getType()
@@ -68,7 +106,7 @@ class MenuItem extends \TYPO3\CMS\Extbase\DomainObject\AbstractEntity
 
     /**
      * Sets the type
-     * 
+     *
      * @param int $type
      * @return void
      */
@@ -76,4 +114,109 @@ class MenuItem extends \TYPO3\CMS\Extbase\DomainObject\AbstractEntity
     {
         $this->type = $type;
     }
+
+    /**
+     * Returns the subtitle
+     *
+     * @return string $subtitle
+     */
+    public function getSubtitle()
+    {
+        return $this->subtitle;
+    }
+
+    /**
+     * Sets the subtitle
+     *
+     * @param string $subtitle
+     * @return void
+     */
+    public function setSubtitle($subtitle)
+    {
+        $this->subtitle = $subtitle;
+    }
+
+    /**
+     * Returns the image
+     *
+     * @return \TYPO3\CMS\Extbase\Domain\Model\FileReference $image
+     */
+    public function getImage()
+    {
+        return $this->image;
+    }
+
+    /**
+     * Sets the image
+     *
+     * @param \TYPO3\CMS\Extbase\Domain\Model\FileReference $image
+     * @return void
+     */
+    public function setImage(\TYPO3\CMS\Extbase\Domain\Model\FileReference $image)
+    {
+        $this->image = $image;
+    }
+
+    /**
+     * Returns the page
+     *
+     * @return string $page
+     */
+    public function getPage()
+    {
+        return $this->page;
+    }
+
+    /**
+     * Sets the page
+     *
+     * @param string $page
+     * @return void
+     */
+    public function setPage($page)
+    {
+        $this->page = $page;
+    }
+
+    /**
+     * Returns the link
+     *
+     * @return string $link
+     */
+    public function getLink()
+    {
+        return $this->link;
+    }
+
+    /**
+     * Sets the link
+     *
+     * @param string $link
+     * @return void
+     */
+    public function setLink($link)
+    {
+        $this->link = $link;
+    }
+
+    /**
+     * Returns the content
+     *
+     * @return string $content
+     */
+    public function getContent()
+    {
+        return $this->content;
+    }
+
+    /**
+     * Sets the content
+     *
+     * @param string $content
+     * @return void
+     */
+    public function setContent($content)
+    {
+        $this->content = $content;
+    }
 }
diff --git a/Classes/Domain/Model/MenuItemContent.php b/Classes/Domain/Model/MenuItemContent.php
index a460f0c..06f0c2e 100644
--- a/Classes/Domain/Model/MenuItemContent.php
+++ b/Classes/Domain/Model/MenuItemContent.php
@@ -1,56 +1,19 @@
 <?php
-namespace NL\NlMenubuilder\Domain\Model;
 
+namespace NL\NlMenubuilder\Domain\Model;
 
-/***
- *
- * This file is part of the "Menu Builder" Extension for TYPO3 CMS.
- *
- * For the full copyright and license information, please read the
- * LICENSE.txt file that was distributed with this source code.
- *
- *  (c) 2021 
- *
- ***/
 /**
- * Content
+ * MenuItem
  */
 class MenuItemContent extends MenuItem
 {
+    public const TYPE = 2;
+
     /**
-     * type
+     * Type of the menu item
      *
      * @var int
      * @TYPO3\CMS\Extbase\Annotation\Validate("NotEmpty")
      */
-    protected $type = 0;
-
-    /**
-     * content
-     * 
-     * @var string
-     * @TYPO3\CMS\Extbase\Annotation\Validate("NotEmpty")
-     */
-    protected $content = '';
-
-    /**
-     * Returns the content
-     * 
-     * @return string $content
-     */
-    public function getContent()
-    {
-        return $this->content;
-    }
-
-    /**
-     * Sets the content
-     * 
-     * @param string $content
-     * @return void
-     */
-    public function setContent($content)
-    {
-        $this->content = $content;
-    }
+    protected $type = self::TYPE;
 }
diff --git a/Classes/Domain/Model/MenuItemLink.php b/Classes/Domain/Model/MenuItemLink.php
index bb6639a..0051416 100644
--- a/Classes/Domain/Model/MenuItemLink.php
+++ b/Classes/Domain/Model/MenuItemLink.php
@@ -1,113 +1,19 @@
 <?php
-namespace NL\NlMenubuilder\Domain\Model;
 
+namespace NL\NlMenubuilder\Domain\Model;
 
-/***
- *
- * This file is part of the "Menu Builder" Extension for TYPO3 CMS.
- *
- * For the full copyright and license information, please read the
- * LICENSE.txt file that was distributed with this source code.
- *
- *  (c) 2021 
- *
- ***/
 /**
- * Link
+ * MenuItem
  */
 class MenuItemLink extends MenuItem
 {
+    public const TYPE = 1;
+
     /**
-     * type
+     * Type of the menu item
      *
      * @var int
      * @TYPO3\CMS\Extbase\Annotation\Validate("NotEmpty")
      */
-    protected $type = 2;
-
-    /**
-     * subtitle
-     * 
-     * @var string
-     */
-    protected $subtitle = '';
-
-    /**
-     * image
-     * 
-     * @var \TYPO3\CMS\Extbase\Domain\Model\FileReference
-     * @TYPO3\CMS\Extbase\Annotation\ORM\Cascade("remove")
-     */
-    protected $image = null;
-
-    /**
-     * link
-     * 
-     * @var string
-     * @TYPO3\CMS\Extbase\Annotation\Validate("NotEmpty")
-     */
-    protected $link = '';
-
-    /**
-     * Returns the subtitle
-     * 
-     * @return string $subtitle
-     */
-    public function getSubtitle()
-    {
-        return $this->subtitle;
-    }
-
-    /**
-     * Sets the subtitle
-     * 
-     * @param string $subtitle
-     * @return void
-     */
-    public function setSubtitle($subtitle)
-    {
-        $this->subtitle = $subtitle;
-    }
-
-    /**
-     * Returns the image
-     * 
-     * @return \TYPO3\CMS\Extbase\Domain\Model\FileReference $image
-     */
-    public function getImage()
-    {
-        return $this->image;
-    }
-
-    /**
-     * Sets the image
-     * 
-     * @param \TYPO3\CMS\Extbase\Domain\Model\FileReference $image
-     * @return void
-     */
-    public function setImage(\TYPO3\CMS\Extbase\Domain\Model\FileReference $image)
-    {
-        $this->image = $image;
-    }
-
-    /**
-     * Returns the link
-     * 
-     * @return string $link
-     */
-    public function getLink()
-    {
-        return $this->link;
-    }
-
-    /**
-     * Sets the link
-     * 
-     * @param string $link
-     * @return void
-     */
-    public function setLink($link)
-    {
-        $this->link = $link;
-    }
+    protected $type = self::TYPE;
 }
diff --git a/Classes/Domain/Model/MenuItemPage.php b/Classes/Domain/Model/MenuItemPage.php
index ca5aa8b..b3618ae 100644
--- a/Classes/Domain/Model/MenuItemPage.php
+++ b/Classes/Domain/Model/MenuItemPage.php
@@ -2,112 +2,18 @@
 
 namespace NL\NlMenubuilder\Domain\Model;
 
-/***
- *
- * This file is part of the "Menu Builder" Extension for TYPO3 CMS.
- *
- * For the full copyright and license information, please read the
- * LICENSE.txt file that was distributed with this source code.
- *
- *  (c) 2021 
- *
- ***/
 /**
- * Page
+ * MenuItem
  */
 class MenuItemPage extends MenuItem
 {
+    public const TYPE = 0;
+
     /**
-     * type
+     * Type of the menu item
      *
      * @var int
      * @TYPO3\CMS\Extbase\Annotation\Validate("NotEmpty")
      */
-    protected $type = 1;
-
-    /**
-     * subtitle
-     * 
-     * @var string
-     */
-    protected $subtitle = '';
-
-    /**
-     * image
-     * 
-     * @var \TYPO3\CMS\Extbase\Domain\Model\FileReference
-     * @TYPO3\CMS\Extbase\Annotation\ORM\Cascade("remove")
-     */
-    protected $image = null;
-
-    /**
-     * page
-     * 
-     * @var string
-     * @TYPO3\CMS\Extbase\Annotation\Validate("NotEmpty")
-     */
-    protected $page = '';
-
-    /**
-     * Returns the subtitle
-     * 
-     * @return string $subtitle
-     */
-    public function getSubtitle()
-    {
-        return $this->subtitle;
-    }
-
-    /**
-     * Sets the subtitle
-     * 
-     * @param string $subtitle
-     * @return void
-     */
-    public function setSubtitle($subtitle)
-    {
-        $this->subtitle = $subtitle;
-    }
-
-    /**
-     * Returns the image
-     * 
-     * @return \TYPO3\CMS\Extbase\Domain\Model\FileReference $image
-     */
-    public function getImage()
-    {
-        return $this->image;
-    }
-
-    /**
-     * Sets the image
-     * 
-     * @param \TYPO3\CMS\Extbase\Domain\Model\FileReference $image
-     * @return void
-     */
-    public function setImage(\TYPO3\CMS\Extbase\Domain\Model\FileReference $image)
-    {
-        $this->image = $image;
-    }
-
-    /**
-     * Returns the page
-     * 
-     * @return string $page
-     */
-    public function getPage()
-    {
-        return $this->page;
-    }
-
-    /**
-     * Sets the page
-     * 
-     * @param string $page
-     * @return void
-     */
-    public function setPage($page)
-    {
-        $this->page = $page;
-    }
+    protected $type = self::TYPE;
 }
diff --git a/Configuration/Extbase/Persistence/Classes.php b/Configuration/Extbase/Persistence/Classes.php
deleted file mode 100644
index 85d0629..0000000
--- a/Configuration/Extbase/Persistence/Classes.php
+++ /dev/null
@@ -1,25 +0,0 @@
-<?php
-
-declare(strict_types = 1);
-
-return [
-    \NL\NlMenubuilder\Domain\Model\MenuItem::class => [
-        'subclasses' => [
-            \NL\NlMenubuilder\Domain\Model\MenuItemContent::class,
-            \NL\NlMenubuilder\Domain\Model\MenuItemPage::class,
-            \NL\NlMenubuilder\Domain\Model\MenuItemLink::class,
-        ]
-    ],
-    \NL\NlMenubuilder\Domain\Model\MenuItemContent::class => [
-        'tableName' => 'tx_nlmenubuilder_domain_model_content',
-        'recordType' => 0,
-    ],
-    \NL\NlMenubuilder\Domain\Model\MenuItemPage::class => [
-        'tableName' => 'tx_nlmenubuilder_domain_model_page',
-        'recordType' => 1,
-    ],
-    \NL\NlMenubuilder\Domain\Model\MenuItemLink::class => [
-        'tableName' => 'tx_nlmenubuilder_domain_model_link',
-        'recordType' => 2,
-    ],
-];
diff --git a/Configuration/ExtensionBuilder/settings.yaml b/Configuration/ExtensionBuilder/settings.yaml
index 2196755..4c89278 100644
--- a/Configuration/ExtensionBuilder/settings.yaml
+++ b/Configuration/ExtensionBuilder/settings.yaml
@@ -56,6 +56,7 @@ overwriteSettings:
         Extension.svg: keep
         tx_nlmenubuilder_domain_model_menu.gif: keep
         tx_nlmenubuilder_domain_model_menugroup.gif: keep
+        tx_nlmenubuilder_domain_model_menuitem.gif: keep
     Private:
       #Language: merge
       #Templates: keep
diff --git a/Configuration/TCA/tx_nlmenubuilder_domain_model_content.php b/Configuration/TCA/tx_nlmenubuilder_domain_model_content.php
deleted file mode 100644
index 1706928..0000000
--- a/Configuration/TCA/tx_nlmenubuilder_domain_model_content.php
+++ /dev/null
@@ -1,148 +0,0 @@
-<?php
-return [
-    'ctrl' => [
-        'title' => 'LLL:EXT:nl_menubuilder/Resources/Private/Language/locallang_db.xlf:tx_nlmenubuilder_domain_model_content',
-        'label' => 'title',
-        'tstamp' => 'tstamp',
-        'crdate' => 'crdate',
-        'cruser_id' => 'cruser_id',
-        'versioningWS' => true,
-        'languageField' => 'sys_language_uid',
-        'transOrigPointerField' => 'l10n_parent',
-        'transOrigDiffSourceField' => 'l10n_diffsource',
-        'delete' => 'deleted',
-        'enablecolumns' => [
-            'disabled' => 'hidden',
-            'starttime' => 'starttime',
-            'endtime' => 'endtime',
-        ],
-        'searchFields' => 'title,content',
-        'iconfile' => 'EXT:nl_menubuilder/Resources/Public/Icons/tx_nlmenubuilder_domain_model_content.gif'
-    ],
-    'interface' => [
-        'showRecordFieldList' => 'sys_language_uid, l10n_parent, l10n_diffsource, hidden, title, content',
-    ],
-    'types' => [
-        '1' => ['showitem' => 'sys_language_uid, l10n_parent, l10n_diffsource, hidden, title, content, --div--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:tabs.access, starttime, endtime'],
-    ],
-    'columns' => [
-        'sys_language_uid' => [
-            'exclude' => true,
-            'label' => 'LLL:EXT:core/Resources/Private/Language/locallang_general.xlf:LGL.language',
-            'config' => [
-                'type' => 'select',
-                'renderType' => 'selectSingle',
-                'special' => 'languages',
-                'items' => [
-                    [
-                        'LLL:EXT:core/Resources/Private/Language/locallang_general.xlf:LGL.allLanguages',
-                        -1,
-                        'flags-multiple'
-                    ]
-                ],
-                'default' => 0,
-            ],
-        ],
-        'l10n_parent' => [
-            'displayCond' => 'FIELD:sys_language_uid:>:0',
-            'exclude' => true,
-            'label' => 'LLL:EXT:core/Resources/Private/Language/locallang_general.xlf:LGL.l18n_parent',
-            'config' => [
-                'type' => 'select',
-                'renderType' => 'selectSingle',
-                'default' => 0,
-                'items' => [
-                    ['', 0],
-                ],
-                'foreign_table' => 'tx_nlmenubuilder_domain_model_content',
-                'foreign_table_where' => 'AND {#tx_nlmenubuilder_domain_model_content}.{#pid}=###CURRENT_PID### AND {#tx_nlmenubuilder_domain_model_content}.{#sys_language_uid} IN (-1,0)',
-            ],
-        ],
-        'l10n_diffsource' => [
-            'config' => [
-                'type' => 'passthrough',
-            ],
-        ],
-        't3ver_label' => [
-            'label' => 'LLL:EXT:core/Resources/Private/Language/locallang_general.xlf:LGL.versionLabel',
-            'config' => [
-                'type' => 'input',
-                'size' => 30,
-                'max' => 255,
-            ],
-        ],
-        'hidden' => [
-            'exclude' => true,
-            'label' => 'LLL:EXT:core/Resources/Private/Language/locallang_general.xlf:LGL.visible',
-            'config' => [
-                'type' => 'check',
-                'renderType' => 'checkboxToggle',
-                'items' => [
-                    [
-                        0 => '',
-                        1 => '',
-                        'invertStateDisplay' => true
-                    ]
-                ],
-            ],
-        ],
-        'starttime' => [
-            'exclude' => true,
-            'label' => 'LLL:EXT:core/Resources/Private/Language/locallang_general.xlf:LGL.starttime',
-            'config' => [
-                'type' => 'input',
-                'renderType' => 'inputDateTime',
-                'eval' => 'datetime,int',
-                'default' => 0,
-                'behaviour' => [
-                    'allowLanguageSynchronization' => true
-                ]
-            ],
-        ],
-        'endtime' => [
-            'exclude' => true,
-            'label' => 'LLL:EXT:core/Resources/Private/Language/locallang_general.xlf:LGL.endtime',
-            'config' => [
-                'type' => 'input',
-                'renderType' => 'inputDateTime',
-                'eval' => 'datetime,int',
-                'default' => 0,
-                'range' => [
-                    'upper' => mktime(0, 0, 0, 1, 1, 2038)
-                ],
-                'behaviour' => [
-                    'allowLanguageSynchronization' => true
-                ]
-            ],
-        ],
-
-        'title' => [
-            'exclude' => true,
-            'label' => 'LLL:EXT:nl_menubuilder/Resources/Private/Language/locallang_db.xlf:tx_nlmenubuilder_domain_model_content.title',
-            'config' => [
-                'type' => 'input',
-                'size' => 30,
-                'eval' => 'trim,required'
-            ],
-        ],
-        'content' => [
-            'exclude' => true,
-            'label' => 'LLL:EXT:nl_menubuilder/Resources/Private/Language/locallang_db.xlf:tx_nlmenubuilder_domain_model_content.content',
-            'config' => [
-                'type' => 'text',
-                'enableRichtext' => true,
-                'richtextConfiguration' => 'default',
-                'fieldControl' => [
-                    'fullScreenRichtext' => [
-                        'disabled' => false,
-                    ],
-                ],
-                'cols' => 40,
-                'rows' => 15,
-                'eval' => 'trim,required',
-            ],
-            
-        ],
-    
-    ],
-];
diff --git a/Configuration/TCA/tx_nlmenubuilder_domain_model_link.php b/Configuration/TCA/tx_nlmenubuilder_domain_model_link.php
deleted file mode 100644
index 7010c67..0000000
--- a/Configuration/TCA/tx_nlmenubuilder_domain_model_link.php
+++ /dev/null
@@ -1,200 +0,0 @@
-<?php
-return [
-    'ctrl' => [
-        'title' => 'LLL:EXT:nl_menubuilder/Resources/Private/Language/locallang_db.xlf:tx_nlmenubuilder_domain_model_link',
-        'label' => 'title',
-        'tstamp' => 'tstamp',
-        'crdate' => 'crdate',
-        'cruser_id' => 'cruser_id',
-        'versioningWS' => true,
-        'languageField' => 'sys_language_uid',
-        'transOrigPointerField' => 'l10n_parent',
-        'transOrigDiffSourceField' => 'l10n_diffsource',
-        'delete' => 'deleted',
-        'enablecolumns' => [
-            'disabled' => 'hidden',
-            'starttime' => 'starttime',
-            'endtime' => 'endtime',
-        ],
-        'searchFields' => 'title,subtitle,link',
-        'iconfile' => 'EXT:nl_menubuilder/Resources/Public/Icons/tx_nlmenubuilder_domain_model_link.gif'
-    ],
-    'interface' => [
-        'showRecordFieldList' => 'sys_language_uid, l10n_parent, l10n_diffsource, hidden, title, subtitle, image, link',
-    ],
-    'types' => [
-        '1' => ['showitem' => 'sys_language_uid, l10n_parent, l10n_diffsource, hidden, title, subtitle, image, link, --div--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:tabs.access, starttime, endtime'],
-    ],
-    'columns' => [
-        'sys_language_uid' => [
-            'exclude' => true,
-            'label' => 'LLL:EXT:core/Resources/Private/Language/locallang_general.xlf:LGL.language',
-            'config' => [
-                'type' => 'select',
-                'renderType' => 'selectSingle',
-                'special' => 'languages',
-                'items' => [
-                    [
-                        'LLL:EXT:core/Resources/Private/Language/locallang_general.xlf:LGL.allLanguages',
-                        -1,
-                        'flags-multiple'
-                    ]
-                ],
-                'default' => 0,
-            ],
-        ],
-        'l10n_parent' => [
-            'displayCond' => 'FIELD:sys_language_uid:>:0',
-            'exclude' => true,
-            'label' => 'LLL:EXT:core/Resources/Private/Language/locallang_general.xlf:LGL.l18n_parent',
-            'config' => [
-                'type' => 'select',
-                'renderType' => 'selectSingle',
-                'default' => 0,
-                'items' => [
-                    ['', 0],
-                ],
-                'foreign_table' => 'tx_nlmenubuilder_domain_model_link',
-                'foreign_table_where' => 'AND {#tx_nlmenubuilder_domain_model_link}.{#pid}=###CURRENT_PID### AND {#tx_nlmenubuilder_domain_model_link}.{#sys_language_uid} IN (-1,0)',
-            ],
-        ],
-        'l10n_diffsource' => [
-            'config' => [
-                'type' => 'passthrough',
-            ],
-        ],
-        't3ver_label' => [
-            'label' => 'LLL:EXT:core/Resources/Private/Language/locallang_general.xlf:LGL.versionLabel',
-            'config' => [
-                'type' => 'input',
-                'size' => 30,
-                'max' => 255,
-            ],
-        ],
-        'hidden' => [
-            'exclude' => true,
-            'label' => 'LLL:EXT:core/Resources/Private/Language/locallang_general.xlf:LGL.visible',
-            'config' => [
-                'type' => 'check',
-                'renderType' => 'checkboxToggle',
-                'items' => [
-                    [
-                        0 => '',
-                        1 => '',
-                        'invertStateDisplay' => true
-                    ]
-                ],
-            ],
-        ],
-        'starttime' => [
-            'exclude' => true,
-            'label' => 'LLL:EXT:core/Resources/Private/Language/locallang_general.xlf:LGL.starttime',
-            'config' => [
-                'type' => 'input',
-                'renderType' => 'inputDateTime',
-                'eval' => 'datetime,int',
-                'default' => 0,
-                'behaviour' => [
-                    'allowLanguageSynchronization' => true
-                ]
-            ],
-        ],
-        'endtime' => [
-            'exclude' => true,
-            'label' => 'LLL:EXT:core/Resources/Private/Language/locallang_general.xlf:LGL.endtime',
-            'config' => [
-                'type' => 'input',
-                'renderType' => 'inputDateTime',
-                'eval' => 'datetime,int',
-                'default' => 0,
-                'range' => [
-                    'upper' => mktime(0, 0, 0, 1, 1, 2038)
-                ],
-                'behaviour' => [
-                    'allowLanguageSynchronization' => true
-                ]
-            ],
-        ],
-
-        'title' => [
-            'exclude' => true,
-            'label' => 'LLL:EXT:nl_menubuilder/Resources/Private/Language/locallang_db.xlf:tx_nlmenubuilder_domain_model_link.title',
-            'config' => [
-                'type' => 'input',
-                'size' => 30,
-                'eval' => 'trim,required'
-            ],
-        ],
-        'subtitle' => [
-            'exclude' => true,
-            'label' => 'LLL:EXT:nl_menubuilder/Resources/Private/Language/locallang_db.xlf:tx_nlmenubuilder_domain_model_link.subtitle',
-            'config' => [
-                'type' => 'input',
-                'size' => 30,
-                'eval' => 'trim'
-            ],
-        ],
-        'image' => [
-            'exclude' => true,
-            'label' => 'LLL:EXT:nl_menubuilder/Resources/Private/Language/locallang_db.xlf:tx_nlmenubuilder_domain_model_link.image',
-            'config' => \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::getFileFieldTCAConfig(
-                'image',
-                [
-                    'appearance' => [
-                        'createNewRelationLinkTitle' => 'LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:images.addFileReference'
-                    ],
-                    'foreign_types' => [
-                        '0' => [
-                            'showitem' => '
-                            --palette--;LLL:EXT:lang/locallang_tca.xlf:sys_file_reference.imageoverlayPalette;imageoverlayPalette,
-                            --palette--;;filePalette'
-                        ],
-                        \TYPO3\CMS\Core\Resource\File::FILETYPE_TEXT => [
-                            'showitem' => '
-                            --palette--;LLL:EXT:lang/locallang_tca.xlf:sys_file_reference.imageoverlayPalette;imageoverlayPalette,
-                            --palette--;;filePalette'
-                        ],
-                        \TYPO3\CMS\Core\Resource\File::FILETYPE_IMAGE => [
-                            'showitem' => '
-                            --palette--;LLL:EXT:lang/locallang_tca.xlf:sys_file_reference.imageoverlayPalette;imageoverlayPalette,
-                            --palette--;;filePalette'
-                        ],
-                        \TYPO3\CMS\Core\Resource\File::FILETYPE_AUDIO => [
-                            'showitem' => '
-                            --palette--;LLL:EXT:lang/locallang_tca.xlf:sys_file_reference.imageoverlayPalette;imageoverlayPalette,
-                            --palette--;;filePalette'
-                        ],
-                        \TYPO3\CMS\Core\Resource\File::FILETYPE_VIDEO => [
-                            'showitem' => '
-                            --palette--;LLL:EXT:lang/locallang_tca.xlf:sys_file_reference.imageoverlayPalette;imageoverlayPalette,
-                            --palette--;;filePalette'
-                        ],
-                        \TYPO3\CMS\Core\Resource\File::FILETYPE_APPLICATION => [
-                            'showitem' => '
-                            --palette--;LLL:EXT:lang/locallang_tca.xlf:sys_file_reference.imageoverlayPalette;imageoverlayPalette,
-                            --palette--;;filePalette'
-                        ]
-                    ],
-                    'foreign_match_fields' => [
-                        'fieldname' => 'image',
-                        'tablenames' => 'tx_nlmenubuilder_domain_model_link',
-                        'table_local' => 'sys_file',
-                    ],
-                    'maxitems' => 1
-                ],
-                $GLOBALS['TYPO3_CONF_VARS']['GFX']['imagefile_ext']
-            ),
-            
-        ],
-        'link' => [
-            'exclude' => true,
-            'label' => 'LLL:EXT:nl_menubuilder/Resources/Private/Language/locallang_db.xlf:tx_nlmenubuilder_domain_model_link.link',
-            'config' => [
-                'type' => 'input',
-                'size' => 30,
-                'eval' => 'trim,required'
-            ],
-        ],
-    
-    ],
-];
diff --git a/Configuration/TCA/tx_nlmenubuilder_domain_model_menu.php b/Configuration/TCA/tx_nlmenubuilder_domain_model_menu.php
index c0dd91c..6b20f54 100644
--- a/Configuration/TCA/tx_nlmenubuilder_domain_model_menu.php
+++ b/Configuration/TCA/tx_nlmenubuilder_domain_model_menu.php
@@ -20,10 +20,10 @@ return [
         'iconfile' => 'EXT:nl_menubuilder/Resources/Public/Icons/tx_nlmenubuilder_domain_model_menu.gif'
     ],
     'interface' => [
-        'showRecordFieldList' => 'sys_language_uid, l10n_parent, l10n_diffsource, hidden, title, menu_item, menu_group',
+        'showRecordFieldList' => 'sys_language_uid, l10n_parent, l10n_diffsource, hidden, title, menu_group, menu_item',
     ],
     'types' => [
-        '1' => ['showitem' => 'sys_language_uid, l10n_parent, l10n_diffsource, hidden, title, menu_item, menu_group, --div--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:tabs.access, starttime, endtime'],
+        '1' => ['showitem' => 'sys_language_uid, l10n_parent, l10n_diffsource, hidden, title, menu_group, menu_item, --div--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:tabs.access, starttime, endtime'],
     ],
     'columns' => [
         'sys_language_uid' => [
@@ -125,6 +125,20 @@ return [
                 'eval' => 'trim,required'
             ],
         ],
+        'menu_group' => [
+            'exclude' => false,
+            'label' => 'LLL:EXT:nl_menubuilder/Resources/Private/Language/locallang_db.xlf:tx_nlmenubuilder_domain_model_menu.menu_group',
+            'config' => [
+                'type' => 'select',
+                'renderType' => 'selectSingle',
+                'foreign_table' => 'tx_nlmenubuilder_domain_model_menugroup',
+                'default' => 0,
+                'minitems' => 0,
+                'maxitems' => 1,
+                'eval' => 'required'
+            ],
+
+        ],
         'menu_item' => [
             'exclude' => false,
             'label' => 'LLL:EXT:nl_menubuilder/Resources/Private/Language/locallang_db.xlf:tx_nlmenubuilder_domain_model_menu.menu_item',
@@ -132,9 +146,11 @@ return [
                 'type' => 'inline',
                 'foreign_table' => 'tx_nlmenubuilder_domain_model_menuitem',
                 'foreign_field' => 'menu',
-                'maxitems' => 9999,
+                'minitems' => 0,
+                'maxitems' => 99,
                 'appearance' => [
-                    'collapseAll' => 0,
+                    'collapseAll' => true,
+                    'expandSingle' => true,
                     'levelLinksPosition' => 'top',
                     'showSynchronizationLink' => 1,
                     'showPossibleLocalizationRecords' => 1,
@@ -143,33 +159,6 @@ return [
             ],
 
         ],
-        'menu_group' => [
-            'exclude' => false,
-            'label' => 'LLL:EXT:nl_menubuilder/Resources/Private/Language/locallang_db.xlf:tx_nlmenubuilder_domain_model_menu.menu_group',
-            'config' => [
-                'type' => 'select',
-                'renderType' => 'selectMultipleSideBySide',
-                'foreign_table' => 'tx_nlmenubuilder_domain_model_menugroup',
-                'default' => 0,
-                'size' => 10,
-                'autoSizeMax' => 30,
-                'maxitems' => 1,
-                'minitems' => 1,
-                'multiple' => 0,
-                'fieldControl' => [
-                    'editPopup' => [
-                        'disabled' => false,
-                    ],
-                    'addRecord' => [
-                        'disabled' => false,
-                    ],
-                    'listModule' => [
-                        'disabled' => true,
-                    ],
-                ],
-            ],
-
-        ],
 
     ],
 ];
diff --git a/Configuration/TCA/tx_nlmenubuilder_domain_model_menuitem.php b/Configuration/TCA/tx_nlmenubuilder_domain_model_menuitem.php
index 233f85c..c45512d 100644
--- a/Configuration/TCA/tx_nlmenubuilder_domain_model_menuitem.php
+++ b/Configuration/TCA/tx_nlmenubuilder_domain_model_menuitem.php
@@ -16,14 +16,27 @@ return [
             'starttime' => 'starttime',
             'endtime' => 'endtime',
         ],
-        'searchFields' => 'title',
-        'iconfile' => 'EXT:nl_menubuilder/Resources/Public/Icons/tx_nlmenubuilder_domain_model_menuitem.gif'
-    ],
-    'interface' => [
-        'showRecordFieldList' => 'sys_language_uid, l10n_parent, l10n_diffsource, hidden, title, type',
+        'searchFields' => 'title,subtitle,page,link,content',
+        'iconfile' => 'EXT:nl_menubuilder/Resources/Public/Icons/tx_nlmenubuilder_domain_model_menuitem.gif',
+        'type' => 'type',
+        'typeicon_column' => 'type',
+        'typeicon_classes' => [
+            'default' => 'ext-menubuilder-menuitem-type-page',
+            '1' => 'ext-menubuilder-menuitem-type-link',
+            '2' => 'ext-menubuilder-menuitem-type-content',
+            '3' => 'ext-menubuilder-menuitem-type-submenu',
+        ],
     ],
+    'interface' => ['showRecordFieldList' => 'sys_language_uid, l10n_parent, l10n_diffsource, hidden, type, title, subtitle, image, page, link, content'],
     'types' => [
-        '1' => ['showitem' => 'sys_language_uid, l10n_parent, l10n_diffsource, hidden, title, type, --div--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:tabs.access, starttime, endtime'],
+        // page
+        '0' => ['showitem' => 'sys_language_uid, l10n_parent, l10n_diffsource, hidden, type, title, subtitle, page, image, --div--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:tabs.access, starttime, endtime'],
+        // link
+        '1' => ['showitem' => 'sys_language_uid, l10n_parent, l10n_diffsource, hidden, type, title, subtitle, image, link, --div--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:tabs.access, starttime, endtime'],
+        // content
+        '2' => ['showitem' => 'sys_language_uid, l10n_parent, l10n_diffsource, hidden, type, title, content, --div--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:tabs.access, starttime, endtime'],
+        // submenu
+        '3' => ['showitem' => 'sys_language_uid, l10n_parent, l10n_diffsource, hidden, type, title, --div--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:tabs.access, starttime, endtime'],
     ],
     'columns' => [
         'sys_language_uid' => [
@@ -115,7 +128,28 @@ return [
                 ]
             ],
         ],
-
+        'type' => [
+            'exclude' => false,
+            'label' => 'LLL:EXT:nl_menubuilder/Resources/Private/Language/locallang_db.xlf:tx_nlmenubuilder_domain_model_menuitem.type',
+            'config' => [
+                'type' => 'select',
+                'renderType' => 'selectSingle',
+                'items' => [
+                    ['LLL:EXT:nl_menubuilder/Resources/Private/Language/locallang_db.xlf:tx_nlmenubuilder_domain_model_menuitem.page', 0, 'ext-menubuilder-menuitem-type-page'],
+                    ['LLL:EXT:nl_menubuilder/Resources/Private/Language/locallang_db.xlf:tx_nlmenubuilder_domain_model_menuitem.link', 1, 'ext-menubuilder-menuitem-type-link'],
+                    ['LLL:EXT:nl_menubuilder/Resources/Private/Language/locallang_db.xlf:tx_nlmenubuilder_domain_model_menuitem.content', 2, 'ext-menubuilder-menuitem-type-content'],
+                    ['LLL:EXT:nl_menubuilder/Resources/Private/Language/locallang_db.xlf:tx_nlmenubuilder_domain_model_menuitem.submenu', 3, 'ext-menubuilder-menuitem-type-submenu'],
+                ],
+                'fieldWizard' => [
+                    'selectIcons' => [
+                        'disabled' => false,
+                    ],
+                ],
+                'size' => 1,
+                'maxitems' => 1,
+                'eval' => 'required'
+            ],
+        ],
         'title' => [
             'exclude' => false,
             'label' => 'LLL:EXT:nl_menubuilder/Resources/Private/Language/locallang_db.xlf:tx_nlmenubuilder_domain_model_menuitem.title',
@@ -125,21 +159,106 @@ return [
                 'eval' => 'trim,required'
             ],
         ],
-        'type' => [
+        'subtitle' => [
             'exclude' => false,
-            'label' => 'LLL:EXT:nl_menubuilder/Resources/Private/Language/locallang_db.xlf:tx_nlmenubuilder_domain_model_menuitem.type',
+            'label' => 'LLL:EXT:nl_menubuilder/Resources/Private/Language/locallang_db.xlf:tx_nlmenubuilder_domain_model_menuitem.subtitle',
             'config' => [
-                'type' => 'select',
-                'renderType' => 'selectSingle',
-                'items' => [
-                    ['-- Label --', 0],
+                'type' => 'input',
+                'size' => 30,
+                'eval' => 'trim'
+            ],
+        ],
+        'image' => [
+            'exclude' => false,
+            'label' => 'LLL:EXT:nl_menubuilder/Resources/Private/Language/locallang_db.xlf:tx_nlmenubuilder_domain_model_menuitem.image',
+            'config' => \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::getFileFieldTCAConfig(
+                'image',
+                [
+                    'appearance' => [
+                        'createNewRelationLinkTitle' => 'LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:images.addFileReference'
+                    ],
+                    'foreign_types' => [
+                        '0' => [
+                            'showitem' => '
+                            --palette--;LLL:EXT:lang/locallang_tca.xlf:sys_file_reference.imageoverlayPalette;imageoverlayPalette,
+                            --palette--;;filePalette'
+                        ],
+                        \TYPO3\CMS\Core\Resource\File::FILETYPE_TEXT => [
+                            'showitem' => '
+                            --palette--;LLL:EXT:lang/locallang_tca.xlf:sys_file_reference.imageoverlayPalette;imageoverlayPalette,
+                            --palette--;;filePalette'
+                        ],
+                        \TYPO3\CMS\Core\Resource\File::FILETYPE_IMAGE => [
+                            'showitem' => '
+                            --palette--;LLL:EXT:lang/locallang_tca.xlf:sys_file_reference.imageoverlayPalette;imageoverlayPalette,
+                            --palette--;;filePalette'
+                        ],
+                        \TYPO3\CMS\Core\Resource\File::FILETYPE_AUDIO => [
+                            'showitem' => '
+                            --palette--;LLL:EXT:lang/locallang_tca.xlf:sys_file_reference.imageoverlayPalette;imageoverlayPalette,
+                            --palette--;;filePalette'
+                        ],
+                        \TYPO3\CMS\Core\Resource\File::FILETYPE_VIDEO => [
+                            'showitem' => '
+                            --palette--;LLL:EXT:lang/locallang_tca.xlf:sys_file_reference.imageoverlayPalette;imageoverlayPalette,
+                            --palette--;;filePalette'
+                        ],
+                        \TYPO3\CMS\Core\Resource\File::FILETYPE_APPLICATION => [
+                            'showitem' => '
+                            --palette--;LLL:EXT:lang/locallang_tca.xlf:sys_file_reference.imageoverlayPalette;imageoverlayPalette,
+                            --palette--;;filePalette'
+                        ]
+                    ],
+                    'foreign_match_fields' => [
+                        'fieldname' => 'image',
+                        'tablenames' => 'tx_nlmenubuilder_domain_model_menuitem',
+                        'table_local' => 'sys_file',
+                    ],
+                    'maxitems' => 1
                 ],
-                'size' => 1,
-                'maxitems' => 1,
-                'eval' => 'required'
+                $GLOBALS['TYPO3_CONF_VARS']['GFX']['imagefile_ext']
+            ),
+
+        ],
+        'page' => [
+            'exclude' => false,
+            'label' => 'LLL:EXT:nl_menubuilder/Resources/Private/Language/locallang_db.xlf:tx_nlmenubuilder_domain_model_menuitem.page',
+            'config' => [
+                'type' => 'input',
+                'renderType' => 'inputLink',
+                'size' => 30,
+                'eval' => 'trim,required',
+                'softref' => 'typolink',
+            ],
+        ],
+        'link' => [
+            'exclude' => false,
+            'label' => 'LLL:EXT:nl_menubuilder/Resources/Private/Language/locallang_db.xlf:tx_nlmenubuilder_domain_model_menuitem.link',
+            'config' => [
+                'type' => 'input',
+                'size' => 30,
+                'eval' => 'trim'
+            ],
+        ],
+        'content' => [
+            'exclude' => false,
+            'label' => 'LLL:EXT:nl_menubuilder/Resources/Private/Language/locallang_db.xlf:tx_nlmenubuilder_domain_model_menuitem.content',
+            'config' => [
+                'type' => 'text',
+                'enableRichtext' => true,
+                'richtextConfiguration' => 'default',
+                'fieldControl' => [
+                    'fullScreenRichtext' => [
+                        'disabled' => false,
+                    ],
+                ],
+                'cols' => 40,
+                'rows' => 15,
+                'eval' => 'trim',
             ],
+
         ],
-    
+
         'menu' => [
             'config' => [
                 'type' => 'passthrough',
diff --git a/Configuration/TCA/tx_nlmenubuilder_domain_model_page.php b/Configuration/TCA/tx_nlmenubuilder_domain_model_page.php
deleted file mode 100644
index 6153384..0000000
--- a/Configuration/TCA/tx_nlmenubuilder_domain_model_page.php
+++ /dev/null
@@ -1,200 +0,0 @@
-<?php
-return [
-    'ctrl' => [
-        'title' => 'LLL:EXT:nl_menubuilder/Resources/Private/Language/locallang_db.xlf:tx_nlmenubuilder_domain_model_page',
-        'label' => 'title',
-        'tstamp' => 'tstamp',
-        'crdate' => 'crdate',
-        'cruser_id' => 'cruser_id',
-        'versioningWS' => true,
-        'languageField' => 'sys_language_uid',
-        'transOrigPointerField' => 'l10n_parent',
-        'transOrigDiffSourceField' => 'l10n_diffsource',
-        'delete' => 'deleted',
-        'enablecolumns' => [
-            'disabled' => 'hidden',
-            'starttime' => 'starttime',
-            'endtime' => 'endtime',
-        ],
-        'searchFields' => 'title,subtitle,page',
-        'iconfile' => 'EXT:nl_menubuilder/Resources/Public/Icons/tx_nlmenubuilder_domain_model_page.gif'
-    ],
-    'interface' => [
-        'showRecordFieldList' => 'sys_language_uid, l10n_parent, l10n_diffsource, hidden, title, subtitle, image, page',
-    ],
-    'types' => [
-        '1' => ['showitem' => 'sys_language_uid, l10n_parent, l10n_diffsource, hidden, title, subtitle, image, page, --div--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:tabs.access, starttime, endtime'],
-    ],
-    'columns' => [
-        'sys_language_uid' => [
-            'exclude' => true,
-            'label' => 'LLL:EXT:core/Resources/Private/Language/locallang_general.xlf:LGL.language',
-            'config' => [
-                'type' => 'select',
-                'renderType' => 'selectSingle',
-                'special' => 'languages',
-                'items' => [
-                    [
-                        'LLL:EXT:core/Resources/Private/Language/locallang_general.xlf:LGL.allLanguages',
-                        -1,
-                        'flags-multiple'
-                    ]
-                ],
-                'default' => 0,
-            ],
-        ],
-        'l10n_parent' => [
-            'displayCond' => 'FIELD:sys_language_uid:>:0',
-            'exclude' => true,
-            'label' => 'LLL:EXT:core/Resources/Private/Language/locallang_general.xlf:LGL.l18n_parent',
-            'config' => [
-                'type' => 'select',
-                'renderType' => 'selectSingle',
-                'default' => 0,
-                'items' => [
-                    ['', 0],
-                ],
-                'foreign_table' => 'tx_nlmenubuilder_domain_model_page',
-                'foreign_table_where' => 'AND {#tx_nlmenubuilder_domain_model_page}.{#pid}=###CURRENT_PID### AND {#tx_nlmenubuilder_domain_model_page}.{#sys_language_uid} IN (-1,0)',
-            ],
-        ],
-        'l10n_diffsource' => [
-            'config' => [
-                'type' => 'passthrough',
-            ],
-        ],
-        't3ver_label' => [
-            'label' => 'LLL:EXT:core/Resources/Private/Language/locallang_general.xlf:LGL.versionLabel',
-            'config' => [
-                'type' => 'input',
-                'size' => 30,
-                'max' => 255,
-            ],
-        ],
-        'hidden' => [
-            'exclude' => true,
-            'label' => 'LLL:EXT:core/Resources/Private/Language/locallang_general.xlf:LGL.visible',
-            'config' => [
-                'type' => 'check',
-                'renderType' => 'checkboxToggle',
-                'items' => [
-                    [
-                        0 => '',
-                        1 => '',
-                        'invertStateDisplay' => true
-                    ]
-                ],
-            ],
-        ],
-        'starttime' => [
-            'exclude' => true,
-            'label' => 'LLL:EXT:core/Resources/Private/Language/locallang_general.xlf:LGL.starttime',
-            'config' => [
-                'type' => 'input',
-                'renderType' => 'inputDateTime',
-                'eval' => 'datetime,int',
-                'default' => 0,
-                'behaviour' => [
-                    'allowLanguageSynchronization' => true
-                ]
-            ],
-        ],
-        'endtime' => [
-            'exclude' => true,
-            'label' => 'LLL:EXT:core/Resources/Private/Language/locallang_general.xlf:LGL.endtime',
-            'config' => [
-                'type' => 'input',
-                'renderType' => 'inputDateTime',
-                'eval' => 'datetime,int',
-                'default' => 0,
-                'range' => [
-                    'upper' => mktime(0, 0, 0, 1, 1, 2038)
-                ],
-                'behaviour' => [
-                    'allowLanguageSynchronization' => true
-                ]
-            ],
-        ],
-
-        'title' => [
-            'exclude' => true,
-            'label' => 'LLL:EXT:nl_menubuilder/Resources/Private/Language/locallang_db.xlf:tx_nlmenubuilder_domain_model_page.title',
-            'config' => [
-                'type' => 'input',
-                'size' => 30,
-                'eval' => 'trim,required'
-            ],
-        ],
-        'subtitle' => [
-            'exclude' => true,
-            'label' => 'LLL:EXT:nl_menubuilder/Resources/Private/Language/locallang_db.xlf:tx_nlmenubuilder_domain_model_page.subtitle',
-            'config' => [
-                'type' => 'input',
-                'size' => 30,
-                'eval' => 'trim'
-            ],
-        ],
-        'image' => [
-            'exclude' => true,
-            'label' => 'LLL:EXT:nl_menubuilder/Resources/Private/Language/locallang_db.xlf:tx_nlmenubuilder_domain_model_page.image',
-            'config' => \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::getFileFieldTCAConfig(
-                'image',
-                [
-                    'appearance' => [
-                        'createNewRelationLinkTitle' => 'LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:images.addFileReference'
-                    ],
-                    'foreign_types' => [
-                        '0' => [
-                            'showitem' => '
-                            --palette--;LLL:EXT:lang/locallang_tca.xlf:sys_file_reference.imageoverlayPalette;imageoverlayPalette,
-                            --palette--;;filePalette'
-                        ],
-                        \TYPO3\CMS\Core\Resource\File::FILETYPE_TEXT => [
-                            'showitem' => '
-                            --palette--;LLL:EXT:lang/locallang_tca.xlf:sys_file_reference.imageoverlayPalette;imageoverlayPalette,
-                            --palette--;;filePalette'
-                        ],
-                        \TYPO3\CMS\Core\Resource\File::FILETYPE_IMAGE => [
-                            'showitem' => '
-                            --palette--;LLL:EXT:lang/locallang_tca.xlf:sys_file_reference.imageoverlayPalette;imageoverlayPalette,
-                            --palette--;;filePalette'
-                        ],
-                        \TYPO3\CMS\Core\Resource\File::FILETYPE_AUDIO => [
-                            'showitem' => '
-                            --palette--;LLL:EXT:lang/locallang_tca.xlf:sys_file_reference.imageoverlayPalette;imageoverlayPalette,
-                            --palette--;;filePalette'
-                        ],
-                        \TYPO3\CMS\Core\Resource\File::FILETYPE_VIDEO => [
-                            'showitem' => '
-                            --palette--;LLL:EXT:lang/locallang_tca.xlf:sys_file_reference.imageoverlayPalette;imageoverlayPalette,
-                            --palette--;;filePalette'
-                        ],
-                        \TYPO3\CMS\Core\Resource\File::FILETYPE_APPLICATION => [
-                            'showitem' => '
-                            --palette--;LLL:EXT:lang/locallang_tca.xlf:sys_file_reference.imageoverlayPalette;imageoverlayPalette,
-                            --palette--;;filePalette'
-                        ]
-                    ],
-                    'foreign_match_fields' => [
-                        'fieldname' => 'image',
-                        'tablenames' => 'tx_nlmenubuilder_domain_model_page',
-                        'table_local' => 'sys_file',
-                    ],
-                    'maxitems' => 1
-                ],
-                $GLOBALS['TYPO3_CONF_VARS']['GFX']['imagefile_ext']
-            ),
-            
-        ],
-        'page' => [
-            'exclude' => true,
-            'label' => 'LLL:EXT:nl_menubuilder/Resources/Private/Language/locallang_db.xlf:tx_nlmenubuilder_domain_model_page.page',
-            'config' => [
-                'type' => 'input',
-                'size' => 30,
-                'eval' => 'trim,required'
-            ],
-        ],
-    
-    ],
-];
diff --git a/Configuration/TCA/tx_nlmenubuilder_domain_model_submenu.php b/Configuration/TCA/tx_nlmenubuilder_domain_model_submenu.php
deleted file mode 100644
index 6876178..0000000
--- a/Configuration/TCA/tx_nlmenubuilder_domain_model_submenu.php
+++ /dev/null
@@ -1,130 +0,0 @@
-<?php
-return [
-    'ctrl' => [
-        'title' => 'LLL:EXT:nl_menubuilder/Resources/Private/Language/locallang_db.xlf:tx_nlmenubuilder_domain_model_submenu',
-        'label' => 'title',
-        'tstamp' => 'tstamp',
-        'crdate' => 'crdate',
-        'cruser_id' => 'cruser_id',
-        'versioningWS' => true,
-        'languageField' => 'sys_language_uid',
-        'transOrigPointerField' => 'l10n_parent',
-        'transOrigDiffSourceField' => 'l10n_diffsource',
-        'delete' => 'deleted',
-        'enablecolumns' => [
-            'disabled' => 'hidden',
-            'starttime' => 'starttime',
-            'endtime' => 'endtime',
-        ],
-        'searchFields' => 'title',
-        'iconfile' => 'EXT:nl_menubuilder/Resources/Public/Icons/tx_nlmenubuilder_domain_model_submenu.gif'
-    ],
-    'interface' => [
-        'showRecordFieldList' => 'sys_language_uid, l10n_parent, l10n_diffsource, hidden, title',
-    ],
-    'types' => [
-        '1' => ['showitem' => 'sys_language_uid, l10n_parent, l10n_diffsource, hidden, title, --div--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:tabs.access, starttime, endtime'],
-    ],
-    'columns' => [
-        'sys_language_uid' => [
-            'exclude' => true,
-            'label' => 'LLL:EXT:core/Resources/Private/Language/locallang_general.xlf:LGL.language',
-            'config' => [
-                'type' => 'select',
-                'renderType' => 'selectSingle',
-                'special' => 'languages',
-                'items' => [
-                    [
-                        'LLL:EXT:core/Resources/Private/Language/locallang_general.xlf:LGL.allLanguages',
-                        -1,
-                        'flags-multiple'
-                    ]
-                ],
-                'default' => 0,
-            ],
-        ],
-        'l10n_parent' => [
-            'displayCond' => 'FIELD:sys_language_uid:>:0',
-            'exclude' => true,
-            'label' => 'LLL:EXT:core/Resources/Private/Language/locallang_general.xlf:LGL.l18n_parent',
-            'config' => [
-                'type' => 'select',
-                'renderType' => 'selectSingle',
-                'default' => 0,
-                'items' => [
-                    ['', 0],
-                ],
-                'foreign_table' => 'tx_nlmenubuilder_domain_model_submenu',
-                'foreign_table_where' => 'AND {#tx_nlmenubuilder_domain_model_submenu}.{#pid}=###CURRENT_PID### AND {#tx_nlmenubuilder_domain_model_submenu}.{#sys_language_uid} IN (-1,0)',
-            ],
-        ],
-        'l10n_diffsource' => [
-            'config' => [
-                'type' => 'passthrough',
-            ],
-        ],
-        't3ver_label' => [
-            'label' => 'LLL:EXT:core/Resources/Private/Language/locallang_general.xlf:LGL.versionLabel',
-            'config' => [
-                'type' => 'input',
-                'size' => 30,
-                'max' => 255,
-            ],
-        ],
-        'hidden' => [
-            'exclude' => true,
-            'label' => 'LLL:EXT:core/Resources/Private/Language/locallang_general.xlf:LGL.visible',
-            'config' => [
-                'type' => 'check',
-                'renderType' => 'checkboxToggle',
-                'items' => [
-                    [
-                        0 => '',
-                        1 => '',
-                        'invertStateDisplay' => true
-                    ]
-                ],
-            ],
-        ],
-        'starttime' => [
-            'exclude' => true,
-            'label' => 'LLL:EXT:core/Resources/Private/Language/locallang_general.xlf:LGL.starttime',
-            'config' => [
-                'type' => 'input',
-                'renderType' => 'inputDateTime',
-                'eval' => 'datetime,int',
-                'default' => 0,
-                'behaviour' => [
-                    'allowLanguageSynchronization' => true
-                ]
-            ],
-        ],
-        'endtime' => [
-            'exclude' => true,
-            'label' => 'LLL:EXT:core/Resources/Private/Language/locallang_general.xlf:LGL.endtime',
-            'config' => [
-                'type' => 'input',
-                'renderType' => 'inputDateTime',
-                'eval' => 'datetime,int',
-                'default' => 0,
-                'range' => [
-                    'upper' => mktime(0, 0, 0, 1, 1, 2038)
-                ],
-                'behaviour' => [
-                    'allowLanguageSynchronization' => true
-                ]
-            ],
-        ],
-
-        'title' => [
-            'exclude' => true,
-            'label' => 'LLL:EXT:nl_menubuilder/Resources/Private/Language/locallang_db.xlf:tx_nlmenubuilder_domain_model_submenu.title',
-            'config' => [
-                'type' => 'input',
-                'size' => 30,
-                'eval' => 'trim,required'
-            ],
-        ],
-    
-    ],
-];
diff --git a/ExtensionBuilder.json b/ExtensionBuilder.json
index 6836fe7..96a701f 100644
--- a/ExtensionBuilder.json
+++ b/ExtensionBuilder.json
@@ -53,22 +53,22 @@
                             "lazyLoading": false,
                             "propertyIsExcludeField": false,
                             "relationDescription": "",
-                            "relationName": "menuItem",
-                            "relationType": "zeroToMany",
+                            "relationName": "menuGroup",
+                            "relationType": "manyToOne",
                             "relationWire": "[wired]",
-                            "renderType": "inline",
-                            "uid": "498399672732"
+                            "renderType": "selectSingle",
+                            "uid": "910633819500"
                         },
                         {
                             "foreignRelationClass": "",
                             "lazyLoading": false,
                             "propertyIsExcludeField": false,
                             "relationDescription": "",
-                            "relationName": "menuGroup",
-                            "relationType": "manyToOne",
+                            "relationName": "menuItem",
+                            "relationType": "zeroToMany",
                             "relationWire": "[wired]",
-                            "renderType": "selectMultipleSideBySide",
-                            "uid": "910633819500"
+                            "renderType": "inline",
+                            "uid": "498399672732"
                         }
                     ]
                 }
@@ -128,8 +128,8 @@
         {
             "config": {
                 "position": [
-                    570,
-                    253
+                    517,
+                    233
                 ]
             },
             "name": "New Model Object",
@@ -158,6 +158,17 @@
                 },
                 "propertyGroup": {
                     "properties": [
+                        {
+                            "allowedFileTypes": "",
+                            "maxItems": "1",
+                            "propertyDescription": "Type of the menu item",
+                            "propertyIsExcludeField": false,
+                            "propertyIsL10nModeExclude": false,
+                            "propertyIsRequired": true,
+                            "propertyName": "type",
+                            "propertyType": "Select",
+                            "uid": "907885444815"
+                        },
                         {
                             "allowedFileTypes": "",
                             "maxItems": "1",
@@ -175,10 +186,54 @@
                             "propertyDescription": "",
                             "propertyIsExcludeField": false,
                             "propertyIsL10nModeExclude": false,
-                            "propertyIsRequired": true,
-                            "propertyName": "type",
-                            "propertyType": "Select",
-                            "uid": "907885444815"
+                            "propertyIsRequired": false,
+                            "propertyName": "subtitle",
+                            "propertyType": "String",
+                            "uid": "459494162104"
+                        },
+                        {
+                            "allowedFileTypes": "",
+                            "maxItems": "1",
+                            "propertyDescription": "Optional link image",
+                            "propertyIsExcludeField": false,
+                            "propertyIsL10nModeExclude": false,
+                            "propertyIsRequired": false,
+                            "propertyName": "image",
+                            "propertyType": "Image",
+                            "uid": "232675499137"
+                        },
+                        {
+                            "allowedFileTypes": "",
+                            "maxItems": "1",
+                            "propertyDescription": "",
+                            "propertyIsExcludeField": false,
+                            "propertyIsL10nModeExclude": false,
+                            "propertyIsRequired": false,
+                            "propertyName": "page",
+                            "propertyType": "String",
+                            "uid": "1319275530787"
+                        },
+                        {
+                            "allowedFileTypes": "",
+                            "maxItems": "1",
+                            "propertyDescription": "",
+                            "propertyIsExcludeField": false,
+                            "propertyIsL10nModeExclude": false,
+                            "propertyIsRequired": false,
+                            "propertyName": "link",
+                            "propertyType": "String",
+                            "uid": "729781755652"
+                        },
+                        {
+                            "allowedFileTypes": "",
+                            "maxItems": "1",
+                            "propertyDescription": "",
+                            "propertyIsExcludeField": false,
+                            "propertyIsL10nModeExclude": false,
+                            "propertyIsRequired": false,
+                            "propertyName": "content",
+                            "propertyType": "RichText",
+                            "uid": "1242707690455"
                         }
                     ]
                 },
@@ -215,7 +270,7 @@
         {
             "src": {
                 "moduleId": 0,
-                "terminal": "relationWire_0",
+                "terminal": "relationWire_1",
                 "uid": "498399672732"
             },
             "tgt": {
@@ -227,7 +282,7 @@
         {
             "src": {
                 "moduleId": 0,
-                "terminal": "relationWire_1",
+                "terminal": "relationWire_0",
                 "uid": "910633819500"
             },
             "tgt": {
@@ -239,7 +294,7 @@
     ],
     "storagePath": "\/var\/www\/html\/public\/typo3conf\/ext\/",
     "log": {
-        "last_modified": "2021-04-21 02:54",
+        "last_modified": "2021-04-22 11:17",
         "extension_builder_version": "9.10.3",
         "be_user": " (1)"
     }
diff --git a/Resources/Private/Language/locallang.xlf b/Resources/Private/Language/locallang.xlf
index e558e40..0be185a 100644
--- a/Resources/Private/Language/locallang.xlf
+++ b/Resources/Private/Language/locallang.xlf
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
 <xliff version="1.0">
-	<file source-language="en" datatype="plaintext" original="EXT:nl_menubuilder/Resources/Private/Language/locallang" date="2021-04-21T14:54:38Z" product-name="nl_menubuilder">
+	<file source-language="en" datatype="plaintext" original="EXT:nl_menubuilder/Resources/Private/Language/locallang" date="2021-04-22T11:17:02Z" product-name="nl_menubuilder">
 		<header/>
 		<body>
 			<trans-unit id="tx_nlmenubuilder_domain_model_menu" resname="tx_nlmenubuilder_domain_model_menu">
@@ -9,12 +9,12 @@
 			<trans-unit id="tx_nlmenubuilder_domain_model_menu.title" resname="tx_nlmenubuilder_domain_model_menu.title">
 				<source>Title</source>
 			</trans-unit>
-			<trans-unit id="tx_nlmenubuilder_domain_model_menu.menu_item" resname="tx_nlmenubuilder_domain_model_menu.menu_item">
-				<source>Menu Item</source>
-			</trans-unit>
 			<trans-unit id="tx_nlmenubuilder_domain_model_menu.menu_group" resname="tx_nlmenubuilder_domain_model_menu.menu_group">
 				<source>Menu Group</source>
 			</trans-unit>
+			<trans-unit id="tx_nlmenubuilder_domain_model_menu.menu_item" resname="tx_nlmenubuilder_domain_model_menu.menu_item">
+				<source>Menu Item</source>
+			</trans-unit>
 			<trans-unit id="tx_nlmenubuilder_domain_model_menugroup" resname="tx_nlmenubuilder_domain_model_menugroup">
 				<source>Menu Group</source>
 			</trans-unit>
@@ -24,11 +24,26 @@
 			<trans-unit id="tx_nlmenubuilder_domain_model_menuitem" resname="tx_nlmenubuilder_domain_model_menuitem">
 				<source>Menu Item</source>
 			</trans-unit>
+			<trans-unit id="tx_nlmenubuilder_domain_model_menuitem.type" resname="tx_nlmenubuilder_domain_model_menuitem.type">
+				<source>Type</source>
+			</trans-unit>
 			<trans-unit id="tx_nlmenubuilder_domain_model_menuitem.title" resname="tx_nlmenubuilder_domain_model_menuitem.title">
 				<source>Title</source>
 			</trans-unit>
-			<trans-unit id="tx_nlmenubuilder_domain_model_menuitem.type" resname="tx_nlmenubuilder_domain_model_menuitem.type">
-				<source>Type</source>
+			<trans-unit id="tx_nlmenubuilder_domain_model_menuitem.subtitle" resname="tx_nlmenubuilder_domain_model_menuitem.subtitle">
+				<source>Subtitle</source>
+			</trans-unit>
+			<trans-unit id="tx_nlmenubuilder_domain_model_menuitem.image" resname="tx_nlmenubuilder_domain_model_menuitem.image">
+				<source>Image</source>
+			</trans-unit>
+			<trans-unit id="tx_nlmenubuilder_domain_model_menuitem.page" resname="tx_nlmenubuilder_domain_model_menuitem.page">
+				<source>Page</source>
+			</trans-unit>
+			<trans-unit id="tx_nlmenubuilder_domain_model_menuitem.link" resname="tx_nlmenubuilder_domain_model_menuitem.link">
+				<source>Link</source>
+			</trans-unit>
+			<trans-unit id="tx_nlmenubuilder_domain_model_menuitem.content" resname="tx_nlmenubuilder_domain_model_menuitem.content">
+				<source>Content</source>
 			</trans-unit>
 		</body>
 	</file>
diff --git a/Resources/Private/Language/locallang_csh_tx_nlmenubuilder_domain_model_content.xlf b/Resources/Private/Language/locallang_csh_tx_nlmenubuilder_domain_model_content.xlf
deleted file mode 100644
index aa3a0d2..0000000
--- a/Resources/Private/Language/locallang_csh_tx_nlmenubuilder_domain_model_content.xlf
+++ /dev/null
@@ -1,14 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<xliff version="1.0">
-	<file source-language="en" datatype="plaintext" original="EXT:nl_menubuilder/Resources/Private/Language/locallang_csh" date="2021-04-21T14:26:16Z" product-name="nl_menubuilder">
-		<header/>
-		<body>
-			<trans-unit id="title.description" resname="title.description">
-				<source>title</source>
-			</trans-unit>
-			<trans-unit id="content.description" resname="content.description">
-				<source>content</source>
-			</trans-unit>
-		</body>
-	</file>
-</xliff>
diff --git a/Resources/Private/Language/locallang_csh_tx_nlmenubuilder_domain_model_link.xlf b/Resources/Private/Language/locallang_csh_tx_nlmenubuilder_domain_model_link.xlf
deleted file mode 100644
index d1bbe8e..0000000
--- a/Resources/Private/Language/locallang_csh_tx_nlmenubuilder_domain_model_link.xlf
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<xliff version="1.0">
-	<file source-language="en" datatype="plaintext" original="EXT:nl_menubuilder/Resources/Private/Language/locallang_csh" date="2021-04-21T14:26:16Z" product-name="nl_menubuilder">
-		<header/>
-		<body>
-			<trans-unit id="title.description" resname="title.description">
-				<source>title</source>
-			</trans-unit>
-			<trans-unit id="subtitle.description" resname="subtitle.description">
-				<source>subtitle</source>
-			</trans-unit>
-			<trans-unit id="image.description" resname="image.description">
-				<source>image</source>
-			</trans-unit>
-			<trans-unit id="link.description" resname="link.description">
-				<source>link</source>
-			</trans-unit>
-		</body>
-	</file>
-</xliff>
diff --git a/Resources/Private/Language/locallang_csh_tx_nlmenubuilder_domain_model_menu.xlf b/Resources/Private/Language/locallang_csh_tx_nlmenubuilder_domain_model_menu.xlf
index d49c49c..9257517 100644
--- a/Resources/Private/Language/locallang_csh_tx_nlmenubuilder_domain_model_menu.xlf
+++ b/Resources/Private/Language/locallang_csh_tx_nlmenubuilder_domain_model_menu.xlf
@@ -1,17 +1,17 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
 <xliff version="1.0">
-	<file source-language="en" datatype="plaintext" original="EXT:nl_menubuilder/Resources/Private/Language/locallang_csh" date="2021-04-21T14:54:38Z" product-name="nl_menubuilder">
+	<file source-language="en" datatype="plaintext" original="EXT:nl_menubuilder/Resources/Private/Language/locallang_csh" date="2021-04-22T11:17:02Z" product-name="nl_menubuilder">
 		<header/>
 		<body>
 			<trans-unit id="title.description" resname="title.description">
 				<source>Name of the menu</source>
 			</trans-unit>
-			<trans-unit id="menu_item.description" resname="menu_item.description">
-				<source>menuItem</source>
-			</trans-unit>
 			<trans-unit id="menu_group.description" resname="menu_group.description">
 				<source>menuGroup</source>
 			</trans-unit>
+			<trans-unit id="menu_item.description" resname="menu_item.description">
+				<source>menuItem</source>
+			</trans-unit>
 		</body>
 	</file>
 </xliff>
diff --git a/Resources/Private/Language/locallang_csh_tx_nlmenubuilder_domain_model_menugroup.xlf b/Resources/Private/Language/locallang_csh_tx_nlmenubuilder_domain_model_menugroup.xlf
index e29c366..a1c2f38 100644
--- a/Resources/Private/Language/locallang_csh_tx_nlmenubuilder_domain_model_menugroup.xlf
+++ b/Resources/Private/Language/locallang_csh_tx_nlmenubuilder_domain_model_menugroup.xlf
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
 <xliff version="1.0">
-	<file source-language="en" datatype="plaintext" original="EXT:nl_menubuilder/Resources/Private/Language/locallang_csh" date="2021-04-21T14:54:38Z" product-name="nl_menubuilder">
+	<file source-language="en" datatype="plaintext" original="EXT:nl_menubuilder/Resources/Private/Language/locallang_csh" date="2021-04-22T11:17:02Z" product-name="nl_menubuilder">
 		<header/>
 		<body>
 			<trans-unit id="title.description" resname="title.description">
diff --git a/Resources/Private/Language/locallang_csh_tx_nlmenubuilder_domain_model_menuitem.xlf b/Resources/Private/Language/locallang_csh_tx_nlmenubuilder_domain_model_menuitem.xlf
index 12ff063..9ddcb84 100644
--- a/Resources/Private/Language/locallang_csh_tx_nlmenubuilder_domain_model_menuitem.xlf
+++ b/Resources/Private/Language/locallang_csh_tx_nlmenubuilder_domain_model_menuitem.xlf
@@ -1,13 +1,28 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
 <xliff version="1.0">
-	<file source-language="en" datatype="plaintext" original="EXT:nl_menubuilder/Resources/Private/Language/locallang_csh" date="2021-04-21T14:54:38Z" product-name="nl_menubuilder">
+	<file source-language="en" datatype="plaintext" original="EXT:nl_menubuilder/Resources/Private/Language/locallang_csh" date="2021-04-22T11:17:02Z" product-name="nl_menubuilder">
 		<header/>
 		<body>
+			<trans-unit id="type.description" resname="type.description">
+				<source>Type of the menu item</source>
+			</trans-unit>
 			<trans-unit id="title.description" resname="title.description">
 				<source>Name of the menu item</source>
 			</trans-unit>
-			<trans-unit id="type.description" resname="type.description">
-				<source>type</source>
+			<trans-unit id="subtitle.description" resname="subtitle.description">
+				<source>subtitle</source>
+			</trans-unit>
+			<trans-unit id="image.description" resname="image.description">
+				<source>Optional link image</source>
+			</trans-unit>
+			<trans-unit id="page.description" resname="page.description">
+				<source>page</source>
+			</trans-unit>
+			<trans-unit id="link.description" resname="link.description">
+				<source>link</source>
+			</trans-unit>
+			<trans-unit id="content.description" resname="content.description">
+				<source>content</source>
 			</trans-unit>
 		</body>
 	</file>
diff --git a/Resources/Private/Language/locallang_csh_tx_nlmenubuilder_domain_model_page.xlf b/Resources/Private/Language/locallang_csh_tx_nlmenubuilder_domain_model_page.xlf
deleted file mode 100644
index c33998f..0000000
--- a/Resources/Private/Language/locallang_csh_tx_nlmenubuilder_domain_model_page.xlf
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<xliff version="1.0">
-	<file source-language="en" datatype="plaintext" original="EXT:nl_menubuilder/Resources/Private/Language/locallang_csh" date="2021-04-21T14:26:16Z" product-name="nl_menubuilder">
-		<header/>
-		<body>
-			<trans-unit id="title.description" resname="title.description">
-				<source>title</source>
-			</trans-unit>
-			<trans-unit id="subtitle.description" resname="subtitle.description">
-				<source>subtitle</source>
-			</trans-unit>
-			<trans-unit id="image.description" resname="image.description">
-				<source>image</source>
-			</trans-unit>
-			<trans-unit id="page.description" resname="page.description">
-				<source>page</source>
-			</trans-unit>
-		</body>
-	</file>
-</xliff>
diff --git a/Resources/Private/Language/locallang_csh_tx_nlmenubuilder_domain_model_submenu.xlf b/Resources/Private/Language/locallang_csh_tx_nlmenubuilder_domain_model_submenu.xlf
deleted file mode 100644
index aac8774..0000000
--- a/Resources/Private/Language/locallang_csh_tx_nlmenubuilder_domain_model_submenu.xlf
+++ /dev/null
@@ -1,11 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<xliff version="1.0">
-	<file source-language="en" datatype="plaintext" original="EXT:nl_menubuilder/Resources/Private/Language/locallang_csh" date="2021-04-21T14:26:16Z" product-name="nl_menubuilder">
-		<header/>
-		<body>
-			<trans-unit id="title.description" resname="title.description">
-				<source>title</source>
-			</trans-unit>
-		</body>
-	</file>
-</xliff>
diff --git a/Resources/Private/Language/locallang_db.xlf b/Resources/Private/Language/locallang_db.xlf
index 3fc1da7..d12607c 100644
--- a/Resources/Private/Language/locallang_db.xlf
+++ b/Resources/Private/Language/locallang_db.xlf
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
 <xliff version="1.0">
-	<file source-language="en" datatype="plaintext" original="EXT:nl_menubuilder/Resources/Private/Language/locallang_db" date="2021-04-21T14:54:38Z" product-name="nl_menubuilder">
+	<file source-language="en" datatype="plaintext" original="EXT:nl_menubuilder/Resources/Private/Language/locallang_db" date="2021-04-22T11:17:02Z" product-name="nl_menubuilder">
 		<header/>
 		<body>
 			<trans-unit id="tx_nlmenubuilder_domain_model_menu" resname="tx_nlmenubuilder_domain_model_menu">
@@ -9,12 +9,12 @@
 			<trans-unit id="tx_nlmenubuilder_domain_model_menu.title" resname="tx_nlmenubuilder_domain_model_menu.title">
 				<source>Title</source>
 			</trans-unit>
-			<trans-unit id="tx_nlmenubuilder_domain_model_menu.menu_item" resname="tx_nlmenubuilder_domain_model_menu.menu_item">
-				<source>Menu Item</source>
-			</trans-unit>
 			<trans-unit id="tx_nlmenubuilder_domain_model_menu.menu_group" resname="tx_nlmenubuilder_domain_model_menu.menu_group">
 				<source>Menu Group</source>
 			</trans-unit>
+			<trans-unit id="tx_nlmenubuilder_domain_model_menu.menu_item" resname="tx_nlmenubuilder_domain_model_menu.menu_item">
+				<source>Menu Item</source>
+			</trans-unit>
 			<trans-unit id="tx_nlmenubuilder_domain_model_menugroup" resname="tx_nlmenubuilder_domain_model_menugroup">
 				<source>Menu Group</source>
 			</trans-unit>
@@ -24,11 +24,29 @@
 			<trans-unit id="tx_nlmenubuilder_domain_model_menuitem" resname="tx_nlmenubuilder_domain_model_menuitem">
 				<source>Menu Item</source>
 			</trans-unit>
+			<trans-unit id="tx_nlmenubuilder_domain_model_menuitem.type" resname="tx_nlmenubuilder_domain_model_menuitem.type">
+				<source>Type</source>
+			</trans-unit>
 			<trans-unit id="tx_nlmenubuilder_domain_model_menuitem.title" resname="tx_nlmenubuilder_domain_model_menuitem.title">
 				<source>Title</source>
 			</trans-unit>
-			<trans-unit id="tx_nlmenubuilder_domain_model_menuitem.type" resname="tx_nlmenubuilder_domain_model_menuitem.type">
-				<source>Type</source>
+			<trans-unit id="tx_nlmenubuilder_domain_model_menuitem.subtitle" resname="tx_nlmenubuilder_domain_model_menuitem.subtitle">
+				<source>Subtitle</source>
+			</trans-unit>
+			<trans-unit id="tx_nlmenubuilder_domain_model_menuitem.image" resname="tx_nlmenubuilder_domain_model_menuitem.image">
+				<source>Image</source>
+			</trans-unit>
+			<trans-unit id="tx_nlmenubuilder_domain_model_menuitem.page" resname="tx_nlmenubuilder_domain_model_menuitem.page">
+				<source>Page</source>
+			</trans-unit>
+			<trans-unit id="tx_nlmenubuilder_domain_model_menuitem.link" resname="tx_nlmenubuilder_domain_model_menuitem.link">
+				<source>Link</source>
+			</trans-unit>
+			<trans-unit id="tx_nlmenubuilder_domain_model_menuitem.content" resname="tx_nlmenubuilder_domain_model_menuitem.content">
+				<source>Content</source>
+			</trans-unit>
+			<trans-unit id="tx_nlmenubuilder_domain_model_menuitem.submenu" resname="tx_nlmenubuilder_domain_model_menuitem.submenu">
+				<source>Submenu</source>
 			</trans-unit>
 		</body>
 	</file>
diff --git a/Resources/Public/Icons/tx_nlmenubuilder_domain_model_menu.gif b/Resources/Public/Icons/tx_nlmenubuilder_domain_model_menu.gif
index 1750e037dd7ccd3a191cf9d8b1678f62d382034e..d599e5bde2d787fa86230cf3c8b53d4c43bf4a93 100644
GIT binary patch
delta 2432
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

delta 1140
zcmeyY^-+P--P6s&GO>ZtWg_QvMzf6zYq;xO7#W!Uwe+u)ddt6f&X!x<oA2%U&ENLO
z!|8PAvaFzO@3@bD^11%G>v_l7@BjFDxMFubO6u^@nto>4@r)9$<yTgjvc<-3zq9W8
zY}?x7Pd4ooPn&!F%{J@FW_zB0`DK-R{`L1OI{*14eh8~ZWK?)8YTj|;Mn&Ue2~EkB
zMwykFGn(pmo}Af!iBsy9np#xWt<sWJyR42L_{C+tM9e!ndvo&a)!ro=UjP1mk=w@S
z4@W@HoIeW7@A#Z~BeS<!CpNdXckbG~XYaoK%PXg6=NFe(*Eet7zH|59{fqPCwLj15
zTYq1@fB*fI^Z)x@Bn~t>6bRa!IIM7})hNxdCgPCjkxr$c!1_HW8byx%>y@x8{A00D
z=)^?cEfZuoU#hsfYUvAQ{k*_`rnMqXsAutcHM=?gN)A0<c|qNJfl%uz<y99mY?jQL
z(v^Jb(n_-xg-gs9cbTrfwl-#W)n6{NH8(b<oStRdZMOE-)|}hBYPrqV-Pu|4`qtiV
z^Y!=k*8KkUm)l~)gM%&H()D&d78@TO?UA;w<FVZI<m43X=zTqwo1dMXV_p4^$7;)q
zi%Yy`+x1#)eRXwB^zJ%d>uqmtZppsAuh)9}ySsa;fB)mP+414wk#1@GKAWANo}QU)
zUC(E`>&we4tE2b#+3x=K_Rj9=|9p0Petdj#dbWMP-QHhc-`w6^&u_o)&(ANfZ||?~
zx8MKo@1K9afB)xCXkg;=NN8k}>quzg(mRpR%xA}u*dpZTk=QC0*OAyJ^(bYkX-4Ue
z-Ux-J%U3%dr=%{j3|Lyh7pNl_dbQi&l*;2C*DE*9d0VU#zS`%!^vUCXCDxhA!7jU!
zpG<TTTl!=YlWFG?=K!mjm#3J8WiIWF-1qrO{WSZkld97awrM<@@o~mX<yl$lPNvPy
z+sBzcr|6t#`rNX6o$2$kzAag9QuFQQnfVP`$}bk2D9Ow)a#XE)v8adX@RP+8yfk0x
zi-o@GcAxQT(vxLdd0uAfIJBMe;#+d)(&Lp&U#!s5Fxhs>(|1GCq04Kg?a0Vh)_&H-
z(Y1#y=+XMB`VNgX((+>7|Bkht(mS2A`J5eh?v_h_-nm<^#dYUyyOno3cl*6M?z|n3
z`n>aYKAYE_x9ioq(|Nn!?c>hh^XZ&-{@!o*y7Tw_dUra1|G$6S1qYb;eF_e;$@df-
z;?h4;aG1}Yr|^i7zfa*&vG|_CV^aBN3XjXx^Aw#>>i01UKap2|@Y>1r2}?go$8U`}
z9%jJref3PWL8`HW!&9D|9-G%P$IiFz(K5NPQY?3ir$_ptFPD7EUzMDn<@UE^NeK6(
zD_5PP*KWPiQTDcUX2So6FK&3wzMH);<G#+fTPC|}J8l&mw<*6{cE7j$Ue)`v<@f9U
z^HyBRW#>Egpyhh<kB8wW*8Yfj)MI|{)b$CA19g5r2@A-o6pcyOJGyj^`@Wygy?k`7
zgaf9}V_C6+{mPeDjxuknoXn5CW4^e>T;$7J^B-%h^<}=@V+uN;zUlP`*%LW7GI6T$
RjHk~`UlR7-LzIER8UP)mR&f9T

diff --git a/Resources/Public/Icons/tx_nlmenubuilder_domain_model_menugroup.gif b/Resources/Public/Icons/tx_nlmenubuilder_domain_model_menugroup.gif
index 0ab6cf613b32001577c3e24378ed67cfb10ef64a..4013d7a6ea57d909a3d8d073195b548f09256155 100644
GIT binary patch
delta 2172
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
Mu6bQHTnr4>0BvnlIRF3v

delta 1613
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

diff --git a/Resources/Public/Icons/tx_nlmenubuilder_domain_model_menuitem-content.svg b/Resources/Public/Icons/tx_nlmenubuilder_domain_model_menuitem-content.svg
new file mode 100644
index 0000000..292c9b6
--- /dev/null
+++ b/Resources/Public/Icons/tx_nlmenubuilder_domain_model_menuitem-content.svg
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="utf-8"?><svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 110.74 122.88" style="enable-background:new 0 0 110.74 122.88" xml:space="preserve"><g><path d="M48.47,116.35c1.8,0,3.27,1.46,3.27,3.26c0,1.8-1.46,3.26-3.27,3.26H7.6c-2.09,0-3.99-0.85-5.37-2.23 C0.85,119.27,0,117.38,0,115.28V7.6C0,5.5,0.85,3.61,2.23,2.23C3.61,0.85,5.5,0,7.6,0h93.3c2.09,0,3.99,0.86,5.37,2.23 c1.38,1.38,2.23,3.27,2.23,5.37v53.95c0,1.8-1.46,3.26-3.26,3.26c-1.8,0-3.26-1.46-3.26-3.26V7.6c0-0.29-0.12-0.56-0.32-0.75 c-0.2-0.2-0.47-0.32-0.75-0.32H7.6c-0.29,0-0.56,0.12-0.76,0.31C6.65,7.05,6.53,7.31,6.53,7.6v107.68c0,0.29,0.12,0.56,0.32,0.75 c0.2,0.2,0.47,0.32,0.76,0.32L48.47,116.35L48.47,116.35L48.47,116.35z M33.94,57.92c-0.62-1.07-0.17-4.13,1.16-5.21 c3.8-2.22,9.04-1.53,12.7-4.09c0.21-0.32,0.44-0.78,0.67-1.29c0.33-0.76,0.64-1.59,0.83-2.16c-0.81-0.96-1.51-2.04-2.17-3.1 l-2.2-3.5c-0.8-1.2-1.22-2.3-1.25-3.2c-0.01-0.42,0.06-0.81,0.22-1.15c0.16-0.36,0.41-0.65,0.76-0.88c0.16-0.11,0.34-0.2,0.53-0.27 c-0.15-1.9-0.2-4.29-0.1-6.3c0.05-0.47,0.14-0.95,0.27-1.43c0.56-2.01,1.97-3.63,3.72-4.74c0.96-0.61,2.02-1.08,3.12-1.39 c0.7-0.2-0.6-2.43,0.13-2.51c3.5-0.36,9.15,2.83,11.59,5.47c1.22,1.32,1.99,3.08,2.16,5.4l-0.14,5.71l0,0 c0.61,0.19,1,0.57,1.16,1.2c0.18,0.7-0.01,1.67-0.61,3.01l0,0c-0.01,0.02-0.02,0.05-0.04,0.07l-2.51,4.13 c-0.92,1.52-1.86,3.04-3.08,4.24c0.11,0.16,0.23,0.32,0.34,0.48c0.5,0.73,1,1.46,1.64,2.11c0.02,0.02,0.04,0.05,0.05,0.07 c2.89,2.04,9.92,2.54,12.62,4.04l0.11,0.06c1.39,1.07,1.82,4.13,1.18,5.2H33.94L33.94,57.92z M102.29,79.04 c-0.53-0.51-1.14-0.75-1.84-0.74c-0.71,0.01-1.31,0.29-1.8,0.81l-4.05,4.22l11.37,10.98l4.09-4.26c0.49-0.5,0.69-1.14,0.68-1.84 c-0.01-0.69-0.26-1.33-0.76-1.8L102.29,79.04L102.29,79.04L102.29,79.04z M84.54,116.17c-1.5,0.48-3,0.97-4.49,1.46 c-1.5,0.5-3,1-4.49,1.5c-3.53,1.16-5.51,1.8-5.93,1.92c-0.4,0.12-0.17-1.53,0.73-4.99l2.81-10.83l0,0l17.82-18.18l11.36,10.93 L84.54,116.17L84.54,116.17L84.54,116.17z M31.74,95.36c-1.8,0-3.27-1.48-3.27-3.31s1.46-3.31,3.27-3.31h22.21 c1.8,0,3.27,1.48,3.27,3.31s-1.46,3.31-3.27,3.31H31.74L31.74,95.36L31.74,95.36z M31.74,74.67c-1.8,0-3.26-1.46-3.26-3.27 c0-1.8,1.46-3.26,3.26-3.26h44.05c1.8,0,3.26,1.46,3.26,3.26c0,1.8-1.46,3.27-3.26,3.27H31.74L31.74,74.67L31.74,74.67z"/></g></svg>
\ No newline at end of file
diff --git a/Resources/Public/Icons/tx_nlmenubuilder_domain_model_menuitem-link.svg b/Resources/Public/Icons/tx_nlmenubuilder_domain_model_menuitem-link.svg
new file mode 100644
index 0000000..dc5d32d
--- /dev/null
+++ b/Resources/Public/Icons/tx_nlmenubuilder_domain_model_menuitem-link.svg
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="utf-8"?><svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 112.55 122.88" style="enable-background:new 0 0 112.55 122.88" xml:space="preserve"><style type="text/css">.st0{fill-rule:evenodd;clip-rule:evenodd;}</style><g><path class="st0" d="M104.41,6.1c6.26,5.13,6.93,11.83,7.62,13.46l0.34,2.5c0.9,5.39-1.65,12.75-5.58,17.38L89.2,59.84 c-6.76,7.84-18.04,10.44-27.48,6.37l-0.03,0.04c3.45,5.63,3.15,9.64,3.46,10.57c0.9,5.41-1.65,12.74-5.58,17.38L41.97,114.6 c-8.53,9.89-23.58,11.1-33.53,2.61c-5.04-5.04-7.84-9.31-8.37-16.49c-0.47-6.24,1.53-12.37,5.59-17.18l17.92-20.79 c5.01-5.14,7.5-5.86,13.33-7.47l2.5-0.34l10.66,1.56c0.22,0.08,0.44,0.18,0.65,0.27l0.03-0.04c-5.35-8.71-4.57-20.11,2.14-27.97 L70.48,8.37c4.11-4.77,9.99-7.71,16.15-8.19c5.37-0.89,12.77,1.64,17.38,5.58L104.41,6.1L104.41,6.1z M74.23,51.71l-3.66,4.24 l0.64,0.01l0.02,0l0.6-0.02l0.01,0l0.14-0.01l0.02,0c2.11-0.16,4.19-0.88,5.96-2.14c0.34-0.24,0.68-0.51,1.02-0.82l0,0l0,0 c0.3-0.27,0.62-0.59,0.93-0.95l0,0l0.12-0.13l17.45-20.24c1.47-1.7,2.36-3.75,2.68-5.86c0.07-0.44,0.11-0.87,0.13-1.26 c0.02-0.41,0.01-0.85-0.01-1.28l0-0.05l-0.01-0.11c-0.16-2.11-0.88-4.19-2.14-5.96c-0.24-0.34-0.51-0.67-0.78-0.97l-0.03-0.04 c-0.29-0.32-0.61-0.64-0.94-0.94l0,0l-0.06-0.05l-0.05-0.05L96.16,15c-1.69-1.43-3.7-2.3-5.78-2.61l-0.03,0 c-0.43-0.06-0.85-0.11-1.24-0.12c-0.41-0.02-0.84-0.01-1.27,0.01l-0.07,0l-0.1,0.01c-2.11,0.16-4.19,0.88-5.96,2.14 c-0.34,0.24-0.68,0.51-0.98,0.78l-0.03,0.03c-0.33,0.29-0.64,0.61-0.94,0.95l0,0l-0.12,0.13L62.2,36.55 c-1.47,1.7-2.36,3.75-2.68,5.86h0c-0.06,0.43-0.11,0.86-0.12,1.26c-0.02,0.41-0.01,0.85,0.01,1.28l0.01,0.15l0,0.01v0.02 c0.03,0.46,0.09,0.91,0.18,1.37l3.58-4.15l0.1-0.12l0.13-0.14l0,0l0.02-0.02c1.29-1.39,3.02-2.18,4.79-2.3 c1.78-0.13,3.62,0.39,5.1,1.6l0,0l0.02,0.01l0.09,0.08l0.02,0.02l0.02,0.02l0.01,0.01l0.02,0.01l0.07,0.06l0,0l0,0 c2.06,1.83,2.82,4.6,2.21,7.13c-0.12,0.5-0.3,1-0.54,1.48c-0.22,0.46-0.51,0.9-0.83,1.31l-0.02,0.02l-0.03,0.04l0,0l-0.01,0.02 l-0.1,0.12l0,0L74.23,51.71L74.23,51.71z M40.06,80.23L40.06,80.23c2.33,2.01,5.88,1.75,7.89-0.58l5.58-6.47 c0.65,1.45,1.04,3,1.16,4.57c0.25,3.44-0.79,6.97-3.19,9.75l-17.46,20.24c-2.4,2.79-5.73,4.34-9.16,4.59 c-3.38,0.25-6.84-0.75-9.59-3.05l-0.16-0.14c-2.78-2.4-4.34-5.73-4.59-9.16c-0.25-3.4,0.76-6.89,3.1-9.65l0.09-0.1l17.25-20l0,0 l0,0l0.21-0.24c2.4-2.78,5.73-4.34,9.16-4.59c1.58-0.12,3.18,0.04,4.71,0.47l-5.58,6.47C37.47,74.67,37.73,78.22,40.06,80.23 L40.06,80.23z"/></g></svg>
\ No newline at end of file
diff --git a/Resources/Public/Icons/tx_nlmenubuilder_domain_model_menuitem-page.svg b/Resources/Public/Icons/tx_nlmenubuilder_domain_model_menuitem-page.svg
new file mode 100644
index 0000000..f2d3eb1
--- /dev/null
+++ b/Resources/Public/Icons/tx_nlmenubuilder_domain_model_menuitem-page.svg
@@ -0,0 +1 @@
+<svg id="Layer_1" data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 90.48 122.88"><title>text-file</title><path d="M35.27.78a3,3,0,0,1,2-.78,1.54,1.54,0,0,1,.47.05h46.2A6.59,6.59,0,0,1,88.56,2a6.52,6.52,0,0,1,1.92,4.64v109.7a6.57,6.57,0,0,1-6.56,6.56H6.67a6.57,6.57,0,0,1-6.56-6.56v-78A3.07,3.07,0,0,1,0,37.56a3.19,3.19,0,0,1,1-2.24L34.9,1a1.5,1.5,0,0,1,.26-.21ZM84.65,6.62a.5.5,0,0,0-.21-.47A.67.67,0,0,0,84,5.94H40.22V31.62a8.89,8.89,0,0,1-8.91,8.91H6.1v75.79a.58.58,0,0,0,.2.47.69.69,0,0,0,.47.21H84a.58.58,0,0,0,.47-.21.73.73,0,0,0,.21-.47V6.62Zm-62,94.73a2.64,2.64,0,0,1,0-5.28h28a2.64,2.64,0,0,1,0,5.28Zm0-17.75a2.64,2.64,0,0,1,0-5.28H65.46a2.64,2.64,0,0,1,0,5.28Zm0-17.76a2.64,2.64,0,0,1,0-5.28H72a2.64,2.64,0,0,1,0,5.28Zm11.7-34.22V10.11L10.11,34.64h21.2a3.16,3.16,0,0,0,2.13-.88,3.06,3.06,0,0,0,.89-2.14Z"/></svg>
\ No newline at end of file
diff --git a/Resources/Public/Icons/tx_nlmenubuilder_domain_model_menuitem-submenu.svg b/Resources/Public/Icons/tx_nlmenubuilder_domain_model_menuitem-submenu.svg
new file mode 100644
index 0000000..9cdf3fb
--- /dev/null
+++ b/Resources/Public/Icons/tx_nlmenubuilder_domain_model_menuitem-submenu.svg
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="utf-8"?><svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 122.88 100.16" style="enable-background:new 0 0 122.88 100.16" xml:space="preserve"><style type="text/css">.st0{fill-rule:evenodd;clip-rule:evenodd;}</style><g><path class="st0" d="M98.74,78.39h6.32V62.24c0-0.31-0.13-0.6-0.34-0.81c-0.21-0.21-0.5-0.34-0.81-0.34l-38.58,0v17.3h6.31 c2,0,3.63,1.63,3.63,3.63v14.52c0,2-1.63,3.63-3.63,3.63l-20.51,0c-2,0-3.63-1.63-3.63-3.63V82.02c0-2,1.63-3.63,3.63-3.63l6.31,0 v-17.3H18.87c-0.31,0-0.6,0.13-0.81,0.34c-0.21,0.21-0.34,0.5-0.34,0.81v16.15h6.42c2,0,3.63,1.63,3.63,3.63v14.52 c0,2-1.63,3.63-3.63,3.63l-20.51,0c-2,0-3.63-1.63-3.63-3.63V82.02c0-2,1.63-3.63,3.63-3.63l6.23,0V62.24 c0-2.48,1.01-4.74,2.64-6.37c1.63-1.63,3.88-2.64,6.37-2.64h38.58V21.78h-6.31c-2,0-3.63-1.63-3.63-3.63V3.63 c0-2,1.63-3.63,3.63-3.63l20.51,0c2,0,3.63,1.63,3.63,3.63v14.52c0,2-1.63,3.63-3.63,3.63l-6.31,0v31.45h38.58 c2.48,0,4.74,1.01,6.37,2.64c1.63,1.63,2.64,3.89,2.64,6.37v16.15h6.33c2,0,3.63,1.63,3.63,3.63v14.52c0,2-1.63,3.63-3.63,3.63 l-20.51,0c-2,0-3.63-1.63-3.63-3.63V82.02C95.11,80.02,96.75,78.39,98.74,78.39L98.74,78.39L98.74,78.39z"/></g></svg>
\ No newline at end of file
diff --git a/Resources/Public/Icons/tx_nlmenubuilder_domain_model_menuitem.gif b/Resources/Public/Icons/tx_nlmenubuilder_domain_model_menuitem.gif
index 6cc5f16355d84652db5ce39fcbc7256b7ea457cd..93ed8aa9345a29a4a09dcc47c99a2c59213b6b0a 100644
GIT binary patch
literal 6108
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

literal 533
zcmZ?wbhEHb6krfwc;>^PT&ti`uNc2IM6Fr5d*_GlT^}Mg`l>Z4?cBL@{mqr@Zmft{
z7wEdsHlXM1p|kH6En2i~+qT*bFHc_i5WY6x!0ESfTY`5SewDjFA!B!R!NKH=-7#5v
z<8pIzr=96jYgDqIV-eVU&ToZld3pKFnKKjS+;FNpvSrJblpPUfQw-u~UN@U;5Wc}@
z$BrEa{W=>rZk&4HOZ}!-d-m*!-W0Ir`qGWJ*7TfcZfa@@UE^PKph&A-&32ZV$71`A
zWAz0q9tEs&-?wjHUteGDl80Iy>iRueDs>7`>w{xsV{`V!C+`Sfvt~_7N=o9k(EtDc
zGYnRs_>+Z^fx(AC2joCdoG`E#HTX0&x3sqT=(8Hwwzskf@u~E-2#Sa)Om246<W-$H
zzgIwSvb`aPnkT=qgPD?ySBuU}w*_sI;?fdLOl)@6O}b9Za_%Oa9!=V^rt(deuH1}L
mT*gdIiZ&J+P3*$v4C>yZMom0cTFy<3E({D?-?uh0SOWmDq@H{L

diff --git a/Resources/Public/Icons/tx_nlmenubuilder_domain_model_menuitemcontent.svg b/Resources/Public/Icons/tx_nlmenubuilder_domain_model_menuitemcontent.svg
deleted file mode 100644
index ba78ed5..0000000
--- a/Resources/Public/Icons/tx_nlmenubuilder_domain_model_menuitemcontent.svg
+++ /dev/null
@@ -1,3 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?><svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 122.88 110.78" style="enable-background:new 0 0 122.88 110.78" xml:space="preserve"><style type="text/css"><![CDATA[
-	.st0{fill-rule:evenodd;clip-rule:evenodd;}
-]]></style><g><path class="st0" d="M7.05,0h100.97c1.92,0,3.68,0.8,4.95,2.07l0,0l0.01,0.01l0.01,0.01L113,2.1c1.27,1.28,2.06,3.03,2.06,4.95 v35.02c-0.53-0.48-1.13-0.91-1.78-1.28c-1.54-0.87-3.06-1.36-4.58-1.52V25.21l0,0c-0.22,0.04-0.45,0.06-0.67,0.06H7.05 c-0.23,0-0.46-0.02-0.67-0.06v78.51c0,0.19,0.07,0.36,0.19,0.48l0,0l0.01,0.01c0.12,0.12,0.28,0.19,0.48,0.19h52.44 c-0.01,2.74,0.52,4.86,1.58,6.38l-54.02,0c-1.92,0-3.68-0.79-4.96-2.07l-0.01-0.01l-0.01-0.01l-0.01-0.01 C0.79,107.4,0,105.65,0,103.73l0-96.7c0.02-1.94,0.81-3.7,2.08-4.97c0.08-0.08,0.15-0.15,0.23-0.22C3.57,0.7,5.23,0,7.05,0L7.05,0 L7.05,0z M55.11,47.78c-1.48,0-2.68-1.3-2.68-2.91c0-1.61,1.2-2.91,2.68-2.91h40.15c1.25,0,2.3,0.93,2.6,2.19l-3.51,3.64H55.11 L55.11,47.78L55.11,47.78z M55.11,62.5c-1.48,0-2.68-1.3-2.68-2.91s1.2-2.91,2.68-2.91h30.65l-5.62,5.82H55.11L55.11,62.5 L55.11,62.5z M89.25,97.9c-2.05,0.65-4.1,1.29-6.15,1.94c-2.05,0.65-4.1,1.4-6.15,2.05c-4.86,1.51-7.55,2.48-8.1,2.59 c-0.54,0.11-0.21-2.05,0.97-6.8l3.88-14.78l0.32-0.32L89.25,97.9L89.25,97.9L89.25,97.9L89.25,97.9L89.25,97.9L89.25,97.9z M79.64,76.85l27.16-28.13c0.65-0.54,1.3-0.75,2.05-0.32l13.6,13.17c0.54,0.65,0.65,1.4-0.11,2.16L94.86,92.18L79.64,76.85 L79.64,76.85L79.64,76.85L79.64,76.85z M115.06,85.16v18.58c0,1.94-0.79,3.7-2.07,4.97c-1.27,1.27-3.03,2.07-4.97,2.07H79.74 l0.51-0.16l0.5-0.14c0.55-0.17,1.86-0.62,3.16-1.07c0.67-0.23,1.34-0.46,2.74-0.9l5.9-1.86l-0.01-0.02 c1.39-0.44,2.7-1.18,3.83-2.23h11.65c0.18,0,0.35-0.08,0.48-0.21c0.12-0.12,0.21-0.29,0.21-0.48V91.74L115.06,85.16L115.06,85.16z M19.51,92.45c-1.46,0-2.65-1.3-2.65-2.91s1.19-2.91,2.65-2.91h43.62l-1.53,5.82H19.51L19.51,92.45L19.51,92.45z M18.45,79.73 c-1.46,0-2.65-1.3-2.65-2.91c0-1.61,1.19-2.91,2.65-2.91h50.92c-0.56,0.37-1.1,0.81-1.6,1.31l-0.05,0.05 c-1.26,1.18-2.24,2.7-2.77,4.46H18.45L18.45,79.73L18.45,79.73z M16.49,34.55h29.25v29.51H16.49V34.55L16.49,34.55L16.49,34.55z M46.94,9.08c2.53,0,4.57,2.05,4.57,4.57c0,2.52-2.05,4.57-4.57,4.57c-2.52,0-4.57-2.05-4.57-4.57 C42.37,11.13,44.42,9.08,46.94,9.08L46.94,9.08L46.94,9.08z M30.96,9.08c2.53,0,4.57,2.05,4.57,4.57c0,2.52-2.05,4.57-4.57,4.57 c-2.53,0-4.57-2.05-4.57-4.57C26.39,11.13,28.44,9.08,30.96,9.08L30.96,9.08L30.96,9.08z M14.99,9.08c2.53,0,4.57,2.05,4.57,4.57 c0,2.52-2.05,4.57-4.57,4.57c-2.53,0-4.57-2.05-4.57-4.57C10.42,11.13,12.46,9.08,14.99,9.08L14.99,9.08L14.99,9.08z"/></g></svg>
\ No newline at end of file
diff --git a/ext_emconf.php b/ext_emconf.php
index a02c602..bc184f8 100644
--- a/ext_emconf.php
+++ b/ext_emconf.php
@@ -3,7 +3,7 @@
 /***************************************************************
  * Extension Manager/Repository config file for ext: "nl_menubuilder"
  *
- * Auto generated by Extension Builder 2021-04-21
+ * Auto generated by Extension Builder 2021-04-22
  *
  * Manual updates:
  * Only the data in the array - anything else is removed by next write.
@@ -17,7 +17,7 @@ $EM_CONF[$_EXTKEY] = [
     'author' => '',
     'author_email' => '',
     'state' => 'alpha',
-    'uploadfolder' => 0,
+    'uploadfolder' => 1,
     'createDirs' => '',
     'clearCacheOnLoad' => 0,
     'version' => '1.0.0',
diff --git a/ext_localconf.php b/ext_localconf.php
index b3602e6..088daf4 100644
--- a/ext_localconf.php
+++ b/ext_localconf.php
@@ -3,12 +3,14 @@ defined('TYPO3_MODE') or die();
 
 $boot = function () {
     if (TYPO3_MODE === 'BE') {
+        $iconRegistry = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance(\TYPO3\CMS\Core\Imaging\IconRegistry::class);
+
         $icons = [
-            'ext-menuitem-type-content' => 'tx_nlmenubuilder_domain_model_menuitemcontent.svg',
-            'ext-menuitem-type-page' => 'tx_nlmenubuilder_domain_model_menuitemcontent.svg',
-            'ext-menuitem-type-link' => 'tx_nlmenubuilder_domain_model_menuitemcontent.svg',
+            'ext-menubuilder-menuitem-type-page' => 'tx_nlmenubuilder_domain_model_menuitem-page.svg',
+            'ext-menubuilder-menuitem-type-link' => 'tx_nlmenubuilder_domain_model_menuitem-link.svg',
+            'ext-menubuilder-menuitem-type-content' => 'tx_nlmenubuilder_domain_model_menuitem-content.svg',
+            'ext-menubuilder-menuitem-type-submenu' => 'tx_nlmenubuilder_domain_model_menuitem-submenu.svg',
         ];
-        $iconRegistry = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance(\TYPO3\CMS\Core\Imaging\IconRegistry::class);
 
         foreach ($icons as $identifier => $path) {
             if (!$iconRegistry->isRegistered($identifier)) {
diff --git a/ext_tables.sql b/ext_tables.sql
index 3372bc9..508495d 100644
--- a/ext_tables.sql
+++ b/ext_tables.sql
@@ -4,8 +4,8 @@
 CREATE TABLE tx_nlmenubuilder_domain_model_menu (
 
 	title varchar(255) DEFAULT '' NOT NULL,
-	menu_item int(11) unsigned DEFAULT '0' NOT NULL,
-	menu_group int(11) unsigned DEFAULT '0'
+	menu_group int(11) unsigned DEFAULT '0',
+	menu_item int(11) unsigned DEFAULT '0' NOT NULL
 
 );
 
@@ -25,7 +25,14 @@ CREATE TABLE tx_nlmenubuilder_domain_model_menuitem (
 
 	menu int(11) unsigned DEFAULT '0' NOT NULL,
 
+	type int(11) DEFAULT '0' NOT NULL,
 	title varchar(255) DEFAULT '' NOT NULL,
-	type int(11) DEFAULT '0' NOT NULL
+	subtitle varchar(255) DEFAULT '' NOT NULL,
+	image int(11) unsigned NOT NULL default '0',
+	page varchar(255) DEFAULT '' NOT NULL,
+	link varchar(255) DEFAULT '' NOT NULL,
+	content text
 
 );
+
+## EXTENSION BUILDER DEFAULTS END TOKEN - Everything BEFORE this line is overwritten with the defaults of the extension builder
\ No newline at end of file
-- 
GitLab