diff --git a/scripts/run_tests_locally-analytics-backend__.sh b/scripts/run_tests_locally-analytics-backend__.sh
deleted file mode 100755
index 24afd456dc35eadcc6394357e9e355ae888c4fd9..0000000000000000000000000000000000000000
--- a/scripts/run_tests_locally-analytics-backend__.sh
+++ /dev/null
@@ -1,22 +0,0 @@
-#!/bin/bash
-# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/)
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#      http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-
-PROJECTDIR=`pwd`
-
-cd $PROJECTDIR/src
-RCFILE=$PROJECTDIR/coverage/.coveragerc
-python3 -m pytest --log-level=DEBUG --log-cli-level=DEBUG --verbose \
-    analytics/backend/tests/test_backend.py
diff --git a/scripts/run_tests_locally-telemetry-mgtDB.sh b/scripts/run_tests_locally-telemetry-mgtDB.sh
deleted file mode 100755
index 4b9a417603cc42a4e7e8b19c7394cc38633817fa..0000000000000000000000000000000000000000
--- a/scripts/run_tests_locally-telemetry-mgtDB.sh
+++ /dev/null
@@ -1,26 +0,0 @@
-#!/bin/bash
-# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/)
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#      http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-
-PROJECTDIR=`pwd`
-
-cd $PROJECTDIR/src
-# RCFILE=$PROJECTDIR/coverage/.coveragerc
-# coverage run --rcfile=$RCFILE --append -m pytest --log-level=INFO --verbose \
-#     kpi_manager/tests/test_unitary.py
-
-RCFILE=$PROJECTDIR/coverage/.coveragerc
-python3 -m pytest --log-level=DEBUG --log-cli-level=debug --verbose \
-    telemetry/tests/test_telemetryDB.py
diff --git a/src/nbi/service/rest_server/nbi_plugins/ietf_hardware/Hardware.py b/src/nbi/service/rest_server/nbi_plugins/ietf_hardware/Hardware.py
index a7404b924a44e9125dbf84bdcdfab3b9af790e5d..2282de557c1a80227c7d50e7c125ab4fe538bd28 100644
--- a/src/nbi/service/rest_server/nbi_plugins/ietf_hardware/Hardware.py
+++ b/src/nbi/service/rest_server/nbi_plugins/ietf_hardware/Hardware.py
@@ -50,4 +50,4 @@ class Hardware(Resource):
             LOGGER.exception(MSG.format(str(device_uuid)))
             response = jsonify({'error': str(e)})
             response.status_code = HTTP_SERVERERROR
-        return response
\ No newline at end of file
+        return response
diff --git a/src/nbi/service/rest_server/nbi_plugins/ietf_hardware/HardwareMultipleDevices.py b/src/nbi/service/rest_server/nbi_plugins/ietf_hardware/HardwareMultipleDevices.py
new file mode 100644
index 0000000000000000000000000000000000000000..b1beff518bb3997fc04a79e78c3467b47bd51483
--- /dev/null
+++ b/src/nbi/service/rest_server/nbi_plugins/ietf_hardware/HardwareMultipleDevices.py
@@ -0,0 +1,50 @@
+# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+import logging
+from flask import request
+from flask.json import jsonify
+from flask_restful import Resource
+from common.proto.context_pb2 import Empty
+from context.client.ContextClient import ContextClient
+from ..tools.Authentication import HTTP_AUTH
+from ..tools.HttpStatusCodes import HTTP_OK, HTTP_SERVERERROR
+from .YangHandler import YangHandler
+
+LOGGER = logging.getLogger(__name__)
+
+class HardwareMultipleDevices(Resource):
+    @HTTP_AUTH.login_required
+    def get(self):
+       
+        LOGGER.debug('Request: {:s}'.format(str(request)))
+
+        try:
+            context_client = ContextClient()
+            list_devices = context_client.ListDevices(Empty())
+            LOGGER.info('Request: {:s}'.format(str(list_devices)))
+            hardware_list_reply = []
+            yang_handler = YangHandler()
+            for device in list_devices.devices:
+                hardware_reply = yang_handler.compose(device)
+                hardware_list_reply.append(hardware_reply)
+            
+            yang_handler.destroy()
+            response = jsonify(hardware_list_reply)
+            response.status_code = HTTP_OK
+        except Exception as e: # pylint: disable=broad-except
+            MSG = 'Something went wrong Retrieving Hardware of Devices({:s})'
+            response = jsonify({'error': str(e)})
+            response.status_code = HTTP_SERVERERROR
+        return response
diff --git a/src/nbi/service/rest_server/nbi_plugins/ietf_hardware/YangHandler.py b/src/nbi/service/rest_server/nbi_plugins/ietf_hardware/YangHandler.py
index 4534294857e0c7972f4764927fe6d23bc656ad5f..7662261e97b35958f036dc0e69913af7947b9403 100644
--- a/src/nbi/service/rest_server/nbi_plugins/ietf_hardware/YangHandler.py
+++ b/src/nbi/service/rest_server/nbi_plugins/ietf_hardware/YangHandler.py
@@ -12,19 +12,21 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-import libyang, os
 from common.proto.context_pb2 import Device
 from typing import Dict, Optional
