diff --git a/pandora_console/godmode/menu.php b/pandora_console/godmode/menu.php
index d98eb9d3c6..e38e2caf3e 100644
--- a/pandora_console/godmode/menu.php
+++ b/pandora_console/godmode/menu.php
@@ -33,10 +33,11 @@ require_once 'include/functions_menu.php';
 
 check_login();
 
-$access_console_node = !is_reporting_console_node();
+$access_console_node = is_reporting_console_node() === false;
 $menu_godmode = [];
 $menu_godmode['class'] = 'godmode';
 
+$menuGodmode = [];
 if ($access_console_node === true) {
     enterprise_include('godmode/menu.php');
 }
diff --git a/pandora_console/include/class/Menu.class.php b/pandora_console/include/class/Menu.class.php
new file mode 100644
index 0000000000..bce38a89db
--- /dev/null
+++ b/pandora_console/include/class/Menu.class.php
@@ -0,0 +1,126 @@
+<?php
+
+require_once 'include/class/MenuItem.class.php';
+
+/**
+ * Global Menu class.
+ */
+class Menu
+{
+    // Check ACL
+    /*
+        if ((bool) check_acl($config['id_user'], 0, '$item->ACL_el_que_sea') === true) {
+        haz cosas aqui
+        }
+
+    */
+
+    public function __construct(
+        private string $name,
+        private array $items=[],
+        private array $menu=[]
+    ) {
+
+    }
+
+
+    /**
+     * Create Item function.
+     *
+     * @param MenuItem $menuItem Item for print.
+     *
+     * @return array.
+     */
+    public function generateItem(MenuItem $menuItem)
+    {
+        // Start with empty element.
+        $item = [];
+        if ($menuItem->canBeDisplayed() === true) {
+            // Handle of information.
+            if (empty($menuItem->getUrl()) === false) {
+                $urlPath = $menuItem->getUrl();
+            } else {
+                $urlPath = ui_get_full_url(
+                    $menuItem->getSec().'/'.$menuItem->getSec2().'/'.$menuItem->getParameters()
+                );
+            }
+
+            // Creation of the line.
+            $item[] = '<li>';
+
+            // Create the link if is neccesary.
+            if (empty($urlPath) === false) {
+                $item[] = sprintf(
+                    '<a href="%s">%s</a>',
+                    $urlPath,
+                    $menuItem->getText()
+                );
+            }
+
+            // Check if this item has submenu. If is the case, create it.
+            if ($menuItem->hasSubmenu() === true) {
+                $item[] = '<ul>';
+                $itemSubMenu = $menuItem->getSubmenu();
+                foreach ($itemSubMenu as $subMenu) {
+                    $item[] = $this->generateItem($subMenu);
+                }
+
+                $item[] = '</ul>';
+            }
+
+            $item[] = '</li>';
+        }
+
+        return $item;
+    }
+
+
+    /**
+     * Generate the menu.
+     *
+     * @return void.
+     */
+    public function generateMenu()
+    {
+        $output = [];
+            /*
+                Estructura
+                <ul>
+                    <li>level0.item1</li>
+                    <li>level0.item2</li>
+                        <ul>
+                            <li>level1.item1</li>
+                            <li>level1.item2</li>
+                        </ul>
+                    <li>level0.item3</li>
+                </ul>
+            */
+        $output[] = '<ul>';
+        foreach ($this->items as $menuItem) {
+            // If the item must be displayed.
+            $this->generateItem($menuItem);
+        }
+
+        $output[] = '</ul>';
+
+        $this->menu[] = $output;
+
+    }
+
+
+    /**
+     * Prints the menu.
+     *
+     * @return void.
+     */
+    public function printMenu()
+    {
+        if (empty($this->menu) === false) {
+            foreach ($this->menu as $element) {
+                echo $element."\n";
+            }
+        }
+    }
+
+
+}
diff --git a/pandora_console/include/class/MenuItem.class.php b/pandora_console/include/class/MenuItem.class.php
new file mode 100644
index 0000000000..3ec088ac72
--- /dev/null
+++ b/pandora_console/include/class/MenuItem.class.php
@@ -0,0 +1,431 @@
+<?php
+
+/**
+ * Menu Item class.
+ */
+class MenuItem
+{
+
+
+    /**
+     * Constructor
+     *
+     * @param string  $text            Caption for show.
+     * @param string  $url             Raw URL.
+     * @param string  $sec             URL sec.
+     * @param string  $sec2            URL sec2.
+     * @param string  $parameters      Added parameters to builded url.
+     * @param string  $id              Unique identificator.
+     * @param string  $icon            Icon.
+     * @param string  $class           Class of his own.
+     * @param array   $submenu         Submenus.
+     * @param integer $refr            Refr.
+     * @param array   $acl             ACLs affected.
+     * @param array   $activationToken Config Token for active this item.
+     * @param boolean $display         True if must be displayed.
+     * @param boolean $enabled         True if must be Enabled.
+     *
+     * @return MenuItem.
+     */
+    public function __construct(
+        private string $text='',
+        private string $url='',
+        private string $sec='',
+        private string $sec2='',
+        private string $parameters='',
+        private string $id='',
+        private string $icon='',
+        private string $class='',
+        private array $submenu=[],
+        private int $refr=0,
+        private array $acl=[],
+        private array $activationToken=[],
+        private bool $display=true,
+        private bool $enabled=true,
+    ) {
+        if (empty($this->id) === true && empty($this->text) === false) {
+            $this->id = str_replace(' ', '_', $text);
+        }
+
+        return $this;
+    }
+
+
+    /**
+     * Set Text. The caption of the option.
+     *
+     * @param string $text Text.
+     *
+     * @return void.
+     */
+    public function setText(string $text)
+    {
+        $this->text = $text;
+    }
+
+
+    /**
+     * Get Text
+     *
+     * @return string.
+     */
+    public function getText()
+    {
+        return $this->text;
+    }
+
+
+    /**
+     * Set URL. Raw URL avoid sec and sec2 information.
+     *
+     * @param string $url Url.
+     *
+     * @return void.
+     */
+    public function setUrl(string $url)
+    {
+        $this->url = $url;
+    }
+
+
+    /**
+     * Get URL
+     *
+     * @return string.
+     */
+    public function getUrl()
+    {
+        return $this->url;
+    }
+
+
+    /**
+     * Set sec
+     *
+     * @param string $sec Sec.
+     *
+     * @return void.
+     */
+    public function setSec(string $sec)
+    {
+        $this->sec = $sec;
+    }
+
+
+    /**
+     * Get sec
+     *
+     * @return string.
+     */
+    public function getSec()
+    {
+        return $this->sec;
+    }
+
+
+    /**
+     * Set sec2
+     *
+     * @param string $sec2 Sec2.
+     *
+     * @return void.
+     */
+    public function setSec2(string $sec2)
+    {
+        $this->sec2 = $sec2;
+    }
+
+
+    /**
+     * Get sec2
+     *
+     * @return string.
+     */
+    public function getSec2()
+    {
+        return $this->sec2;
+    }
+
+
+    /**
+     * Set parameters. Added parameters for builded url (sec + sec2).
+     *
+     * @param string $parameters Parameters.
+     *
+     * @return void.
+     */
+    public function setParameters(string $parameters)
+    {
+        $this->parameters = $parameters;
+    }
+
+
+    /**
+     * Get parameters
+     *
+     * @return string.
+     */
+    public function getParameters()
+    {
+        return $this->parameters;
+    }
+
+
+    /**
+     * Set id. This is useful for identify the option selected.
+     *
+     * @param string $id Id.
+     *
+     * @return void.
+     */
+    public function setId(string $id)
+    {
+        $this->id = $id;
+    }
+
+
+    /**
+     * Get id
+     *
+     * @return string.
+     */
+    public function getId()
+    {
+        return $this->id;
+    }
+
+
+    /**
+     * Set icon. Must be relative path.
+     *
+     * @param string $icon Icon.
+     *
+     * @return void.
+     */
+    public function setIcon(string $icon)
+    {
+        $this->icon = $icon;
+    }
+
+
+    /**
+     * Get icon
+     *
+     * @return string.
+     */
+    public function getIcon()
+    {
+        return $this->icon;
+    }
+
+
+    /**
+     * Set class.
+     *
+     * @param string $class Class.
+     *
+     * @return void.
+     */
+    public function setClass(string $class)
+    {
+        $this->class = $class;
+    }
+
+
+    /**
+     * Get class
+     *
+     * @return string.
+     */
+    public function getClass()
+    {
+        return $this->class;
+    }
+
+
+    /**
+     * Set submenu. Array with options under this selection.
+     *
+     * @param array $submenu Submenu.
+     *
+     * @return void.
+     */
+    public function setSubmenu(array $submenu)
+    {
+        $this->submenu = $submenu;
+    }
+
+
+    /**
+     * Get Submenu
+     *
+     * @return array.
+     */
+    public function getSubmenu()
+    {
+        return $this->submenu;
+    }
+
+
+    /**
+     * Set ACLs. Attach only allowed ACLs in an array.
+     *
+     * @param array $acl ACL.
+     *
+     * @return void.
+     */
+    public function setACL(array $acl)
+    {
+        $this->acl = $acl;
+    }
+
+
+    /**
+     * Get ACLs
+     *
+     * @return array.
+     */
+    public function getACL()
+    {
+        return $this->acl;
+    }
+
+
+    /**
+     * Set activation token.
+     *
+     * @param array $activationToken ACL.
+     *
+     * @return void.
+     */
+    public function setActivationToken(array $activationToken)
+    {
+        $this->activationToken = $activationToken;
+    }
+
+
+    /**
+     * Get activation token.
+     *
+     * @return array.
+     */
+    public function getActivationToken()
+    {
+        return $this->activationToken;
+    }
+
+
+    /**
+     * Set refr
+     *
+     * @param integer $refr Refr.
+     *
+     * @return void.
+     */
+    public function setRefr(int $refr)
+    {
+        $this->refr = $refr;
+    }
+
+
+    /**
+     * Get Refr
+     *
+     * @return integer.
+     */
+    public function getRefr()
+    {
+        return $this->refr;
+    }
+
+
+    /**
+     * Set display. The item will be exists if this value is true.
+     *
+     * @param boolean $display Display.
+     *
+     * @return void.
+     */
+    public function setDisplay(bool $display)
+    {
+        $this->display = $display;
+    }
+
+
+    /**
+     * Get Display
+     *
+     * @return boolean.
+     */
+    public function getDisplay()
+    {
+        return $this->display;
+    }
+
+
+    /**
+     * Set enabled
+     *
+     * @param boolean $enabled Enabled.
+     *
+     * @return void.
+     */
+    public function setEnabled(bool $enabled)
+    {
+        $this->enabled = $enabled;
+    }
+
+
+    /**
+     * Get enabled
+     *
+     * @return boolean.
+     */
+    public function getEnabled()
+    {
+        return $this->enabled;
+    }
+
+
+    /**
+     * Returns true if this object have submenu.
+     *
+     * @return boolean.
+     */
+    public function hasSubmenu()
+    {
+        return empty($this->getSubmenu()) === false;
+    }
+
+
+    /**
+     * Returns true if this object can be displayed.
+     *
+     * @return boolean.
+     */
+    public function canBeDisplayed()
+    {
+        // Global config.
+        global $config;
+        $response = true;
+
+        if ($this->getDisplay() === false) {
+            // Display value is false.
+            $response = false;
+        } else if (empty($this->getACL()) === false) {
+            // Check all the ACLs.
+            $acls = $this->getACL();
+            foreach ($acls as $acl) {
+                $response = check_acl($config['id_user'], 0, $acl);
+                // In false case, end the check.
+                if ($response === false) {
+                    break;
+                }
+            }
+        }
+
+        return $response;
+    }
+
+
+}
diff --git a/pandora_console/include/functions_menu.php b/pandora_console/include/functions_menu.php
index 277eb8520c..d110763dcd 100644
--- a/pandora_console/include/functions_menu.php
+++ b/pandora_console/include/functions_menu.php
@@ -53,12 +53,12 @@ function menu_print_menu(&$menu)
 
     $sec = (string) get_parameter('sec');
     $sec2 = (string) get_parameter('sec2');