+import datetime
 import json
 import logging
+import libyang
+import os
 import re
-import datetime
 
 LOGGER = logging.getLogger(__name__)
 YANG_DIR = os.path.join(os.path.dirname(__file__), 'yang')
 YANG_MODULES = [
     'iana-hardware',
-    'ietf-hardware'
+    'ietf-hardware',
+    'ietf-network-hardware-inventory'
 ]
 
 class YangHandler:
@@ -35,7 +37,7 @@ class YangHandler:
             self._yang_context.load_module(yang_module_name).feature_enable_all()
 
     def parse_to_dict(self, message : Dict) -> Dict:
-        yang_module = self._yang_context.get_module('ietf-hardware')
+        yang_module = self._yang_context.get_module('ietf-network-hardware-inventory')
         dnode : Optional[libyang.DNode] = yang_module.parse_data_dict(
             message, validate_present=True, validate=True, strict=True
         )
@@ -44,66 +46,54 @@ class YangHandler:
         dnode.free()
         return message
 
-    
     @staticmethod
     def convert_to_iso_date(date_str: str) -> Optional[str]:
         date_str = date_str.strip('"')
-        # Define the regex pattern for ISO 8601 date format
         pattern = r"\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(\.\d+)?(Z|[\+\-]\d{2}:\d{2})"
-        # Check if the input date string matches the pattern
         if re.match(pattern, date_str):
-            return date_str  # Already in ISO format
+            return date_str 
         else:
             try:
-                # Parse the input date string as a datetime object
                 datetime_obj = datetime.datetime.strptime(date_str, "%Y-%m-%d")
-                # Convert to ISO format
                 iso_date = datetime_obj.isoformat() + "Z"
                 return iso_date
             except ValueError:
-                return None  # Invalid date format
-
+                return None  
 
     def compose(self, device : Device) -> Dict:
-        # compose device iterating through the components
- 
-        hardware = self._yang_context.create_data_path('/ietf-hardware:hardware')
+        hardware = self._yang_context.create_data_path('/ietf-network-hardware-inventory:network-hardware-inventory')
+        network_elements = hardware.create_path('network-elements')
+
+        network_element = network_elements.create_path('network-element[uuid="{:s}"]'.format(device.device_id.device_uuid.uuid))
+        network_element.create_path('uuid', device.device_id.device_uuid.uuid)
+        network_element.create_path('name', device.name)
+        components = network_element.create_path('components')
         physical_index = 1
-        
+
         for component in device.components:
             attributes = component.attributes
-
-            component_new = hardware.create_path('component[name="{:s}"]'.format(component.name))
+            component_new = components.create_path('component[uuid="{:s}"]'.format(component.component_uuid.uuid))
             component_new.create_path('name', component.name)
-
-            #Cambiar las clases especiales, su formato  y añadir isfru 
             component_type = component.type
             if component_type == "TRANSCEIVER" :
                 component_type = "module"
-
             if component_type == "FRU" :
                 component_type = "slack"
-                component_new.create_path('is-fru', True)
-            else :
-                component_new.create_path('is-fru', False)
-                
+
             component_type = component_type.replace("_", "-").lower()
             component_type = 'iana-hardware:' + component_type
-
             component_new.create_path('class', component_type)
-
-            #Añadir resto de atributos en IETF
-
             physical_index += 1
-            component_new.create_path('physical-index', physical_index)
-
-            component_new.create_path('description', attributes["description"])
-
-            component_new.create_path('parent', component.parent)
-
+            component_new.create_path('description', attributes["description"].replace('/"',""))
+            if "CHASSIS" not in component.type:
+                parent_component_references = component_new.create_path('parent-component-references')
+                parent = parent_component_references.create_path('component-reference[index="{:d}"]'.format(physical_index))
+                for component_parent in device.components:
+                    if component.parent == component_parent.name : 
+                      parent.create_path('uuid', component_parent.component_uuid.uuid)
+                      break
             if attributes["mfg-date"] != "":
                 mfg_date = self.convert_to_iso_date(attributes["mfg-date"])
-                LOGGER.info('component[name="{:s}"]'.format(attributes["mfg-date"]))
                 component_new.create_path('mfg-date', mfg_date)
 
             component_new.create_path('hardware-rev', attributes["hardware-rev"])
@@ -111,22 +101,31 @@ class YangHandler:
             component_new.create_path('firmware-rev', attributes["firmware-version"])
             component_new.create_path('serial-num', attributes["serial-num"])
             component_new.create_path('mfg-name', attributes["mfg-name"])
+            if attributes["removable"]:
+                removable = attributes["removable"].lower()
+                if 'true' in removable:
+                    component_new.create_path('is-fru', True)
+                elif 'false' in removable:
+                    component_new.create_path('is-fru', False)
+
             if attributes["id"]:
-                component_new.create_path('parent-rel-pos', attributes["id"])
-            
-            component_new.create_path('uri', component.name)
-   
+                try:
+                    if  "CHASSIS" in component.type :  
+                        component_new.create_path('parent-rel-pos', 0)
+                    else:                        
+                        parent_rel_pos = int(attributes["id"].replace("\"", ""))
+                        component_new.create_path('parent-rel-pos', parent_rel_pos)
+                except ValueError:
+                    LOGGER.info('ERROR:{:s} '.format(component.name ))
+                    continue
 
+            component_new.create_path('uri', component.name)
             component_new.create_path('uuid', component.component_uuid.uuid)
-
-            contains_child = []
-            for component2 in device.components:
-                if component.name == component2.parent : 
-                 contains_child.append(component2.name)
-            
-            component_new.create_path('contains-child', contains_child)
+            for child in device.components:
+                if component.name == child.parent : 
+                    component_new.create_path('contained-child', child.component_uuid.uuid)
 
         return json.loads(hardware.print_mem('json'))
-                                    
+
     def destroy(self) -> None:
-        self._yang_context.destroy()
\ No newline at end of file
+        self._yang_context.destroy()
diff --git a/src/nbi/service/rest_server/nbi_plugins/ietf_hardware/__init__.py b/src/nbi/service/rest_server/nbi_plugins/ietf_hardware/__init__.py
index 4a0cedcc4df9a198621e2585bafef1768ad1f8ca..ba774650e89e26609573a364be520c2d1bd6df84 100644
--- a/src/nbi/service/rest_server/nbi_plugins/ietf_hardware/__init__.py
+++ b/src/nbi/service/rest_server/nbi_plugins/ietf_hardware/__init__.py
@@ -13,9 +13,12 @@
 # limitations under the License.
 
 from nbi.service.rest_server.nbi_plugins.ietf_hardware.Hardware import Hardware
+from nbi.service.rest_server.nbi_plugins.ietf_hardware.HardwareMultipleDevices import HardwareMultipleDevices
 from nbi.service.rest_server.RestServer import RestServer
 
-URL_PREFIX = "/restconf/data/device=<path:device_uuid>/ietf-hardware:hardware"
+URL_PREFIX_DEVICE   = "/restconf/data/device=<path:device_uuid>/ietf-network-hardware-inventory:network-hardware-inventory"
+URL_PREFIX_HARDWARE = "/restconf/data/ietf-network-hardware-inventory:network-hardware-inventory"
 
 def register_ietf_hardware(rest_server: RestServer):