-    if ($sec2 == 'operation/agentes/ver_agente') {
+    if ($sec2 === 'operation/agentes/ver_agente') {
         $sec2 = 'godmode/agentes/configurar_agente';
-    } else if ($sec2 == 'godmode/servers/discovery') {
+    } else if ($sec2 === 'godmode/servers/discovery') {
         $wiz = (string) get_parameter('wiz');
         $sec2 = 'godmode/servers/discovery&wiz='.$wiz;
-    } else if ($sec2 == 'godmode/groups/group_list') {
+    } else if ($sec2 === 'godmode/groups/group_list') {
         $tab = (string) get_parameter('tab');
         if ($tab === 'credbox') {
             $sec2 = 'godmode/groups/group_list&tab='.$tab;
@@ -70,58 +70,39 @@ function menu_print_menu(&$menu)
     $menu_selected = false;
 
     $allsec2 = explode('sec2=', $_SERVER['REQUEST_URI']);
-    if (isset($allsec2[1])) {
+    if (isset($allsec2[1]) === true) {
         $allsec2 = $allsec2[1];
     } else {
         $allsec2 = $sec2;
     }
 
     // Open list of menu.
-    echo '<ul'.(isset($menu['class']) ? ' class="'.$menu['class'].'"' : '').'>';
+    echo '<ul'.((isset($menu['class']) === true) ? ' class="'.$menu['class'].'"' : '').'>';
 
     // Use $config because a global var is required because normal
     // and godmode menu are painted separately.
-    if (!isset($config['count_main_menu'])) {
+    if (isset($config['count_main_menu']) === false) {
         $config['count_main_menu'] = 0;
     }
 
     foreach ($menu as $mainsec => $main) {
-        $extensionInMenuParameter = (string) get_parameter('extension_in_menu', '');
+        $extensionInMenuParameter = (string) get_parameter('extension_in_menu');
 
         $showSubsection = true;
-        if ($extensionInMenuParameter != '') {
-            if ($extensionInMenuParameter == $mainsec) {
-                $showSubsection = true;
-            } else {
-                $showSubsection = false;
-            }
+        if (empty($extensionInMenuParameter) === false) {
+            $showSubsection = ($extensionInMenuParameter === $mainsec);
         }
 
-        if ($mainsec == 'class') {
+        if ($mainsec === 'class') {
             continue;
         }
 
-        // ~ if (enterprise_hook ('enterprise_acl', array ($config['id_user'], $mainsec)) == false)
-            // ~ continue;
-        if (! isset($main['id'])) {
-            $id = 'menu_'.(++$idcounter);
-        } else {
-            $id = $main['id'];
-        }
-
+        $id = (isset($main['id']) === false) ? 'menu_'.(++$idcounter) : $main['id'];
         $submenu = false;
-
-        if ($menuTypeClass === 'classic') {
-            $classes = [
-                'menu_icon',
-                'no_hidden_menu',
-            ];
-        } else {
-            $classes = [
-                'menu_icon',
-                'menu_icon_collapsed',
-            ];
-        }
+        $classes = [
+            'menu_icon',
+            ($menuTypeClass === 'classic') ? 'no_hidden_menu' : 'menu_icon_collapsed',
+        ];
 
         if (isset($main['sub']) === true) {
             $classes[] = '';
@@ -132,11 +113,11 @@ function menu_print_menu(&$menu)
             $main['refr'] = 0;
         }
 
-        if (($sec == $mainsec) && ($showSubsection)) {
+        if (($sec === $mainsec) && ((bool) $showSubsection === true)) {
             $classes[] = '';
         } else {
             $classes[] = '';
-            if ($extensionInMenuParameter == $mainsec) {
+            if ($extensionInMenuParameter === $mainsec) {
                 $classes[] = '';
             }
         }
diff --git a/pandora_console/include/styles/nMenu.css b/pandora_console/include/styles/nMenu.css
new file mode 100644
index 0000000000..99a9ae70b1
--- /dev/null
+++ b/pandora_console/include/styles/nMenu.css
@@ -0,0 +1,6 @@
+.operation li,
+.godmode li {
+  display: flex;
+  justify-content: flex-start;
+  align-items: center;
+}
diff --git a/pandora_console/operation/menu.php b/pandora_console/operation/menu.php
index b678a810bc..7184bdd2bb 100644
--- a/pandora_console/operation/menu.php
+++ b/pandora_console/operation/menu.php
@@ -1,16 +1,32 @@
 <?php
+/**
+ * Operation menu.
+ *
+ * @category   Menu
+ * @package    Pandora FMS
+ * @subpackage Community
+ * @version    1.0.0
+ * @license    See below
+ *
+ *    ______                 ___                    _______ _______ ________
+ *   |   __ \.-----.--.--.--|  |.-----.----.-----. |    ___|   |   |     __|
+ *  |    __/|  _  |     |  _  ||  _  |   _|  _  | |    ___|       |__     |
+ * |___|   |___._|__|__|_____||_____|__| |___._| |___|   |__|_|__|_______|
+ *
+ * ============================================================================
+ * Copyright (c) 2005-2023 Artica Soluciones Tecnologicas
+ * Please see http://pandorafms.org for full contribution list
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation for version 2.
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ * ============================================================================
+ */
 
-// Pandora FMS - http://pandorafms.com
-// ==================================================
-// Copyright (c) 2005-2021 Artica Soluciones Tecnologicas
-// Please see http://pandorafms.org for full contribution list
-// This program is free software; you can redistribute it and/or
-// modify it under the terms of the GNU General Public License
-// as published by the Free Software Foundation; version 2
-// This program is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
+// Begin.
 if (! isset($config['id_user'])) {
     return;
 }
@@ -19,11 +35,121 @@ use PandoraFMS\Dashboard\Manager;
 
 require_once 'include/functions_menu.php';
 require_once $config['homedir'].'/include/functions_visual_map.php';
+require_once 'include/class/MenuItem.class.php';
 
 enterprise_include('operation/menu.php');
 
 $menu_operation = [];
 $menu_operation['class'] = 'operation';
+/*
+    $menuOperation = [];
+
+    $subMenuMonitoring = [];
+
+
+    $subMenuMonitoringViews = [];
+
+    // L0. Monitoring.
+    $menuOperation['monitoring'] = new MenuItem(__('Monitoring'));
+    $menuOperation['monitoring']->setIcon('icon');
+    $menuOperation['monitoring']->setClass('menu');
+    $menuOperation['monitoring']->setACL(['AR']);
+    $monitoringItems = [];
+
+    // L1. Views.
+    $monitoringItems['views'] = new MenuItem(__('Views'));
+    $monitoringItems['views']->setIcon('icono');
+    $monitoringItems['views']->setClass('submenu');
+    $monitoringViewsItems = [];
+
+    // L2. Tactical view.
+    $monitoringViewsItems['tacticalView'] = new MenuItem(__('Tactical view'));
+    $monitoringViewsItems['tacticalView']->setSec('view');
+    $monitoringViewsItems['tacticalView']->setSec2('operation/agentes/tactical');
+    $monitoringViewsItems['tacticalView']->setClass('submenu');
+
+    // L2. Group View.
+    $monitoringViewsItems['groupView'] = new MenuItem(__('Group view'));
+    $monitoringViewsItems['groupView']->setSec('view');
+    $monitoringViewsItems['groupView']->setSec2('operation/agentes/group_view');
+    $monitoringViewsItems['groupView']->setClass('submenu');
+
+    // L2. Tree View.
+    $monitoringViewsItems['treeView'] = new MenuItem(__('Tree view'));
+    $monitoringViewsItems['treeView']->setSec('view');
+    $monitoringViewsItems['treeView']->setSec2('operation/tree');
+    $monitoringViewsItems['treeView']->setClass('submenu');
+
+    // L2. Monitor detail.
+    $monitoringViewsItems['monitorDetail'] = new MenuItem(__('Monitor detail'));
+    $monitoringViewsItems['monitorDetail']->setSec('view');
+    $monitoringViewsItems['monitorDetail']->setSec2('operation/agentes/status_monitor');
+    $monitoringViewsItems['monitorDetail']->setClass('submenu');
+
+    // L2. Interface view.
+    $monitoringViewsItems['interfaceView'] = new MenuItem(__('Interface View'));
+    $monitoringViewsItems['interfaceView']->setSec('view');
+    $monitoringViewsItems['interfaceView']->setSec2('operation/agentes/interface_view');
+    $monitoringViewsItems['interfaceView']->setClass('submenu');
+
+    // L2. Enterprise Tag view.
+    $idTagView = 'tagView';
+    $monitoringViewsItems[$idTagView] = enterprise_hook('tag_view_submenu', $idTagView);
+
+    // L2. Alert detail view.
+    $monitoringViewsItems['alertDetail'] = new MenuItem(__('Alert Detail'));
+    $monitoringViewsItems['alertDetail']->setSec('view');
+    $monitoringViewsItems['alertDetail']->setSec2('operation/agentes/alerts_status');
+    $monitoringViewsItems['alertDetail']->setClass('submenu');
+
+    // L2. Heatmap view.
+    $monitoringViewsItems['heatmapView'] = new MenuItem(__('Heatmap view'));
+    $monitoringViewsItems['heatmapView']->setSec('view');
+    $monitoringViewsItems['heatmapView']->setSec2('operation/heatmap');
+    $monitoringViewsItems['heatmapView']->setClass('submenu');
+
+    $monitoringItems['views']->setSubmenu($monitoringViewsItems);
+
+    // L1. Inventory.
+    $monitoringItems['inventory'] = new MenuItem(__('Inventory'));
+    $monitoringItems['inventory']->setSec('estado');
+    $monitoringItems['inventory']->setSec2('enterprise/operation/inventory/inventory');
+    $monitoringItems['inventory']->setClass('submenu');
+
+    // L1. Network.
+    $monitoringItems['network'] = new MenuItem();
+    $monitoringItems['network']->setDisplay((bool) $config['activate_netflow'] === true);
+    $monitoringItems['network']->setText(__('Network'));
+
+    // L2. Netflow explorer.
+    $monitoringNetworkItems['netflowExplorer'] = new MenuItem();
+    $monitoringNetworkItems['netflowExplorer']->setText(__('Netflow Explorer'));
+    $monitoringNetworkItems['netflowExplorer']->setSec('network_traffic');
+    $monitoringNetworkItems['netflowExplorer']->setSec2('operation/netflow/netflow_explorer');
+
+    // L2. Netflow Live view.
+    $monitoringNetworkItems['netflowLiveView'] = new MenuItem();
+    $monitoringNetworkItems['netflowLiveView']->setText(__('Netflow Live View'));
+    $monitoringNetworkItems['netflowLiveView']->setSec('network_traffic');
+    $monitoringNetworkItems['netflowLiveView']->setSec2('operation/netflow/nf_live_view');
+
+    // L2. Network usage map.
+    $monitoringNetworkItems['networkUsageMap'] = new MenuItem();
+    $monitoringNetworkItems['networkUsageMap']->setText(__('Network usage map'));
+    $monitoringNetworkItems['networkUsageMap']->setSec('network_traffic');
+    $monitoringNetworkItems['networkUsageMap']->setSec2('operation/network/network_usage_map');
+
+    $monitoringItems['network']->setSubmenu($monitoringNetworkItems);
+
+    $menuOperation['monitoring']->setSubmenu($monitoringItems);
+
+    // L0. Topology Maps.
+    $menuOperation['topologyMaps'] = new MenuItem(__('Topology Maps'));
+    $menuOperation['topologyMaps']->setIcon('icon');
+    $menuOperation['topologyMaps']->setClass('menu');
+
+    $menuOperation['topologyMaps']->setSubmenu($topologyMapsItems);
+*/
 
 $access_console_node = !is_reporting_console_node();
 if ($access_console_node === true) {