-    rest_server.add_resource(Hardware, URL_PREFIX)
\ No newline at end of file
+    rest_server.add_resource(Hardware, URL_PREFIX_DEVICE)
+    rest_server.add_resource(HardwareMultipleDevices, URL_PREFIX_HARDWARE)
diff --git a/src/nbi/service/rest_server/nbi_plugins/ietf_hardware/yang/ietf-network-hardware-inventory@2023-03-09.yang b/src/nbi/service/rest_server/nbi_plugins/ietf_hardware/yang/ietf-network-hardware-inventory@2023-03-09.yang
new file mode 100644
index 0000000000000000000000000000000000000000..e074e3005e97f9657f7ef23a39741d3ce4b912b8
--- /dev/null
+++ b/src/nbi/service/rest_server/nbi_plugins/ietf_hardware/yang/ietf-network-hardware-inventory@2023-03-09.yang
@@ -0,0 +1,604 @@
+module ietf-network-hardware-inventory {
+  yang-version 1.1;
+  namespace
+    "urn:ietf:params:xml:ns:yang:ietf-network-hardware-inventory";
+  prefix nhi;
+
+  import ietf-yang-types {
+    prefix yang;
+    reference
+      "RFC6991: Common YANG Data Types.";
+  }
+
+  import iana-hardware {
+    prefix ianahw;
+    reference
+      "https://www.iana.org/assignments/yang-parameters";
+  }
+
+  import ietf-inet-types {
+    prefix inet;
+    reference
+      "RFC6991: Common YANG Data Types.";
+  }
+
+  organization
+    "IETF CCAMP Working Group";
+  contact
+    "WG Web:   <https://datatracker.ietf.org/wg/ccamp/>
+     WG List:  <mailto:ccamp@ietf.org>
+
+     Editor:   Chaode Yu
+               <yuchaode@huawei.com>
+
+     Editor:   Italo Busi
+               <italo.busi@huawei.com>
+
+     Editor:   Aihua Guo
+               <aihuaguo.ietf@gmail.com>
+
+     Editor:   Sergio Belotti
+               <sergio.belotti@nokia.com>
+
+     Editor:   Jean-Francois Bouquier
+               <jeff.bouquier@vodafone.com>
+
+     Editor:   Fabio Peruzzini
+               <fabio.peruzzini@telecomitalia.it>";
+
+  description
+    "This module defines a model for retrieving network hardware
+    inventory.
+
+    The model fully conforms to the Network Management
+    Datastore Architecture (NMDA).
+    Copyright (c) 2022 IETF Trust and the persons
+    identified as authors of the code.  All rights reserved.
+
+    Redistribution and use in source and binary forms, with or
+    without modification, is permitted pursuant to, and subject
+    to the license terms contained in, the Revised BSD License
+    set forth in Section 4.c of the IETF Trust's Legal Provisions
+    Relating to IETF Documents
+    (https://trustee.ietf.org/license-info).
+
+    This version of this YANG module is part of RFC XXXX; see
+    the RFC itself for full legal notices.
+
+    The key words 'MUST', 'MUST NOT', 'REQUIRED', 'SHALL', 'SHALL
+    NOT', 'SHOULD', 'SHOULD NOT', 'RECOMMENDED', 'NOT RECOMMENDED',
+    'MAY', and 'OPTIONAL' in this document are to be interpreted as
+    described in BCP 14 (RFC 2119) (RFC 8174) when, and only when,
+    they appear in all capitals, as shown here.";
+
+  // RFC Ed.: replace XXXX with actual RFC number and remove this
+  // note.
+  // RFC Ed.: update the date below with the date of RFC publication
+  // and remove this note.
+
+  revision 2023-03-09 {
+    description
+      "Initial version";
+    reference
+      "RFC XXXX: A YANG Data Model for Network Hardware Inventory.";
+      //RFC Editor: replace XXXX with actual RFC number, update date
+      //information and remove this note
+  }
+
+  container network-hardware-inventory {
+    config false;
+    description
+      "The top-level container for the network inventory
+      information.";
+    uses equipment-rooms-grouping;
+    uses network-elements-grouping;
+  }
+
+  grouping common-entity-attributes {
+    description
+      "A set of attributes which are common to all the entities
+      (e.g., component, equipment room) defined in this module.";
+    leaf uuid {
+      type yang:uuid;
+      description
+        "Uniquely identifies an entity (e.g., component).";
+    }
+    leaf name {
+      type string;
+      description
+        "A name for an entity (e.g., component), as specified by
+        a network manager, that provides a non-volatile 'handle'
+        for the entity and that can be modified anytime during the
+        entity lifetime.
+
+        If no configured value exists, the server MAY set the value
+        of this node to a locally unique value in the operational
+        state.";
+    }
+    leaf description {
+      type string;
+      description "a textual description of inventory object";
+    }
+    leaf alias {
+      type string;
+      description
+      "a alias name of inventory objects. This alias name can be
+      specified by network manager.";
+    }
+  }
+
+  grouping network-elements-grouping {
+    description
+      "The attributes of the network elements.";
+    container network-elements {
+      description
+        "The container for the list of network elements.";
+      list network-element {
+        key uuid;
+        description
+          "The list of network elements within the network.";
+        uses common-entity-attributes;
+        container ne-location {
+          description
+            "The location information of this network element.";
+          leaf-list equipment-room-name {
+            type leafref {
+              path "/nhi:network-hardware-inventory/" +
+                   "nhi:equipment-rooms/nhi:equipment-room/nhi:name";
+            }
+            description
+              "Names of equipment rooms where the NE is located.
+              Please note that a NE could be located in several
+              equipment rooms.";
+          }
+        }
+        uses ne-specific-info-grouping;
+        uses components-grouping;
+      }
+    }
+  }
+
+  grouping ne-specific-info-grouping {
+    description
+      "Attributes applicable to network elements.";
+    leaf hardware-rev {
+      type string;
+      description
+        "The vendor-specific hardware revision string for the NE.";
+    }
+    leaf software-rev {
+      type string;
+      description
+        "The vendor-specific software revision string for the NE.";
+    }
+    leaf mfg-name {
+      type string;
+      description "The name of the manufacturer of this NE";
+    }
+    leaf mfg-date {
+      type yang:date-and-time;
+      description "The date of manufacturing of the NE.";
+    }
+    leaf part-number {
+      type string;
+      description
+        "The vendor-specific model name identifier string associated
+         with this NE.  The preferred value is the customer-visible
+         part number, which may be printed on the NE itself.";
+    }
+    leaf serial-number {
+      type string;
+      description
+        "The vendor-specific serial number string for the NE";
+    }
+    leaf product-name {
+      type string;
+      description
+        "indicates the vendor-spefic device type infomation.";
+    }
+  }
+
+  grouping equipment-rooms-grouping {
+    description
+      "The attributes of the equipment rooms.";
+    container equipment-rooms {
+      description
+        "The container for the list of equipment rooms.";
+      list equipment-room {
+        key uuid;
+        description
+          "The list of equipment rooms within the network.";
+        uses common-entity-attributes;
+        leaf location {
+          type string;
+          description
+            "compared with the location information of the other
+            inventory objects, a GIS address is preferred for
+            equipment room";
+        }
+        container racks {
+          description
+            "Top level container for the list of racks.";
+          list rack {
+            key uuid;
+            description
+              "The list of racks within an equipment room.";
+            uses common-entity-attributes;
+            uses rack-specific-info-grouping;
+            list contained-chassis {
+              key "ne-ref component-ref";
+              description
+                "The list of chassis within a rack.";
+              leaf ne-ref {
+                type leafref {
+                  path "/nhi:network-hardware-inventory"
+                  + "/nhi:network-elements/nhi:network-element"
+                  + "/nhi:uuid";
+                }
+                description
+                  "The reference to the network element containing
+                  the chassis component.";
+              }
+              leaf component-ref {
+                type leafref {
+                  path "/nhi:network-hardware-inventory"
+                  + "/nhi:network-elements/nhi:network-element"
+                  + "[nhi:uuid=current()/../ne-ref]/nhi:components"
+                  + "/nhi:component/nhi:uuid";
+                }
+                description
+                  "The reference to the chassis component within
+                  the network element and contained by the rack.";
+              }
+              leaf relative-position {
+                type uint8;
+                description "A relative position of chassis within
+                the rack";
+              }
+            }
+          }
+        }
+      }
+    }
+  }
+
+  grouping rack-specific-info-grouping {
+    description
+      "Attributes applicable to racks only.";
+    container rack-location {
+      description
+        "The location information of the rack, which comprises the
+        name of the equipment room, row number, and column number.";
+      leaf equipment-room-name {
+        type leafref {
+          path "/nhi:network-hardware-inventory/nhi:equipment-rooms"
+          + "/nhi:equipment-room/nhi:name";
+        }
+        description
+        "Name of equipment room where this rack is located.";
+      }
+      leaf row-number {
+        type uint32;
+        description
+          "Identifies the row within the equipment room where
+          the rack is located.";
+      }
+      leaf column-number {
+        type uint32;
+        description
+          "Identifies the physical location of the rack within
+          the column.";
+      }
+    }
+    leaf height {
+      type uint16;
+      units millimeter;
+      description
+        "Rack height.";
+    }
+    leaf width {
+      type uint16;
+      units millimeter;
+      description
+        "Rack width.";
+    }
+    leaf depth {
+      type uint16;
+      units millimeter;
+      description
+        "Rack depth.";
+    }
+    leaf max-voltage {
+      type uint16;
+      units volt;
+      description
+        "The maximum voltage could be supported by the rack.";
+    }
+  }
+
+  grouping components-grouping {
+    description
+      "The attributes of the hardware components.";
+    container components {
+      description
+        "The container for the list of components.";
+      list component {
+        key uuid;
+        description
+          "The list of components within a network element.";
+        uses common-entity-attributes;
+        leaf location {
+          type string;
+          description
+            "A relative location information of this component.
+            In optical transport network, the location string is
+            using the following pattern:
+              '/ne=<nw-ne-name>[/r=<r_index>][/sh=<sh_index>
+              [/s_sh=<s_sh_index> ...]][[/sl=<sl_index>
+              [/s_sl=<s_sl_index> ...]][/p=<p_index> …]]'
+            ";
+        }
+        leaf class {
+          type identityref {
+            base ianahw:hardware-class;
+          }
+          description
+            "An indication of the general hardware type of the
+             component.";
+          reference
+            "RFC 8348: A YANG Data Model for Hardware Management.";
+        }
+        leaf-list contained-child {
+          type leafref {
+            path "../nhi:uuid";
+          }
+          description
+            "The list of the identifiers of the child components
+            physically contained within this component.";
+        }
+        leaf parent-rel-pos {
+          type int32 {
+            range "0 .. 2147483647";
+          }
+          description
+            "The relative position with respect to the parent
+            component among all the sibling components.";
+          reference
+            "RFC 6933: Entity MIB (Version 4) -
+                       entPhysicalParentRelPos";
+        }
+
+        container parent-component-references {
+          description
+              "The top level container for the list of the
+              identifiers of the parents of this component in a
+              hierarchy.";
+          list component-reference {
+            key index;
+            description
+              "The list of the identifiers of the parents of this
+              component in a hierarchy.
+
+              The index parameter defines the hierarchy: the topmost
+              parent has an index of 0.";
+            leaf index {
+              type uint8;
+              description
+                "The index of the parent with respect to the
+                hierarchy.";
+            }
+            leaf class {
+              type leafref {
+                path "../../../nhi:class";
+              }
+              description
+                "Class of the hierarchial parent component.";
+            }
+            leaf uuid {
+              type leafref {
+                path "../../../nhi:uuid";
+              }
+              description
+                "The identifier of the parent's component in the
+                hierarchy.";
+            }
+          }
+        }
+
+        leaf hardware-rev {
+          type string;
+          description
+            "The vendor-specific hardware revision string for the
+             component.  The preferred value is the hardware revision
+             identifier actually printed on the component itself (if
+             present).";
+          reference
+            "RFC 6933: Entity MIB (Version 4) -
+                       entPhysicalHardwareRev";
+        }
+        leaf firmware-rev {
+          type string;
+          description
+            "The vendor-specific firmware revision string for the
+             component.";
+          reference
+            "RFC 6933: Entity MIB (Version 4) -
+                       entPhysicalFirmwareRev";
+        }
+        leaf software-rev {
+          type string;
+          description
+            "The vendor-specific software revision string for the
+             component.";
+          reference
+            "RFC 6933: Entity MIB (Version 4) -
+                       entPhysicalSoftwareRev";
+        }
+        leaf serial-num {
+          type string;
+          description
+            "The vendor-specific serial number string for the
+             component.  The preferred value is the serial number
+             string actually printed on the component itself (if
+             present).";
+          reference
+            "RFC 6933: Entity MIB (Version 4) -
+            entPhysicalSerialNum";
+        }
+        leaf mfg-name {
+          type string;
+          description
+            "The name of the manufacturer of this physical component.
+             The preferred value is the manufacturer name string
+             actually printed on the component itself (if present).
+
+             Note that comparisons between instances of the
+             'model-name', 'firmware-rev', 'software-rev', and
+             'serial-num' nodes are only meaningful amongst
+             components with the same value of 'mfg-name'.
+
+             If the manufacturer name string associated with the
+             physical component is unknown to the server, then this
+             node is not instantiated.";
+          reference
+            "RFC 6933: Entity MIB (Version 4) - entPhysicalMfgName";
+        }
+        leaf part-number {
+          type string;
+          description
+            "The vendor-specific model name identifier string
+             associated with this physical component.  The preferred
+             value is the customer-visible part number, which may be
+             printed on the component itself.
+
+             If the model name string associated with the physical
+             component is unknown to the server, then this node is
+             not instantiated.";
+          reference
+            "RFC 6933: Entity MIB (Version 4) -
+            entPhysicalModelName";
+        }
+        leaf asset-id {
+          type string;
+          description
+            "This node is a user-assigned asset tracking identifier
+             for the component.
+
+             A server implementation MAY map this leaf to the
+             entPhysicalAssetID MIB object.  Such an implementation
+             needs to use some mechanism to handle the differences in
+             size and characters allowed between this leaf and
+             entPhysicalAssetID.  The definition of such a mechanism
+             is outside the scope of this document.";
+          reference
+            "RFC 6933: Entity MIB (Version 4) - entPhysicalAssetID";
+        }
+        leaf is-fru {
+          type boolean;
+          description
+            "This node indicates whether or not this component is
+             considered a 'field-replaceable unit' by the vendor.  If
+             this node contains the value 'true', then this component
+             identifies a field-replaceable unit.  For all components
+             that are permanently contained within a
+             field-replaceable unit, the value 'false' should be
+             returned for this node.";
+          reference
+            "RFC 6933: Entity MIB (Version 4) - entPhysicalIsFRU";
+        }
+        leaf mfg-date {
+          type yang:date-and-time;
+          description
+            "The date of manufacturing of the managed component.";
+          reference
+            "RFC 6933: Entity MIB (Version 4) - entPhysicalMfgDate";
+        }
+        leaf-list uri {
+          type inet:uri;
+          description
+            "This node contains identification information about the
+             component.";
+          reference
+            "RFC 6933: Entity MIB (Version 4) - entPhysicalUris";
+        }
+        uses component-specific-info-grouping;
+      }
+    }
+  }
+
+  grouping component-specific-info-grouping {
+    description
+      "In case if there are some missing attributes of component not
+      defined by RFC8348. These attributes could be
+      component-specific.
+      Here we provide a extension structure for all the components
+      we recognized. We will enrich these component specifc
+      containers in the future.";
+    choice component-class {
+      description
+        "This extension differs between different component
+        classes.";
+      case chassis {
+        when "./class = 'ianahw:chassis'";
+        container chassis-specific-info {
+          description
+            "This container contains some attributes belong to
+            chassis only.";
+          uses chassis-specific-info-grouping;
+        }
+      }
+      case container {
+        when "./class = 'ianahw:container'";
+        container slot-specific-info {
+          description
+            "This container contains some attributes belong to
+            slot or sub-slot only.";
+          uses slot-specific-info-grouping;
+        }
+      }
+      case module {
+        when "./nhi:class = 'ianahw:module'";
+        container board-specific-info {
+          description
+            "This container contains some attributes belong to
+            board only.";
+          uses board-specific-info-grouping;
+        }
+      }
+      case port {
+        when "./nhi:class = 'ianahw:port'";
+        container port-specific-info {
+          description
+            "This container contains some attributes belong to
+            port only.";
+          uses port-specific-info-grouping;
+        }
+      }
+    //TO BE ADDED: transceiver
+    }
+  }
+
+  grouping chassis-specific-info-grouping {
+  //To be enriched in the future.
+    description
+      "Specific attributes applicable to chassis only.";
+  }
+
+  grouping slot-specific-info-grouping {
+  //To be enriched in the future.
+    description
+      "Specific attributes applicable to slots only.";
+  }
+
+  grouping board-specific-info-grouping {
+  //To be enriched in the future.
+    description
+      "Specific attributes applicable to boards only.";
+  }
+
+  grouping port-specific-info-grouping {
+  //To be enriched in the future.
+    description
+      "Specific attributes applicable to ports only.";
+  }
+}
diff --git a/src/telemetry/backend/service/TelemetryBackendService.py b/src/telemetry/backend/service/TelemetryBackendService.py
index 5276c2be37a2f5744db08b98f4b2b3b9151631b4..6ab841238f446a2895cd163fab4b7eb05eaa3176 100755
--- a/src/telemetry/backend/service/TelemetryBackendService.py
+++ b/src/telemetry/backend/service/TelemetryBackendService.py
@@ -28,8 +28,6 @@ from common.tools.kafka.Variables import KafkaConfig, KafkaTopic
 from common.method_wrappers.Decorator import MetricsPool
 from common.tools.service.GenericGrpcService import GenericGrpcService
 
-
-
 LOGGER             = logging.getLogger(__name__)
 METRICS_POOL       = MetricsPool('TelemetryBackend', 'backendService')
 
@@ -48,9 +46,8 @@ class TelemetryBackendService(GenericGrpcService):
                                             'auto.offset.reset'  : 'latest'})
         self.running_threads = {}
 
-    def RunRequestListener(self)->bool:
+    def install_servicers(self):
         threading.Thread(target=self.RequestListener).start()
-        return True
 
     def RequestListener(self):
         """
diff --git a/src/telemetry/backend/tests/test_TelemetryBackend.py b/src/telemetry/backend/tests/test_TelemetryBackend.py
index 24a1b35cc2244c54fdaa0042bad6c4d397d92af8..a2bbee540c3ce348ef52eceb0e776f48a68d94b1 100644
--- a/src/telemetry/backend/tests/test_TelemetryBackend.py
+++ b/src/telemetry/backend/tests/test_TelemetryBackend.py
@@ -25,10 +25,10 @@ LOGGER = logging.getLogger(__name__)
 ###########################
 
 # --- "test_validate_kafka_topics" should be run before the functionality tests ---
-# def test_validate_kafka_topics():
-#     LOGGER.debug(" >>> test_validate_kafka_topics: START <<< ")
-#     response = KafkaTopic.create_all_topics()
-#     assert isinstance(response, bool)
+def test_validate_kafka_topics():
+    LOGGER.debug(" >>> test_validate_kafka_topics: START <<< ")
+    response = KafkaTopic.create_all_topics()
+    assert isinstance(response, bool)
 
 def test_RunRequestListener():
     LOGGER.info('test_RunRequestListener')
diff --git a/src/telemetry/database/tests/__init__.py b/src/telemetry/database/tests/__init__.py
deleted file mode 100644
index 3ee6f7071f145e06c3aeaefc09a43ccd88e619e3..0000000000000000000000000000000000000000
--- a/src/telemetry/database/tests/__init__.py
+++ /dev/null
@@ -1,14 +0,0 @@
-# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/)
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#      http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
diff --git a/src/telemetry/frontend/service/__main__.py b/src/telemetry/frontend/service/__main__.py
index 238619f2e89957bd65920a9552c9bc1caf3ed833..74bc6f500686bd633847682c47e59b22f8f2bc29 100644
--- a/src/telemetry/frontend/service/__main__.py
+++ b/src/telemetry/frontend/service/__main__.py
@@ -13,7 +13,8 @@
 # limitations under the License.
 
 import logging, signal, sys, threading
-from common.Settings import get_log_level
+from prometheus_client import start_http_server
+from common.Settings import get_log_level, get_metrics_port
 from .TelemetryFrontendService import TelemetryFrontendService
 
 terminate = threading.Event()
@@ -35,6 +36,10 @@ def main():
 
     LOGGER.debug('Starting...')
 
+    # Start metrics server
+    metrics_port = get_metrics_port()
+    start_http_server(metrics_port)
+
     grpc_service = TelemetryFrontendService()
     grpc_service.start()
 
diff --git a/src/telemetry/frontend/tests/__init__.py b/src/telemetry/frontend/tests/__init__.py
deleted file mode 100644
index 234a1af6588c91f6a17f3963f69120cd6e2248d9..0000000000000000000000000000000000000000
--- a/src/telemetry/frontend/tests/__init__.py
+++ /dev/null
@@ -1,15 +0,0 @@
-
-# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/)
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#      http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-