From ebf0d71bd5a5566151cd27e972456d51f27a31ca Mon Sep 17 00:00:00 2001
From: "C. Albrecht" <gromet@gmx.de>
Date: Wed, 15 Dec 2021 16:57:07 +0100
Subject: [PATCH 1/3] Add parent relationship for thing and features

---
 ml/dt_factory.py                                 |  6 +++++-
 ml/feature.py                                    | 14 +++++++++++++-
 .../functionalities/accepts_felling_jobs.py      | 12 ++++++------
 .../accepts_felling_support_jobs.py              | 11 +++++++----
 .../functionalities/accepts_forwarding_jobs.py   | 11 +++++++----
 .../functionalities/accepts_log_measurements.py  | 11 +++++++----
 .../accepts_log_transportaition_jobs.py          | 11 +++++++----
 .../accepts_moisture_measurement.py              | 11 +++++++----
 .../functionalities/accepts_move_commands.py     |  6 ++++--
 .../accepts_passability_report.py                | 11 +++++++----
 .../functionalities/accepts_proximity_alert.py   |  6 ++++--
 .../functionalities/accepts_shield_commands.py   |  6 ++++--
 .../accepts_single_tree_felling_jobs.py          |  6 ++++--
 .../functionalities/accepts_winch_command.py     |  6 ++++--
 .../functionalities/classifies_tree_species.py   |  6 ++++--
 .../functionalities/converts_data_formats.py     |  6 ++++--
 .../functionalities/converts_forest_gml.py       |  9 +++++----
 ml/fml40/features/functionalities/cuts.py        |  6 ++++--
 .../functionalities/determines_passability.py    |  6 ++++--
 .../functionalities/displays_health_alarms.py    |  6 ++++--
 .../functionalities/evaluates_forest_rating.py   |  6 ++++--
 .../evaluates_stand_attributes.py                |  6 ++++--
 ml/fml40/features/functionalities/fells.py       |  6 ++++--
 .../forest_planning_evaluation.py                |  6 ++++--
 ml/fml40/features/functionalities/forwards.py    | 11 +++++++----
 .../generates_afforestation_suggestions.py       | 11 +++++++----
 .../generates_felling_suggestions.py             |  6 ++++--
 .../generates_typical_single_trees.py            |  6 ++++--
 ml/fml40/features/functionalities/grabs.py       |  6 ++++--
 ml/fml40/features/functionalities/harvests.py    | 11 +++++++----
 .../features/functionalities/measure_wood.py     | 11 +++++++----
 .../functionalities/monitor_health_status.py     |  6 ++++--
 .../predicts_forest_development.py               |  4 ++--
 .../provides_moisture_prediction.py              |  4 ++--
 .../provides_passability_information.py          |  6 ++++--
 .../functionalities/provides_production_data.py  |  6 ++++--
 .../functionalities/provides_tree_data.py        |  6 ++++--
 .../functionalities/provides_weather_data.py     |  6 ++++--
 .../functionalities/simulates_tree_growth.py     |  6 ++++--
 .../features/functionalities/supports_felling.py |  9 +++++----
 .../features/functionalities/transports_logs.py  | 16 ++++++++++------
 .../functionalities/visualizes_forest.py         |  4 ++--
 .../features/properties/values/assortment.py     |  6 ++++--
 .../features/properties/values/basal_area.py     |  4 ++--
 ml/fml40/features/properties/values/dbh.py       |  6 ++++--
 .../properties/values/dominant_tree_species.py   |  6 ++++--
 .../features/properties/values/fell_indicator.py |  4 ++--
 .../features/properties/values/felling_period.py |  6 ++++--
 .../properties/values/harvested_volume.py        |  4 ++--
 .../properties/values/harvesting_parameter.py    |  6 ++++--
 .../properties/values/increment_volume.py        |  6 ++++--
 .../properties/values/interfering_branches.py    |  6 ++++--
 .../features/properties/values/inventory_data.py |  7 ++++---
 .../features/properties/values/mean_height.py    |  6 ++++--
 .../properties/values/number_of_stems.py         |  6 ++++--
 ml/fml40/features/properties/values/overhang.py  |  6 ++++--
 .../properties/values/stand_attribute_set.py     |  4 ++--
 .../properties/values/stem_segment_properties.py |  4 ++--
 .../features/properties/values/stock_volume.py   |  6 ++++--
 .../properties/values/thickness_class.py         |  6 ++++--
 ml/fml40/features/properties/values/tilt.py      |  6 ++++--
 ml/fml40/features/properties/values/tree_data.py |  6 ++++--
 .../features/properties/values/tree_species.py   |  6 ++++--
 ml/fml40/features/properties/values/tree_type.py |  6 ++++--
 .../properties/values/vitality_status.py         |  6 ++++--
 .../features/properties/values/wood_quality.py   |  6 ++++--
 ml/fml40/roles/dts/forest/forest.py              |  6 ++++--
 ml/fml40/roles/dts/forest/forest_segment.py      |  4 ++--
 ml/fml40/roles/dts/forest/tree.py                |  6 ++++--
 .../roles/dts/handheld_devices/brushcutter.py    |  4 ++--
 ml/fml40/roles/dts/handheld_devices/chainsaw.py  |  6 ++++--
 ml/fml40/roles/dts/machines/forest_machine.py    |  4 ++--
 ml/fml40/roles/dts/machines/forwarder.py         |  6 ++++--
 ml/fml40/roles/dts/machines/harvester.py         |  6 ++++--
 ml/fml40/roles/dts/machines/log_truck.py         |  6 ++++--
 ml/fml40/roles/dts/machines/mini_tractor.py      |  4 ++--
 ml/fml40/roles/dts/machines/skidder.py           |  6 ++++--
 ml/fml40/roles/dts/machines/wheel_loader.py      |  6 ++++--
 ml/fml40/roles/dts/parts/grabber.py              |  6 ++++--
 ml/fml40/roles/dts/parts/harvesting_head.py      |  6 ++++--
 ml/fml40/roles/dts/parts/log_loading_area.py     |  6 ++++--
 ml/fml40/roles/dts/parts/saw.py                  |  6 ++++--
 ml/fml40/roles/dts/parts/stacking_shield.py      |  6 ++++--
 ml/fml40/roles/dts/parts/winch.py                |  6 ++++--
 ml/fml40/roles/dts/persons/forest_owner.py       |  6 ++++--
 ml/fml40/roles/dts/persons/forest_worker.py      |  4 ++--
 .../roles/dts/persons/mini_tractor_operator.py   |  6 ++++--
 ml/fml40/roles/dts/persons/skidder_operator.py   |  6 ++++--
 ml/fml40/roles/dts/sensors/barkbeetle_sensor.py  |  6 ++++--
 ml/fml40/roles/dts/sensors/vitality_sensor.py    |  6 ++++--
 ml/fml40/roles/dts/sites/forest_enterprise.py    |  6 ++++--
 ml/fml40/roles/dts/sites/hauler.py               |  6 ++++--
 ml/fml40/roles/dts/woods/stem_segment.py         |  6 ++++--
 ml/fml40/roles/dts/woods/wood.py                 |  6 ++++--
 ml/fml40/roles/dts/woods/wood_pile.py            |  6 ++++--
 ml/ml40/features/functionalities/accepts_jobs.py | 10 ++++------
 .../features/functionalities/accepts_reports.py  |  5 +++--
 ml/ml40/features/functionalities/clears_jobs.py  |  7 +++----
 .../features/functionalities/functionality.py    | 11 ++++-------
 ml/ml40/features/functionalities/manages_jobs.py |  5 +++--
 ml/ml40/features/functionalities/plans_routes.py |  8 +++-----
 .../functionalities/provides_map_data.py         |  5 +++--
 .../functionalities/provides_operational_data.py |  9 +++------
 ml/ml40/features/functionalities/renders.py      |  7 +++----
 .../properties/associations/association.py       |  6 ++++--
 .../properties/associations/composite.py         |  8 +++-----
 .../features/properties/associations/shared.py   |  7 +++----
 ml/ml40/features/properties/property.py          | 10 +++-------
 .../features/properties/values/acceleration.py   |  7 +++----
 .../properties/values/accoustic_indices.py       |  7 +++----
 ml/ml40/features/properties/values/address.py    |  7 +++----
 .../features/properties/values/air_pressure.py   |  6 ++----
 ml/ml40/features/properties/values/area.py       |  6 ++----
 ml/ml40/features/properties/values/brightness.py |  6 ++----
 ml/ml40/features/properties/values/count.py      |  7 +++----
 ml/ml40/features/properties/values/dimensions.py |  7 +++----
 ml/ml40/features/properties/values/distance.py   |  7 +++----
 .../properties/values/documents/document.py      |  7 +++----
 .../values/documents/jobs/generic_job.py         |  8 +++-----
 .../properties/values/documents/jobs/job.py      |  6 ++++--
 .../properties/values/documents/jobs/job_list.py |  7 +++----
 .../values/documents/reports/production_data.py  |  7 +++----
 .../values/documents/reports/report.py           |  6 ++++--
 .../properties/values/expansion_length.py        |  8 +++-----
 ml/ml40/features/properties/values/force.py      |  6 ++----
 .../properties/values/generic_property.py        |  6 ++----
 .../properties/values/gyroscope_value.py         |  5 +++--
 ml/ml40/features/properties/values/infrared.py   |  6 ++----
 .../properties/values/last_service_check.py      |  8 +++-----
 ml/ml40/features/properties/values/lift.py       |  8 +++-----
 .../properties/values/liquid_filling_level.py    |  8 +++-----
 ml/ml40/features/properties/values/location.py   |  6 ++++--
 ml/ml40/features/properties/values/lot.py        |  7 +++----
 ml/ml40/features/properties/values/moisture.py   |  7 +++----
 .../properties/values/operating_hours.py         |  6 ++----
 .../properties/values/orientation_rpy.py         |  5 +++--
 .../features/properties/values/personal_name.py  |  6 ++----
 ml/ml40/features/properties/values/rgb_color.py  |  7 +++----
 .../properties/values/rotational_speed.py        |  7 +++----
 ml/ml40/features/properties/values/route.py      |  7 +++----
 .../features/properties/values/sound_level.py    |  7 +++----
 ml/ml40/features/properties/values/srid.py       |  6 ++----
 ml/ml40/features/properties/values/surface.py    |  7 +++----
 .../features/properties/values/surface_wkt.py    |  7 +++----
 .../properties/values/switching_stage.py         |  6 ++----
 .../features/properties/values/temperature.py    | 10 ++--------
 ml/ml40/features/properties/values/time_slot.py  |  6 ++++--
 ml/ml40/features/properties/values/value.py      |  9 ++++-----
 ml/ml40/features/properties/values/weight.py     |  8 +++-----
 .../features/properties/values/white_level.py    |  5 +++--
 ml/ml40/roles/dts/dt.py                          |  4 ++--
 .../dts/handheld_devices/handheld_device.py      |  6 ++++--
 ml/ml40/roles/dts/machines/machine.py            |  6 ++++--
 ml/ml40/roles/dts/parts/crane.py                 |  6 ++++--
 ml/ml40/roles/dts/parts/engine.py                |  6 ++++--
 ml/ml40/roles/dts/parts/part.py                  |  4 ++--
 ml/ml40/roles/dts/parts/scale.py                 |  6 ++++--
 ml/ml40/roles/dts/parts/tank.py                  |  6 ++++--
 ml/ml40/roles/dts/persons/machine_operator.py    |  4 ++--
 ml/ml40/roles/dts/persons/person.py              |  4 ++--
 ml/ml40/roles/dts/sensors/accelerometer.py       |  4 ++--
 ml/ml40/roles/dts/sensors/air_sensor.py          |  4 ++--
 ml/ml40/roles/dts/sensors/gyroscope.py           |  4 ++--
 ml/ml40/roles/dts/sensors/light_sensor.py        |  4 ++--
 ml/ml40/roles/dts/sensors/sensor.py              |  6 ++++--
 ml/ml40/roles/dts/sensors/sensor_network.py      |  4 ++--
 ml/ml40/roles/dts/sensors/soil_sensor.py         |  4 ++--
 ml/ml40/roles/dts/sensors/sound_sensor.py        |  4 ++--
 ml/ml40/roles/dts/sites/site.py                  |  6 ++++--
 ml/ml40/roles/dts/ways/way.py                    |  6 ++++--
 ml/ml40/roles/hmis/app.py                        |  6 ++++--
 ml/ml40/roles/hmis/dashboard.py                  |  4 ++--
 ml/ml40/roles/hmis/hmd.py                        |  6 ++++--
 ml/ml40/roles/hmis/hmi.py                        |  6 ++++--
 ml/ml40/roles/hmis/machine_ui.py                 |  6 ++++--
 ml/ml40/roles/servives/service.py                |  4 ++--
 .../functionalities/CantileverConfigure.py       |  6 ++++--
 .../functionalities/ProvidesDisplacementData.py  |  4 ++--
 .../functionalities/ProvidesForceData.py         |  6 ++++--
 .../functionalities/ProvidesStretchData.py       |  6 ++++--
 ml/role.py                                       |  7 +++++--
 181 files changed, 663 insertions(+), 504 deletions(-)

diff --git a/ml/dt_factory.py b/ml/dt_factory.py
index d0a9259..2ddc1f2 100644
--- a/ml/dt_factory.py
+++ b/ml/dt_factory.py
@@ -368,11 +368,14 @@ def build(thing, model):
     roles = attributes.get("roles", [])
     for role in roles:
         role_instance = build_role(role)
+        role_instance.parent = thing
         thing.roles[role.get("class")] = role_instance
 
     json_features = attributes.get("features", [])
     for feature in json_features:
         feature_ins = build_feature(feature=feature)
+        print(type(feature_ins))
+        feature_ins.parent = thing
         thing.features[feature.get("class")] = feature_ins
 
     if ditto_features is not None:
@@ -522,7 +525,8 @@ def create_thing(
     attributes = model.get("attributes", None)
     if attributes is None:
         sys.exit("attributes are none")
-    thing_type = remove_namespace(attributes.get("class", ""))
+    thing_type = attributes.get("class", "")
+    thing_type = remove_namespace(thing_type)
     thing_name = attributes.get("name", "")
     APP_LOGGER.info(
         "Build digital twin {} with id {}".format(thing_name, model.get("thingId", ""))
diff --git a/ml/feature.py b/ml/feature.py
index b7410ab..849f698 100644
--- a/ml/feature.py
+++ b/ml/feature.py
@@ -7,19 +7,21 @@
 from abc import ABC
 
 from ml.identifier import ID
+from ml.thing import Thing
 
 
 class Feature(ABC):
     """The Feature class represents the base class for all functionalities
     and values."""
 
-    def __init__(self, namespace, name="", identifier=""):
+    def __init__(self, namespace, name="", identifier="", parent=None):
         """Constructs a new Feature class object with the given name and
         identifier.
 
         :param name: Name of the feature
         :param identifier: Identifier of the feature
         """
+        self.parent = parent
         self.namespace = namespace
         self.__name = name
         self.__class_name = f"{self.namespace}::{self.__class__.__name__}"
@@ -143,3 +145,13 @@ def to_json(self):
             res = self.subFeatures[key].to_json()
             self.__json_out["subFeatures"].append(res)
         return self.__json_out
+
+    def get_my_thing(self):
+        tmp = self.parent
+        print("Searching for thing....")
+        print(type(tmp))
+        while not isinstance(tmp, Thing):
+            if tmp is None:
+                return None
+            tmp = tmp.parent
+        return tmp
diff --git a/ml/fml40/features/functionalities/accepts_felling_jobs.py b/ml/fml40/features/functionalities/accepts_felling_jobs.py
index 7a4f401..c305a9a 100644
--- a/ml/fml40/features/functionalities/accepts_felling_jobs.py
+++ b/ml/fml40/features/functionalities/accepts_felling_jobs.py
@@ -1,24 +1,24 @@
 """This module implements the class AcceptsFellingJobs."""
 
-from ml.fml40.features.properties.values.documents.jobs.felling_job import \
-    FellingJob
+from ml.fml40.features.properties.values.documents.jobs.felling_job import FellingJob
 from ml.ml40.features.functionalities.accepts_jobs import AcceptsJobs
-from ml.ml40.features.properties.values.documents.jobs.job_status import \
-    JobStatus
+from ml.ml40.features.properties.values.documents.jobs.job_status import JobStatus
 
 
 class AcceptsFellingJobs(AcceptsJobs):
     """This functionality signalizes that FellingJobs can be processed and
     offers the possibility to remove and query it."""
 
-    def __init__(self, namespace="fml40", name="", identifier=""):
+    def __init__(self, namespace="fml40", name="", identifier="", parent=None):
         """Initializes the object.
 
         :param name: Object name
         :param identifier: Identifier
 
         """
-        super().__init__(namespace=namespace, name=name, identifier=identifier)
+        super().__init__(
+            namespace=namespace, name=name, identifier=identifier, parent=parent
+        )
 
     def acceptJob(self, job: FellingJob) -> bool:
         """Accepts the given FellingJob job. Returns true if the job has been
diff --git a/ml/fml40/features/functionalities/accepts_felling_support_jobs.py b/ml/fml40/features/functionalities/accepts_felling_support_jobs.py
index d87f173..74ff186 100644
--- a/ml/fml40/features/functionalities/accepts_felling_support_jobs.py
+++ b/ml/fml40/features/functionalities/accepts_felling_support_jobs.py
@@ -1,7 +1,8 @@
 """This module implements the class AcceptsFellingSupportJobs."""
 
-from ml.fml40.features.properties.values.documents.jobs.fellung_support_job import \
-    FellingSupportJob
+from ml.fml40.features.properties.values.documents.jobs.fellung_support_job import (
+    FellingSupportJob,
+)
 from ml.ml40.features.functionalities.accepts_jobs import AcceptsJobs
 
 
@@ -9,14 +10,16 @@ class AcceptsFellingSupportJobs(AcceptsJobs):
     """This functionality signalizes that FellingSupportJobs can be
     processed."""
 
-    def __init__(self, namespace="fml40", name="", identifier=""):
+    def __init__(self, namespace="fml40", name="", identifier="", parent=None):
         """Initializes the object.
 
         :param name:  Object name
         :param identifier: Identifier
 
         """
-        super().__init__(namespace=namespace, name=name, identifier=identifier)
+        super().__init__(
+            namespace=namespace, name=name, identifier=identifier, parent=parent
+        )
 
     def acceptJob(self, job: FellingSupportJob) -> bool:
         """Accepts the given FellingSupportJob job. Returns true if the job
diff --git a/ml/fml40/features/functionalities/accepts_forwarding_jobs.py b/ml/fml40/features/functionalities/accepts_forwarding_jobs.py
index af59b4b..130f210 100644
--- a/ml/fml40/features/functionalities/accepts_forwarding_jobs.py
+++ b/ml/fml40/features/functionalities/accepts_forwarding_jobs.py
@@ -1,22 +1,25 @@
 """This module implements the class AcceptsForwardingJobs."""
 
 from ml.app_logger import APP_LOGGER
-from ml.fml40.features.properties.values.documents.jobs.forwarding_job import \
-    ForwardingJob
+from ml.fml40.features.properties.values.documents.jobs.forwarding_job import (
+    ForwardingJob,
+)
 from ml.ml40.features.functionalities.accepts_jobs import AcceptsJobs
 
 
 class AcceptsForwardingJobs(AcceptsJobs):
     """This functionality signalizes that ForwadingJobs can be processed."""
 
-    def __init__(self, namespace="fml40", name="", identifier=""):
+    def __init__(self, namespace="fml40", name="", identifier="", parent=None):
         """Initializes the object.
 
         :param name:  Object name
         :param identifier: Identifier
 
         """
-        super().__init__(namespace=namespace, name=name, identifier=identifier)
+        super().__init__(
+            namespace=namespace, name=name, identifier=identifier, parent=parent
+        )
 
     def acceptJob(self, job: ForwardingJob) -> bool:
         """Accepts the given ForwardingJob. Returns true if the job has been
diff --git a/ml/fml40/features/functionalities/accepts_log_measurements.py b/ml/fml40/features/functionalities/accepts_log_measurements.py
index 6bb2d4e..64e519b 100644
--- a/ml/fml40/features/functionalities/accepts_log_measurements.py
+++ b/ml/fml40/features/functionalities/accepts_log_measurements.py
@@ -1,21 +1,24 @@
 """This module implements the class AcceptsLogMeasurements."""
 
-from ml.fml40.features.properties.values.documents.reports.log_measurement import \
-    LogMeasurement
+from ml.fml40.features.properties.values.documents.reports.log_measurement import (
+    LogMeasurement,
+)
 from ml.ml40.features.functionalities.functionality import Functionality
 
 
 class AcceptsLogMeasurements(Functionality):
     """This functionality signalizes that LogMeasurements can be processed."""
 
-    def __init__(self, namespace="fml40", name="", identifier=""):
+    def __init__(self, namespace="fml40", name="", identifier="", parent=None):
         """Initializes the object.
 
         :param name:  Object name
         :param identifier: Identifier
 
         """
-        super().__init__(namespace=namespace, name=name, identifier=identifier)
+        super().__init__(
+            namespace=namespace, name=name, identifier=identifier, parent=parent
+        )
 
     def acceptLogMeasurement(self, log_measurement: LogMeasurement) -> bool:
         """Accepts the given LogMeasurement. Returns true if the job has been
diff --git a/ml/fml40/features/functionalities/accepts_log_transportaition_jobs.py b/ml/fml40/features/functionalities/accepts_log_transportaition_jobs.py
index 5ec401a..3e02f0c 100644
--- a/ml/fml40/features/functionalities/accepts_log_transportaition_jobs.py
+++ b/ml/fml40/features/functionalities/accepts_log_transportaition_jobs.py
@@ -1,7 +1,8 @@
 """This module implements the class AcceptsLogTransportationJobs."""
 
-from ml.fml40.features.properties.values.documents.jobs.log_transportation_job import \
-    LogTransportationJob
+from ml.fml40.features.properties.values.documents.jobs.log_transportation_job import (
+    LogTransportationJob,
+)
 from ml.ml40.features.functionalities.accepts_jobs import AcceptsJobs
 
 
@@ -9,14 +10,16 @@ class AcceptsLogTransportationJobs(AcceptsJobs):
     """This functionality signalizes that LogTransportationJobs can be
     processed."""
 
-    def __init__(self, namespace="fml40", name="", identifier=""):
+    def __init__(self, namespace="fml40", name="", identifier="", parent=None):
         """Initializes the object.
 
         :param name:  Object name
         :param identifier: Identifier
 
         """
-        super().__init__(namespace=namespace, name=name, identifier=identifier)
+        super().__init__(
+            namespace=namespace, name=name, identifier=identifier, parent=parent
+        )
 
     def acceptJob(self, job: LogTransportationJob) -> bool:
         """Accepts the given LogTransportationJob. Returns true if the job has
diff --git a/ml/fml40/features/functionalities/accepts_moisture_measurement.py b/ml/fml40/features/functionalities/accepts_moisture_measurement.py
index 2c7d591..5a4c58b 100644
--- a/ml/fml40/features/functionalities/accepts_moisture_measurement.py
+++ b/ml/fml40/features/functionalities/accepts_moisture_measurement.py
@@ -1,7 +1,8 @@
 """This module implements the class AcceptsMoistureMeasurement."""
 
-from ml.fml40.features.properties.values.documents.reports.soil_moisture_measurement import \
-    SoilMoistureMeasurement
+from ml.fml40.features.properties.values.documents.reports.soil_moisture_measurement import (
+    SoilMoistureMeasurement,
+)
 from ml.ml40.features.functionalities.functionality import Functionality
 
 
@@ -9,14 +10,16 @@ class AcceptsMoistureMeasurement(Functionality):
     """This functionality signalizes that SoilMoistureMeasurements can be
     processed."""
 
-    def __init__(self,namespace="fml40", name="", identifier=""):
+    def __init__(self, namespace="fml40", name="", identifier="", parent=None):
         """Initializes the object.
 
         :param name:  Object name
         :param identifier: Identifier
 
         """
-        super().__init__(namespace=namespace, name=name, identifier=identifier)
+        super().__init__(
+            namespace=namespace, name=name, identifier=identifier, parent=parent
+        )
 
     def acceptMoistureMeasurement(self, input: SoilMoistureMeasurement):
         """Accepts the given SoilMoistureMeasurement."""
diff --git a/ml/fml40/features/functionalities/accepts_move_commands.py b/ml/fml40/features/functionalities/accepts_move_commands.py
index 8e8cfff..76e7ac6 100644
--- a/ml/fml40/features/functionalities/accepts_move_commands.py
+++ b/ml/fml40/features/functionalities/accepts_move_commands.py
@@ -7,14 +7,16 @@ class AcceptsMoveCommands(Functionality):
     """This functionality signalizes that the thing can be moved remotely
     via S3I-B messages ."""
 
-    def __init__(self, namespace="fml40", name="", identifier=""):
+    def __init__(self, namespace="fml40", name="", identifier="", parent=None):
         """Initializes the object.
 
         :param name:  Object name
         :param identifier: Identifier
 
         """
-        super().__init__(namespace=namespace, name=name, identifier=identifier)
+        super().__init__(
+            namespace=namespace, name=name, identifier=identifier, parent=parent
+        )
 
     def move(self, longitude: float, latitude: float):
         """Moves the thing to the position specified longitude and latitude.
diff --git a/ml/fml40/features/functionalities/accepts_passability_report.py b/ml/fml40/features/functionalities/accepts_passability_report.py
index 2d6d4c1..723f708 100644
--- a/ml/fml40/features/functionalities/accepts_passability_report.py
+++ b/ml/fml40/features/functionalities/accepts_passability_report.py
@@ -1,11 +1,14 @@
-from ml.fml40.features.properties.values.documents.reports.passability_report import \
-    PassabilityReport
+from ml.fml40.features.properties.values.documents.reports.passability_report import (
+    PassabilityReport,
+)
 from ml.ml40.features.functionalities.functionality import Functionality
 
 
 class AcceptsPassabilityReport(Functionality):
-    def __init__(self, namespace="fml40", name="", identifier=""):
-        super().__init__(namespace=namespace, name=name, identifier=identifier)
+    def __init__(self, namespace="fml40", name="", identifier="", parent=None):
+        super().__init__(
+            namespace=namespace, name=name, identifier=identifier, parent=parent
+        )
 
     def acceptsReport(self, report: PassabilityReport):
         pass
diff --git a/ml/fml40/features/functionalities/accepts_proximity_alert.py b/ml/fml40/features/functionalities/accepts_proximity_alert.py
index ce800be..d07e629 100644
--- a/ml/fml40/features/functionalities/accepts_proximity_alert.py
+++ b/ml/fml40/features/functionalities/accepts_proximity_alert.py
@@ -7,14 +7,16 @@ class AcceptsProximityAlert(Functionality):
     """This functionality signalizes that an alert is generated if things
     are to close to this thing."""
 
-    def __init__(self, namespace="fml40", name="", identifier=""):
+    def __init__(self, namespace="fml40", name="", identifier="", parent=None):
         """Initializes the object.
 
         :param name:  Object name
         :param identifier: Identifier
 
         """
-        super().__init__(namespace=namespace, name=name, identifier=identifier)
+        super().__init__(
+            namespace=namespace, name=name, identifier=identifier, parent=parent
+        )
 
     def proximityAlert(self, ids: list, distances: list):
         print("Making Proximity Alert...")
diff --git a/ml/fml40/features/functionalities/accepts_shield_commands.py b/ml/fml40/features/functionalities/accepts_shield_commands.py
index d28e6f0..1086640 100644
--- a/ml/fml40/features/functionalities/accepts_shield_commands.py
+++ b/ml/fml40/features/functionalities/accepts_shield_commands.py
@@ -5,14 +5,16 @@ class AcceptsShieldCommands(Functionality):
     """This functionality signalizes that the thing's shield can be moved remotely
     via S3I-B messages ."""
 
-    def __init__(self, namespace="fml40", name="", identifier=""):
+    def __init__(self, namespace="fml40", name="", identifier="", parent=None):
         """Initializes the object.
 
         :param name:  Object name
         :param identifier: Identifier
 
         """
-        super().__init__(namespace=namespace, name=name, identifier=identifier)
+        super().__init__(
+            namespace=namespace, name=name, identifier=identifier, parent=parent
+        )
 
     def shieldDown(self, speed):
         """roll down the winch with specified speed
diff --git a/ml/fml40/features/functionalities/accepts_single_tree_felling_jobs.py b/ml/fml40/features/functionalities/accepts_single_tree_felling_jobs.py
index afb4d79..de3b855 100644
--- a/ml/fml40/features/functionalities/accepts_single_tree_felling_jobs.py
+++ b/ml/fml40/features/functionalities/accepts_single_tree_felling_jobs.py
@@ -6,11 +6,13 @@
 class AcceptsSingleTreeFellingJobs(AcceptsJobs):
     """This functionality signalizes that single trees can be felled."""
 
-    def __init__(self, namespace="fml40", name="", identifier=""):
+    def __init__(self, namespace="fml40", name="", identifier="", parent=None):
         """Initializes the object.
 
         :param name:  Object name
         :param identifier: Identifier
 
         """
-        super().__init__(namespace=namespace, name=name, identifier=identifier)
+        super().__init__(
+            namespace=namespace, name=name, identifier=identifier, parent=parent
+        )
diff --git a/ml/fml40/features/functionalities/accepts_winch_command.py b/ml/fml40/features/functionalities/accepts_winch_command.py
index 2ee3d30..0653417 100644
--- a/ml/fml40/features/functionalities/accepts_winch_command.py
+++ b/ml/fml40/features/functionalities/accepts_winch_command.py
@@ -5,14 +5,16 @@ class AcceptsWinchCommands(Functionality):
     """This functionality signalizes that the thing's winch can be moved remotely
     via S3I-B messages ."""
 
-    def __init__(self, namespace="fml40", name="", identifier=""):
+    def __init__(self, namespace="fml40", name="", identifier="", parent=None):
         """Initializes the object.
 
         :param name:  Object name
         :param identifier: Identifier
 
         """
-        super().__init__(namespace=namespace, name=name, identifier=identifier)
+        super().__init__(
+            namespace=namespace, name=name, identifier=identifier, parent=parent
+        )
 
     def rollDown(self, speed):
         """roll down the winch with specified speed
diff --git a/ml/fml40/features/functionalities/classifies_tree_species.py b/ml/fml40/features/functionalities/classifies_tree_species.py
index 75ff215..c5cd829 100644
--- a/ml/fml40/features/functionalities/classifies_tree_species.py
+++ b/ml/fml40/features/functionalities/classifies_tree_species.py
@@ -6,14 +6,16 @@
 class ClassifiesTreeSpecies(Functionality):
     """This functionality allows the classification of tree species."""
 
-    def __init__(self, namespace="fml40", name="", identifier=""):
+    def __init__(self, namespace="fml40", name="", identifier="", parent=None):
         """Initializes the object.
 
         :param name:  Object name
         :param identifier: Identifier
 
         """
-        super().__init__(namespace=namespace, name=name, identifier=identifier)
+        super().__init__(
+            namespace=namespace, name=name, identifier=identifier, parent=parent
+        )
 
     def calculateTreeSpeciesClassification(self, tree: bytes) -> bytes:
         """Returns the classification of the species of tree.
diff --git a/ml/fml40/features/functionalities/converts_data_formats.py b/ml/fml40/features/functionalities/converts_data_formats.py
index f7ac1b4..b9a3d76 100644
--- a/ml/fml40/features/functionalities/converts_data_formats.py
+++ b/ml/fml40/features/functionalities/converts_data_formats.py
@@ -2,5 +2,7 @@
 
 
 class ConvertsDataFormats(Functionality):
-    def __init__(self, namespace="fml40", name="", identifier=""):
-        super().__init__(namespace=namespace, name=name, identifier=identifier)
+    def __init__(self, namespace="fml40", name="", identifier="", parent=None):
+        super().__init__(
+            namespace=namespace, name=name, identifier=identifier, parent=parent
+        )
diff --git a/ml/fml40/features/functionalities/converts_forest_gml.py b/ml/fml40/features/functionalities/converts_forest_gml.py
index 0ff4286..f02b656 100644
--- a/ml/fml40/features/functionalities/converts_forest_gml.py
+++ b/ml/fml40/features/functionalities/converts_forest_gml.py
@@ -1,7 +1,8 @@
-from ml.fml40.features.functionalities.converts_data_formats import \
-    ConvertsDataFormats
+from ml.fml40.features.functionalities.converts_data_formats import ConvertsDataFormats
 
 
 class ConvertsForestGML(ConvertsDataFormats):
-    def __init__(self, namespace="fml40", name="", identifier=""):
-        super().__init__(namespace=namespace, name=name, identifier=identifier)
+    def __init__(self, namespace="fml40", name="", identifier="", parent=None):
+        super().__init__(
+            namespace=namespace, name=name, identifier=identifier, parent=parent
+        )
diff --git a/ml/fml40/features/functionalities/cuts.py b/ml/fml40/features/functionalities/cuts.py
index 1631a85..0f84211 100644
--- a/ml/fml40/features/functionalities/cuts.py
+++ b/ml/fml40/features/functionalities/cuts.py
@@ -4,14 +4,16 @@
 
 
 class Cuts(Functionality):
-    def __init__(self, namespace="fml40", name="", identifier=""):
+    def __init__(self, namespace="fml40", name="", identifier="", parent=None):
         """Initializes the object.
 
         :param name: Object name
         :param identifier: Identifier
 
         """
-        super().__init__(namespace=namespace, name=name, identifier=identifier)
+        super().__init__(
+            namespace=namespace, name=name, identifier=identifier, parent=parent
+        )
 
     def cut(self):
         pass
diff --git a/ml/fml40/features/functionalities/determines_passability.py b/ml/fml40/features/functionalities/determines_passability.py
index becd9e8..c57317f 100644
--- a/ml/fml40/features/functionalities/determines_passability.py
+++ b/ml/fml40/features/functionalities/determines_passability.py
@@ -9,14 +9,16 @@ class DeterminesPassability(Functionality):
     """This functionality signalizes that the passability can be
     calculated."""
 
-    def __init__(self, namespace="fml40", name="", identifier=""):
+    def __init__(self, namespace="fml40", name="", identifier="", parent=None):
         """Initializes the object.
 
         :param name: Object name
         :param identifier: Identifier
 
         """
-        super().__init__(namespace=namespace, name=name, identifier=identifier)
+        super().__init__(
+            namespace=namespace, name=name, identifier=identifier, parent=parent
+        )
 
     def isPassableNow(self, input: float) -> bool:
         """Returns true if this object can be passed with the given weight
diff --git a/ml/fml40/features/functionalities/displays_health_alarms.py b/ml/fml40/features/functionalities/displays_health_alarms.py
index d5a9f66..28ea678 100644
--- a/ml/fml40/features/functionalities/displays_health_alarms.py
+++ b/ml/fml40/features/functionalities/displays_health_alarms.py
@@ -4,14 +4,16 @@
 
 
 class DisplaysHealthAlarms(Functionality):
-    def __init__(self, namespace="fml40", name="", identifier=""):
+    def __init__(self, namespace="fml40", name="", identifier="", parent=None):
         """Initializes the object.
 
         :param name: Object name
         :param identifier: Identifier
 
         """
-        super().__init__(namespace=namespace, name=name, identifier=identifier)
+        super().__init__(
+            namespace=namespace, name=name, identifier=identifier, parent=parent
+        )
 
     def displayHealthAlarm(self):
         pass
diff --git a/ml/fml40/features/functionalities/evaluates_forest_rating.py b/ml/fml40/features/functionalities/evaluates_forest_rating.py
index 3460368..ff771d9 100644
--- a/ml/fml40/features/functionalities/evaluates_forest_rating.py
+++ b/ml/fml40/features/functionalities/evaluates_forest_rating.py
@@ -2,5 +2,7 @@
 
 
 class EvaluatesForestRating(Functionality):
-    def __init__(self, namespace="fml40", name="", identifier=""):
-        super().__init__(namespace=namespace, name=name, identifier=identifier)
+    def __init__(self, namespace="fml40", name="", identifier="", parent=None):
+        super().__init__(
+            namespace=namespace, name=name, identifier=identifier, parent=parent
+        )
diff --git a/ml/fml40/features/functionalities/evaluates_stand_attributes.py b/ml/fml40/features/functionalities/evaluates_stand_attributes.py
index f475a37..54366dd 100644
--- a/ml/fml40/features/functionalities/evaluates_stand_attributes.py
+++ b/ml/fml40/features/functionalities/evaluates_stand_attributes.py
@@ -6,14 +6,16 @@
 
 
 class EvaluatesStandAttributes(Functionality):
-    def __init__(self, namespace="fml40", name="", identifier=""):
+    def __init__(self, namespace="fml40", name="", identifier="", parent=None):
         """Initializes the object.
 
         :param name: Object name
         :param identifier: Identifier
 
         """
-        super().__init__(namespace=namespace, name=name, identifier=identifier)
+        super().__init__(
+            namespace=namespace, name=name, identifier=identifier, parent=parent
+        )
 
     def calculateStandAttributes(self, input_a: bytes, input_b: date) -> str:
         pass
diff --git a/ml/fml40/features/functionalities/fells.py b/ml/fml40/features/functionalities/fells.py
index 58c3327..d55ca12 100644
--- a/ml/fml40/features/functionalities/fells.py
+++ b/ml/fml40/features/functionalities/fells.py
@@ -10,14 +10,16 @@ class Fells(Functionality):
     """This functionality signalizes that FellingJobs can be processed and
     offers the possibility to fell trees."""
 
-    def __init__(self, namespace="fml40", name="", identifier=""):
+    def __init__(self, namespace="fml40", name="", identifier="", parent=None):
         """Initializes the object.
 
         :param name: Object name
         :param identifier: Identifier
 
         """
-        super().__init__(namespace=namespace, name=name, identifier=identifier)
+        super().__init__(
+            namespace=namespace, name=name, identifier=identifier, parent=parent
+        )
 
     def executeFellingJob(self, job: FellingJob):
         """Executes the given FellingJob.
diff --git a/ml/fml40/features/functionalities/forest_planning_evaluation.py b/ml/fml40/features/functionalities/forest_planning_evaluation.py
index f0eed79..d24d451 100644
--- a/ml/fml40/features/functionalities/forest_planning_evaluation.py
+++ b/ml/fml40/features/functionalities/forest_planning_evaluation.py
@@ -4,14 +4,16 @@
 
 
 class ForestPlanningEvaluation(Functionality):
-    def __init__(self, namespace="fml40", name="", identifier=""):
+    def __init__(self, namespace="fml40", name="", identifier="", parent=None):
         """Initializes the object.
 
         :param name: Object name
         :param identifier: Identifier
 
         """
-        super().__init__(namespace=namespace, name=name, identifier=identifier)
+        super().__init__(
+            namespace=namespace, name=name, identifier=identifier, parent=parent
+        )
 
     def evaluateInventoryData(self):
         pass
diff --git a/ml/fml40/features/functionalities/forwards.py b/ml/fml40/features/functionalities/forwards.py
index 9e68698..f90182d 100644
--- a/ml/fml40/features/functionalities/forwards.py
+++ b/ml/fml40/features/functionalities/forwards.py
@@ -1,21 +1,24 @@
 """This module implements the class Forwards."""
 
-from ml.fml40.features.properties.values.documents.jobs.forwarding_job import \
-    ForwardingJob
+from ml.fml40.features.properties.values.documents.jobs.forwarding_job import (
+    ForwardingJob,
+)
 from ml.ml40.features.functionalities.functionality import Functionality
 
 
 class Forwards(Functionality):
     """This functionality signalizes that ForwardingJobs can be processed."""
 
-    def __init__(self, namespace="fml40", name="", identifier=""):
+    def __init__(self, namespace="fml40", name="", identifier="", parent=None):
         """Initializes the object.
 
         :param name: Object name
         :param identifier: Identifier
 
         """
-        super().__init__(namespace=namespace, name=name, identifier=identifier)
+        super().__init__(
+            namespace=namespace, name=name, identifier=identifier, parent=parent
+        )
 
     def executeJob(self, job):
         """Executes the given job.
diff --git a/ml/fml40/features/functionalities/generates_afforestation_suggestions.py b/ml/fml40/features/functionalities/generates_afforestation_suggestions.py
index 4bd40c4..f04cb83 100644
--- a/ml/fml40/features/functionalities/generates_afforestation_suggestions.py
+++ b/ml/fml40/features/functionalities/generates_afforestation_suggestions.py
@@ -1,21 +1,24 @@
 """This module implements the class GeneratesAfforestationSuggestions."""
 
-from ml.fml40.features.properties.values.documents.reports.afforestation_suggestion import \
-    AfforestationSuggestion
+from ml.fml40.features.properties.values.documents.reports.afforestation_suggestion import (
+    AfforestationSuggestion,
+)
 from ml.ml40.features.functionalities.functionality import Functionality
 
 
 class GeneratesAfforestationSuggestions(Functionality):
     """This functionality can generate suggestions for afforestation."""
 
-    def __init__(self, namespace="fml40", name="", identifier=""):
+    def __init__(self, namespace="fml40", name="", identifier="", parent=None):
         """Initializes the object.
 
         :param name: Object name
         :param identifier: Identifier
 
         """
-        super().__init__(namespace=namespace, name=name, identifier=identifier)
+        super().__init__(
+            namespace=namespace, name=name, identifier=identifier, parent=parent
+        )
 
     def generateAfforestationSuggestion(self) -> AfforestationSuggestion:
         """Returns a suggestion for afforestation.
diff --git a/ml/fml40/features/functionalities/generates_felling_suggestions.py b/ml/fml40/features/functionalities/generates_felling_suggestions.py
index ed42b0d..f1b4e6c 100644
--- a/ml/fml40/features/functionalities/generates_felling_suggestions.py
+++ b/ml/fml40/features/functionalities/generates_felling_suggestions.py
@@ -9,14 +9,16 @@ class GeneratesFellingSuggestions(Functionality):
     tree.
     """
 
-    def __init__(self, namespace="fml40", name="", identifier=""):
+    def __init__(self, namespace="fml40", name="", identifier="", parent=None):
         """Initializes the object.
 
         :param name: Object name
         :param identifier: Identifier
 
         """
-        super().__init__(namespace=namespace, name=name, identifier=identifier)
+        super().__init__(
+            namespace=namespace, name=name, identifier=identifier, parent=parent
+        )
 
     def generateFellingSuggestion(self, tree_Id: ID):
         """Returns a suggestion regarding how to fell a tree.
diff --git a/ml/fml40/features/functionalities/generates_typical_single_trees.py b/ml/fml40/features/functionalities/generates_typical_single_trees.py
index 32066c3..00f8114 100644
--- a/ml/fml40/features/functionalities/generates_typical_single_trees.py
+++ b/ml/fml40/features/functionalities/generates_typical_single_trees.py
@@ -2,5 +2,7 @@
 
 
 class GeneratesTypicalSingleTrees(Functionality):
-    def __init__(self, namespace="fml40", name="", identifier=""):
-        super().__init__(namespace=namespace, name=name, identifier=identifier)
+    def __init__(self, namespace="fml40", name="", identifier="", parent=None):
+        super().__init__(
+            namespace=namespace, name=name, identifier=identifier, parent=parent
+        )
diff --git a/ml/fml40/features/functionalities/grabs.py b/ml/fml40/features/functionalities/grabs.py
index d0a11b4..f5039ab 100644
--- a/ml/fml40/features/functionalities/grabs.py
+++ b/ml/fml40/features/functionalities/grabs.py
@@ -2,8 +2,10 @@
 
 
 class Grabs(Functionality):
-    def __init__(self, namespace="fml40", name="", identifier=""):
-        super().__init__(namespace=namespace, name=name, identifier=identifier)
+    def __init__(self, namespace="fml40", name="", identifier="", parent=None):
+        super().__init__(
+            namespace=namespace, name=name, identifier=identifier, parent=parent
+        )
 
     def close(self):
         pass
diff --git a/ml/fml40/features/functionalities/harvests.py b/ml/fml40/features/functionalities/harvests.py
index 769fe46..ae31f10 100644
--- a/ml/fml40/features/functionalities/harvests.py
+++ b/ml/fml40/features/functionalities/harvests.py
@@ -1,12 +1,15 @@
 from ml.app_logger import APP_LOGGER
-from ml.fml40.features.properties.values.documents.jobs.felling_job import \
-    FellingJob
+from ml.fml40.features.properties.values.documents.jobs.felling_job import FellingJob
 from ml.ml40.features.functionalities.functionality import Functionality
 
 
 class Harvests(Functionality):
-    def __init__(self, namespace="fml40", name="", identifier=""):
-        super().__init__(namespace=namespace, name=name, identifier=identifier)
+    def __init__(self, namespace="fml40", name="", identifier="", parent=None):
+        super().__init__(
+            namespace=namespace,
+            name=name,
+            identifier=identifier,
+        )
 
     def executeJob(self, job: FellingJob):
         pass
diff --git a/ml/fml40/features/functionalities/measure_wood.py b/ml/fml40/features/functionalities/measure_wood.py
index 8b08bd6..024427a 100644
--- a/ml/fml40/features/functionalities/measure_wood.py
+++ b/ml/fml40/features/functionalities/measure_wood.py
@@ -1,11 +1,14 @@
-from ml.fml40.features.properties.values.documents.reports.log_measurement import \
-    LogMeasurement
+from ml.fml40.features.properties.values.documents.reports.log_measurement import (
+    LogMeasurement,
+)
 from ml.ml40.features.functionalities.functionality import Functionality
 
 
 class MeasuresWood(Functionality):
-    def __init__(self, namespace="fml40", name="", identifier=""):
-        super().__init__(namespace=namespace, name=name, identifier=identifier)
+    def __init__(self, namespace="fml40", name="", identifier="", parent=None):
+        super().__init__(
+            namespace=namespace, name=name, identifier=identifier, parent=parent
+        )
 
     def measureLog(self) -> LogMeasurement:
         pass
diff --git a/ml/fml40/features/functionalities/monitor_health_status.py b/ml/fml40/features/functionalities/monitor_health_status.py
index 21fe788..4d08921 100644
--- a/ml/fml40/features/functionalities/monitor_health_status.py
+++ b/ml/fml40/features/functionalities/monitor_health_status.py
@@ -2,8 +2,10 @@
 
 
 class MonitorsHealthStatus(Functionality):
-    def __init__(self, namespace="fml40",name="", identifier=""):
-        super().__init__(namespace=namespace, name=name, identifier=identifier)
+    def __init__(self, namespace="fml40", name="", identifier="", parent=None):
+        super().__init__(
+            namespace=namespace, name=name, identifier=identifier, parent=parent
+        )
 
     def MonitorsHealthStatus(self):
         pass
diff --git a/ml/fml40/features/functionalities/predicts_forest_development.py b/ml/fml40/features/functionalities/predicts_forest_development.py
index 0a7a646..9963a5c 100644
--- a/ml/fml40/features/functionalities/predicts_forest_development.py
+++ b/ml/fml40/features/functionalities/predicts_forest_development.py
@@ -2,5 +2,5 @@
 
 
 class PredictsForestDevelopment(Functionality):
-    def __init__(self, namespace="fml40", name="", identifier=""):
-        super().__init__(namespace=namespace, name=name, identifier=identifier)
+    def __init__(self, namespace="fml40", name="", identifier="", parent=None):
+        super().__init__(namespace=namespace, name=name, identifier=identifier, parent=parent)
diff --git a/ml/fml40/features/functionalities/provides_moisture_prediction.py b/ml/fml40/features/functionalities/provides_moisture_prediction.py
index 2ef481c..1fe6014 100644
--- a/ml/fml40/features/functionalities/provides_moisture_prediction.py
+++ b/ml/fml40/features/functionalities/provides_moisture_prediction.py
@@ -4,8 +4,8 @@
 
 
 class ProvidesMoisturePrediction(Functionality):
-    def __init__(self, namespace="fml40", name="", identifier=""):
-        super().__init__(namespace=namespace, name=name, identifier=identifier)
+    def __init__(self, namespace="fml40", name="", identifier="", parent=None):
+        super().__init__(namespace=namespace, name=name, identifier=identifier, parent=parent)
 
     def predict(self):
         pass
diff --git a/ml/fml40/features/functionalities/provides_passability_information.py b/ml/fml40/features/functionalities/provides_passability_information.py
index 8cd3686..ff7b419 100644
--- a/ml/fml40/features/functionalities/provides_passability_information.py
+++ b/ml/fml40/features/functionalities/provides_passability_information.py
@@ -2,8 +2,10 @@
 
 
 class ProvidesPassabilityInformation(Functionality):
-    def __init__(self, namespace="fml40", name="", identifier=""):
-        super().__init__(namespace=namespace, name=name, identifier=identifier)
+    def __init__(self, namespace="fml40", name="", identifier="", parent=None):
+        super().__init__(
+            namespace=namespace, name=name, identifier=identifier, parent=parent
+        )
 
     def calculatePassability(self, load, moisture):
         pass
diff --git a/ml/fml40/features/functionalities/provides_production_data.py b/ml/fml40/features/functionalities/provides_production_data.py
index 918f96e..dd88216 100644
--- a/ml/fml40/features/functionalities/provides_production_data.py
+++ b/ml/fml40/features/functionalities/provides_production_data.py
@@ -5,8 +5,10 @@
 
 
 class ProvidesProductionData(Functionality):
-    def __init__(self, namespace="fml40", name="", identifier=""):
-        super().__init__(namespace=namespace, name=name, identifier=identifier)
+    def __init__(self, namespace="fml40", name="", identifier="", parent=None):
+        super().__init__(
+            namespace=namespace, name=name, identifier=identifier, parent=parent
+        )
 
     def getProductionData(self) -> ProductionData:
         return "Production Data is huge"
diff --git a/ml/fml40/features/functionalities/provides_tree_data.py b/ml/fml40/features/functionalities/provides_tree_data.py
index 52fb8d0..b3b37a9 100644
--- a/ml/fml40/features/functionalities/provides_tree_data.py
+++ b/ml/fml40/features/functionalities/provides_tree_data.py
@@ -5,8 +5,10 @@
 
 
 class ProvidesTreeData(Functionality):
-    def __init__(self,namespace="fml40", name="", identifier=""):
-        super().__init__(namespace=namespace, name=name, identifier=identifier)
+    def __init__(self, namespace="fml40", name="", identifier="", parent=None):
+        super().__init__(
+            namespace=namespace, name=name, identifier=identifier, parent=parent
+        )
 
     def getTreeData(self, Tree: ID) -> list:
         pass
diff --git a/ml/fml40/features/functionalities/provides_weather_data.py b/ml/fml40/features/functionalities/provides_weather_data.py
index 035dc0e..aa4890b 100644
--- a/ml/fml40/features/functionalities/provides_weather_data.py
+++ b/ml/fml40/features/functionalities/provides_weather_data.py
@@ -2,5 +2,7 @@
 
 
 class ProvidesWeatherData(Functionality):
-    def __init__(self, namespace="fml40", name="", identifier=""):
-        super().__init__(namespace=namespace, name=name, identifier=identifier)
+    def __init__(self, namespace="fml40", name="", identifier="", parent=None):
+        super().__init__(
+            namespace=namespace, name=name, identifier=identifier, parent=parent
+        )
diff --git a/ml/fml40/features/functionalities/simulates_tree_growth.py b/ml/fml40/features/functionalities/simulates_tree_growth.py
index 7eae7d6..bf49b38 100644
--- a/ml/fml40/features/functionalities/simulates_tree_growth.py
+++ b/ml/fml40/features/functionalities/simulates_tree_growth.py
@@ -2,5 +2,7 @@
 
 
 class SimulatesTreeGrowth(Functionality):
-    def __init__(self, namespace="fml40", name="", identifier=""):
-        super().__init__(namespace=namespace, name=name, identifier=identifier)
+    def __init__(self, namespace="fml40", name="", identifier="", parent=None):
+        super().__init__(
+            namespace=namespace, name=name, identifier=identifier, parent=parent
+        )
diff --git a/ml/fml40/features/functionalities/supports_felling.py b/ml/fml40/features/functionalities/supports_felling.py
index f687976..f52f0e5 100644
--- a/ml/fml40/features/functionalities/supports_felling.py
+++ b/ml/fml40/features/functionalities/supports_felling.py
@@ -1,11 +1,12 @@
-from ml.fml40.features.properties.values.documents.jobs.felling_job import \
-    FellingJob
+from ml.fml40.features.properties.values.documents.jobs.felling_job import FellingJob
 from ml.ml40.features.functionalities.functionality import Functionality
 
 
 class SupportsFelling(Functionality):
-    def __init__(self, namespace="fml40", name="", identifier=""):
-        super().__init__(namespace=namespace, name=name, identifier=identifier)
+    def __init__(self, namespace="fml40", name="", identifier="", parent=None):
+        super().__init__(
+            namespace=namespace, name=name, identifier=identifier, parent=parent
+        )
 
     def supportFelling(self, job: FellingJob, suggestion):
         pass
diff --git a/ml/fml40/features/functionalities/transports_logs.py b/ml/fml40/features/functionalities/transports_logs.py
index 1d988cf..7cc1031 100644
--- a/ml/fml40/features/functionalities/transports_logs.py
+++ b/ml/fml40/features/functionalities/transports_logs.py
@@ -1,13 +1,17 @@
-from ml.fml40.features.properties.values.documents.jobs.log_transportation_job import \
-    LogTransportationJob
-from ml.fml40.features.properties.values.documents.reports.log_transportation_report import \
-    LogTransportationReport
+from ml.fml40.features.properties.values.documents.jobs.log_transportation_job import (
+    LogTransportationJob,
+)
+from ml.fml40.features.properties.values.documents.reports.log_transportation_report import (
+    LogTransportationReport,
+)
 from ml.ml40.features.functionalities.functionality import Functionality
 
 
 class TransportsLogs(Functionality):
-    def __init__(self, namespace="fml40", name="", identifier=""):
-        super().__init__(namespace=namespace, name=name, identifier=identifier)
+    def __init__(self, namespace="fml40", name="", identifier="", parent=None):
+        super().__init__(
+            namespace=namespace, name=name, identifier=identifier, parent=parent
+        )
 
     def transportLogs(self, job: LogTransportationJob) -> LogTransportationReport:
         print("i am making Log transportation report for the job {}".format(job))
diff --git a/ml/fml40/features/functionalities/visualizes_forest.py b/ml/fml40/features/functionalities/visualizes_forest.py
index 7db2888..4d19e2c 100644
--- a/ml/fml40/features/functionalities/visualizes_forest.py
+++ b/ml/fml40/features/functionalities/visualizes_forest.py
@@ -2,5 +2,5 @@
 
 
 class VisualizesForest(Functionality):
-    def __init__(self, namespace="fml40", name="", identifier=""):
-        super().__init__(namespace=namespace, name=name, identifier=identifier)
+    def __init__(self, namespace="fml40", name="", identifier="", parent=None):
+        super().__init__(namespace=namespace, name=name, identifier=identifier, parent=parent)
diff --git a/ml/fml40/features/properties/values/assortment.py b/ml/fml40/features/properties/values/assortment.py
index c260fdd..2c7b105 100644
--- a/ml/fml40/features/properties/values/assortment.py
+++ b/ml/fml40/features/properties/values/assortment.py
@@ -2,8 +2,10 @@
 
 
 class Assortment(Value):
-    def __init__(self, namespace="fml40", name="", identifier=""):
-        super().__init__(namespace=namespace, name=name, identifier=identifier)
+    def __init__(self, namespace="fml40", name="", identifier="", parent=None):
+        super().__init__(
+            namespace=namespace, name=name, identifier=identifier, parent=parent
+        )
         self.__grade = None
         self.__json_out = dict()
 
diff --git a/ml/fml40/features/properties/values/basal_area.py b/ml/fml40/features/properties/values/basal_area.py
index 3fcd3ba..5daf5bf 100644
--- a/ml/fml40/features/properties/values/basal_area.py
+++ b/ml/fml40/features/properties/values/basal_area.py
@@ -2,5 +2,5 @@
 
 
 class BasalArea(Value):
-    def __init__(self, namespace="fml40", name="", identifier=""):
-        super().__init__(namespace=namespace, name=name, identifier=identifier)
+    def __init__(self, namespace="fml40", name="", identifier="", parent=None):
+        super().__init__(namespace=namespace, name=name, identifier=identifier, parent=parent)
diff --git a/ml/fml40/features/properties/values/dbh.py b/ml/fml40/features/properties/values/dbh.py
index afc6cf0..66b75aa 100644
--- a/ml/fml40/features/properties/values/dbh.py
+++ b/ml/fml40/features/properties/values/dbh.py
@@ -2,8 +2,10 @@
 
 
 class DBH(Value):
-    def __init__(self, namespace="fml40", name="", identifier=""):
-        super().__init__(namespace=namespace, name=name, identifier=identifier)
+    def __init__(self, namespace="fml40", name="", identifier="", parent=None):
+        super().__init__(
+            namespace=namespace, name=name, identifier=identifier, parent=parent
+        )
         self.__dbh = None
         self.__json_out = dict()
 
diff --git a/ml/fml40/features/properties/values/dominant_tree_species.py b/ml/fml40/features/properties/values/dominant_tree_species.py
index 662047d..dcf26b4 100644
--- a/ml/fml40/features/properties/values/dominant_tree_species.py
+++ b/ml/fml40/features/properties/values/dominant_tree_species.py
@@ -2,5 +2,7 @@
 
 
 class DominantTreeSpecies(Value):
-    def __init__(self, namespace="fml40", name="", identifier=""):
-        super().__init__(namespace=namespace, name=name, identifier=identifier)
+    def __init__(self, namespace="fml40", name="", identifier="", parent=None):
+        super().__init__(
+            namespace=namespace, name=name, identifier=identifier, parent=parent
+        )
diff --git a/ml/fml40/features/properties/values/fell_indicator.py b/ml/fml40/features/properties/values/fell_indicator.py
index bd15b4e..2f7d7af 100644
--- a/ml/fml40/features/properties/values/fell_indicator.py
+++ b/ml/fml40/features/properties/values/fell_indicator.py
@@ -2,8 +2,8 @@
 
 
 class FellIndicator(Value):
-    def __init__(self, namespace="fml40", name="", identifier=""):
-        super().__init__(namespace=namespace, name=name, identifier=identifier)
+    def __init__(self, namespace="fml40", name="", identifier="", parent=None):
+        super().__init__(namespace=namespace, name=name, identifier=identifier, parent=parent)
         self.__marked = None
         self.__json_out = dict()
 
diff --git a/ml/fml40/features/properties/values/felling_period.py b/ml/fml40/features/properties/values/felling_period.py
index 22dae92..6073823 100644
--- a/ml/fml40/features/properties/values/felling_period.py
+++ b/ml/fml40/features/properties/values/felling_period.py
@@ -2,8 +2,10 @@
 
 
 class FellingPeriod(Value):
-    def __init__(self, namespace="fml40",  name="", identifier=""):
-        super().__init__(namespace=namespace, name=name, identifier=identifier)
+    def __init__(self, namespace="fml40", name="", identifier="", parent=None):
+        super().__init__(
+            namespace=namespace, name=name, identifier=identifier, parent=parent
+        )
         self.__from = None
         self.__to = None
         self.__json_out = dict()
diff --git a/ml/fml40/features/properties/values/harvested_volume.py b/ml/fml40/features/properties/values/harvested_volume.py
index c7eff1a..10da162 100644
--- a/ml/fml40/features/properties/values/harvested_volume.py
+++ b/ml/fml40/features/properties/values/harvested_volume.py
@@ -2,8 +2,8 @@
 
 
 class HarvestedVolume(Value):
-    def __init__(self, namespace="fml40", name="", identifier=""):
-        super().__init__(namespace=namespace, name=name, identifier=identifier)
+    def __init__(self, namespace="fml40", name="", identifier="", parent=None):
+        super().__init__(namespace=namespace, name=name, identifier=identifier, parent=parent)
 
         self.__volume = None
         self.__json_out = None
diff --git a/ml/fml40/features/properties/values/harvesting_parameter.py b/ml/fml40/features/properties/values/harvesting_parameter.py
index acd62e1..d672cf0 100644
--- a/ml/fml40/features/properties/values/harvesting_parameter.py
+++ b/ml/fml40/features/properties/values/harvesting_parameter.py
@@ -2,8 +2,10 @@
 
 
 class HarvestingParameters(Value):
-    def __init__(self, namespace="fml40", name="", identifier=""):
-        super().__init__(namespace=namespace, name=name, identifier=identifier)
+    def __init__(self, namespace="fml40", name="", identifier="", parent=None):
+        super().__init__(
+            namespace=namespace, name=name, identifier=identifier, parent=parent
+        )
         self.__cuttingLengths = None
         self.__json_out = dict()
 
diff --git a/ml/fml40/features/properties/values/increment_volume.py b/ml/fml40/features/properties/values/increment_volume.py
index 8b92b4e..4de0539 100644
--- a/ml/fml40/features/properties/values/increment_volume.py
+++ b/ml/fml40/features/properties/values/increment_volume.py
@@ -2,5 +2,7 @@
 
 
 class IncrementVolume(Value):
-    def __init__(self, namespace="fml40", name="", identifier=""):
-        super().__init__(namespace=namespace, name=name, identifier=identifier)
+    def __init__(self, namespace="fml40", name="", identifier="", parent=None):
+        super().__init__(
+            namespace=namespace, name=name, identifier=identifier, parent=parent
+        )
diff --git a/ml/fml40/features/properties/values/interfering_branches.py b/ml/fml40/features/properties/values/interfering_branches.py
index 71abe4a..7e316de 100644
--- a/ml/fml40/features/properties/values/interfering_branches.py
+++ b/ml/fml40/features/properties/values/interfering_branches.py
@@ -2,8 +2,10 @@
 
 
 class InterferingBranches(Value):
-    def __init__(self, namespace="fml40", name="", identifier=""):
-        super().__init__(namespace=namespace, name=name, identifier=identifier)
+    def __init__(self, namespace="fml40", name="", identifier="", parent=None):
+        super().__init__(
+            namespace=namespace, name=name, identifier=identifier, parent=parent
+        )
         self.__exist = None
         self.__json_out = dict()
 
diff --git a/ml/fml40/features/properties/values/inventory_data.py b/ml/fml40/features/properties/values/inventory_data.py
index ddc3234..6d72fec 100644
--- a/ml/fml40/features/properties/values/inventory_data.py
+++ b/ml/fml40/features/properties/values/inventory_data.py
@@ -1,10 +1,11 @@
-from ml.fml40.features.properties.values.abstract_inventory import AbstractInventory
+from ml.fml40.features.properties.values.abstract_inventory import \
+    AbstractInventory
 from ml.ml40.features.properties.values.value import Value
 
 
 class InventoryData(Value):
-    def __init__(self, namespace="fml40", name="", identifier=""):
-        super().__init__(namespace=namespace, name=name, identifier=identifier)
+    def __init__(self, namespace="fml40", name="", identifier="", parent=None):
+        super().__init__(namespace=namespace, name=name, identifier=identifier, parent=parent)
 
         self.__data = []
         self.__json_out = dict()
diff --git a/ml/fml40/features/properties/values/mean_height.py b/ml/fml40/features/properties/values/mean_height.py
index a5ac880..fc7de85 100644
--- a/ml/fml40/features/properties/values/mean_height.py
+++ b/ml/fml40/features/properties/values/mean_height.py
@@ -2,5 +2,7 @@
 
 
 class MeanHeight(Value):
-    def __init__(self, namespace="fml40", name="", identifier=""):
-        super().__init__(namespace=namespace, name=name, identifier=identifier)
+    def __init__(self, namespace="fml40", name="", identifier="", parent=None):
+        super().__init__(
+            namespace=namespace, name=name, identifier=identifier, parent=parent
+        )
diff --git a/ml/fml40/features/properties/values/number_of_stems.py b/ml/fml40/features/properties/values/number_of_stems.py
index f9d25fd..3dad281 100644
--- a/ml/fml40/features/properties/values/number_of_stems.py
+++ b/ml/fml40/features/properties/values/number_of_stems.py
@@ -2,5 +2,7 @@
 
 
 class NumberOfStems(Value):
-    def __init__(self, namespace="fml40", name="", identifier=""):
-        super().__init__(namespace=namespace, name=name, identifier=identifier)
+    def __init__(self, namespace="fml40", name="", identifier="", parent=None):
+        super().__init__(
+            namespace=namespace, name=name, identifier=identifier, parent=parent
+        )
diff --git a/ml/fml40/features/properties/values/overhang.py b/ml/fml40/features/properties/values/overhang.py
index 4687355..ea1704c 100644
--- a/ml/fml40/features/properties/values/overhang.py
+++ b/ml/fml40/features/properties/values/overhang.py
@@ -2,8 +2,10 @@
 
 
 class Overhang(Value):
-    def __init__(self, namespace="fml40", name="", identifier=""):
-        super().__init__(namespace=namespace, name=name, identifier=identifier)
+    def __init__(self, namespace="fml40", name="", identifier="", parent=None):
+        super().__init__(
+            namespace=namespace, name=name, identifier=identifier, parent=parent
+        )
         self.__overhang = None
         self.__json_out = dict()
 
diff --git a/ml/fml40/features/properties/values/stand_attribute_set.py b/ml/fml40/features/properties/values/stand_attribute_set.py
index 1212815..90e9ee8 100644
--- a/ml/fml40/features/properties/values/stand_attribute_set.py
+++ b/ml/fml40/features/properties/values/stand_attribute_set.py
@@ -2,5 +2,5 @@
 
 
 class StandAttributeSet(Value):
-    def __init__(self, namespace="fml40", name="", identifier=""):
-        super().__init__(namespace=namespace, name=name, identifier=identifier)
+    def __init__(self, namespace="fml40", name="", identifier="", parent=None):
+        super().__init__(namespace=namespace, name=name, identifier=identifier, parent=parent)
diff --git a/ml/fml40/features/properties/values/stem_segment_properties.py b/ml/fml40/features/properties/values/stem_segment_properties.py
index d7e98d1..d99abc9 100644
--- a/ml/fml40/features/properties/values/stem_segment_properties.py
+++ b/ml/fml40/features/properties/values/stem_segment_properties.py
@@ -2,8 +2,8 @@
 
 
 class StemSegmentProperties(Value):
-    def __init__(self, namespace="fml40", name="", identifier=""):
-        super().__init__(namespace=namespace, name=name, identifier=identifier)
+    def __init__(self, namespace="fml40", name="", identifier="", parent=None):
+        super().__init__(namespace=namespace, name=name, identifier=identifier, parent=parent)
 
         self.__diameter = None
         self.__length = None
diff --git a/ml/fml40/features/properties/values/stock_volume.py b/ml/fml40/features/properties/values/stock_volume.py
index 0cf753b..8a3e109 100644
--- a/ml/fml40/features/properties/values/stock_volume.py
+++ b/ml/fml40/features/properties/values/stock_volume.py
@@ -2,5 +2,7 @@
 
 
 class StockVolume(Value):
-    def __init__(self, namespace="fml40", name="", identifier=""):
-        super().__init__(namespace=namespace, name=name, identifier=identifier)
+    def __init__(self, namespace="fml40", name="", identifier="", parent=None):
+        super().__init__(
+            namespace=namespace, name=name, identifier=identifier, parent=parent
+        )
diff --git a/ml/fml40/features/properties/values/thickness_class.py b/ml/fml40/features/properties/values/thickness_class.py
index 7972db8..0b08769 100644
--- a/ml/fml40/features/properties/values/thickness_class.py
+++ b/ml/fml40/features/properties/values/thickness_class.py
@@ -2,5 +2,7 @@
 
 
 class ThicknessClass(Value):
-    def __init__(self, namespace="fml40", name="", identifier=""):
-        super().__init__(namespace=namespace, name=name, identifier=identifier)
+    def __init__(self, namespace="fml40", name="", identifier="", parent=None):
+        super().__init__(
+            namespace=namespace, name=name, identifier=identifier, parent=parent
+        )
diff --git a/ml/fml40/features/properties/values/tilt.py b/ml/fml40/features/properties/values/tilt.py
index d2796fc..758a11e 100644
--- a/ml/fml40/features/properties/values/tilt.py
+++ b/ml/fml40/features/properties/values/tilt.py
@@ -2,8 +2,10 @@
 
 
 class Tilt(Value):
-    def __init__(self, namespace="fml40", name="", identifier=""):
-        super().__init__(namespace=namespace, name=name, identifier=identifier)
+    def __init__(self, namespace="fml40", name="", identifier="", parent=None):
+        super().__init__(
+            namespace=namespace, name=name, identifier=identifier, parent=parent
+        )
         self.__direction = None
         self.__tilt = None
         self.__json_out = dict()
diff --git a/ml/fml40/features/properties/values/tree_data.py b/ml/fml40/features/properties/values/tree_data.py
index 1ef0455..829c4e9 100644
--- a/ml/fml40/features/properties/values/tree_data.py
+++ b/ml/fml40/features/properties/values/tree_data.py
@@ -2,5 +2,7 @@
 
 
 class TreeData(Value):
-    def __init__(self, namespace="fml40", name="", identifier=""):
-        super().__init__(namespace=namespace, name=name, identifier=identifier)
+    def __init__(self, namespace="fml40", name="", identifier="", parent=None):
+        super().__init__(
+            namespace=namespace, name=name, identifier=identifier, parent=parent
+        )
diff --git a/ml/fml40/features/properties/values/tree_species.py b/ml/fml40/features/properties/values/tree_species.py
index 818dce1..85d65c0 100644
--- a/ml/fml40/features/properties/values/tree_species.py
+++ b/ml/fml40/features/properties/values/tree_species.py
@@ -2,5 +2,7 @@
 
 
 class TreeSpecies(Value):
-    def __init__(self, namespace="fml40", name="", identifier=""):
-        super().__init__(namespace=namespace, name=name, identifier=identifier)
+    def __init__(self, namespace="fml40", name="", identifier="", parent=None):
+        super().__init__(
+            namespace=namespace, name=name, identifier=identifier, parent=parent
+        )
diff --git a/ml/fml40/features/properties/values/tree_type.py b/ml/fml40/features/properties/values/tree_type.py
index 5187f68..6524a4b 100644
--- a/ml/fml40/features/properties/values/tree_type.py
+++ b/ml/fml40/features/properties/values/tree_type.py
@@ -2,8 +2,10 @@
 
 
 class TreeType(Value):
-    def __init__(self, namespace="fml40", name="", identifier=""):
-        super().__init__(namespace=namespace, name=name, identifier=identifier)
+    def __init__(self, namespace="fml40", name="", identifier="", parent=None):
+        super().__init__(
+            namespace=namespace, name=name, identifier=identifier, parent=parent
+        )
         self.__conifer = None
         self.__json_out = dict()
 
diff --git a/ml/fml40/features/properties/values/vitality_status.py b/ml/fml40/features/properties/values/vitality_status.py
index 00ffca6..067c8bf 100644
--- a/ml/fml40/features/properties/values/vitality_status.py
+++ b/ml/fml40/features/properties/values/vitality_status.py
@@ -2,8 +2,10 @@
 
 
 class VitalityStatus(Value):
-    def __init__(self, namespace="fml40", name="", identifier=""):
-        super().__init__(namespace=namespace, name=name, identifier=identifier)
+    def __init__(self, namespace="fml40", name="", identifier="", parent=None):
+        super().__init__(
+            namespace=namespace, name=name, identifier=identifier, parent=parent
+        )
         self.__ok = None
         self.__json_out = dict()
 
diff --git a/ml/fml40/features/properties/values/wood_quality.py b/ml/fml40/features/properties/values/wood_quality.py
index 844aeff..ca00905 100644
--- a/ml/fml40/features/properties/values/wood_quality.py
+++ b/ml/fml40/features/properties/values/wood_quality.py
@@ -2,5 +2,7 @@
 
 
 class WoodQuality(Value):
-    def __init__(self, namespace="fml40", name="", identifier=""):
-        super().__init__(namespace=namespace, name=name, identifier=identifier)
+    def __init__(self, namespace="fml40", name="", identifier="", parent=None):
+        super().__init__(
+            namespace=namespace, name=name, identifier=identifier, parent=parent
+        )
diff --git a/ml/fml40/roles/dts/forest/forest.py b/ml/fml40/roles/dts/forest/forest.py
index 33fd043..26c7e7d 100644
--- a/ml/fml40/roles/dts/forest/forest.py
+++ b/ml/fml40/roles/dts/forest/forest.py
@@ -2,5 +2,7 @@
 
 
 class Forest(DT):
-    def __init__(self, namespace="fml40", name="", identifier=""):
-        super().__init__(namespace=namespace, name=name, identifier=identifier)
+    def __init__(self, namespace="fml40", name="", identifier="", parent=None):
+        super().__init__(
+            namespace=namespace, name=name, identifier=identifier, parent=parent
+        )
diff --git a/ml/fml40/roles/dts/forest/forest_segment.py b/ml/fml40/roles/dts/forest/forest_segment.py
index c93b71f..cae5dde 100644
--- a/ml/fml40/roles/dts/forest/forest_segment.py
+++ b/ml/fml40/roles/dts/forest/forest_segment.py
@@ -2,5 +2,5 @@
 
 
 class ForestSegment(Forest):
-    def __init__(self, namespace="fml40", name="", identifier=""):
-        super().__init__(namespace=namespace, name=name, identifier=identifier)
+    def __init__(self, namespace="fml40", name="", identifier="", parent=None):
+        super().__init__(namespace=namespace, name=name, identifier=identifier, parent=parent)
diff --git a/ml/fml40/roles/dts/forest/tree.py b/ml/fml40/roles/dts/forest/tree.py
index 71f793c..c603cf0 100644
--- a/ml/fml40/roles/dts/forest/tree.py
+++ b/ml/fml40/roles/dts/forest/tree.py
@@ -2,5 +2,7 @@
 
 
 class Tree(Forest):
-    def __init__(self, namespace="fml40", name="", identifier=""):
-        super().__init__(namespace=namespace, name=name, identifier=identifier)
+    def __init__(self, namespace="fml40", name="", identifier="", parent=None):
+        super().__init__(
+            namespace=namespace, name=name, identifier=identifier, parent=parent
+        )
diff --git a/ml/fml40/roles/dts/handheld_devices/brushcutter.py b/ml/fml40/roles/dts/handheld_devices/brushcutter.py
index 079928a..2d17168 100644
--- a/ml/fml40/roles/dts/handheld_devices/brushcutter.py
+++ b/ml/fml40/roles/dts/handheld_devices/brushcutter.py
@@ -2,5 +2,5 @@
 
 
 class Brushcutter(HandheldDevice):
-    def __init__(self, namespace="fml40", name="", identifier=""):
-        super().__init__(namespace=namespace, name=name, identifier=identifier)
+    def __init__(self, namespace="fml40", name="", identifier="", parent=None):
+        super().__init__(namespace=namespace, name=name, identifier=identifier, parent=parent)
diff --git a/ml/fml40/roles/dts/handheld_devices/chainsaw.py b/ml/fml40/roles/dts/handheld_devices/chainsaw.py
index 6d67ceb..3d1cfa2 100644
--- a/ml/fml40/roles/dts/handheld_devices/chainsaw.py
+++ b/ml/fml40/roles/dts/handheld_devices/chainsaw.py
@@ -2,5 +2,7 @@
 
 
 class Chainsaw(HandheldDevice):
-    def __init__(self, namespace="fml40", name="", identifier=""):
-        super().__init__(namespace=namespace, name=name, identifier=identifier)
+    def __init__(self, namespace="fml40", name="", identifier="", parent=None):
+        super().__init__(
+            namespace=namespace, name=name, identifier=identifier, parent=parent
+        )
diff --git a/ml/fml40/roles/dts/machines/forest_machine.py b/ml/fml40/roles/dts/machines/forest_machine.py
index 10ccaf8..789be31 100644
--- a/ml/fml40/roles/dts/machines/forest_machine.py
+++ b/ml/fml40/roles/dts/machines/forest_machine.py
@@ -2,5 +2,5 @@
 
 
 class ForestMachine(Machine):
-    def __init__(self, namespace="fml40", name="", identifier=""):
-        super().__init__(namespace=namespace, name=name, identifier=identifier)
+    def __init__(self, namespace="fml40", name="", identifier="", parent=None):
+        super().__init__(namespace=namespace, name=name, identifier=identifier, parent=parent)
diff --git a/ml/fml40/roles/dts/machines/forwarder.py b/ml/fml40/roles/dts/machines/forwarder.py
index 770bf62..f82ec74 100644
--- a/ml/fml40/roles/dts/machines/forwarder.py
+++ b/ml/fml40/roles/dts/machines/forwarder.py
@@ -2,5 +2,7 @@
 
 
 class Forwarder(ForestMachine):
-    def __init__(self, namespace="fml40", name="", identifier=""):
-        super().__init__(namespace=namespace, name=name, identifier=identifier)
+    def __init__(self, namespace="fml40", name="", identifier="", parent=None):
+        super().__init__(
+            namespace=namespace, name=name, identifier=identifier, parent=parent
+        )
diff --git a/ml/fml40/roles/dts/machines/harvester.py b/ml/fml40/roles/dts/machines/harvester.py
index 4d1ea1d..08798bf 100644
--- a/ml/fml40/roles/dts/machines/harvester.py
+++ b/ml/fml40/roles/dts/machines/harvester.py
@@ -2,5 +2,7 @@
 
 
 class Harvester(ForestMachine):
-    def __init__(self, namespace="fml40", name="", identifier=""):
-        super().__init__(namespace=namespace, name=name, identifier=identifier)
+    def __init__(self, namespace="fml40", name="", identifier="", parent=None):
+        super().__init__(
+            namespace=namespace, name=name, identifier=identifier, parent=parent
+        )
diff --git a/ml/fml40/roles/dts/machines/log_truck.py b/ml/fml40/roles/dts/machines/log_truck.py
index 92e881e..af379d4 100644
--- a/ml/fml40/roles/dts/machines/log_truck.py
+++ b/ml/fml40/roles/dts/machines/log_truck.py
@@ -2,5 +2,7 @@
 
 
 class LogTruck(ForestMachine):
-    def __init__(self, namespace="fml40", name="", identifier=""):
-        super().__init__(namespace=namespace, name=name, identifier=identifier)
+    def __init__(self, namespace="fml40", name="", identifier="", parent=None):
+        super().__init__(
+            namespace=namespace, name=name, identifier=identifier, parent=parent
+        )
diff --git a/ml/fml40/roles/dts/machines/mini_tractor.py b/ml/fml40/roles/dts/machines/mini_tractor.py
index 0448af2..9f7d6eb 100644
--- a/ml/fml40/roles/dts/machines/mini_tractor.py
+++ b/ml/fml40/roles/dts/machines/mini_tractor.py
@@ -2,5 +2,5 @@
 
 
 class MiniTractor(ForestMachine):
-    def __init__(self, namespace="fml40", name="", identifier=""):
-        super().__init__(namespace=namespace, name=name, identifier=identifier)
+    def __init__(self, namespace="fml40", name="", identifier="", parent=None):
+        super().__init__(namespace=namespace, name=name, identifier=identifier, parent=parent)
diff --git a/ml/fml40/roles/dts/machines/skidder.py b/ml/fml40/roles/dts/machines/skidder.py
index c80cdd4..cd2071f 100644
--- a/ml/fml40/roles/dts/machines/skidder.py
+++ b/ml/fml40/roles/dts/machines/skidder.py
@@ -2,5 +2,7 @@
 
 
 class Skidder(ForestMachine):
-    def __init__(self, namespace="fml40",  name="", identifier=""):
-        super().__init__(namespace=namespace, name=name, identifier=identifier)
+    def __init__(self, namespace="fml40", name="", identifier="", parent=None):
+        super().__init__(
+            namespace=namespace, name=name, identifier=identifier, parent=parent
+        )
diff --git a/ml/fml40/roles/dts/machines/wheel_loader.py b/ml/fml40/roles/dts/machines/wheel_loader.py
index f967416..e746ac4 100644
--- a/ml/fml40/roles/dts/machines/wheel_loader.py
+++ b/ml/fml40/roles/dts/machines/wheel_loader.py
@@ -2,5 +2,7 @@
 
 
 class WheelLoader(ForestMachine):
-    def __init__(self, namespace="fml40", name="", identifier=""):
-        super().__init__(namespace=namespace, name=name, identifier=identifier)
+    def __init__(self, namespace="fml40", name="", identifier="", parent=None):
+        super().__init__(
+            namespace=namespace, name=name, identifier=identifier, parent=parent
+        )
diff --git a/ml/fml40/roles/dts/parts/grabber.py b/ml/fml40/roles/dts/parts/grabber.py
index 7c722e3..8097d57 100644
--- a/ml/fml40/roles/dts/parts/grabber.py
+++ b/ml/fml40/roles/dts/parts/grabber.py
@@ -2,5 +2,7 @@
 
 
 class Grabber(Part):
-    def __init__(self, namespace="fml40", name="", identifier=""):
-        super().__init__(namespace=namespace, name=name, identifier=identifier)
+    def __init__(self, namespace="fml40", name="", identifier="", parent=None):
+        super().__init__(
+            namespace=namespace, name=name, identifier=identifier, parent=parent
+        )
diff --git a/ml/fml40/roles/dts/parts/harvesting_head.py b/ml/fml40/roles/dts/parts/harvesting_head.py
index bd13e32..90f8979 100644
--- a/ml/fml40/roles/dts/parts/harvesting_head.py
+++ b/ml/fml40/roles/dts/parts/harvesting_head.py
@@ -2,5 +2,7 @@
 
 
 class HarvestingHead(Part):
-    def __init__(self, namespace="fml40", name="", identifier=""):
-        super().__init__(namespace=namespace, name=name, identifier=identifier)
+    def __init__(self, namespace="fml40", name="", identifier="", parent=None):
+        super().__init__(
+            namespace=namespace, name=name, identifier=identifier, parent=parent
+        )
diff --git a/ml/fml40/roles/dts/parts/log_loading_area.py b/ml/fml40/roles/dts/parts/log_loading_area.py
index 1b3d2e2..0548e51 100644
--- a/ml/fml40/roles/dts/parts/log_loading_area.py
+++ b/ml/fml40/roles/dts/parts/log_loading_area.py
@@ -2,5 +2,7 @@
 
 
 class LogLoadingArea(Part):
-    def __init__(self, namespace="fml40", name="", identifier=""):
-        super().__init__(namespace=namespace, name=name, identifier=identifier)
+    def __init__(self, namespace="fml40", name="", identifier="", parent=None):
+        super().__init__(
+            namespace=namespace, name=name, identifier=identifier, parent=parent
+        )
diff --git a/ml/fml40/roles/dts/parts/saw.py b/ml/fml40/roles/dts/parts/saw.py
index 99e9432..00fa90a 100644
--- a/ml/fml40/roles/dts/parts/saw.py
+++ b/ml/fml40/roles/dts/parts/saw.py
@@ -2,5 +2,7 @@
 
 
 class Saw(Part):
-    def __init__(self, namespace="fml40", name="", identifier=""):
-        super().__init__(namespace=namespace, name=name, identifier=identifier)
+    def __init__(self, namespace="fml40", name="", identifier="", parent=None):
+        super().__init__(
+            namespace=namespace, name=name, identifier=identifier, parent=parent
+        )
diff --git a/ml/fml40/roles/dts/parts/stacking_shield.py b/ml/fml40/roles/dts/parts/stacking_shield.py
index 2103a3e..fe97b68 100644
--- a/ml/fml40/roles/dts/parts/stacking_shield.py
+++ b/ml/fml40/roles/dts/parts/stacking_shield.py
@@ -4,5 +4,7 @@
 class StackingShield(Part):
     """roles for stacking shield"""
 
-    def __init__(self, namespace="fml40", name="", identifier=""):
-        super().__init__(namespace=namespace, name=name, identifier=identifier)
+    def __init__(self, namespace="fml40", name="", identifier="", parent=None):
+        super().__init__(
+            namespace=namespace, name=name, identifier=identifier, parent=parent
+        )
diff --git a/ml/fml40/roles/dts/parts/winch.py b/ml/fml40/roles/dts/parts/winch.py
index a8fb6d7..e54f12e 100644
--- a/ml/fml40/roles/dts/parts/winch.py
+++ b/ml/fml40/roles/dts/parts/winch.py
@@ -2,5 +2,7 @@
 
 
 class Winch(Part):
-    def __init__(self, namespace="fml40", name="", identifier=""):
-        super().__init__(namespace=namespace, name=name, identifier=identifier)
+    def __init__(self, namespace="fml40", name="", identifier="", parent=None):
+        super().__init__(
+            namespace=namespace, name=name, identifier=identifier, parent=parent
+        )
diff --git a/ml/fml40/roles/dts/persons/forest_owner.py b/ml/fml40/roles/dts/persons/forest_owner.py
index a233dec..f74769f 100644
--- a/ml/fml40/roles/dts/persons/forest_owner.py
+++ b/ml/fml40/roles/dts/persons/forest_owner.py
@@ -2,5 +2,7 @@
 
 
 class ForestOwner(Person):
-    def __init__(self, namespace="fml40", name="", identifier=""):
-        super().__init__(namespace=namespace, name=name, identifier=identifier)
+    def __init__(self, namespace="fml40", name="", identifier="", parent=None):
+        super().__init__(
+            namespace=namespace, name=name, identifier=identifier, parent=parent
+        )
diff --git a/ml/fml40/roles/dts/persons/forest_worker.py b/ml/fml40/roles/dts/persons/forest_worker.py
index 21dc5c7..cb62f2c 100644
--- a/ml/fml40/roles/dts/persons/forest_worker.py
+++ b/ml/fml40/roles/dts/persons/forest_worker.py
@@ -2,5 +2,5 @@
 
 
 class ForestWorker(Person):
-    def __init__(self, namespace="fml40", name="", identifier=""):
-        super().__init__(namespace=namespace, name=name, identifier=identifier)
+    def __init__(self, namespace="fml40", name="", identifier="", parent=None):
+        super().__init__(namespace=namespace, name=name, identifier=identifier, parent=parent)
diff --git a/ml/fml40/roles/dts/persons/mini_tractor_operator.py b/ml/fml40/roles/dts/persons/mini_tractor_operator.py
index e078aa4..453c738 100644
--- a/ml/fml40/roles/dts/persons/mini_tractor_operator.py
+++ b/ml/fml40/roles/dts/persons/mini_tractor_operator.py
@@ -2,5 +2,7 @@
 
 
 class MiniTractorOperator(Person):
-    def __init__(self, namespace="fml40", name="", identifier=""):
-        super().__init__(namespace=namespace, name=name, identifier=identifier)
+    def __init__(self, namespace="fml40", name="", identifier="", parent=None):
+        super().__init__(
+            namespace=namespace, name=name, identifier=identifier, parent=parent
+        )
diff --git a/ml/fml40/roles/dts/persons/skidder_operator.py b/ml/fml40/roles/dts/persons/skidder_operator.py
index f53e076..2df051d 100644
--- a/ml/fml40/roles/dts/persons/skidder_operator.py
+++ b/ml/fml40/roles/dts/persons/skidder_operator.py
@@ -2,5 +2,7 @@
 
 
 class SkidderOperator(Person):
-    def __init__(self, namespace="fml40", name="", identifier=""):
-        super().__init__(namespace=namespace, name=name, identifier=identifier)
+    def __init__(self, namespace="fml40", name="", identifier="", parent=None):
+        super().__init__(
+            namespace=namespace, name=name, identifier=identifier, parent=parent
+        )
diff --git a/ml/fml40/roles/dts/sensors/barkbeetle_sensor.py b/ml/fml40/roles/dts/sensors/barkbeetle_sensor.py
index 8add194..c807737 100644
--- a/ml/fml40/roles/dts/sensors/barkbeetle_sensor.py
+++ b/ml/fml40/roles/dts/sensors/barkbeetle_sensor.py
@@ -2,5 +2,7 @@
 
 
 class BarkbeetleSensor(Sensor):
-    def __init__(self, namespace="fml40", name="", identifier=""):
-        super().__init__(namespace=namespace, name=name, identifier=identifier)
+    def __init__(self, namespace="fml40", name="", identifier="", parent=None):
+        super().__init__(
+            namespace=namespace, name=name, identifier=identifier, parent=parent
+        )
diff --git a/ml/fml40/roles/dts/sensors/vitality_sensor.py b/ml/fml40/roles/dts/sensors/vitality_sensor.py
index 39e755b..d63f929 100644
--- a/ml/fml40/roles/dts/sensors/vitality_sensor.py
+++ b/ml/fml40/roles/dts/sensors/vitality_sensor.py
@@ -2,5 +2,7 @@
 
 
 class VitalitySensor(Sensor):
-    def __init__(self, namespace="fml40", name="", identifier=""):
-        super().__init__(namespace=namespace, name=name, identifier=identifier)
+    def __init__(self, namespace="fml40", name="", identifier="", parent=None):
+        super().__init__(
+            namespace=namespace, name=name, identifier=identifier, parent=parent
+        )
diff --git a/ml/fml40/roles/dts/sites/forest_enterprise.py b/ml/fml40/roles/dts/sites/forest_enterprise.py
index 0c52b3e..3dacdcf 100644
--- a/ml/fml40/roles/dts/sites/forest_enterprise.py
+++ b/ml/fml40/roles/dts/sites/forest_enterprise.py
@@ -2,5 +2,7 @@
 
 
 class ForestEnterprise(Site):
-    def __init__(self, namespace="fml40", name="", identifier=""):
-        super().__init__(namespace=namespace, name=name, identifier=identifier)
+    def __init__(self, namespace="fml40", name="", identifier="", parent=None):
+        super().__init__(
+            namespace=namespace, name=name, identifier=identifier, parent=parent
+        )
diff --git a/ml/fml40/roles/dts/sites/hauler.py b/ml/fml40/roles/dts/sites/hauler.py
index 357d756..ec30f0e 100644
--- a/ml/fml40/roles/dts/sites/hauler.py
+++ b/ml/fml40/roles/dts/sites/hauler.py
@@ -2,5 +2,7 @@
 
 
 class Hauler(Site):
-    def __init__(self, namespace="fml40", name="", identifier=""):
-        super().__init__(namespace=namespace, name=name, identifier=identifier)
+    def __init__(self, namespace="fml40", name="", identifier="", parent=None):
+        super().__init__(
+            namespace=namespace, name=name, identifier=identifier, parent=parent
+        )
diff --git a/ml/fml40/roles/dts/woods/stem_segment.py b/ml/fml40/roles/dts/woods/stem_segment.py
index 9bab86c..2c8006f 100644
--- a/ml/fml40/roles/dts/woods/stem_segment.py
+++ b/ml/fml40/roles/dts/woods/stem_segment.py
@@ -2,5 +2,7 @@
 
 
 class StemSegment(Wood):
-    def __init__(self, namespace="fml40", name="", identifier=""):
-        super().__init__(namespace=namespace, name=name, identifier=identifier)
+    def __init__(self, namespace="fml40", name="", identifier="", parent=None):
+        super().__init__(
+            namespace=namespace, name=name, identifier=identifier, parent=parent
+        )
diff --git a/ml/fml40/roles/dts/woods/wood.py b/ml/fml40/roles/dts/woods/wood.py
index 916c5bc..9996a67 100644
--- a/ml/fml40/roles/dts/woods/wood.py
+++ b/ml/fml40/roles/dts/woods/wood.py
@@ -2,5 +2,7 @@
 
 
 class Wood(DT):
-    def __init__(self, namespace="fml40", name="", identifier=""):
-        super().__init__(namespace=namespace, name=name, identifier=identifier)
+    def __init__(self, namespace="fml40", name="", identifier="", parent=None):
+        super().__init__(
+            namespace=namespace, name=name, identifier=identifier, parent=parent
+        )
diff --git a/ml/fml40/roles/dts/woods/wood_pile.py b/ml/fml40/roles/dts/woods/wood_pile.py
index 31d73e2..486fb8d 100644
--- a/ml/fml40/roles/dts/woods/wood_pile.py
+++ b/ml/fml40/roles/dts/woods/wood_pile.py
@@ -2,5 +2,7 @@
 
 
 class WoodPile(Wood):
-    def __init__(self, namespace="fml40", name="", identifier=""):
-        super().__init__(namespace=namespace, name=name, identifier=identifier)
+    def __init__(self, namespace="fml40", name="", identifier="", parent=None):
+        super().__init__(
+            namespace=namespace, name=name, identifier=identifier, parent=parent
+        )
diff --git a/ml/ml40/features/functionalities/accepts_jobs.py b/ml/ml40/features/functionalities/accepts_jobs.py
index 7ab7338..0938891 100644
--- a/ml/ml40/features/functionalities/accepts_jobs.py
+++ b/ml/ml40/features/functionalities/accepts_jobs.py
@@ -1,16 +1,14 @@
 from ml.identifier import ID
 from ml.ml40.features.functionalities.functionality import Functionality
 from ml.ml40.features.properties.values.documents.jobs.job import Job
-from ml.ml40.features.properties.values.documents.jobs.job_status import \
-    JobStatus
+from ml.ml40.features.properties.values.documents.jobs.job_status import JobStatus
 
 
 class AcceptsJobs(Functionality):
-    def __init__(self, namespace="ml40", name="", identifier=""):
+    def __init__(self, namespace="ml40", name="", identifier="", parent=None):
         super().__init__(
-            namespace=namespace,
-            name=name,
-            identifier=identifier)
+            namespace=namespace, name=name, identifier=identifier, parent=parent
+        )
 
     def acceptJob(self, job: Job) -> bool:
         pass
diff --git a/ml/ml40/features/functionalities/accepts_reports.py b/ml/ml40/features/functionalities/accepts_reports.py
index 10099a6..0960370 100644
--- a/ml/ml40/features/functionalities/accepts_reports.py
+++ b/ml/ml40/features/functionalities/accepts_reports.py
@@ -3,11 +3,12 @@
 
 
 class AcceptsReports(Functionality):
-    def __init__(self,namespace="ml40", name="", identifier=""):
+    def __init__(self,namespace="ml40", name="", identifier="", parent=None):
         super().__init__(
             namespace=namespace,
             name=name,
-            identifier=identifier)
+            identifier=identifier,
+            parent=parent)
 
     def acceptReport(self, report: Report):
         pass
diff --git a/ml/ml40/features/functionalities/clears_jobs.py b/ml/ml40/features/functionalities/clears_jobs.py
index 83f7614..e7f0318 100644
--- a/ml/ml40/features/functionalities/clears_jobs.py
+++ b/ml/ml40/features/functionalities/clears_jobs.py
@@ -3,11 +3,10 @@
 
 
 class ClearsJobs(Functionality):
-    def __init__(self, namespace="ml40", name="", identifier=""):
+    def __init__(self, namespace="ml40", name="", identifier="", parent=None):
         super().__init__(
-            namespace=namespace,
-            name=name,
-            identifier=identifier)
+            namespace=namespace, name=name, identifier=identifier, parent=parent
+        )
 
     def clear(self, job: Job) -> bool:
         pass
diff --git a/ml/ml40/features/functionalities/functionality.py b/ml/ml40/features/functionalities/functionality.py
index 34ce66b..ff01b9d 100644
--- a/ml/ml40/features/functionalities/functionality.py
+++ b/ml/ml40/features/functionalities/functionality.py
@@ -3,11 +3,8 @@
 
 class Functionality(Feature):
     """Genric implementation of a Functionaliy."""
-    def __init__(self, namespace="ml40", name="", identifier=""):
-        super(Functionality, self).__init__(
-            namespace=namespace,
-            name=name,
-            identifier=identifier)
-
-
 
+    def __init__(self, namespace="ml40", name="", identifier="", parent=None):
+        super(Functionality, self).__init__(
+            namespace=namespace, name=name, identifier=identifier, parent=parent
+        )
diff --git a/ml/ml40/features/functionalities/manages_jobs.py b/ml/ml40/features/functionalities/manages_jobs.py
index 342e02b..96055e3 100644
--- a/ml/ml40/features/functionalities/manages_jobs.py
+++ b/ml/ml40/features/functionalities/manages_jobs.py
@@ -5,11 +5,12 @@
 
 
 class ManagesJobs(Functionality):
-    def __init__(self, namespace="ml40", name="", identifier=""):
+    def __init__(self, namespace="ml40", name="", identifier="", parent=None):
         super().__init__(
             namespace=namespace,
             name=name,
-            identifier=identifier)
+            identifier=identifier,
+            parent=parent)
 
     def acceptReport(self, report: Report):
         pass
diff --git a/ml/ml40/features/functionalities/plans_routes.py b/ml/ml40/features/functionalities/plans_routes.py
index 45e4fb3..9111c3f 100644
--- a/ml/ml40/features/functionalities/plans_routes.py
+++ b/ml/ml40/features/functionalities/plans_routes.py
@@ -4,12 +4,10 @@
 
 
 class PlansRoutes(Functionality):
-    def __init__(self, namespace="ml40", name="", identifier=""):
+    def __init__(self, namespace="ml40", name="", identifier="", parent=None):
         super().__init__(
-            namespace=namespace,
-            name=name,
-            identifier=identifier)
-
+            namespace=namespace, name=name, identifier=identifier, parent=parent
+        )
 
     def planRoute(self, start: Location, goal: Location) -> Route:
         pass
diff --git a/ml/ml40/features/functionalities/provides_map_data.py b/ml/ml40/features/functionalities/provides_map_data.py
index 93c148e..3e316e1 100644
--- a/ml/ml40/features/functionalities/provides_map_data.py
+++ b/ml/ml40/features/functionalities/provides_map_data.py
@@ -4,11 +4,12 @@
 
 
 class ProvidesMapData(Functionality):
-    def __init__(self,namespace="ml40", name="", identifier=""):
+    def __init__(self,namespace="ml40", name="", identifier="", parent=None):
         super().__init__(
             namespace=namespace,
             name=name,
-            identifier=identifier)
+            identifier=identifier,
+            parent=parent)
 
     def getMapData(self, map: int) -> PassabilityReport:
         pass
diff --git a/ml/ml40/features/functionalities/provides_operational_data.py b/ml/ml40/features/functionalities/provides_operational_data.py
index fdae2cf..c2aaee6 100644
--- a/ml/ml40/features/functionalities/provides_operational_data.py
+++ b/ml/ml40/features/functionalities/provides_operational_data.py
@@ -3,13 +3,10 @@
 
 
 class ProvidesOperationalData(Functionality):
-    def __init__(self, namespace="ml40", name="", identifier=""):
+    def __init__(self, namespace="ml40", name="", identifier="", parent=None):
         super().__init__(
-            namespace=namespace,
-            name=name,
-            identifier=identifier)
+            namespace=namespace, name=name, identifier=identifier, parent=parent
+        )
 
     def getOperationalData(self) -> Report:
         return "this is a simply report"
-
-
diff --git a/ml/ml40/features/functionalities/renders.py b/ml/ml40/features/functionalities/renders.py
index 1d7c685..bd3ce1f 100644
--- a/ml/ml40/features/functionalities/renders.py
+++ b/ml/ml40/features/functionalities/renders.py
@@ -3,11 +3,10 @@
 
 
 class Renders(Functionality):
-    def __init__(self, namespace="ml40", name="", identifier=""):
+    def __init__(self, namespace="ml40", name="", identifier="", parent=None):
         super().__init__(
-            namespace=namespace,
-            name=name,
-            identifier=identifier)
+            namespace=namespace, name=name, identifier=identifier, parent=parent
+        )
 
     def create3DVideo(self, identifier: ID) -> bytes:
         pass
diff --git a/ml/ml40/features/properties/associations/association.py b/ml/ml40/features/properties/associations/association.py
index 8103b88..f0f8c37 100644
--- a/ml/ml40/features/properties/associations/association.py
+++ b/ml/ml40/features/properties/associations/association.py
@@ -2,5 +2,7 @@
 
 
 class Association(Property):
-    def __init__(self, namespace="ml40", name="", identifier=""):
-        super().__init__(namespace=namespace, name=name, identifier=identifier)
+    def __init__(self, namespace="ml40", name="", identifier="", parent=None):
+        super().__init__(
+            namespace=namespace, name=name, identifier=identifier, parent=parent
+        )
diff --git a/ml/ml40/features/properties/associations/composite.py b/ml/ml40/features/properties/associations/composite.py
index e22d56e..4b19781 100644
--- a/ml/ml40/features/properties/associations/composite.py
+++ b/ml/ml40/features/properties/associations/composite.py
@@ -2,11 +2,10 @@
 
 
 class Composite(Association):
-    def __init__(self, namespace="ml40",name="", identifier=""):
+    def __init__(self, namespace="ml40", name="", identifier="", parent=None):
         super().__init__(
-            namespace=namespace,
-            name=name,
-            identifier=identifier)
+            namespace=namespace, name=name, identifier=identifier, parent=parent
+        )
         self.__targets = dict()
         self.__json_out = dict()
 
@@ -25,4 +24,3 @@ def to_json(self):
             for key in self.targets.keys():
                 self.__json_out["targets"].append(self.targets[key].to_subthing_json())
         return self.__json_out
-
diff --git a/ml/ml40/features/properties/associations/shared.py b/ml/ml40/features/properties/associations/shared.py
index b6a3253..a6a8198 100644
--- a/ml/ml40/features/properties/associations/shared.py
+++ b/ml/ml40/features/properties/associations/shared.py
@@ -2,11 +2,10 @@
 
 
 class Shared(Association):
-    def __init__(self, namespace="ml40",name="", identifier=""):
+    def __init__(self, namespace="ml40", name="", identifier="", parent=None):
         super().__init__(
-            namespace=namespace,
-            name=name,
-            identifier=identifier)
+            namespace=namespace, name=name, identifier=identifier, parent=parent
+        )
         self.__targets = []
         self.__targets = dict()
         self.__json_out = dict()
diff --git a/ml/ml40/features/properties/property.py b/ml/ml40/features/properties/property.py
index 129c361..56b1dc2 100644
--- a/ml/ml40/features/properties/property.py
+++ b/ml/ml40/features/properties/property.py
@@ -2,11 +2,7 @@
 
 
 class Property(Feature):
-    def __init__(self, namespace="ml40", name="", identifier=""):
+    def __init__(self, namespace="ml40", name="", identifier="", parent=None):
         super(Property, self).__init__(
-            namespace=namespace,
-            name=name,
-            identifier=identifier)
-
-
-
+            namespace=namespace, name=name, identifier=identifier, parent=parent
+        )
diff --git a/ml/ml40/features/properties/values/acceleration.py b/ml/ml40/features/properties/values/acceleration.py
index 322c7bb..2360577 100644
--- a/ml/ml40/features/properties/values/acceleration.py
+++ b/ml/ml40/features/properties/values/acceleration.py
@@ -2,8 +2,7 @@
 
 
 class Acceleration(Value):
-    def __init__(self, namespace="ml40", name="", identifier=""):
+    def __init__(self, namespace="ml40", name="", identifier="", parent=None):
         super().__init__(
-            namespace=namespace,
-            name=name,
-            identifier=identifier)
+            namespace=namespace, name=name, identifier=identifier, parent=parent
+        )
diff --git a/ml/ml40/features/properties/values/accoustic_indices.py b/ml/ml40/features/properties/values/accoustic_indices.py
index 42981bf..f6b8837 100644
--- a/ml/ml40/features/properties/values/accoustic_indices.py
+++ b/ml/ml40/features/properties/values/accoustic_indices.py
@@ -2,8 +2,7 @@
 
 
 class AcousticIndices(Value):
-    def __init__(self, namespace="ml40", name="", identifier=""):
+    def __init__(self, namespace="ml40", name="", identifier="", parent=None):
         super().__init__(
-            namespace=namespace,
-            name=name,
-            identifier=identifier)
+            namespace=namespace, name=name, identifier=identifier, parent=parent
+        )
diff --git a/ml/ml40/features/properties/values/address.py b/ml/ml40/features/properties/values/address.py
index 38e61f9..84d9038 100644
--- a/ml/ml40/features/properties/values/address.py
+++ b/ml/ml40/features/properties/values/address.py
@@ -2,11 +2,10 @@
 
 
 class Address(Value):
-    def __init__(self, namespace="ml40", name="", identifier=""):
+    def __init__(self, namespace="ml40", name="", identifier="", parent=None):
         super().__init__(
-            namespace=namespace,
-            name=name,
-            identifier=identifier)
+            namespace=namespace, name=name, identifier=identifier, parent=parent
+        )
 
         self.city = None
         self.country = None
diff --git a/ml/ml40/features/properties/values/air_pressure.py b/ml/ml40/features/properties/values/air_pressure.py
index 96e4a50..c06c849 100644
--- a/ml/ml40/features/properties/values/air_pressure.py
+++ b/ml/ml40/features/properties/values/air_pressure.py
@@ -2,9 +2,7 @@
 
 
 class AirPressure(Value):
-    def __init__(self, namespace="ml40", name="", identifier=""):
+    def __init__(self, namespace="ml40", name="", identifier="", parent=None):
         super().__init__(
-            namespace=namespace,
-            name=name,
-            identifier=identifier
+            namespace=namespace, name=name, identifier=identifier, parent=parent
         )
diff --git a/ml/ml40/features/properties/values/area.py b/ml/ml40/features/properties/values/area.py
index e60817c..0283c29 100644
--- a/ml/ml40/features/properties/values/area.py
+++ b/ml/ml40/features/properties/values/area.py
@@ -2,9 +2,7 @@
 
 
 class Area(Value):
-    def __init__(self, namespace="ml40", name="", identifier=""):
+    def __init__(self, namespace="ml40", name="", identifier="", parent=None):
         super().__init__(
-            namespace=namespace,
-            name=name,
-            identifier=identifier
+            namespace=namespace, name=name, identifier=identifier, parent=parent
         )
diff --git a/ml/ml40/features/properties/values/brightness.py b/ml/ml40/features/properties/values/brightness.py
index 4810a53..a10251d 100644
--- a/ml/ml40/features/properties/values/brightness.py
+++ b/ml/ml40/features/properties/values/brightness.py
@@ -2,9 +2,7 @@
 
 
 class Brightness(Value):
-    def __init__(self, namespace="ml40", name="", identifier=""):
+    def __init__(self, namespace="ml40", name="", identifier="", parent=None):
         super().__init__(
-            namespace=namespace,
-            name=name,
-            identifier=identifier
+            namespace=namespace, name=name, identifier=identifier, parent=parent
         )
diff --git a/ml/ml40/features/properties/values/count.py b/ml/ml40/features/properties/values/count.py
index c86af83..0316702 100644
--- a/ml/ml40/features/properties/values/count.py
+++ b/ml/ml40/features/properties/values/count.py
@@ -2,11 +2,10 @@
 
 
 class Count(Value):
-    def __init__(self, namespace="ml40", name="", identifier=""):
+    def __init__(self, namespace="ml40", name="", identifier="", parent=None):
         super().__init__(
-            namespace=namespace,
-            name=name,
-            identifier=identifier)
+            namespace=namespace, name=name, identifier=identifier, parent=parent
+        )
         self.currentCount = None
         self.maxCount = None
         self.minCount = None
diff --git a/ml/ml40/features/properties/values/dimensions.py b/ml/ml40/features/properties/values/dimensions.py
index e74f9ff..818cb30 100644
--- a/ml/ml40/features/properties/values/dimensions.py
+++ b/ml/ml40/features/properties/values/dimensions.py
@@ -2,11 +2,10 @@
 
 
 class Dimensions(Value):
-    def __init__(self, namespace="ml40", name="", identifier=""):
+    def __init__(self, namespace="ml40", name="", identifier="", parent=None):
         super().__init__(
-            namespace=namespace,
-            name=name,
-            identifier=identifier)
+            namespace=namespace, name=name, identifier=identifier, parent=parent
+        )
 
         self.height = None
         self.length = None
diff --git a/ml/ml40/features/properties/values/distance.py b/ml/ml40/features/properties/values/distance.py
index 36e93f7..0e1faa3 100644
--- a/ml/ml40/features/properties/values/distance.py
+++ b/ml/ml40/features/properties/values/distance.py
@@ -2,11 +2,10 @@
 
 
 class Distance(Value):
-    def __init__(self, namespace="ml40", name="", identifier=""):
+    def __init__(self, namespace="ml40", name="", identifier="", parent=None):
         super().__init__(
-            namespace=namespace,
-            name=name,
-            identifier=identifier)
+            namespace=namespace, name=name, identifier=identifier, parent=parent
+        )
         self.__distance = None
 
     @property
diff --git a/ml/ml40/features/properties/values/documents/document.py b/ml/ml40/features/properties/values/documents/document.py
index 8286928..703b98f 100644
--- a/ml/ml40/features/properties/values/documents/document.py
+++ b/ml/ml40/features/properties/values/documents/document.py
@@ -2,8 +2,7 @@
 
 
 class Document(Value):
-    def __init__(self, namespace="ml40", name="", identifier=""):
+    def __init__(self, namespace="ml40", name="", identifier="", parent=None):
         super().__init__(
-            namespace=namespace,
-            name=name,
-            identifier=identifier)
+            namespace=namespace, name=name, identifier=identifier, parent=parent
+        )
diff --git a/ml/ml40/features/properties/values/documents/jobs/generic_job.py b/ml/ml40/features/properties/values/documents/jobs/generic_job.py
index 6c9c88d..5d79eed 100644
--- a/ml/ml40/features/properties/values/documents/jobs/generic_job.py
+++ b/ml/ml40/features/properties/values/documents/jobs/generic_job.py
@@ -2,15 +2,13 @@
 
 
 class GenericJob(Job):
-    def __init__(self, namespace="ml40", name="", identifier=""):
+    def __init__(self, namespace="ml40", name="", identifier="", parent=None):
         super().__init__(
-            namespace=namespace,
-            name=name,
-            identifier=identifier)
+            namespace=namespace, name=name, identifier=identifier, parent=parent
+        )
         self.__content = None
         self.__json_out = dict()
 
-
     @property
     def content(self):
         return self.__content
diff --git a/ml/ml40/features/properties/values/documents/jobs/job.py b/ml/ml40/features/properties/values/documents/jobs/job.py
index 2be9abc..f7929f7 100644
--- a/ml/ml40/features/properties/values/documents/jobs/job.py
+++ b/ml/ml40/features/properties/values/documents/jobs/job.py
@@ -3,8 +3,10 @@
 
 
 class Job(Document):
-    def __init__(self, namespace="ml40", name="", identifier=""):
-        super().__init__(namespace=namespace, name=name, identifier=identifier)
+    def __init__(self, namespace="ml40", name="", identifier="", parent=None):
+        super().__init__(
+            namespace=namespace, name=name, identifier=identifier, parent=parent
+        )
         self.__status = None
         self.__json_out = dict()
 
diff --git a/ml/ml40/features/properties/values/documents/jobs/job_list.py b/ml/ml40/features/properties/values/documents/jobs/job_list.py
index 18a801a..7127aa8 100644
--- a/ml/ml40/features/properties/values/documents/jobs/job_list.py
+++ b/ml/ml40/features/properties/values/documents/jobs/job_list.py
@@ -2,8 +2,7 @@
 
 
 class JobList(Job):
-    def __init__(self, namespace="ml40", name="", identifier=""):
+    def __init__(self, namespace="ml40", name="", identifier="", parent=None):
         super().__init__(
-            namespace=namespace,
-            name=name,
-            identifier=identifier)
+            namespace=namespace, name=name, identifier=identifier, parent=parent
+        )
diff --git a/ml/ml40/features/properties/values/documents/reports/production_data.py b/ml/ml40/features/properties/values/documents/reports/production_data.py
index 406b7d1..9d6fb21 100644
--- a/ml/ml40/features/properties/values/documents/reports/production_data.py
+++ b/ml/ml40/features/properties/values/documents/reports/production_data.py
@@ -2,8 +2,7 @@
 
 
 class ProductionData(Report):
-    def __init__(self, namespace="ml40", name="", identifier=""):
+    def __init__(self, namespace="ml40", name="", identifier="", parent=None):
         super().__init__(
-            namespace=namespace,
-            name=name,
-            identifier=identifier)
+            namespace=namespace, name=name, identifier=identifier, parent=parent
+        )
diff --git a/ml/ml40/features/properties/values/documents/reports/report.py b/ml/ml40/features/properties/values/documents/reports/report.py
index 20963b8..51e5261 100644
--- a/ml/ml40/features/properties/values/documents/reports/report.py
+++ b/ml/ml40/features/properties/values/documents/reports/report.py
@@ -2,5 +2,7 @@
 
 
 class Report(Document):
-    def __init__(self, namespace="ml40", name="", identifier=""):
-        super().__init__(namespace=namespace, name=name, identifier=identifier)
+    def __init__(self, namespace="ml40", name="", identifier="", parent=None):
+        super().__init__(
+            namespace=namespace, name=name, identifier=identifier, parent=parent
+        )
diff --git a/ml/ml40/features/properties/values/expansion_length.py b/ml/ml40/features/properties/values/expansion_length.py
index 22ede75..370033e 100644
--- a/ml/ml40/features/properties/values/expansion_length.py
+++ b/ml/ml40/features/properties/values/expansion_length.py
@@ -2,11 +2,10 @@
 
 
 class ExpansionLength(Value):
-    def __init__(self, namespace="ml40", name="", identifier=""):
+    def __init__(self, namespace="ml40", name="", identifier="", parent=None):
         super().__init__(
-            namespace=namespace,
-            name=name,
-            identifier=identifier)
+            namespace=namespace, name=name, identifier=identifier, parent=parent
+        )
 
         self.__current_length = None
         self.__max_length = None
@@ -36,4 +35,3 @@ def to_json(self):
             self.__json_out["maxLength"] = self.__max_length
 
         return self.__json_out
-
diff --git a/ml/ml40/features/properties/values/force.py b/ml/ml40/features/properties/values/force.py
index 56b2f95..94bbfba 100644
--- a/ml/ml40/features/properties/values/force.py
+++ b/ml/ml40/features/properties/values/force.py
@@ -2,11 +2,9 @@
 
 
 class Force(Value):
-    def __init__(self, namespace="ml40", name="", identifier=""):
+    def __init__(self, namespace="ml40", name="", identifier="", parent=None):
         super().__init__(
-            namespace=namespace,
-            name=name,
-            identifier=identifier
+            namespace=namespace, name=name, identifier=identifier, parent=parent
         )
         self.__force = None
         self.__min_force = None
diff --git a/ml/ml40/features/properties/values/generic_property.py b/ml/ml40/features/properties/values/generic_property.py
index d01a0d2..d572cdf 100644
--- a/ml/ml40/features/properties/values/generic_property.py
+++ b/ml/ml40/features/properties/values/generic_property.py
@@ -2,11 +2,9 @@
 
 
 class GenericProperty(Value):
-    def __init__(self, namespace="ml40", name="", identifier=""):
+    def __init__(self, namespace="ml40", name="", identifier="", parent=None):
         super().__init__(
-            namespace=namespace,
-            name=name,
-            identifier=identifier
+            namespace=namespace, name=name, identifier=identifier, parent=parent
         )
         self.value = None
         self.__json_out = dict()
diff --git a/ml/ml40/features/properties/values/gyroscope_value.py b/ml/ml40/features/properties/values/gyroscope_value.py
index f314374..cb05304 100644
--- a/ml/ml40/features/properties/values/gyroscope_value.py
+++ b/ml/ml40/features/properties/values/gyroscope_value.py
@@ -2,8 +2,9 @@
 
 
 class GyroscopeValue(Value):
-    def __init__(self, namespace="ml40", name="", identifier=""):
+    def __init__(self, namespace="ml40", name="", identifier="", parent=None):
         super().__init__(
             namespace=namespace,
             name=name,
-            identifier=identifier)
+            identifier=identifier,
+            parent=parent)
diff --git a/ml/ml40/features/properties/values/infrared.py b/ml/ml40/features/properties/values/infrared.py
index 12a08eb..74e1ee5 100644
--- a/ml/ml40/features/properties/values/infrared.py
+++ b/ml/ml40/features/properties/values/infrared.py
@@ -2,9 +2,7 @@
 
 
 class Infrared(Value):
-    def __init__(self, namespace="ml40",name="", identifier=""):
+    def __init__(self, namespace="ml40", name="", identifier="", parent=None):
         super().__init__(
-            namespace=namespace,
-            name=name,
-            identifier=identifier
+            namespace=namespace, name=name, identifier=identifier, parent=parent
         )
diff --git a/ml/ml40/features/properties/values/last_service_check.py b/ml/ml40/features/properties/values/last_service_check.py
index a6af415..3bdde92 100644
--- a/ml/ml40/features/properties/values/last_service_check.py
+++ b/ml/ml40/features/properties/values/last_service_check.py
@@ -2,11 +2,10 @@
 
 
 class LastServiceCheck(Value):
-    def __init__(self, namespace="ml40", name="", identifier=""):
+    def __init__(self, namespace="ml40", name="", identifier="", parent=None):
         super().__init__(
-            namespace=namespace,
-            name=name,
-            identifier=identifier)
+            namespace=namespace, name=name, identifier=identifier, parent=parent
+        )
 
         self.__timestamp = None
         self.__json_out = dict()
@@ -24,4 +23,3 @@ def to_json(self):
         if self.__timestamp is not None:
             self.__json_out["weight"] = self.__timestamp
         return self.__json_out
-
diff --git a/ml/ml40/features/properties/values/lift.py b/ml/ml40/features/properties/values/lift.py
index f31f577..b3acc0c 100644
--- a/ml/ml40/features/properties/values/lift.py
+++ b/ml/ml40/features/properties/values/lift.py
@@ -2,11 +2,10 @@
 
 
 class Lift(Value):
-    def __init__(self, namespace="ml40", name="", identifier=""):
+    def __init__(self, namespace="ml40", name="", identifier="", parent=None):
         super().__init__(
-            namespace=namespace,
-            name=name,
-            identifier=identifier)
+            namespace=namespace, name=name, identifier=identifier, parent=parent
+        )
 
         self.__current_lift = None
         self.__max_lift = None
@@ -47,4 +46,3 @@ def to_json(self):
             self.__json_out["minLift"] = self.__min_lift
 
         return self.__json_out
-
diff --git a/ml/ml40/features/properties/values/liquid_filling_level.py b/ml/ml40/features/properties/values/liquid_filling_level.py
index 418e9f8..bf15acb 100644
--- a/ml/ml40/features/properties/values/liquid_filling_level.py
+++ b/ml/ml40/features/properties/values/liquid_filling_level.py
@@ -2,11 +2,10 @@
 
 
 class LiquidFillingLevel(Value):
-    def __init__(self, namespace="ml40", name="", identifier=""):
+    def __init__(self, namespace="ml40", name="", identifier="", parent=None):
         super().__init__(
-            namespace=namespace,
-            name=name,
-            identifier=identifier)
+            namespace=namespace, name=name, identifier=identifier, parent=parent
+        )
 
         self.currentLevel = None
         self.maxLevel = None
@@ -19,4 +18,3 @@ def to_json(self):
         if self.maxLevel is not None:
             self.__json_out["maxLevel"] = self.maxLevel
         return self.__json_out
-
diff --git a/ml/ml40/features/properties/values/location.py b/ml/ml40/features/properties/values/location.py
index bcfe1fa..0267886 100644
--- a/ml/ml40/features/properties/values/location.py
+++ b/ml/ml40/features/properties/values/location.py
@@ -2,8 +2,10 @@
 
 
 class Location(Value):
-    def __init__(self, namespace="ml40", name="", identifier=""):
-        super().__init__(namespace=namespace, name=name, identifier=identifier)
+    def __init__(self, namespace="ml40", name="", identifier="", parent=None):
+        super().__init__(
+            namespace=namespace, name=name, identifier=identifier, parent=parent
+        )
         self.__latitude = None
         self.__longitude = None
         self.__orientation = None
diff --git a/ml/ml40/features/properties/values/lot.py b/ml/ml40/features/properties/values/lot.py
index 36e1fa1..34524e3 100644
--- a/ml/ml40/features/properties/values/lot.py
+++ b/ml/ml40/features/properties/values/lot.py
@@ -2,8 +2,7 @@
 
 
 class Lot(Value):
-    def __init__(self, namespace="ml40", name="", identifier=""):
+    def __init__(self, namespace="ml40", name="", identifier="", parent=None):
         super().__init__(
-            namespace=namespace,
-            name=name,
-            identifier=identifier)
+            namespace=namespace, name=name, identifier=identifier, parent=parent
+        )
diff --git a/ml/ml40/features/properties/values/moisture.py b/ml/ml40/features/properties/values/moisture.py
index 4774df9..e94fb10 100644
--- a/ml/ml40/features/properties/values/moisture.py
+++ b/ml/ml40/features/properties/values/moisture.py
@@ -2,11 +2,10 @@
 
 
 class Moisture(Value):
-    def __init__(self, namespace="ml40", name="", identifier=""):
+    def __init__(self, namespace="ml40", name="", identifier="", parent=None):
         super().__init__(
-            namespace=namespace,
-            name=name,
-            identifier=identifier)
+            namespace=namespace, name=name, identifier=identifier, parent=parent
+        )
         self.__humidity = None
         self.__join_out = dict()
 
diff --git a/ml/ml40/features/properties/values/operating_hours.py b/ml/ml40/features/properties/values/operating_hours.py
index 3d8f8b4..8a6dd40 100644
--- a/ml/ml40/features/properties/values/operating_hours.py
+++ b/ml/ml40/features/properties/values/operating_hours.py
@@ -2,11 +2,9 @@
 
 
 class OperatingHours(Value):
-    def __init__(self, namespace="ml40", name="", identifier=""):
+    def __init__(self, namespace="ml40", name="", identifier="", parent=None):
         super().__init__(
-            namespace=namespace,
-            name=name,
-            identifier=identifier
+            namespace=namespace, name=name, identifier=identifier, parent=parent
         )
 
         self.__total = None
diff --git a/ml/ml40/features/properties/values/orientation_rpy.py b/ml/ml40/features/properties/values/orientation_rpy.py
index 2a6a489..9a9a5d4 100644
--- a/ml/ml40/features/properties/values/orientation_rpy.py
+++ b/ml/ml40/features/properties/values/orientation_rpy.py
@@ -2,11 +2,12 @@
 
 
 class OrientationRPY(Value):
-    def __init__(self, namespace="ml40", name="", identifier=""):
+    def __init__(self, namespace="ml40", name="", identifier="", parent=None):
         super().__init__(
             namespace=namespace,
             name=name,
-            identifier=identifier
+            identifier=identifier,
+            parent=parent
         )
 
         self.__roll = None
diff --git a/ml/ml40/features/properties/values/personal_name.py b/ml/ml40/features/properties/values/personal_name.py
index 95ce328..cf16afd 100644
--- a/ml/ml40/features/properties/values/personal_name.py
+++ b/ml/ml40/features/properties/values/personal_name.py
@@ -2,11 +2,9 @@
 
 
 class PersonalName(Value):
-    def __init__(self, namespace="ml40", name="", identifier=""):
+    def __init__(self, namespace="ml40", name="", identifier="", parent=None):
         super().__init__(
-            namespace=namespace,
-            name=name,
-            identifier=identifier
+            namespace=namespace, name=name, identifier=identifier, parent=parent
         )
 
         self.firstname = None
diff --git a/ml/ml40/features/properties/values/rgb_color.py b/ml/ml40/features/properties/values/rgb_color.py
index f72c3e4..c25805e 100644
--- a/ml/ml40/features/properties/values/rgb_color.py
+++ b/ml/ml40/features/properties/values/rgb_color.py
@@ -2,8 +2,7 @@
 
 
 class RGBColor(Value):
-    def __init__(self, namespace="ml40", name="", identifier=""):
+    def __init__(self, namespace="ml40", name="", identifier="", parent=None):
         super().__init__(
-            namespace=namespace,
-            name=name,
-            identifier=identifier)
+            namespace=namespace, name=name, identifier=identifier, parent=parent
+        )
diff --git a/ml/ml40/features/properties/values/rotational_speed.py b/ml/ml40/features/properties/values/rotational_speed.py
index dfe92fb..65cfe43 100644
--- a/ml/ml40/features/properties/values/rotational_speed.py
+++ b/ml/ml40/features/properties/values/rotational_speed.py
@@ -2,11 +2,10 @@
 
 
 class RotationalSpeed(Value):
-    def __init__(self, namespace="ml40", name="", identifier=""):
+    def __init__(self, namespace="ml40", name="", identifier="", parent=None):
         super().__init__(
-            namespace=namespace,
-            name=name,
-            identifier=identifier)
+            namespace=namespace, name=name, identifier=identifier, parent=parent
+        )
 
         self.__rpm = None
         self.__json_out = dict()
diff --git a/ml/ml40/features/properties/values/route.py b/ml/ml40/features/properties/values/route.py
index 66073a0..992a924 100644
--- a/ml/ml40/features/properties/values/route.py
+++ b/ml/ml40/features/properties/values/route.py
@@ -2,8 +2,7 @@
 
 
 class Route(Value):
-    def __init__(self, namespace="ml40", name="", identifier=""):
+    def __init__(self, namespace="ml40", name="", identifier="", parent=None):
         super().__init__(
-            namespace=namespace,
-            name=name,
-            identifier=identifier)
+            namespace=namespace, name=name, identifier=identifier, parent=parent
+        )
diff --git a/ml/ml40/features/properties/values/sound_level.py b/ml/ml40/features/properties/values/sound_level.py
index bd92d52..c6982a1 100644
--- a/ml/ml40/features/properties/values/sound_level.py
+++ b/ml/ml40/features/properties/values/sound_level.py
@@ -2,8 +2,7 @@
 
 
 class SoundLevel(Value):
-    def __init__(self, namespace="ml40", name="", identifier=""):
+    def __init__(self, namespace="ml40", name="", identifier="", parent=None):
         super().__init__(
-            namespace=namespace,
-            name=name,
-            identifier=identifier)
+            namespace=namespace, name=name, identifier=identifier, parent=parent
+        )
diff --git a/ml/ml40/features/properties/values/srid.py b/ml/ml40/features/properties/values/srid.py
index 507357a..6ccdda5 100644
--- a/ml/ml40/features/properties/values/srid.py
+++ b/ml/ml40/features/properties/values/srid.py
@@ -2,9 +2,7 @@
 
 
 class SRID(Value):
-    def __init__(self, namespace="ml40", name="", identifier=""):
+    def __init__(self, namespace="ml40", name="", identifier="", parent=None):
         super().__init__(
-            namespace=namespace,
-            name=name,
-            identifier=identifier
+            namespace=namespace, name=name, identifier=identifier, parent=parent
         )
diff --git a/ml/ml40/features/properties/values/surface.py b/ml/ml40/features/properties/values/surface.py
index 03c4097..9cbd1ff 100644
--- a/ml/ml40/features/properties/values/surface.py
+++ b/ml/ml40/features/properties/values/surface.py
@@ -2,8 +2,7 @@
 
 
 class Surface(Value):
-    def __init__(self, namespace="ml40", name="", identifier=""):
+    def __init__(self, namespace="ml40", name="", identifier="", parent=None):
         super().__init__(
-            namespace=namespace,
-            name=name,
-            identifier=identifier)
+            namespace=namespace, name=name, identifier=identifier, parent=parent
+        )
diff --git a/ml/ml40/features/properties/values/surface_wkt.py b/ml/ml40/features/properties/values/surface_wkt.py
index 1b77f35..cb5dc28 100644
--- a/ml/ml40/features/properties/values/surface_wkt.py
+++ b/ml/ml40/features/properties/values/surface_wkt.py
@@ -2,8 +2,7 @@
 
 
 class SurfaceWKT(Surface):
-    def __init__(self, namespace="ml40", name="", identifier=""):
+    def __init__(self, namespace="ml40", name="", identifier="", parent=None):
         super().__init__(
-            namespace=namespace,
-            name=name,
-            identifier=identifier)
+            namespace=namespace, name=name, identifier=identifier, parent=parent
+        )
diff --git a/ml/ml40/features/properties/values/switching_stage.py b/ml/ml40/features/properties/values/switching_stage.py
index c44da9c..7ebe566 100644
--- a/ml/ml40/features/properties/values/switching_stage.py
+++ b/ml/ml40/features/properties/values/switching_stage.py
@@ -2,11 +2,9 @@
 
 
 class SwitchingStage(Value):
-    def __init__(self, namespace="ml40", name="", identifier=""):
+    def __init__(self, namespace="ml40", name="", identifier="", parent=None):
         super().__init__(
-            namespace=namespace,
-            name=name,
-            identifier=identifier
+            namespace=namespace, name=name, identifier=identifier, parent=parent
         )
 
         self.__min_stage = None
diff --git a/ml/ml40/features/properties/values/temperature.py b/ml/ml40/features/properties/values/temperature.py
index e925118..15e3516 100644
--- a/ml/ml40/features/properties/values/temperature.py
+++ b/ml/ml40/features/properties/values/temperature.py
@@ -2,11 +2,9 @@
 
 
 class Temperature(Value):
-    def __init__(self, namespace="ml40", name="", identifier=""):
+    def __init__(self, namespace="ml40", name="", identifier="", parent=None):
         super().__init__(
-            namespace=namespace,
-            name=name,
-            identifier=identifier
+            namespace=namespace, name=name, identifier=identifier, parent=parent
         )
         self.__temperature = None
         self.__json_out = dict()
@@ -27,7 +25,3 @@ def to_json(self):
         if self.temperature is not None:
             self.__json_out["temperature"] = self.temperature
         return self.__json_out
-
-
-
-
diff --git a/ml/ml40/features/properties/values/time_slot.py b/ml/ml40/features/properties/values/time_slot.py
index 6f77d8d..056eef6 100644
--- a/ml/ml40/features/properties/values/time_slot.py
+++ b/ml/ml40/features/properties/values/time_slot.py
@@ -2,8 +2,10 @@
 
 
 class TimeSlot(Value):
-    def __init__(self, namespace="ml40", name="", identifier=""):
-        super().__init__(namespace=namespace, name=name, identifier=identifier)
+    def __init__(self, namespace="ml40", name="", identifier="", parent=None):
+        super().__init__(
+            namespace=namespace, name=name, identifier=identifier, parent=parent
+        )
         self.end = None
         self.start = None
         self.__json_out = dict()
diff --git a/ml/ml40/features/properties/values/value.py b/ml/ml40/features/properties/values/value.py
index 4d4a7d0..d8db697 100644
--- a/ml/ml40/features/properties/values/value.py
+++ b/ml/ml40/features/properties/values/value.py
@@ -2,14 +2,13 @@
 
 
 class Value(Property):
-    def __init__(self, namespace="ml40", name="", identifier=""):
+    def __init__(self, namespace="ml40", name="", identifier="", parent=None):
         super().__init__(
-            namespace=namespace,
-            name=name,
-            identifier=identifier)
+            namespace=namespace, name=name, identifier=identifier, parent=parent
+        )
         self.__valid_to = ""
         self.__valid_from = ""
-        #TODO validate the datetype of valid from and valid to
+        # TODO validate the datetype of valid from and valid to
         self.__json_out = {}
 
     @property
diff --git a/ml/ml40/features/properties/values/weight.py b/ml/ml40/features/properties/values/weight.py
index f485689..1050817 100644
--- a/ml/ml40/features/properties/values/weight.py
+++ b/ml/ml40/features/properties/values/weight.py
@@ -2,11 +2,10 @@
 
 
 class Weight(Value):
-    def __init__(self, namespace="ml40", name="", identifier=""):
+    def __init__(self, namespace="ml40", name="", identifier="", parent=None):
         super().__init__(
-            namespace=namespace,
-            name=name,
-            identifier=identifier)
+            namespace=namespace, name=name, identifier=identifier, parent=parent
+        )
 
         self.__weight = None
         self.__json_out = {}
@@ -24,4 +23,3 @@ def to_json(self):
         if self.weight is not None:
             self.__json_out["weight"] = self.weight
         return self.__json_out
-
diff --git a/ml/ml40/features/properties/values/white_level.py b/ml/ml40/features/properties/values/white_level.py
index 297abd7..89de9d0 100644
--- a/ml/ml40/features/properties/values/white_level.py
+++ b/ml/ml40/features/properties/values/white_level.py
@@ -2,8 +2,9 @@
 
 
 class WhiteLevel(Value):
-    def __init__(self, namespace="ml40", name="", identifier=""):
+    def __init__(self, namespace="ml40", name="", identifier="", parent=None):
         super().__init__(
             namespace=namespace,
             name=name,
-            identifier=identifier)
+            identifier=identifier,
+            parent=parent)
diff --git a/ml/ml40/roles/dts/dt.py b/ml/ml40/roles/dts/dt.py
index 13fbf47..e0306c7 100644
--- a/ml/ml40/roles/dts/dt.py
+++ b/ml/ml40/roles/dts/dt.py
@@ -2,5 +2,5 @@
 
 
 class DT(Role):
-    def __init__(self, namespace="ml40", name="", identifier=""):
-        super().__init__(namespace=namespace, name=name, identifier=identifier)
+    def __init__(self, namespace="ml40", name="", identifier="", parent=None):
+        super().__init__(namespace=namespace, name=name, identifier=identifier, parent=parent)
diff --git a/ml/ml40/roles/dts/handheld_devices/handheld_device.py b/ml/ml40/roles/dts/handheld_devices/handheld_device.py
index b6149ca..73044e1 100644
--- a/ml/ml40/roles/dts/handheld_devices/handheld_device.py
+++ b/ml/ml40/roles/dts/handheld_devices/handheld_device.py
@@ -2,5 +2,7 @@
 
 
 class HandheldDevice(DT):
-    def __init__(self, namespace="ml40", name="", identifier=""):
-        super().__init__(namespace=namespace, name=name, identifier=identifier)
+    def __init__(self, namespace="ml40", name="", identifier="", parent=None):
+        super().__init__(
+            namespace=namespace, name=name, identifier=identifier, parent=parent
+        )
diff --git a/ml/ml40/roles/dts/machines/machine.py b/ml/ml40/roles/dts/machines/machine.py
index 2262121..d0222a7 100644
--- a/ml/ml40/roles/dts/machines/machine.py
+++ b/ml/ml40/roles/dts/machines/machine.py
@@ -2,5 +2,7 @@
 
 
 class Machine(DT):
-    def __init__(self, namespace="ml40", name="", identifier=""):
-        super(DT, self).__init__(namespace=namespace, name=name, identifier=identifier)
+    def __init__(self, namespace="ml40", name="", identifier="", parent=None):
+        super(DT, self).__init__(
+            namespace=namespace, name=name, identifier=identifier, parent=parent
+        )
diff --git a/ml/ml40/roles/dts/parts/crane.py b/ml/ml40/roles/dts/parts/crane.py
index 3cba5ee..99e8a65 100644
--- a/ml/ml40/roles/dts/parts/crane.py
+++ b/ml/ml40/roles/dts/parts/crane.py
@@ -2,5 +2,7 @@
 
 
 class Crane(Part):
-    def __init__(self, namespace="ml40", name="", identifier=""):
-        super(Crane, self).__init__(namespace=namespace, name=name, identifier=identifier)
+    def __init__(self, namespace="ml40", name="", identifier="", parent=None):
+        super(Crane, self).__init__(
+            namespace=namespace, name=name, identifier=identifier, parent=parent
+        )
diff --git a/ml/ml40/roles/dts/parts/engine.py b/ml/ml40/roles/dts/parts/engine.py
index 50d689e..5e8dfde 100644
--- a/ml/ml40/roles/dts/parts/engine.py
+++ b/ml/ml40/roles/dts/parts/engine.py
@@ -2,5 +2,7 @@
 
 
 class Engine(Part):
-    def __init__(self, namespace="ml40", name="", identifier=""):
-        super(Engine, self).__init__(namespace=namespace, name=name, identifier=identifier)
+    def __init__(self, namespace="ml40", name="", identifier="", parent=None):
+        super(Engine, self).__init__(
+            namespace=namespace, name=name, identifier=identifier, parent=parent
+        )
diff --git a/ml/ml40/roles/dts/parts/part.py b/ml/ml40/roles/dts/parts/part.py
index e63dc61..4b1a160 100644
--- a/ml/ml40/roles/dts/parts/part.py
+++ b/ml/ml40/roles/dts/parts/part.py
@@ -2,7 +2,7 @@
 
 
 class Part(DT):
-    def __init__(self, namespace="ml40", name="", identifier=""):
+    def __init__(self, namespace="ml40", name="", identifier="", parent=None):
         super(Part, self).__init__(
-            namespace=namespace, name=name, identifier=identifier
+            namespace=namespace, name=name, identifier=identifier, parent=parent
         )
diff --git a/ml/ml40/roles/dts/parts/scale.py b/ml/ml40/roles/dts/parts/scale.py
index 76af6b6..59d5ff3 100644
--- a/ml/ml40/roles/dts/parts/scale.py
+++ b/ml/ml40/roles/dts/parts/scale.py
@@ -2,5 +2,7 @@
 
 
 class Scale(Part):
-    def __init__(self, namespace="ml40", name="", identifier=""):
-        super(Scale, self).__init__(namespace=namespace, name=name, identifier=identifier)
+    def __init__(self, namespace="ml40", name="", identifier="", parent=None):
+        super(Scale, self).__init__(
+            namespace=namespace, name=name, identifier=identifier, parent=parent
+        )
diff --git a/ml/ml40/roles/dts/parts/tank.py b/ml/ml40/roles/dts/parts/tank.py
index b9d7175..8d53ef4 100644
--- a/ml/ml40/roles/dts/parts/tank.py
+++ b/ml/ml40/roles/dts/parts/tank.py
@@ -2,5 +2,7 @@
 
 
 class Tank(Part):
-    def __init__(self, namespace="ml40", name="", identifier=""):
-        super(Tank, self).__init__(namespace=namespace, name=name, identifier=identifier)
+    def __init__(self, namespace="ml40", name="", identifier="", parent=None):
+        super(Tank, self).__init__(
+            namespace=namespace, name=name, identifier=identifier, parent=parent
+        )
diff --git a/ml/ml40/roles/dts/persons/machine_operator.py b/ml/ml40/roles/dts/persons/machine_operator.py
index 1ea4b8c..69aa545 100644
--- a/ml/ml40/roles/dts/persons/machine_operator.py
+++ b/ml/ml40/roles/dts/persons/machine_operator.py
@@ -2,7 +2,7 @@
 
 
 class MachineOperator(Person):
-    def __init__(self, namespace="ml40", name="", identifier=""):
+    def __init__(self, namespace="ml40", name="", identifier="", parent=None):
         super(MachineOperator, self).__init__(
-            namespace=namespace, name=name, identifier=identifier
+            namespace=namespace, name=name, identifier=identifier, parent=parent
         )
diff --git a/ml/ml40/roles/dts/persons/person.py b/ml/ml40/roles/dts/persons/person.py
index c8c2f97..bf94d0c 100644
--- a/ml/ml40/roles/dts/persons/person.py
+++ b/ml/ml40/roles/dts/persons/person.py
@@ -2,5 +2,5 @@
 
 
 class Person(DT):
-    def __init__(self, namespace="ml40", name="", identifier=""):
-        super(Person, self).__init__(namespace=namespace, name=name, identifier=identifier)
+    def __init__(self, namespace="ml40", name="", identifier="", parent=None):
+        super(Person, self).__init__(namespace=namespace, name=name, identifier=identifier, parent=parent)
diff --git a/ml/ml40/roles/dts/sensors/accelerometer.py b/ml/ml40/roles/dts/sensors/accelerometer.py
index 82ab9cf..a478e6e 100644
--- a/ml/ml40/roles/dts/sensors/accelerometer.py
+++ b/ml/ml40/roles/dts/sensors/accelerometer.py
@@ -2,7 +2,7 @@
 
 
 class Accelerometer(Sensor):
-    def __init__(self, namespace="ml40", name="", identifier=""):
+    def __init__(self, namespace="ml40", name="", identifier="", parent=None):
         super().__init__(
-            namespace=namespace, name=name, identifier=identifier
+            namespace=namespace, name=name, identifier=identifier, parent=parent
         )
diff --git a/ml/ml40/roles/dts/sensors/air_sensor.py b/ml/ml40/roles/dts/sensors/air_sensor.py
index 3552f6d..84634fa 100644
--- a/ml/ml40/roles/dts/sensors/air_sensor.py
+++ b/ml/ml40/roles/dts/sensors/air_sensor.py
@@ -2,7 +2,7 @@
 
 
 class AirSensor(Sensor):
-    def __init__(self, namespace="ml40", name="", identifier=""):
+    def __init__(self, namespace="ml40", name="", identifier="", parent=None):
         super(AirSensor, self).__init__(
-            namespace=namespace, name=name, identifier=identifier
+            namespace=namespace, name=name, identifier=identifier, parent=parent
         )
diff --git a/ml/ml40/roles/dts/sensors/gyroscope.py b/ml/ml40/roles/dts/sensors/gyroscope.py
index c81ed97..9c55c05 100644
--- a/ml/ml40/roles/dts/sensors/gyroscope.py
+++ b/ml/ml40/roles/dts/sensors/gyroscope.py
@@ -2,7 +2,7 @@
 
 
 class Gyroscope(Sensor):
-    def __init__(self, namespace="ml40", name="", identifier=""):
+    def __init__(self, namespace="ml40", name="", identifier="", parent=None):
         super(Gyroscope, self).__init__(
-            namespace=namespace, name=name, identifier=identifier
+            namespace=namespace, name=name, identifier=identifier, parent=parent
         )
diff --git a/ml/ml40/roles/dts/sensors/light_sensor.py b/ml/ml40/roles/dts/sensors/light_sensor.py
index 9474696..acb4f7e 100644
--- a/ml/ml40/roles/dts/sensors/light_sensor.py
+++ b/ml/ml40/roles/dts/sensors/light_sensor.py
@@ -2,7 +2,7 @@
 
 
 class LightSensor(Sensor):
-    def __init__(self, namespace="ml40", name="", identifier=""):
+    def __init__(self, namespace="ml40", name="", identifier="", parent=None):
         super(LightSensor, self).__init__(
-            namespace=namespace, name=name, identifier=identifier
+            namespace=namespace, name=name, identifier=identifier, parent=parent
         )
diff --git a/ml/ml40/roles/dts/sensors/sensor.py b/ml/ml40/roles/dts/sensors/sensor.py
index 386aee9..b53b28c 100644
--- a/ml/ml40/roles/dts/sensors/sensor.py
+++ b/ml/ml40/roles/dts/sensors/sensor.py
@@ -2,5 +2,7 @@
 
 
 class Sensor(DT):
-    def __init__(self, namespace="ml40", name="", identifier=""):
-        super().__init__(namespace=namespace, name=name, identifier=identifier)
+    def __init__(self, namespace="ml40", name="", identifier="", parent=None):
+        super().__init__(
+            namespace=namespace, name=name, identifier=identifier, parent=parent
+        )
diff --git a/ml/ml40/roles/dts/sensors/sensor_network.py b/ml/ml40/roles/dts/sensors/sensor_network.py
index 220253d..a4b665a 100644
--- a/ml/ml40/roles/dts/sensors/sensor_network.py
+++ b/ml/ml40/roles/dts/sensors/sensor_network.py
@@ -2,7 +2,7 @@
 
 
 class SensorNetwork(Sensor):
-    def __init__(self, namespace="ml40", name="", identifier=""):
+    def __init__(self, namespace="ml40", name="", identifier="", parent=None):
         super(SensorNetwork, self).__init__(
-            namespace=namespace, name=name, identifier=identifier
+            namespace=namespace, name=name, identifier=identifier, parent=parent
         )
diff --git a/ml/ml40/roles/dts/sensors/soil_sensor.py b/ml/ml40/roles/dts/sensors/soil_sensor.py
index a95dc59..6e8c98b 100644
--- a/ml/ml40/roles/dts/sensors/soil_sensor.py
+++ b/ml/ml40/roles/dts/sensors/soil_sensor.py
@@ -2,7 +2,7 @@
 
 
 class SoilSensor(Sensor):
-    def __init__(self, namespace="ml40", name="", identifier=""):
+    def __init__(self, namespace="ml40", name="", identifier="", parent=None):
         super(SoilSensor, self).__init__(
-            namespace=namespace, name=name, identifier=identifier
+            namespace=namespace, name=name, identifier=identifier, parent=parent
         )
diff --git a/ml/ml40/roles/dts/sensors/sound_sensor.py b/ml/ml40/roles/dts/sensors/sound_sensor.py
index 558af34..dde486a 100644
--- a/ml/ml40/roles/dts/sensors/sound_sensor.py
+++ b/ml/ml40/roles/dts/sensors/sound_sensor.py
@@ -2,7 +2,7 @@
 
 
 class SoundSensor(Sensor):
-    def __init__(self, namespace="ml40", name="", identifier=""):
+    def __init__(self, namespace="ml40", name="", identifier="", parent=None):
         super(SoundSensor, self).__init__(
-            namespace=namespace, name=name, identifier=identifier
+            namespace=namespace, name=name, identifier=identifier, parent=parent
         )
diff --git a/ml/ml40/roles/dts/sites/site.py b/ml/ml40/roles/dts/sites/site.py
index d644a61..dbc6c9e 100644
--- a/ml/ml40/roles/dts/sites/site.py
+++ b/ml/ml40/roles/dts/sites/site.py
@@ -2,5 +2,7 @@
 
 
 class Site(DT):
-    def __init__(self, namespace="ml40",  name="", identifier=""):
-        super(Site, self).__init__(namespace=namespace, name=name, identifier=identifier)
+    def __init__(self, namespace="ml40", name="", identifier="", parent=None):
+        super(Site, self).__init__(
+            namespace=namespace, name=name, identifier=identifier, parent=parent
+        )
diff --git a/ml/ml40/roles/dts/ways/way.py b/ml/ml40/roles/dts/ways/way.py
index b9fe3f3..3b57d73 100644
--- a/ml/ml40/roles/dts/ways/way.py
+++ b/ml/ml40/roles/dts/ways/way.py
@@ -2,5 +2,7 @@
 
 
 class Way(DT):
-    def __init__(self, namespace="ml40", name="", identifier=""):
-        super(Way, self).__init__(namespace=namespace, name=name, identifier=identifier)
+    def __init__(self, namespace="ml40", name="", identifier="", parent=None):
+        super(Way, self).__init__(
+            namespace=namespace, name=name, identifier=identifier, parent=parent
+        )
diff --git a/ml/ml40/roles/hmis/app.py b/ml/ml40/roles/hmis/app.py
index 173009f..021204f 100644
--- a/ml/ml40/roles/hmis/app.py
+++ b/ml/ml40/roles/hmis/app.py
@@ -2,5 +2,7 @@
 
 
 class App(HMI):
-    def __init__(self, namespace="ml40", name="", identifier=""):
-        super(App, self).__init__(namespace=namespace, name=name, identifier=identifier)
+    def __init__(self, namespace="ml40", name="", identifier="", parent=None):
+        super(App, self).__init__(
+            namespace=namespace, name=name, identifier=identifier, parent=parent
+        )
diff --git a/ml/ml40/roles/hmis/dashboard.py b/ml/ml40/roles/hmis/dashboard.py
index 3924cd1..ca866a8 100644
--- a/ml/ml40/roles/hmis/dashboard.py
+++ b/ml/ml40/roles/hmis/dashboard.py
@@ -2,7 +2,7 @@
 
 
 class Dashboard(HMI):
-    def __init__(self, namespace="ml40", name="", identifier=""):
+    def __init__(self, namespace="ml40", name="", identifier="", parent=None):
         super(Dashboard, self).__init__(
-            namespace=namespace, name=name, identifier=identifier
+            namespace=namespace, name=name, identifier=identifier, parent=parent
         )
diff --git a/ml/ml40/roles/hmis/hmd.py b/ml/ml40/roles/hmis/hmd.py
index 30c909c..cec0838 100644
--- a/ml/ml40/roles/hmis/hmd.py
+++ b/ml/ml40/roles/hmis/hmd.py
@@ -2,5 +2,7 @@
 
 
 class HMD(HMI):
-    def __init__(self, namespace="ml40", name="", identifier=""):
-        super().__init__(namespace=namespace, name=name, identifier=identifier)
+    def __init__(self, namespace="ml40", name="", identifier="", parent=None):
+        super().__init__(
+            namespace=namespace, name=name, identifier=identifier, parent=parent
+        )
diff --git a/ml/ml40/roles/hmis/hmi.py b/ml/ml40/roles/hmis/hmi.py
index d7ad91e..1d6e57c 100644
--- a/ml/ml40/roles/hmis/hmi.py
+++ b/ml/ml40/roles/hmis/hmi.py
@@ -2,5 +2,7 @@
 
 
 class HMI(Role):
-    def __init__(self, namespace="ml40", name="", identifier=""):
-        super(HMI, self).__init__(namespace=namespace, name=name, identifier=identifier)
+    def __init__(self, namespace="ml40", name="", identifier="", parent=None):
+        super(HMI, self).__init__(
+            namespace=namespace, name=name, identifier=identifier, parent=parent
+        )
diff --git a/ml/ml40/roles/hmis/machine_ui.py b/ml/ml40/roles/hmis/machine_ui.py
index 50669e5..5bc1b6d 100644
--- a/ml/ml40/roles/hmis/machine_ui.py
+++ b/ml/ml40/roles/hmis/machine_ui.py
@@ -2,5 +2,7 @@
 
 
 class MachineUI(HMI):
-    def __init__(self, namespace="ml40", name="", identifier=""):
-        super().__init__(namespace=namespace, name=name, identifier=identifier)
+    def __init__(self, namespace="ml40", name="", identifier="", parent=None):
+        super().__init__(
+            namespace=namespace, name=name, identifier=identifier, parent=parent
+        )
diff --git a/ml/ml40/roles/servives/service.py b/ml/ml40/roles/servives/service.py
index 397540a..bcbba39 100644
--- a/ml/ml40/roles/servives/service.py
+++ b/ml/ml40/roles/servives/service.py
@@ -2,7 +2,7 @@
 
 
 class Service(Role):
-    def __init__(self, namespace="ml40", name="", identifier=""):
+    def __init__(self, namespace="ml40", name="", identifier="", parent=None):
         super(Service, self).__init__(
-            namespace=namespace, name=name, identifier=identifier
+            namespace=namespace, name=name, identifier=identifier, parent=parent
         )
diff --git a/ml/mml40/features/functionalities/CantileverConfigure.py b/ml/mml40/features/functionalities/CantileverConfigure.py
index 9f21317..140c4c2 100644
--- a/ml/mml40/features/functionalities/CantileverConfigure.py
+++ b/ml/mml40/features/functionalities/CantileverConfigure.py
@@ -2,14 +2,16 @@
 
 
 class CantileverConfigure(Functionality):
-    def __init__(self, namespace="mml40", name="", identifier=""):
+    def __init__(self, namespace="mml40", name="", identifier="", parent=None):
         """Initializes the object.
 
         :param name: Object name
         :param identifier: Identifier
 
         """
-        super().__init__(namespace=namespace, name=name, identifier=identifier)
+        super().__init__(
+            namespace=namespace, name=name, identifier=identifier, parent=parent
+        )
 
     def getConfiguration(self):
         pass
diff --git a/ml/mml40/features/functionalities/ProvidesDisplacementData.py b/ml/mml40/features/functionalities/ProvidesDisplacementData.py
index 4889d51..11f4fe4 100644
--- a/ml/mml40/features/functionalities/ProvidesDisplacementData.py
+++ b/ml/mml40/features/functionalities/ProvidesDisplacementData.py
@@ -3,14 +3,14 @@
 
 
 class ProvidesDisplacementData(Functionality):
-    def __init__(self, namespace="mml40", name="", identifier=""):
+    def __init__(self, namespace="mml40", name="", identifier="", parent=None):
         """Initializes the object.
 
         :param name: Object name
         :param identifier: Identifier
 
         """
-        super().__init__(namespace=namespace, name=name, identifier=identifier)
+        super().__init__(namespace=namespace, name=name, identifier=identifier, parent=parent)
 
     def getMaxDisplacement(self) -> Displacement:
         pass
diff --git a/ml/mml40/features/functionalities/ProvidesForceData.py b/ml/mml40/features/functionalities/ProvidesForceData.py
index 56b95a7..d51901d 100644
--- a/ml/mml40/features/functionalities/ProvidesForceData.py
+++ b/ml/mml40/features/functionalities/ProvidesForceData.py
@@ -3,14 +3,16 @@
 
 
 class ProvidesForceData(Functionality):
-    def __init__(self, namespace="mml40", name="", identifier=""):
+    def __init__(self, namespace="mml40", name="", identifier="", parent=None):
         """Initializes the object.
 
         :param name: Object name
         :param identifier: Identifier
 
         """
-        super().__init__(namespace=namespace, name=name, identifier=identifier)
+        super().__init__(
+            namespace=namespace, name=name, identifier=identifier, parent=parent
+        )
 
     def getMaxForce(self) -> Force:
         pass
diff --git a/ml/mml40/features/functionalities/ProvidesStretchData.py b/ml/mml40/features/functionalities/ProvidesStretchData.py
index dd9612e..b1725ea 100644
--- a/ml/mml40/features/functionalities/ProvidesStretchData.py
+++ b/ml/mml40/features/functionalities/ProvidesStretchData.py
@@ -3,14 +3,16 @@
 
 
 class ProvidesStretchData(Functionality):
-    def __init__(self, namespace="mml40", name="", identifier=""):
+    def __init__(self, namespace="mml40", name="", identifier="", parent=None):
         """Initializes the object.
 
         :param name: Object name
         :param identifier: Identifier
 
         """
-        super().__init__(namespace=namespace, name=name, identifier=identifier)
+        super().__init__(
+            namespace=namespace, name=name, identifier=identifier, parent=parent
+        )
 
     def getStretchData(self, time) -> Stretch:
         pass
diff --git a/ml/role.py b/ml/role.py
index 413b4f1..85b4fd6 100644
--- a/ml/role.py
+++ b/ml/role.py
@@ -10,14 +10,14 @@
 class Role(ABC):
     """Each Role class manages a role which can be assigned to things."""
 
-    def __init__(self, namespace, name="", identifier=""):
+    def __init__(self, namespace, name="", identifier="", parent=None):
         """Constructs a new Role class object with the given name and
         identifier.
 
         :param name: Name of the feature
         :param identifier: Identifier of the feature
         """
-
+        self.parent = parent
         self.__identifier = identifier
         self.__name = name
         self.__class_name = f"{namespace}::{self.__class__.__name__}"
@@ -83,3 +83,6 @@ def to_json(self):
         if self.identifier:
             self.__json_out["identifier"] = self.identifier
         return self.__json_out
+
+    def set_parent(self, value):
+        self.parent = value
-- 
GitLab


From 9ec9594685802a1792669d86330cbfbf11ed2036 Mon Sep 17 00:00:00 2001
From: "C. Albrecht" <gromet@gmx.de>
Date: Wed, 15 Dec 2021 16:57:07 +0100
Subject: [PATCH 2/3] Add parent relationship for thing and features

---
 ml/dt_factory.py                                 |  6 +++++-
 ml/feature.py                                    | 14 +++++++++++++-
 .../functionalities/accepts_felling_jobs.py      | 12 ++++++------
 .../accepts_felling_support_jobs.py              | 11 +++++++----
 .../functionalities/accepts_forwarding_jobs.py   | 11 +++++++----
 .../functionalities/accepts_log_measurements.py  | 11 +++++++----
 .../accepts_log_transportaition_jobs.py          | 11 +++++++----
 .../accepts_moisture_measurement.py              | 11 +++++++----
 .../functionalities/accepts_move_commands.py     |  6 ++++--
 .../accepts_passability_report.py                | 11 +++++++----
 .../functionalities/accepts_proximity_alert.py   |  6 ++++--
 .../functionalities/accepts_shield_commands.py   |  6 ++++--
 .../accepts_single_tree_felling_jobs.py          |  6 ++++--
 .../functionalities/accepts_winch_command.py     |  6 ++++--
 .../functionalities/classifies_tree_species.py   |  6 ++++--
 .../functionalities/converts_data_formats.py     |  6 ++++--
 .../functionalities/converts_forest_gml.py       |  9 +++++----
 ml/fml40/features/functionalities/cuts.py        |  6 ++++--
 .../functionalities/determines_passability.py    |  6 ++++--
 .../functionalities/displays_health_alarms.py    |  6 ++++--
 .../functionalities/evaluates_forest_rating.py   |  6 ++++--
 .../evaluates_stand_attributes.py                |  6 ++++--
 ml/fml40/features/functionalities/fells.py       |  6 ++++--
 .../forest_planning_evaluation.py                |  6 ++++--
 ml/fml40/features/functionalities/forwards.py    | 11 +++++++----
 .../generates_afforestation_suggestions.py       | 11 +++++++----
 .../generates_felling_suggestions.py             |  6 ++++--
 .../generates_typical_single_trees.py            |  6 ++++--
 ml/fml40/features/functionalities/grabs.py       |  6 ++++--
 ml/fml40/features/functionalities/harvests.py    | 11 +++++++----
 .../features/functionalities/measure_wood.py     | 11 +++++++----
 .../functionalities/monitor_health_status.py     |  6 ++++--
 .../predicts_forest_development.py               |  4 ++--
 .../provides_moisture_prediction.py              |  4 ++--
 .../provides_passability_information.py          |  6 ++++--
 .../functionalities/provides_production_data.py  |  6 ++++--
 .../functionalities/provides_tree_data.py        |  6 ++++--
 .../functionalities/provides_weather_data.py     |  6 ++++--
 .../functionalities/simulates_tree_growth.py     |  6 ++++--
 .../features/functionalities/supports_felling.py |  9 +++++----
 .../features/functionalities/transports_logs.py  | 16 ++++++++++------
 .../functionalities/visualizes_forest.py         |  4 ++--
 .../features/properties/values/assortment.py     |  6 ++++--
 .../features/properties/values/basal_area.py     |  4 ++--
 ml/fml40/features/properties/values/dbh.py       |  6 ++++--
 .../properties/values/dominant_tree_species.py   |  6 ++++--
 .../features/properties/values/fell_indicator.py |  4 ++--
 .../features/properties/values/felling_period.py |  6 ++++--
 .../properties/values/harvested_volume.py        |  4 ++--
 .../properties/values/harvesting_parameter.py    |  6 ++++--
 .../properties/values/increment_volume.py        |  6 ++++--
 .../properties/values/interfering_branches.py    |  6 ++++--
 .../features/properties/values/inventory_data.py |  7 ++++---
 .../features/properties/values/mean_height.py    |  6 ++++--
 .../properties/values/number_of_stems.py         |  6 ++++--
 ml/fml40/features/properties/values/overhang.py  |  6 ++++--
 .../properties/values/stand_attribute_set.py     |  4 ++--
 .../properties/values/stem_segment_properties.py |  4 ++--
 .../features/properties/values/stock_volume.py   |  6 ++++--
 .../properties/values/thickness_class.py         |  6 ++++--
 ml/fml40/features/properties/values/tilt.py      |  6 ++++--
 ml/fml40/features/properties/values/tree_data.py |  6 ++++--
 .../features/properties/values/tree_species.py   |  6 ++++--
 ml/fml40/features/properties/values/tree_type.py |  6 ++++--
 .../properties/values/vitality_status.py         |  6 ++++--
 .../features/properties/values/wood_quality.py   |  6 ++++--
 ml/fml40/roles/dts/forest/forest.py              |  6 ++++--
 ml/fml40/roles/dts/forest/forest_segment.py      |  4 ++--
 ml/fml40/roles/dts/forest/tree.py                |  6 ++++--
 .../roles/dts/handheld_devices/brushcutter.py    |  4 ++--
 ml/fml40/roles/dts/handheld_devices/chainsaw.py  |  6 ++++--
 ml/fml40/roles/dts/machines/forest_machine.py    |  4 ++--
 ml/fml40/roles/dts/machines/forwarder.py         |  6 ++++--
 ml/fml40/roles/dts/machines/harvester.py         |  6 ++++--
 ml/fml40/roles/dts/machines/log_truck.py         |  6 ++++--
 ml/fml40/roles/dts/machines/mini_tractor.py      |  4 ++--
 ml/fml40/roles/dts/machines/skidder.py           |  6 ++++--
 ml/fml40/roles/dts/machines/wheel_loader.py      |  6 ++++--
 ml/fml40/roles/dts/parts/grabber.py              |  6 ++++--
 ml/fml40/roles/dts/parts/harvesting_head.py      |  6 ++++--
 ml/fml40/roles/dts/parts/log_loading_area.py     |  6 ++++--
 ml/fml40/roles/dts/parts/saw.py                  |  6 ++++--
 ml/fml40/roles/dts/parts/stacking_shield.py      |  6 ++++--
 ml/fml40/roles/dts/parts/winch.py                |  6 ++++--
 ml/fml40/roles/dts/persons/forest_owner.py       |  6 ++++--
 ml/fml40/roles/dts/persons/forest_worker.py      |  4 ++--
 .../roles/dts/persons/mini_tractor_operator.py   |  6 ++++--
 ml/fml40/roles/dts/persons/skidder_operator.py   |  6 ++++--
 ml/fml40/roles/dts/sensors/barkbeetle_sensor.py  |  6 ++++--
 ml/fml40/roles/dts/sensors/vitality_sensor.py    |  6 ++++--
 ml/fml40/roles/dts/sites/forest_enterprise.py    |  6 ++++--
 ml/fml40/roles/dts/sites/hauler.py               |  6 ++++--
 ml/fml40/roles/dts/woods/stem_segment.py         |  6 ++++--
 ml/fml40/roles/dts/woods/wood.py                 |  6 ++++--
 ml/fml40/roles/dts/woods/wood_pile.py            |  6 ++++--
 ml/ml40/features/functionalities/accepts_jobs.py | 10 ++++------
 .../features/functionalities/accepts_reports.py  |  5 +++--
 ml/ml40/features/functionalities/clears_jobs.py  |  7 +++----
 .../features/functionalities/functionality.py    | 11 ++++-------
 ml/ml40/features/functionalities/manages_jobs.py |  5 +++--
 ml/ml40/features/functionalities/plans_routes.py |  8 +++-----
 .../functionalities/provides_map_data.py         |  5 +++--
 .../functionalities/provides_operational_data.py |  9 +++------
 ml/ml40/features/functionalities/renders.py      |  7 +++----
 .../properties/associations/association.py       |  6 ++++--
 .../properties/associations/composite.py         |  8 +++-----
 .../features/properties/associations/shared.py   |  7 +++----
 ml/ml40/features/properties/property.py          | 10 +++-------
 .../features/properties/values/acceleration.py   |  7 +++----
 .../properties/values/accoustic_indices.py       |  7 +++----
 ml/ml40/features/properties/values/address.py    |  7 +++----
 .../features/properties/values/air_pressure.py   |  6 ++----
 ml/ml40/features/properties/values/area.py       |  6 ++----
 ml/ml40/features/properties/values/brightness.py |  6 ++----
 ml/ml40/features/properties/values/count.py      |  7 +++----
 ml/ml40/features/properties/values/dimensions.py |  7 +++----
 ml/ml40/features/properties/values/distance.py   |  7 +++----
 .../properties/values/documents/document.py      |  7 +++----
 .../values/documents/jobs/generic_job.py         |  8 +++-----
 .../properties/values/documents/jobs/job.py      |  6 ++++--
 .../properties/values/documents/jobs/job_list.py |  7 +++----
 .../values/documents/reports/production_data.py  |  7 +++----
 .../values/documents/reports/report.py           |  6 ++++--
 .../properties/values/expansion_length.py        |  8 +++-----
 ml/ml40/features/properties/values/force.py      |  6 ++----
 .../properties/values/generic_property.py        |  6 ++----
 .../properties/values/gyroscope_value.py         |  5 +++--
 ml/ml40/features/properties/values/infrared.py   |  6 ++----
 .../properties/values/last_service_check.py      |  8 +++-----
 ml/ml40/features/properties/values/lift.py       |  8 +++-----
 .../properties/values/liquid_filling_level.py    |  8 +++-----
 ml/ml40/features/properties/values/location.py   |  6 ++++--
 ml/ml40/features/properties/values/lot.py        |  7 +++----
 ml/ml40/features/properties/values/moisture.py   |  7 +++----
 .../properties/values/operating_hours.py         |  6 ++----
 .../properties/values/orientation_rpy.py         |  5 +++--
 .../features/properties/values/personal_name.py  |  6 ++----
 ml/ml40/features/properties/values/rgb_color.py  |  7 +++----
 .../properties/values/rotational_speed.py        |  7 +++----
 ml/ml40/features/properties/values/route.py      |  7 +++----
 .../features/properties/values/sound_level.py    |  7 +++----
 ml/ml40/features/properties/values/srid.py       |  6 ++----
 ml/ml40/features/properties/values/surface.py    |  7 +++----
 .../features/properties/values/surface_wkt.py    |  7 +++----
 .../properties/values/switching_stage.py         |  6 ++----
 .../features/properties/values/temperature.py    | 10 ++--------
 ml/ml40/features/properties/values/time_slot.py  |  6 ++++--
 ml/ml40/features/properties/values/value.py      |  9 ++++-----
 ml/ml40/features/properties/values/weight.py     |  8 +++-----
 .../features/properties/values/white_level.py    |  5 +++--
 ml/ml40/roles/dts/dt.py                          |  4 ++--
 .../dts/handheld_devices/handheld_device.py      |  6 ++++--
 ml/ml40/roles/dts/machines/machine.py            |  6 ++++--
 ml/ml40/roles/dts/parts/crane.py                 |  6 ++++--
 ml/ml40/roles/dts/parts/engine.py                |  6 ++++--
 ml/ml40/roles/dts/parts/part.py                  |  4 ++--
 ml/ml40/roles/dts/parts/scale.py                 |  6 ++++--
 ml/ml40/roles/dts/parts/tank.py                  |  6 ++++--
 ml/ml40/roles/dts/persons/machine_operator.py    |  4 ++--
 ml/ml40/roles/dts/persons/person.py              |  4 ++--
 ml/ml40/roles/dts/sensors/accelerometer.py       |  4 ++--
 ml/ml40/roles/dts/sensors/air_sensor.py          |  4 ++--
 ml/ml40/roles/dts/sensors/gyroscope.py           |  4 ++--
 ml/ml40/roles/dts/sensors/light_sensor.py        |  4 ++--
 ml/ml40/roles/dts/sensors/sensor.py              |  6 ++++--
 ml/ml40/roles/dts/sensors/sensor_network.py      |  4 ++--
 ml/ml40/roles/dts/sensors/soil_sensor.py         |  4 ++--
 ml/ml40/roles/dts/sensors/sound_sensor.py        |  4 ++--
 ml/ml40/roles/dts/sites/site.py                  |  6 ++++--
 ml/ml40/roles/dts/ways/way.py                    |  6 ++++--
 ml/ml40/roles/hmis/app.py                        |  6 ++++--
 ml/ml40/roles/hmis/dashboard.py                  |  4 ++--
 ml/ml40/roles/hmis/hmd.py                        |  6 ++++--
 ml/ml40/roles/hmis/hmi.py                        |  6 ++++--
 ml/ml40/roles/hmis/machine_ui.py                 |  6 ++++--
 ml/ml40/roles/servives/service.py                |  4 ++--
 .../functionalities/CantileverConfigure.py       |  6 ++++--
 .../functionalities/ProvidesDisplacementData.py  |  4 ++--
 .../functionalities/ProvidesForceData.py         |  6 ++++--
 .../functionalities/ProvidesStretchData.py       |  6 ++++--
 ml/role.py                                       |  7 +++++--
 181 files changed, 663 insertions(+), 504 deletions(-)

diff --git a/ml/dt_factory.py b/ml/dt_factory.py
index d0a9259..0ad5a16 100644
--- a/ml/dt_factory.py
+++ b/ml/dt_factory.py
@@ -368,11 +368,14 @@ def build(thing, model):
     roles = attributes.get("roles", [])
     for role in roles:
         role_instance = build_role(role)
+        role_instance.parent = thing
         thing.roles[role.get("class")] = role_instance
 
     json_features = attributes.get("features", [])
     for feature in json_features:
         feature_ins = build_feature(feature=feature)
+        feature_ins.parent = thing
+        tmp = feature_ins.get_my_thing()
         thing.features[feature.get("class")] = feature_ins
 
     if ditto_features is not None:
@@ -522,7 +525,8 @@ def create_thing(
     attributes = model.get("attributes", None)
     if attributes is None:
         sys.exit("attributes are none")
-    thing_type = remove_namespace(attributes.get("class", ""))
+    thing_type = attributes.get("class", "")
+    thing_type = remove_namespace(thing_type)
     thing_name = attributes.get("name", "")
     APP_LOGGER.info(
         "Build digital twin {} with id {}".format(thing_name, model.get("thingId", ""))
diff --git a/ml/feature.py b/ml/feature.py
index b7410ab..849f698 100644
--- a/ml/feature.py
+++ b/ml/feature.py
@@ -7,19 +7,21 @@
 from abc import ABC
 
 from ml.identifier import ID
+from ml.thing import Thing
 
 
 class Feature(ABC):
     """The Feature class represents the base class for all functionalities
     and values."""
 
-    def __init__(self, namespace, name="", identifier=""):
+    def __init__(self, namespace, name="", identifier="", parent=None):
         """Constructs a new Feature class object with the given name and
         identifier.
 
         :param name: Name of the feature
         :param identifier: Identifier of the feature
         """
+        self.parent = parent
         self.namespace = namespace
         self.__name = name
         self.__class_name = f"{self.namespace}::{self.__class__.__name__}"
@@ -143,3 +145,13 @@ def to_json(self):
             res = self.subFeatures[key].to_json()
             self.__json_out["subFeatures"].append(res)
         return self.__json_out
+
+    def get_my_thing(self):
+        tmp = self.parent
+        print("Searching for thing....")
+        print(type(tmp))
+        while not isinstance(tmp, Thing):
+            if tmp is None:
+                return None
+            tmp = tmp.parent
+        return tmp
diff --git a/ml/fml40/features/functionalities/accepts_felling_jobs.py b/ml/fml40/features/functionalities/accepts_felling_jobs.py
index 7a4f401..c305a9a 100644
--- a/ml/fml40/features/functionalities/accepts_felling_jobs.py
+++ b/ml/fml40/features/functionalities/accepts_felling_jobs.py
@@ -1,24 +1,24 @@
 """This module implements the class AcceptsFellingJobs."""
 
-from ml.fml40.features.properties.values.documents.jobs.felling_job import \
-    FellingJob
+from ml.fml40.features.properties.values.documents.jobs.felling_job import FellingJob
 from ml.ml40.features.functionalities.accepts_jobs import AcceptsJobs
-from ml.ml40.features.properties.values.documents.jobs.job_status import \
-    JobStatus
+from ml.ml40.features.properties.values.documents.jobs.job_status import JobStatus
 
 
 class AcceptsFellingJobs(AcceptsJobs):
     """This functionality signalizes that FellingJobs can be processed and
     offers the possibility to remove and query it."""
 
-    def __init__(self, namespace="fml40", name="", identifier=""):
+    def __init__(self, namespace="fml40", name="", identifier="", parent=None):
         """Initializes the object.
 
         :param name: Object name
         :param identifier: Identifier
 
         """
-        super().__init__(namespace=namespace, name=name, identifier=identifier)
+        super().__init__(
+            namespace=namespace, name=name, identifier=identifier, parent=parent
+        )
 
     def acceptJob(self, job: FellingJob) -> bool:
         """Accepts the given FellingJob job. Returns true if the job has been
diff --git a/ml/fml40/features/functionalities/accepts_felling_support_jobs.py b/ml/fml40/features/functionalities/accepts_felling_support_jobs.py
index d87f173..74ff186 100644
--- a/ml/fml40/features/functionalities/accepts_felling_support_jobs.py
+++ b/ml/fml40/features/functionalities/accepts_felling_support_jobs.py
@@ -1,7 +1,8 @@
 """This module implements the class AcceptsFellingSupportJobs."""
 
-from ml.fml40.features.properties.values.documents.jobs.fellung_support_job import \
-    FellingSupportJob
+from ml.fml40.features.properties.values.documents.jobs.fellung_support_job import (
+    FellingSupportJob,
+)
 from ml.ml40.features.functionalities.accepts_jobs import AcceptsJobs
 
 
@@ -9,14 +10,16 @@ class AcceptsFellingSupportJobs(AcceptsJobs):
     """This functionality signalizes that FellingSupportJobs can be
     processed."""
 
-    def __init__(self, namespace="fml40", name="", identifier=""):
+    def __init__(self, namespace="fml40", name="", identifier="", parent=None):
         """Initializes the object.
 
         :param name:  Object name
         :param identifier: Identifier
 
         """
-        super().__init__(namespace=namespace, name=name, identifier=identifier)
+        super().__init__(
+            namespace=namespace, name=name, identifier=identifier, parent=parent
+        )
 
     def acceptJob(self, job: FellingSupportJob) -> bool:
         """Accepts the given FellingSupportJob job. Returns true if the job
diff --git a/ml/fml40/features/functionalities/accepts_forwarding_jobs.py b/ml/fml40/features/functionalities/accepts_forwarding_jobs.py
index af59b4b..130f210 100644
--- a/ml/fml40/features/functionalities/accepts_forwarding_jobs.py
+++ b/ml/fml40/features/functionalities/accepts_forwarding_jobs.py
@@ -1,22 +1,25 @@
 """This module implements the class AcceptsForwardingJobs."""
 
 from ml.app_logger import APP_LOGGER
-from ml.fml40.features.properties.values.documents.jobs.forwarding_job import \
-    ForwardingJob
+from ml.fml40.features.properties.values.documents.jobs.forwarding_job import (
+    ForwardingJob,
+)
 from ml.ml40.features.functionalities.accepts_jobs import AcceptsJobs
 
 
 class AcceptsForwardingJobs(AcceptsJobs):
     """This functionality signalizes that ForwadingJobs can be processed."""
 
-    def __init__(self, namespace="fml40", name="", identifier=""):
+    def __init__(self, namespace="fml40", name="", identifier="", parent=None):
         """Initializes the object.
 
         :param name:  Object name
         :param identifier: Identifier
 
         """
-        super().__init__(namespace=namespace, name=name, identifier=identifier)
+        super().__init__(
+            namespace=namespace, name=name, identifier=identifier, parent=parent
+        )
 
     def acceptJob(self, job: ForwardingJob) -> bool:
         """Accepts the given ForwardingJob. Returns true if the job has been
diff --git a/ml/fml40/features/functionalities/accepts_log_measurements.py b/ml/fml40/features/functionalities/accepts_log_measurements.py
index 6bb2d4e..64e519b 100644
--- a/ml/fml40/features/functionalities/accepts_log_measurements.py
+++ b/ml/fml40/features/functionalities/accepts_log_measurements.py
@@ -1,21 +1,24 @@
 """This module implements the class AcceptsLogMeasurements."""
 
-from ml.fml40.features.properties.values.documents.reports.log_measurement import \
-    LogMeasurement
+from ml.fml40.features.properties.values.documents.reports.log_measurement import (
+    LogMeasurement,
+)
 from ml.ml40.features.functionalities.functionality import Functionality
 
 
 class AcceptsLogMeasurements(Functionality):
     """This functionality signalizes that LogMeasurements can be processed."""
 
-    def __init__(self, namespace="fml40", name="", identifier=""):
+    def __init__(self, namespace="fml40", name="", identifier="", parent=None):
         """Initializes the object.
 
         :param name:  Object name
         :param identifier: Identifier
 
         """
-        super().__init__(namespace=namespace, name=name, identifier=identifier)
+        super().__init__(
+            namespace=namespace, name=name, identifier=identifier, parent=parent
+        )
 
     def acceptLogMeasurement(self, log_measurement: LogMeasurement) -> bool:
         """Accepts the given LogMeasurement. Returns true if the job has been
diff --git a/ml/fml40/features/functionalities/accepts_log_transportaition_jobs.py b/ml/fml40/features/functionalities/accepts_log_transportaition_jobs.py
index 5ec401a..3e02f0c 100644
--- a/ml/fml40/features/functionalities/accepts_log_transportaition_jobs.py
+++ b/ml/fml40/features/functionalities/accepts_log_transportaition_jobs.py
@@ -1,7 +1,8 @@
 """This module implements the class AcceptsLogTransportationJobs."""
 
-from ml.fml40.features.properties.values.documents.jobs.log_transportation_job import \
-    LogTransportationJob
+from ml.fml40.features.properties.values.documents.jobs.log_transportation_job import (
+    LogTransportationJob,
+)
 from ml.ml40.features.functionalities.accepts_jobs import AcceptsJobs
 
 
@@ -9,14 +10,16 @@ class AcceptsLogTransportationJobs(AcceptsJobs):
     """This functionality signalizes that LogTransportationJobs can be
     processed."""
 
-    def __init__(self, namespace="fml40", name="", identifier=""):
+    def __init__(self, namespace="fml40", name="", identifier="", parent=None):
         """Initializes the object.
 
         :param name:  Object name
         :param identifier: Identifier
 
         """
-        super().__init__(namespace=namespace, name=name, identifier=identifier)
+        super().__init__(
+            namespace=namespace, name=name, identifier=identifier, parent=parent
+        )
 
     def acceptJob(self, job: LogTransportationJob) -> bool:
         """Accepts the given LogTransportationJob. Returns true if the job has
diff --git a/ml/fml40/features/functionalities/accepts_moisture_measurement.py b/ml/fml40/features/functionalities/accepts_moisture_measurement.py
index 2c7d591..5a4c58b 100644
--- a/ml/fml40/features/functionalities/accepts_moisture_measurement.py
+++ b/ml/fml40/features/functionalities/accepts_moisture_measurement.py
@@ -1,7 +1,8 @@
 """This module implements the class AcceptsMoistureMeasurement."""
 
-from ml.fml40.features.properties.values.documents.reports.soil_moisture_measurement import \
-    SoilMoistureMeasurement
+from ml.fml40.features.properties.values.documents.reports.soil_moisture_measurement import (
+    SoilMoistureMeasurement,
+)
 from ml.ml40.features.functionalities.functionality import Functionality
 
 
@@ -9,14 +10,16 @@ class AcceptsMoistureMeasurement(Functionality):
     """This functionality signalizes that SoilMoistureMeasurements can be
     processed."""
 
-    def __init__(self,namespace="fml40", name="", identifier=""):
+    def __init__(self, namespace="fml40", name="", identifier="", parent=None):
         """Initializes the object.
 
         :param name:  Object name
         :param identifier: Identifier
 
         """
-        super().__init__(namespace=namespace, name=name, identifier=identifier)
+        super().__init__(
+            namespace=namespace, name=name, identifier=identifier, parent=parent
+        )
 
     def acceptMoistureMeasurement(self, input: SoilMoistureMeasurement):
         """Accepts the given SoilMoistureMeasurement."""
diff --git a/ml/fml40/features/functionalities/accepts_move_commands.py b/ml/fml40/features/functionalities/accepts_move_commands.py
index 8e8cfff..76e7ac6 100644
--- a/ml/fml40/features/functionalities/accepts_move_commands.py
+++ b/ml/fml40/features/functionalities/accepts_move_commands.py
@@ -7,14 +7,16 @@ class AcceptsMoveCommands(Functionality):
     """This functionality signalizes that the thing can be moved remotely
     via S3I-B messages ."""
 
-    def __init__(self, namespace="fml40", name="", identifier=""):
+    def __init__(self, namespace="fml40", name="", identifier="", parent=None):
         """Initializes the object.
 
         :param name:  Object name
         :param identifier: Identifier
 
         """
-        super().__init__(namespace=namespace, name=name, identifier=identifier)
+        super().__init__(
+            namespace=namespace, name=name, identifier=identifier, parent=parent
+        )
 
     def move(self, longitude: float, latitude: float):
         """Moves the thing to the position specified longitude and latitude.
diff --git a/ml/fml40/features/functionalities/accepts_passability_report.py b/ml/fml40/features/functionalities/accepts_passability_report.py
index 2d6d4c1..723f708 100644
--- a/ml/fml40/features/functionalities/accepts_passability_report.py
+++ b/ml/fml40/features/functionalities/accepts_passability_report.py
@@ -1,11 +1,14 @@
-from ml.fml40.features.properties.values.documents.reports.passability_report import \
-    PassabilityReport
+from ml.fml40.features.properties.values.documents.reports.passability_report import (
+    PassabilityReport,
+)
 from ml.ml40.features.functionalities.functionality import Functionality
 
 
 class AcceptsPassabilityReport(Functionality):
-    def __init__(self, namespace="fml40", name="", identifier=""):
-        super().__init__(namespace=namespace, name=name, identifier=identifier)
+    def __init__(self, namespace="fml40", name="", identifier="", parent=None):
+        super().__init__(
+            namespace=namespace, name=name, identifier=identifier, parent=parent
+        )
 
     def acceptsReport(self, report: PassabilityReport):
         pass
diff --git a/ml/fml40/features/functionalities/accepts_proximity_alert.py b/ml/fml40/features/functionalities/accepts_proximity_alert.py
index ce800be..d07e629 100644
--- a/ml/fml40/features/functionalities/accepts_proximity_alert.py
+++ b/ml/fml40/features/functionalities/accepts_proximity_alert.py
@@ -7,14 +7,16 @@ class AcceptsProximityAlert(Functionality):
     """This functionality signalizes that an alert is generated if things
     are to close to this thing."""
 
-    def __init__(self, namespace="fml40", name="", identifier=""):
+    def __init__(self, namespace="fml40", name="", identifier="", parent=None):
         """Initializes the object.
 
         :param name:  Object name
         :param identifier: Identifier
 
         """
-        super().__init__(namespace=namespace, name=name, identifier=identifier)
+        super().__init__(
+            namespace=namespace, name=name, identifier=identifier, parent=parent
+        )
 
     def proximityAlert(self, ids: list, distances: list):
         print("Making Proximity Alert...")
diff --git a/ml/fml40/features/functionalities/accepts_shield_commands.py b/ml/fml40/features/functionalities/accepts_shield_commands.py
index d28e6f0..1086640 100644
--- a/ml/fml40/features/functionalities/accepts_shield_commands.py
+++ b/ml/fml40/features/functionalities/accepts_shield_commands.py
@@ -5,14 +5,16 @@ class AcceptsShieldCommands(Functionality):
     """This functionality signalizes that the thing's shield can be moved remotely
     via S3I-B messages ."""
 
-    def __init__(self, namespace="fml40", name="", identifier=""):
+    def __init__(self, namespace="fml40", name="", identifier="", parent=None):
         """Initializes the object.
 
         :param name:  Object name
         :param identifier: Identifier
 
         """
-        super().__init__(namespace=namespace, name=name, identifier=identifier)
+        super().__init__(
+            namespace=namespace, name=name, identifier=identifier, parent=parent
+        )
 
     def shieldDown(self, speed):
         """roll down the winch with specified speed
diff --git a/ml/fml40/features/functionalities/accepts_single_tree_felling_jobs.py b/ml/fml40/features/functionalities/accepts_single_tree_felling_jobs.py
index afb4d79..de3b855 100644
--- a/ml/fml40/features/functionalities/accepts_single_tree_felling_jobs.py
+++ b/ml/fml40/features/functionalities/accepts_single_tree_felling_jobs.py
@@ -6,11 +6,13 @@
 class AcceptsSingleTreeFellingJobs(AcceptsJobs):
     """This functionality signalizes that single trees can be felled."""
 
-    def __init__(self, namespace="fml40", name="", identifier=""):
+    def __init__(self, namespace="fml40", name="", identifier="", parent=None):
         """Initializes the object.
 
         :param name:  Object name
         :param identifier: Identifier
 
         """
-        super().__init__(namespace=namespace, name=name, identifier=identifier)
+        super().__init__(
+            namespace=namespace, name=name, identifier=identifier, parent=parent
+        )
diff --git a/ml/fml40/features/functionalities/accepts_winch_command.py b/ml/fml40/features/functionalities/accepts_winch_command.py
index 2ee3d30..0653417 100644
--- a/ml/fml40/features/functionalities/accepts_winch_command.py
+++ b/ml/fml40/features/functionalities/accepts_winch_command.py
@@ -5,14 +5,16 @@ class AcceptsWinchCommands(Functionality):
     """This functionality signalizes that the thing's winch can be moved remotely
     via S3I-B messages ."""
 
-    def __init__(self, namespace="fml40", name="", identifier=""):
+    def __init__(self, namespace="fml40", name="", identifier="", parent=None):
         """Initializes the object.
 
         :param name:  Object name
         :param identifier: Identifier
 
         """
-        super().__init__(namespace=namespace, name=name, identifier=identifier)
+        super().__init__(
+            namespace=namespace, name=name, identifier=identifier, parent=parent
+        )
 
     def rollDown(self, speed):
         """roll down the winch with specified speed
diff --git a/ml/fml40/features/functionalities/classifies_tree_species.py b/ml/fml40/features/functionalities/classifies_tree_species.py
index 75ff215..c5cd829 100644
--- a/ml/fml40/features/functionalities/classifies_tree_species.py
+++ b/ml/fml40/features/functionalities/classifies_tree_species.py
@@ -6,14 +6,16 @@
 class ClassifiesTreeSpecies(Functionality):
     """This functionality allows the classification of tree species."""
 
-    def __init__(self, namespace="fml40", name="", identifier=""):
+    def __init__(self, namespace="fml40", name="", identifier="", parent=None):
         """Initializes the object.
 
         :param name:  Object name
         :param identifier: Identifier
 
         """
-        super().__init__(namespace=namespace, name=name, identifier=identifier)
+        super().__init__(
+            namespace=namespace, name=name, identifier=identifier, parent=parent
+        )
 
     def calculateTreeSpeciesClassification(self, tree: bytes) -> bytes:
         """Returns the classification of the species of tree.
diff --git a/ml/fml40/features/functionalities/converts_data_formats.py b/ml/fml40/features/functionalities/converts_data_formats.py
index f7ac1b4..b9a3d76 100644
--- a/ml/fml40/features/functionalities/converts_data_formats.py
+++ b/ml/fml40/features/functionalities/converts_data_formats.py
@@ -2,5 +2,7 @@
 
 
 class ConvertsDataFormats(Functionality):
-    def __init__(self, namespace="fml40", name="", identifier=""):
-        super().__init__(namespace=namespace, name=name, identifier=identifier)
+    def __init__(self, namespace="fml40", name="", identifier="", parent=None):
+        super().__init__(
+            namespace=namespace, name=name, identifier=identifier, parent=parent
+        )
diff --git a/ml/fml40/features/functionalities/converts_forest_gml.py b/ml/fml40/features/functionalities/converts_forest_gml.py
index 0ff4286..f02b656 100644
--- a/ml/fml40/features/functionalities/converts_forest_gml.py
+++ b/ml/fml40/features/functionalities/converts_forest_gml.py
@@ -1,7 +1,8 @@
-from ml.fml40.features.functionalities.converts_data_formats import \
-    ConvertsDataFormats
+from ml.fml40.features.functionalities.converts_data_formats import ConvertsDataFormats
 
 
 class ConvertsForestGML(ConvertsDataFormats):
-    def __init__(self, namespace="fml40", name="", identifier=""):
-        super().__init__(namespace=namespace, name=name, identifier=identifier)
+    def __init__(self, namespace="fml40", name="", identifier="", parent=None):
+        super().__init__(
+            namespace=namespace, name=name, identifier=identifier, parent=parent
+        )
diff --git a/ml/fml40/features/functionalities/cuts.py b/ml/fml40/features/functionalities/cuts.py
index 1631a85..0f84211 100644
--- a/ml/fml40/features/functionalities/cuts.py
+++ b/ml/fml40/features/functionalities/cuts.py
@@ -4,14 +4,16 @@
 
 
 class Cuts(Functionality):
-    def __init__(self, namespace="fml40", name="", identifier=""):
+    def __init__(self, namespace="fml40", name="", identifier="", parent=None):
         """Initializes the object.
 
         :param name: Object name
         :param identifier: Identifier
 
         """
-        super().__init__(namespace=namespace, name=name, identifier=identifier)
+        super().__init__(
+            namespace=namespace, name=name, identifier=identifier, parent=parent
+        )
 
     def cut(self):
         pass
diff --git a/ml/fml40/features/functionalities/determines_passability.py b/ml/fml40/features/functionalities/determines_passability.py
index becd9e8..c57317f 100644
--- a/ml/fml40/features/functionalities/determines_passability.py
+++ b/ml/fml40/features/functionalities/determines_passability.py
@@ -9,14 +9,16 @@ class DeterminesPassability(Functionality):
     """This functionality signalizes that the passability can be
     calculated."""
 
-    def __init__(self, namespace="fml40", name="", identifier=""):
+    def __init__(self, namespace="fml40", name="", identifier="", parent=None):
         """Initializes the object.
 
         :param name: Object name
         :param identifier: Identifier
 
         """
-        super().__init__(namespace=namespace, name=name, identifier=identifier)
+        super().__init__(
+            namespace=namespace, name=name, identifier=identifier, parent=parent
+        )
 
     def isPassableNow(self, input: float) -> bool:
         """Returns true if this object can be passed with the given weight
diff --git a/ml/fml40/features/functionalities/displays_health_alarms.py b/ml/fml40/features/functionalities/displays_health_alarms.py
index d5a9f66..28ea678 100644
--- a/ml/fml40/features/functionalities/displays_health_alarms.py
+++ b/ml/fml40/features/functionalities/displays_health_alarms.py
@@ -4,14 +4,16 @@
 
 
 class DisplaysHealthAlarms(Functionality):
-    def __init__(self, namespace="fml40", name="", identifier=""):
+    def __init__(self, namespace="fml40", name="", identifier="", parent=None):
         """Initializes the object.
 
         :param name: Object name
         :param identifier: Identifier
 
         """
-        super().__init__(namespace=namespace, name=name, identifier=identifier)
+        super().__init__(
+            namespace=namespace, name=name, identifier=identifier, parent=parent
+        )
 
     def displayHealthAlarm(self):
         pass
diff --git a/ml/fml40/features/functionalities/evaluates_forest_rating.py b/ml/fml40/features/functionalities/evaluates_forest_rating.py
index 3460368..ff771d9 100644
--- a/ml/fml40/features/functionalities/evaluates_forest_rating.py
+++ b/ml/fml40/features/functionalities/evaluates_forest_rating.py
@@ -2,5 +2,7 @@
 
 
 class EvaluatesForestRating(Functionality):
-    def __init__(self, namespace="fml40", name="", identifier=""):
-        super().__init__(namespace=namespace, name=name, identifier=identifier)
+    def __init__(self, namespace="fml40", name="", identifier="", parent=None):
+        super().__init__(
+            namespace=namespace, name=name, identifier=identifier, parent=parent
+        )
diff --git a/ml/fml40/features/functionalities/evaluates_stand_attributes.py b/ml/fml40/features/functionalities/evaluates_stand_attributes.py
index f475a37..54366dd 100644
--- a/ml/fml40/features/functionalities/evaluates_stand_attributes.py
+++ b/ml/fml40/features/functionalities/evaluates_stand_attributes.py
@@ -6,14 +6,16 @@
 
 
 class EvaluatesStandAttributes(Functionality):
-    def __init__(self, namespace="fml40", name="", identifier=""):
+    def __init__(self, namespace="fml40", name="", identifier="", parent=None):
         """Initializes the object.
 
         :param name: Object name
         :param identifier: Identifier
 
         """
-        super().__init__(namespace=namespace, name=name, identifier=identifier)
+        super().__init__(
+            namespace=namespace, name=name, identifier=identifier, parent=parent
+        )
 
     def calculateStandAttributes(self, input_a: bytes, input_b: date) -> str:
         pass
diff --git a/ml/fml40/features/functionalities/fells.py b/ml/fml40/features/functionalities/fells.py
index 58c3327..d55ca12 100644
--- a/ml/fml40/features/functionalities/fells.py
+++ b/ml/fml40/features/functionalities/fells.py
@@ -10,14 +10,16 @@ class Fells(Functionality):
     """This functionality signalizes that FellingJobs can be processed and
     offers the possibility to fell trees."""
 
-    def __init__(self, namespace="fml40", name="", identifier=""):
+    def __init__(self, namespace="fml40", name="", identifier="", parent=None):
         """Initializes the object.
 
         :param name: Object name
         :param identifier: Identifier
 
         """
-        super().__init__(namespace=namespace, name=name, identifier=identifier)
+        super().__init__(
+            namespace=namespace, name=name, identifier=identifier, parent=parent
+        )
 
     def executeFellingJob(self, job: FellingJob):
         """Executes the given FellingJob.
diff --git a/ml/fml40/features/functionalities/forest_planning_evaluation.py b/ml/fml40/features/functionalities/forest_planning_evaluation.py
index f0eed79..d24d451 100644
--- a/ml/fml40/features/functionalities/forest_planning_evaluation.py
+++ b/ml/fml40/features/functionalities/forest_planning_evaluation.py
@@ -4,14 +4,16 @@
 
 
 class ForestPlanningEvaluation(Functionality):
-    def __init__(self, namespace="fml40", name="", identifier=""):
+    def __init__(self, namespace="fml40", name="", identifier="", parent=None):
         """Initializes the object.
 
         :param name: Object name
         :param identifier: Identifier
 
         """
-        super().__init__(namespace=namespace, name=name, identifier=identifier)
+        super().__init__(
+            namespace=namespace, name=name, identifier=identifier, parent=parent
+        )
 
     def evaluateInventoryData(self):
         pass
diff --git a/ml/fml40/features/functionalities/forwards.py b/ml/fml40/features/functionalities/forwards.py
index 9e68698..f90182d 100644
--- a/ml/fml40/features/functionalities/forwards.py
+++ b/ml/fml40/features/functionalities/forwards.py
@@ -1,21 +1,24 @@
 """This module implements the class Forwards."""
 
-from ml.fml40.features.properties.values.documents.jobs.forwarding_job import \
-    ForwardingJob
+from ml.fml40.features.properties.values.documents.jobs.forwarding_job import (
+    ForwardingJob,
+)
 from ml.ml40.features.functionalities.functionality import Functionality
 
 
 class Forwards(Functionality):
     """This functionality signalizes that ForwardingJobs can be processed."""
 
-    def __init__(self, namespace="fml40", name="", identifier=""):
+    def __init__(self, namespace="fml40", name="", identifier="", parent=None):
         """Initializes the object.
 
         :param name: Object name
         :param identifier: Identifier
 
         """
-        super().__init__(namespace=namespace, name=name, identifier=identifier)
+        super().__init__(
+            namespace=namespace, name=name, identifier=identifier, parent=parent
+        )
 
     def executeJob(self, job):
         """Executes the given job.
diff --git a/ml/fml40/features/functionalities/generates_afforestation_suggestions.py b/ml/fml40/features/functionalities/generates_afforestation_suggestions.py
index 4bd40c4..f04cb83 100644
--- a/ml/fml40/features/functionalities/generates_afforestation_suggestions.py
+++ b/ml/fml40/features/functionalities/generates_afforestation_suggestions.py
@@ -1,21 +1,24 @@
 """This module implements the class GeneratesAfforestationSuggestions."""
 
-from ml.fml40.features.properties.values.documents.reports.afforestation_suggestion import \
-    AfforestationSuggestion
+from ml.fml40.features.properties.values.documents.reports.afforestation_suggestion import (
+    AfforestationSuggestion,
+)
 from ml.ml40.features.functionalities.functionality import Functionality
 
 
 class GeneratesAfforestationSuggestions(Functionality):
     """This functionality can generate suggestions for afforestation."""
 
-    def __init__(self, namespace="fml40", name="", identifier=""):
+    def __init__(self, namespace="fml40", name="", identifier="", parent=None):
         """Initializes the object.
 
         :param name: Object name
         :param identifier: Identifier
 
         """
-        super().__init__(namespace=namespace, name=name, identifier=identifier)
+        super().__init__(
+            namespace=namespace, name=name, identifier=identifier, parent=parent
+        )
 
     def generateAfforestationSuggestion(self) -> AfforestationSuggestion:
         """Returns a suggestion for afforestation.
diff --git a/ml/fml40/features/functionalities/generates_felling_suggestions.py b/ml/fml40/features/functionalities/generates_felling_suggestions.py
index ed42b0d..f1b4e6c 100644
--- a/ml/fml40/features/functionalities/generates_felling_suggestions.py
+++ b/ml/fml40/features/functionalities/generates_felling_suggestions.py
@@ -9,14 +9,16 @@ class GeneratesFellingSuggestions(Functionality):
     tree.
     """
 
-    def __init__(self, namespace="fml40", name="", identifier=""):
+    def __init__(self, namespace="fml40", name="", identifier="", parent=None):
         """Initializes the object.
 
         :param name: Object name
         :param identifier: Identifier
 
         """
-        super().__init__(namespace=namespace, name=name, identifier=identifier)
+        super().__init__(
+            namespace=namespace, name=name, identifier=identifier, parent=parent
+        )
 
     def generateFellingSuggestion(self, tree_Id: ID):
         """Returns a suggestion regarding how to fell a tree.
diff --git a/ml/fml40/features/functionalities/generates_typical_single_trees.py b/ml/fml40/features/functionalities/generates_typical_single_trees.py
index 32066c3..00f8114 100644
--- a/ml/fml40/features/functionalities/generates_typical_single_trees.py
+++ b/ml/fml40/features/functionalities/generates_typical_single_trees.py
@@ -2,5 +2,7 @@
 
 
 class GeneratesTypicalSingleTrees(Functionality):
-    def __init__(self, namespace="fml40", name="", identifier=""):
-        super().__init__(namespace=namespace, name=name, identifier=identifier)
+    def __init__(self, namespace="fml40", name="", identifier="", parent=None):
+        super().__init__(
+            namespace=namespace, name=name, identifier=identifier, parent=parent
+        )
diff --git a/ml/fml40/features/functionalities/grabs.py b/ml/fml40/features/functionalities/grabs.py
index d0a11b4..f5039ab 100644
--- a/ml/fml40/features/functionalities/grabs.py
+++ b/ml/fml40/features/functionalities/grabs.py
@@ -2,8 +2,10 @@
 
 
 class Grabs(Functionality):
-    def __init__(self, namespace="fml40", name="", identifier=""):
-        super().__init__(namespace=namespace, name=name, identifier=identifier)
+    def __init__(self, namespace="fml40", name="", identifier="", parent=None):
+        super().__init__(
+            namespace=namespace, name=name, identifier=identifier, parent=parent
+        )
 
     def close(self):
         pass
diff --git a/ml/fml40/features/functionalities/harvests.py b/ml/fml40/features/functionalities/harvests.py
index 769fe46..ae31f10 100644
--- a/ml/fml40/features/functionalities/harvests.py
+++ b/ml/fml40/features/functionalities/harvests.py
@@ -1,12 +1,15 @@
 from ml.app_logger import APP_LOGGER
-from ml.fml40.features.properties.values.documents.jobs.felling_job import \
-    FellingJob
+from ml.fml40.features.properties.values.documents.jobs.felling_job import FellingJob
 from ml.ml40.features.functionalities.functionality import Functionality
 
 
 class Harvests(Functionality):
-    def __init__(self, namespace="fml40", name="", identifier=""):
-        super().__init__(namespace=namespace, name=name, identifier=identifier)
+    def __init__(self, namespace="fml40", name="", identifier="", parent=None):
+        super().__init__(
+            namespace=namespace,
+            name=name,
+            identifier=identifier,
+        )
 
     def executeJob(self, job: FellingJob):
         pass
diff --git a/ml/fml40/features/functionalities/measure_wood.py b/ml/fml40/features/functionalities/measure_wood.py
index 8b08bd6..024427a 100644
--- a/ml/fml40/features/functionalities/measure_wood.py
+++ b/ml/fml40/features/functionalities/measure_wood.py
@@ -1,11 +1,14 @@
-from ml.fml40.features.properties.values.documents.reports.log_measurement import \
-    LogMeasurement
+from ml.fml40.features.properties.values.documents.reports.log_measurement import (
+    LogMeasurement,
+)
 from ml.ml40.features.functionalities.functionality import Functionality
 
 
 class MeasuresWood(Functionality):
-    def __init__(self, namespace="fml40", name="", identifier=""):
-        super().__init__(namespace=namespace, name=name, identifier=identifier)
+    def __init__(self, namespace="fml40", name="", identifier="", parent=None):
+        super().__init__(
+            namespace=namespace, name=name, identifier=identifier, parent=parent
+        )
 
     def measureLog(self) -> LogMeasurement:
         pass
diff --git a/ml/fml40/features/functionalities/monitor_health_status.py b/ml/fml40/features/functionalities/monitor_health_status.py
index 21fe788..4d08921 100644
--- a/ml/fml40/features/functionalities/monitor_health_status.py
+++ b/ml/fml40/features/functionalities/monitor_health_status.py
@@ -2,8 +2,10 @@
 
 
 class MonitorsHealthStatus(Functionality):
-    def __init__(self, namespace="fml40",name="", identifier=""):
-        super().__init__(namespace=namespace, name=name, identifier=identifier)
+    def __init__(self, namespace="fml40", name="", identifier="", parent=None):
+        super().__init__(
+            namespace=namespace, name=name, identifier=identifier, parent=parent
+        )
 
     def MonitorsHealthStatus(self):
         pass
diff --git a/ml/fml40/features/functionalities/predicts_forest_development.py b/ml/fml40/features/functionalities/predicts_forest_development.py
index 0a7a646..9963a5c 100644
--- a/ml/fml40/features/functionalities/predicts_forest_development.py
+++ b/ml/fml40/features/functionalities/predicts_forest_development.py
@@ -2,5 +2,5 @@
 
 
 class PredictsForestDevelopment(Functionality):
-    def __init__(self, namespace="fml40", name="", identifier=""):
-        super().__init__(namespace=namespace, name=name, identifier=identifier)
+    def __init__(self, namespace="fml40", name="", identifier="", parent=None):
+        super().__init__(namespace=namespace, name=name, identifier=identifier, parent=parent)
diff --git a/ml/fml40/features/functionalities/provides_moisture_prediction.py b/ml/fml40/features/functionalities/provides_moisture_prediction.py
index 2ef481c..1fe6014 100644
--- a/ml/fml40/features/functionalities/provides_moisture_prediction.py
+++ b/ml/fml40/features/functionalities/provides_moisture_prediction.py
@@ -4,8 +4,8 @@
 
 
 class ProvidesMoisturePrediction(Functionality):
-    def __init__(self, namespace="fml40", name="", identifier=""):
-        super().__init__(namespace=namespace, name=name, identifier=identifier)
+    def __init__(self, namespace="fml40", name="", identifier="", parent=None):
+        super().__init__(namespace=namespace, name=name, identifier=identifier, parent=parent)
 
     def predict(self):
         pass
diff --git a/ml/fml40/features/functionalities/provides_passability_information.py b/ml/fml40/features/functionalities/provides_passability_information.py
index 8cd3686..ff7b419 100644
--- a/ml/fml40/features/functionalities/provides_passability_information.py
+++ b/ml/fml40/features/functionalities/provides_passability_information.py
@@ -2,8 +2,10 @@
 
 
 class ProvidesPassabilityInformation(Functionality):
-    def __init__(self, namespace="fml40", name="", identifier=""):
-        super().__init__(namespace=namespace, name=name, identifier=identifier)
+    def __init__(self, namespace="fml40", name="", identifier="", parent=None):
+        super().__init__(
+            namespace=namespace, name=name, identifier=identifier, parent=parent
+        )
 
     def calculatePassability(self, load, moisture):
         pass
diff --git a/ml/fml40/features/functionalities/provides_production_data.py b/ml/fml40/features/functionalities/provides_production_data.py
index 918f96e..dd88216 100644
--- a/ml/fml40/features/functionalities/provides_production_data.py
+++ b/ml/fml40/features/functionalities/provides_production_data.py
@@ -5,8 +5,10 @@
 
 
 class ProvidesProductionData(Functionality):
-    def __init__(self, namespace="fml40", name="", identifier=""):
-        super().__init__(namespace=namespace, name=name, identifier=identifier)
+    def __init__(self, namespace="fml40", name="", identifier="", parent=None):
+        super().__init__(
+            namespace=namespace, name=name, identifier=identifier, parent=parent
+        )
 
     def getProductionData(self) -> ProductionData:
         return "Production Data is huge"
diff --git a/ml/fml40/features/functionalities/provides_tree_data.py b/ml/fml40/features/functionalities/provides_tree_data.py
index 52fb8d0..b3b37a9 100644
--- a/ml/fml40/features/functionalities/provides_tree_data.py
+++ b/ml/fml40/features/functionalities/provides_tree_data.py
@@ -5,8 +5,10 @@
 
 
 class ProvidesTreeData(Functionality):
-    def __init__(self,namespace="fml40", name="", identifier=""):
-        super().__init__(namespace=namespace, name=name, identifier=identifier)
+    def __init__(self, namespace="fml40", name="", identifier="", parent=None):
+        super().__init__(
+            namespace=namespace, name=name, identifier=identifier, parent=parent
+        )
 
     def getTreeData(self, Tree: ID) -> list:
         pass
diff --git a/ml/fml40/features/functionalities/provides_weather_data.py b/ml/fml40/features/functionalities/provides_weather_data.py
index 035dc0e..aa4890b 100644
--- a/ml/fml40/features/functionalities/provides_weather_data.py
+++ b/ml/fml40/features/functionalities/provides_weather_data.py
@@ -2,5 +2,7 @@
 
 
 class ProvidesWeatherData(Functionality):
-    def __init__(self, namespace="fml40", name="", identifier=""):
-        super().__init__(namespace=namespace, name=name, identifier=identifier)
+    def __init__(self, namespace="fml40", name="", identifier="", parent=None):
+        super().__init__(
+            namespace=namespace, name=name, identifier=identifier, parent=parent
+        )
diff --git a/ml/fml40/features/functionalities/simulates_tree_growth.py b/ml/fml40/features/functionalities/simulates_tree_growth.py
index 7eae7d6..bf49b38 100644
--- a/ml/fml40/features/functionalities/simulates_tree_growth.py
+++ b/ml/fml40/features/functionalities/simulates_tree_growth.py
@@ -2,5 +2,7 @@
 
 
 class SimulatesTreeGrowth(Functionality):
-    def __init__(self, namespace="fml40", name="", identifier=""):
-        super().__init__(namespace=namespace, name=name, identifier=identifier)
+    def __init__(self, namespace="fml40", name="", identifier="", parent=None):
+        super().__init__(
+            namespace=namespace, name=name, identifier=identifier, parent=parent
+        )
diff --git a/ml/fml40/features/functionalities/supports_felling.py b/ml/fml40/features/functionalities/supports_felling.py
index f687976..f52f0e5 100644
--- a/ml/fml40/features/functionalities/supports_felling.py
+++ b/ml/fml40/features/functionalities/supports_felling.py
@@ -1,11 +1,12 @@
-from ml.fml40.features.properties.values.documents.jobs.felling_job import \
-    FellingJob
+from ml.fml40.features.properties.values.documents.jobs.felling_job import FellingJob
 from ml.ml40.features.functionalities.functionality import Functionality
 
 
 class SupportsFelling(Functionality):
-    def __init__(self, namespace="fml40", name="", identifier=""):
-        super().__init__(namespace=namespace, name=name, identifier=identifier)
+    def __init__(self, namespace="fml40", name="", identifier="", parent=None):
+        super().__init__(
+            namespace=namespace, name=name, identifier=identifier, parent=parent
+        )
 
     def supportFelling(self, job: FellingJob, suggestion):
         pass
diff --git a/ml/fml40/features/functionalities/transports_logs.py b/ml/fml40/features/functionalities/transports_logs.py
index 1d988cf..7cc1031 100644
--- a/ml/fml40/features/functionalities/transports_logs.py
+++ b/ml/fml40/features/functionalities/transports_logs.py
@@ -1,13 +1,17 @@
-from ml.fml40.features.properties.values.documents.jobs.log_transportation_job import \
-    LogTransportationJob
-from ml.fml40.features.properties.values.documents.reports.log_transportation_report import \
-    LogTransportationReport
+from ml.fml40.features.properties.values.documents.jobs.log_transportation_job import (
+    LogTransportationJob,
+)
+from ml.fml40.features.properties.values.documents.reports.log_transportation_report import (
+    LogTransportationReport,
+)
 from ml.ml40.features.functionalities.functionality import Functionality
 
 
 class TransportsLogs(Functionality):
-    def __init__(self, namespace="fml40", name="", identifier=""):
-        super().__init__(namespace=namespace, name=name, identifier=identifier)
+    def __init__(self, namespace="fml40", name="", identifier="", parent=None):
+        super().__init__(
+            namespace=namespace, name=name, identifier=identifier, parent=parent
+        )
 
     def transportLogs(self, job: LogTransportationJob) -> LogTransportationReport:
         print("i am making Log transportation report for the job {}".format(job))
diff --git a/ml/fml40/features/functionalities/visualizes_forest.py b/ml/fml40/features/functionalities/visualizes_forest.py
index 7db2888..4d19e2c 100644
--- a/ml/fml40/features/functionalities/visualizes_forest.py
+++ b/ml/fml40/features/functionalities/visualizes_forest.py
@@ -2,5 +2,5 @@
 
 
 class VisualizesForest(Functionality):
-    def __init__(self, namespace="fml40", name="", identifier=""):
-        super().__init__(namespace=namespace, name=name, identifier=identifier)
+    def __init__(self, namespace="fml40", name="", identifier="", parent=None):
+        super().__init__(namespace=namespace, name=name, identifier=identifier, parent=parent)
diff --git a/ml/fml40/features/properties/values/assortment.py b/ml/fml40/features/properties/values/assortment.py
index c260fdd..2c7b105 100644
--- a/ml/fml40/features/properties/values/assortment.py
+++ b/ml/fml40/features/properties/values/assortment.py
@@ -2,8 +2,10 @@
 
 
 class Assortment(Value):
-    def __init__(self, namespace="fml40", name="", identifier=""):
-        super().__init__(namespace=namespace, name=name, identifier=identifier)
+    def __init__(self, namespace="fml40", name="", identifier="", parent=None):
+        super().__init__(
+            namespace=namespace, name=name, identifier=identifier, parent=parent
+        )
         self.__grade = None
         self.__json_out = dict()
 
diff --git a/ml/fml40/features/properties/values/basal_area.py b/ml/fml40/features/properties/values/basal_area.py
index 3fcd3ba..5daf5bf 100644
--- a/ml/fml40/features/properties/values/basal_area.py
+++ b/ml/fml40/features/properties/values/basal_area.py
@@ -2,5 +2,5 @@
 
 
 class BasalArea(Value):
-    def __init__(self, namespace="fml40", name="", identifier=""):
-        super().__init__(namespace=namespace, name=name, identifier=identifier)
+    def __init__(self, namespace="fml40", name="", identifier="", parent=None):
+        super().__init__(namespace=namespace, name=name, identifier=identifier, parent=parent)
diff --git a/ml/fml40/features/properties/values/dbh.py b/ml/fml40/features/properties/values/dbh.py
index afc6cf0..66b75aa 100644
--- a/ml/fml40/features/properties/values/dbh.py
+++ b/ml/fml40/features/properties/values/dbh.py
@@ -2,8 +2,10 @@
 
 
 class DBH(Value):
-    def __init__(self, namespace="fml40", name="", identifier=""):
-        super().__init__(namespace=namespace, name=name, identifier=identifier)
+    def __init__(self, namespace="fml40", name="", identifier="", parent=None):
+        super().__init__(
+            namespace=namespace, name=name, identifier=identifier, parent=parent
+        )
         self.__dbh = None
         self.__json_out = dict()
 
diff --git a/ml/fml40/features/properties/values/dominant_tree_species.py b/ml/fml40/features/properties/values/dominant_tree_species.py
index 662047d..dcf26b4 100644
--- a/ml/fml40/features/properties/values/dominant_tree_species.py
+++ b/ml/fml40/features/properties/values/dominant_tree_species.py
@@ -2,5 +2,7 @@
 
 
 class DominantTreeSpecies(Value):
-    def __init__(self, namespace="fml40", name="", identifier=""):
-        super().__init__(namespace=namespace, name=name, identifier=identifier)
+    def __init__(self, namespace="fml40", name="", identifier="", parent=None):
+        super().__init__(
+            namespace=namespace, name=name, identifier=identifier, parent=parent
+        )
diff --git a/ml/fml40/features/properties/values/fell_indicator.py b/ml/fml40/features/properties/values/fell_indicator.py
index bd15b4e..2f7d7af 100644
--- a/ml/fml40/features/properties/values/fell_indicator.py
+++ b/ml/fml40/features/properties/values/fell_indicator.py
@@ -2,8 +2,8 @@
 
 
 class FellIndicator(Value):
-    def __init__(self, namespace="fml40", name="", identifier=""):
-        super().__init__(namespace=namespace, name=name, identifier=identifier)
+    def __init__(self, namespace="fml40", name="", identifier="", parent=None):
+        super().__init__(namespace=namespace, name=name, identifier=identifier, parent=parent)
         self.__marked = None
         self.__json_out = dict()
 
diff --git a/ml/fml40/features/properties/values/felling_period.py b/ml/fml40/features/properties/values/felling_period.py
index 22dae92..6073823 100644
--- a/ml/fml40/features/properties/values/felling_period.py
+++ b/ml/fml40/features/properties/values/felling_period.py
@@ -2,8 +2,10 @@
 
 
 class FellingPeriod(Value):
-    def __init__(self, namespace="fml40",  name="", identifier=""):
-        super().__init__(namespace=namespace, name=name, identifier=identifier)
+    def __init__(self, namespace="fml40", name="", identifier="", parent=None):
+        super().__init__(
+            namespace=namespace, name=name, identifier=identifier, parent=parent
+        )
         self.__from = None
         self.__to = None
         self.__json_out = dict()
diff --git a/ml/fml40/features/properties/values/harvested_volume.py b/ml/fml40/features/properties/values/harvested_volume.py
index c7eff1a..10da162 100644
--- a/ml/fml40/features/properties/values/harvested_volume.py
+++ b/ml/fml40/features/properties/values/harvested_volume.py
@@ -2,8 +2,8 @@
 
 
 class HarvestedVolume(Value):
-    def __init__(self, namespace="fml40", name="", identifier=""):
-        super().__init__(namespace=namespace, name=name, identifier=identifier)
+    def __init__(self, namespace="fml40", name="", identifier="", parent=None):
+        super().__init__(namespace=namespace, name=name, identifier=identifier, parent=parent)
 
         self.__volume = None
         self.__json_out = None
diff --git a/ml/fml40/features/properties/values/harvesting_parameter.py b/ml/fml40/features/properties/values/harvesting_parameter.py
index acd62e1..d672cf0 100644
--- a/ml/fml40/features/properties/values/harvesting_parameter.py
+++ b/ml/fml40/features/properties/values/harvesting_parameter.py
@@ -2,8 +2,10 @@
 
 
 class HarvestingParameters(Value):
-    def __init__(self, namespace="fml40", name="", identifier=""):
-        super().__init__(namespace=namespace, name=name, identifier=identifier)
+    def __init__(self, namespace="fml40", name="", identifier="", parent=None):
+        super().__init__(
+            namespace=namespace, name=name, identifier=identifier, parent=parent
+        )
         self.__cuttingLengths = None
         self.__json_out = dict()
 
diff --git a/ml/fml40/features/properties/values/increment_volume.py b/ml/fml40/features/properties/values/increment_volume.py
index 8b92b4e..4de0539 100644
--- a/ml/fml40/features/properties/values/increment_volume.py
+++ b/ml/fml40/features/properties/values/increment_volume.py
@@ -2,5 +2,7 @@
 
 
 class IncrementVolume(Value):
-    def __init__(self, namespace="fml40", name="", identifier=""):
-        super().__init__(namespace=namespace, name=name, identifier=identifier)
+    def __init__(self, namespace="fml40", name="", identifier="", parent=None):
+        super().__init__(
+            namespace=namespace, name=name, identifier=identifier, parent=parent
+        )
diff --git a/ml/fml40/features/properties/values/interfering_branches.py b/ml/fml40/features/properties/values/interfering_branches.py
index 71abe4a..7e316de 100644
--- a/ml/fml40/features/properties/values/interfering_branches.py
+++ b/ml/fml40/features/properties/values/interfering_branches.py
@@ -2,8 +2,10 @@
 
 
 class InterferingBranches(Value):
-    def __init__(self, namespace="fml40", name="", identifier=""):
-        super().__init__(namespace=namespace, name=name, identifier=identifier)
+    def __init__(self, namespace="fml40", name="", identifier="", parent=None):
+        super().__init__(
+            namespace=namespace, name=name, identifier=identifier, parent=parent
+        )
         self.__exist = None
         self.__json_out = dict()
 
diff --git a/ml/fml40/features/properties/values/inventory_data.py b/ml/fml40/features/properties/values/inventory_data.py
index ddc3234..6d72fec 100644
--- a/ml/fml40/features/properties/values/inventory_data.py
+++ b/ml/fml40/features/properties/values/inventory_data.py
@@ -1,10 +1,11 @@
-from ml.fml40.features.properties.values.abstract_inventory import AbstractInventory
+from ml.fml40.features.properties.values.abstract_inventory import \
+    AbstractInventory
 from ml.ml40.features.properties.values.value import Value
 
 
 class InventoryData(Value):
-    def __init__(self, namespace="fml40", name="", identifier=""):
-        super().__init__(namespace=namespace, name=name, identifier=identifier)
+    def __init__(self, namespace="fml40", name="", identifier="", parent=None):
+        super().__init__(namespace=namespace, name=name, identifier=identifier, parent=parent)
 
         self.__data = []
         self.__json_out = dict()
diff --git a/ml/fml40/features/properties/values/mean_height.py b/ml/fml40/features/properties/values/mean_height.py
index a5ac880..fc7de85 100644
--- a/ml/fml40/features/properties/values/mean_height.py
+++ b/ml/fml40/features/properties/values/mean_height.py
@@ -2,5 +2,7 @@
 
 
 class MeanHeight(Value):
-    def __init__(self, namespace="fml40", name="", identifier=""):
-        super().__init__(namespace=namespace, name=name, identifier=identifier)
+    def __init__(self, namespace="fml40", name="", identifier="", parent=None):
+        super().__init__(
+            namespace=namespace, name=name, identifier=identifier, parent=parent
+        )
diff --git a/ml/fml40/features/properties/values/number_of_stems.py b/ml/fml40/features/properties/values/number_of_stems.py
index f9d25fd..3dad281 100644
--- a/ml/fml40/features/properties/values/number_of_stems.py
+++ b/ml/fml40/features/properties/values/number_of_stems.py
@@ -2,5 +2,7 @@
 
 
 class NumberOfStems(Value):
-    def __init__(self, namespace="fml40", name="", identifier=""):
-        super().__init__(namespace=namespace, name=name, identifier=identifier)
+    def __init__(self, namespace="fml40", name="", identifier="", parent=None):
+        super().__init__(
+            namespace=namespace, name=name, identifier=identifier, parent=parent
+        )
diff --git a/ml/fml40/features/properties/values/overhang.py b/ml/fml40/features/properties/values/overhang.py
index 4687355..ea1704c 100644
--- a/ml/fml40/features/properties/values/overhang.py
+++ b/ml/fml40/features/properties/values/overhang.py
@@ -2,8 +2,10 @@
 
 
 class Overhang(Value):
-    def __init__(self, namespace="fml40", name="", identifier=""):
-        super().__init__(namespace=namespace, name=name, identifier=identifier)
+    def __init__(self, namespace="fml40", name="", identifier="", parent=None):
+        super().__init__(
+            namespace=namespace, name=name, identifier=identifier, parent=parent
+        )
         self.__overhang = None
         self.__json_out = dict()
 
diff --git a/ml/fml40/features/properties/values/stand_attribute_set.py b/ml/fml40/features/properties/values/stand_attribute_set.py
index 1212815..90e9ee8 100644
--- a/ml/fml40/features/properties/values/stand_attribute_set.py
+++ b/ml/fml40/features/properties/values/stand_attribute_set.py
@@ -2,5 +2,5 @@
 
 
 class StandAttributeSet(Value):
-    def __init__(self, namespace="fml40", name="", identifier=""):
-        super().__init__(namespace=namespace, name=name, identifier=identifier)
+    def __init__(self, namespace="fml40", name="", identifier="", parent=None):
+        super().__init__(namespace=namespace, name=name, identifier=identifier, parent=parent)
diff --git a/ml/fml40/features/properties/values/stem_segment_properties.py b/ml/fml40/features/properties/values/stem_segment_properties.py
index d7e98d1..d99abc9 100644
--- a/ml/fml40/features/properties/values/stem_segment_properties.py
+++ b/ml/fml40/features/properties/values/stem_segment_properties.py
@@ -2,8 +2,8 @@
 
 
 class StemSegmentProperties(Value):
-    def __init__(self, namespace="fml40", name="", identifier=""):
-        super().__init__(namespace=namespace, name=name, identifier=identifier)
+    def __init__(self, namespace="fml40", name="", identifier="", parent=None):
+        super().__init__(namespace=namespace, name=name, identifier=identifier, parent=parent)
 
         self.__diameter = None
         self.__length = None
diff --git a/ml/fml40/features/properties/values/stock_volume.py b/ml/fml40/features/properties/values/stock_volume.py
index 0cf753b..8a3e109 100644
--- a/ml/fml40/features/properties/values/stock_volume.py
+++ b/ml/fml40/features/properties/values/stock_volume.py
@@ -2,5 +2,7 @@
 
 
 class StockVolume(Value):
-    def __init__(self, namespace="fml40", name="", identifier=""):
-        super().__init__(namespace=namespace, name=name, identifier=identifier)
+    def __init__(self, namespace="fml40", name="", identifier="", parent=None):
+        super().__init__(
+            namespace=namespace, name=name, identifier=identifier, parent=parent
+        )
diff --git a/ml/fml40/features/properties/values/thickness_class.py b/ml/fml40/features/properties/values/thickness_class.py
index 7972db8..0b08769 100644
--- a/ml/fml40/features/properties/values/thickness_class.py
+++ b/ml/fml40/features/properties/values/thickness_class.py
@@ -2,5 +2,7 @@
 
 
 class ThicknessClass(Value):
-    def __init__(self, namespace="fml40", name="", identifier=""):
-        super().__init__(namespace=namespace, name=name, identifier=identifier)
+    def __init__(self, namespace="fml40", name="", identifier="", parent=None):
+        super().__init__(
+            namespace=namespace, name=name, identifier=identifier, parent=parent
+        )
diff --git a/ml/fml40/features/properties/values/tilt.py b/ml/fml40/features/properties/values/tilt.py
index d2796fc..758a11e 100644
--- a/ml/fml40/features/properties/values/tilt.py
+++ b/ml/fml40/features/properties/values/tilt.py
@@ -2,8 +2,10 @@
 
 
 class Tilt(Value):
-    def __init__(self, namespace="fml40", name="", identifier=""):
-        super().__init__(namespace=namespace, name=name, identifier=identifier)
+    def __init__(self, namespace="fml40", name="", identifier="", parent=None):
+        super().__init__(
+            namespace=namespace, name=name, identifier=identifier, parent=parent
+        )
         self.__direction = None
         self.__tilt = None
         self.__json_out = dict()
diff --git a/ml/fml40/features/properties/values/tree_data.py b/ml/fml40/features/properties/values/tree_data.py
index 1ef0455..829c4e9 100644
--- a/ml/fml40/features/properties/values/tree_data.py
+++ b/ml/fml40/features/properties/values/tree_data.py
@@ -2,5 +2,7 @@
 
 
 class TreeData(Value):
-    def __init__(self, namespace="fml40", name="", identifier=""):
-        super().__init__(namespace=namespace, name=name, identifier=identifier)
+    def __init__(self, namespace="fml40", name="", identifier="", parent=None):
+        super().__init__(
+            namespace=namespace, name=name, identifier=identifier, parent=parent
+        )
diff --git a/ml/fml40/features/properties/values/tree_species.py b/ml/fml40/features/properties/values/tree_species.py
index 818dce1..85d65c0 100644
--- a/ml/fml40/features/properties/values/tree_species.py
+++ b/ml/fml40/features/properties/values/tree_species.py
@@ -2,5 +2,7 @@
 
 
 class TreeSpecies(Value):
-    def __init__(self, namespace="fml40", name="", identifier=""):
-        super().__init__(namespace=namespace, name=name, identifier=identifier)
+    def __init__(self, namespace="fml40", name="", identifier="", parent=None):
+        super().__init__(
+            namespace=namespace, name=name, identifier=identifier, parent=parent
+        )
diff --git a/ml/fml40/features/properties/values/tree_type.py b/ml/fml40/features/properties/values/tree_type.py
index 5187f68..6524a4b 100644
--- a/ml/fml40/features/properties/values/tree_type.py
+++ b/ml/fml40/features/properties/values/tree_type.py
@@ -2,8 +2,10 @@
 
 
 class TreeType(Value):
-    def __init__(self, namespace="fml40", name="", identifier=""):
-        super().__init__(namespace=namespace, name=name, identifier=identifier)
+    def __init__(self, namespace="fml40", name="", identifier="", parent=None):
+        super().__init__(
+            namespace=namespace, name=name, identifier=identifier, parent=parent
+        )
         self.__conifer = None
         self.__json_out = dict()
 
diff --git a/ml/fml40/features/properties/values/vitality_status.py b/ml/fml40/features/properties/values/vitality_status.py
index 00ffca6..067c8bf 100644
--- a/ml/fml40/features/properties/values/vitality_status.py
+++ b/ml/fml40/features/properties/values/vitality_status.py
@@ -2,8 +2,10 @@
 
 
 class VitalityStatus(Value):
-    def __init__(self, namespace="fml40", name="", identifier=""):
-        super().__init__(namespace=namespace, name=name, identifier=identifier)
+    def __init__(self, namespace="fml40", name="", identifier="", parent=None):
+        super().__init__(
+            namespace=namespace, name=name, identifier=identifier, parent=parent
+        )
         self.__ok = None
         self.__json_out = dict()
 
diff --git a/ml/fml40/features/properties/values/wood_quality.py b/ml/fml40/features/properties/values/wood_quality.py
index 844aeff..ca00905 100644
--- a/ml/fml40/features/properties/values/wood_quality.py
+++ b/ml/fml40/features/properties/values/wood_quality.py
@@ -2,5 +2,7 @@
 
 
 class WoodQuality(Value):
-    def __init__(self, namespace="fml40", name="", identifier=""):
-        super().__init__(namespace=namespace, name=name, identifier=identifier)
+    def __init__(self, namespace="fml40", name="", identifier="", parent=None):
+        super().__init__(
+            namespace=namespace, name=name, identifier=identifier, parent=parent
+        )
diff --git a/ml/fml40/roles/dts/forest/forest.py b/ml/fml40/roles/dts/forest/forest.py
index 33fd043..26c7e7d 100644
--- a/ml/fml40/roles/dts/forest/forest.py
+++ b/ml/fml40/roles/dts/forest/forest.py
@@ -2,5 +2,7 @@
 
 
 class Forest(DT):
-    def __init__(self, namespace="fml40", name="", identifier=""):
-        super().__init__(namespace=namespace, name=name, identifier=identifier)
+    def __init__(self, namespace="fml40", name="", identifier="", parent=None):
+        super().__init__(
+            namespace=namespace, name=name, identifier=identifier, parent=parent
+        )
diff --git a/ml/fml40/roles/dts/forest/forest_segment.py b/ml/fml40/roles/dts/forest/forest_segment.py
index c93b71f..cae5dde 100644
--- a/ml/fml40/roles/dts/forest/forest_segment.py
+++ b/ml/fml40/roles/dts/forest/forest_segment.py
@@ -2,5 +2,5 @@
 
 
 class ForestSegment(Forest):
-    def __init__(self, namespace="fml40", name="", identifier=""):
-        super().__init__(namespace=namespace, name=name, identifier=identifier)
+    def __init__(self, namespace="fml40", name="", identifier="", parent=None):
+        super().__init__(namespace=namespace, name=name, identifier=identifier, parent=parent)
diff --git a/ml/fml40/roles/dts/forest/tree.py b/ml/fml40/roles/dts/forest/tree.py
index 71f793c..c603cf0 100644
--- a/ml/fml40/roles/dts/forest/tree.py
+++ b/ml/fml40/roles/dts/forest/tree.py
@@ -2,5 +2,7 @@
 
 
 class Tree(Forest):
-    def __init__(self, namespace="fml40", name="", identifier=""):
-        super().__init__(namespace=namespace, name=name, identifier=identifier)
+    def __init__(self, namespace="fml40", name="", identifier="", parent=None):
+        super().__init__(
+            namespace=namespace, name=name, identifier=identifier, parent=parent
+        )
diff --git a/ml/fml40/roles/dts/handheld_devices/brushcutter.py b/ml/fml40/roles/dts/handheld_devices/brushcutter.py
index 079928a..2d17168 100644
--- a/ml/fml40/roles/dts/handheld_devices/brushcutter.py
+++ b/ml/fml40/roles/dts/handheld_devices/brushcutter.py
@@ -2,5 +2,5 @@
 
 
 class Brushcutter(HandheldDevice):
-    def __init__(self, namespace="fml40", name="", identifier=""):
-        super().__init__(namespace=namespace, name=name, identifier=identifier)
+    def __init__(self, namespace="fml40", name="", identifier="", parent=None):
+        super().__init__(namespace=namespace, name=name, identifier=identifier, parent=parent)
diff --git a/ml/fml40/roles/dts/handheld_devices/chainsaw.py b/ml/fml40/roles/dts/handheld_devices/chainsaw.py
index 6d67ceb..3d1cfa2 100644
--- a/ml/fml40/roles/dts/handheld_devices/chainsaw.py
+++ b/ml/fml40/roles/dts/handheld_devices/chainsaw.py
@@ -2,5 +2,7 @@
 
 
 class Chainsaw(HandheldDevice):
-    def __init__(self, namespace="fml40", name="", identifier=""):
-        super().__init__(namespace=namespace, name=name, identifier=identifier)
+    def __init__(self, namespace="fml40", name="", identifier="", parent=None):
+        super().__init__(
+            namespace=namespace, name=name, identifier=identifier, parent=parent
+        )
diff --git a/ml/fml40/roles/dts/machines/forest_machine.py b/ml/fml40/roles/dts/machines/forest_machine.py
index 10ccaf8..789be31 100644
--- a/ml/fml40/roles/dts/machines/forest_machine.py
+++ b/ml/fml40/roles/dts/machines/forest_machine.py
@@ -2,5 +2,5 @@
 
 
 class ForestMachine(Machine):
-    def __init__(self, namespace="fml40", name="", identifier=""):
-        super().__init__(namespace=namespace, name=name, identifier=identifier)
+    def __init__(self, namespace="fml40", name="", identifier="", parent=None):
+        super().__init__(namespace=namespace, name=name, identifier=identifier, parent=parent)
diff --git a/ml/fml40/roles/dts/machines/forwarder.py b/ml/fml40/roles/dts/machines/forwarder.py
index 770bf62..f82ec74 100644
--- a/ml/fml40/roles/dts/machines/forwarder.py
+++ b/ml/fml40/roles/dts/machines/forwarder.py
@@ -2,5 +2,7 @@
 
 
 class Forwarder(ForestMachine):
-    def __init__(self, namespace="fml40", name="", identifier=""):
-        super().__init__(namespace=namespace, name=name, identifier=identifier)
+    def __init__(self, namespace="fml40", name="", identifier="", parent=None):
+        super().__init__(
+            namespace=namespace, name=name, identifier=identifier, parent=parent
+        )
diff --git a/ml/fml40/roles/dts/machines/harvester.py b/ml/fml40/roles/dts/machines/harvester.py
index 4d1ea1d..08798bf 100644
--- a/ml/fml40/roles/dts/machines/harvester.py
+++ b/ml/fml40/roles/dts/machines/harvester.py
@@ -2,5 +2,7 @@
 
 
 class Harvester(ForestMachine):
-    def __init__(self, namespace="fml40", name="", identifier=""):
-        super().__init__(namespace=namespace, name=name, identifier=identifier)
+    def __init__(self, namespace="fml40", name="", identifier="", parent=None):
+        super().__init__(
+            namespace=namespace, name=name, identifier=identifier, parent=parent
+        )
diff --git a/ml/fml40/roles/dts/machines/log_truck.py b/ml/fml40/roles/dts/machines/log_truck.py
index 92e881e..af379d4 100644
--- a/ml/fml40/roles/dts/machines/log_truck.py
+++ b/ml/fml40/roles/dts/machines/log_truck.py
@@ -2,5 +2,7 @@
 
 
 class LogTruck(ForestMachine):
-    def __init__(self, namespace="fml40", name="", identifier=""):
-        super().__init__(namespace=namespace, name=name, identifier=identifier)
+    def __init__(self, namespace="fml40", name="", identifier="", parent=None):
+        super().__init__(
+            namespace=namespace, name=name, identifier=identifier, parent=parent
+        )
diff --git a/ml/fml40/roles/dts/machines/mini_tractor.py b/ml/fml40/roles/dts/machines/mini_tractor.py
index 0448af2..9f7d6eb 100644
--- a/ml/fml40/roles/dts/machines/mini_tractor.py
+++ b/ml/fml40/roles/dts/machines/mini_tractor.py
@@ -2,5 +2,5 @@
 
 
 class MiniTractor(ForestMachine):
-    def __init__(self, namespace="fml40", name="", identifier=""):
-        super().__init__(namespace=namespace, name=name, identifier=identifier)
+    def __init__(self, namespace="fml40", name="", identifier="", parent=None):
+        super().__init__(namespace=namespace, name=name, identifier=identifier, parent=parent)
diff --git a/ml/fml40/roles/dts/machines/skidder.py b/ml/fml40/roles/dts/machines/skidder.py
index c80cdd4..cd2071f 100644
--- a/ml/fml40/roles/dts/machines/skidder.py
+++ b/ml/fml40/roles/dts/machines/skidder.py
@@ -2,5 +2,7 @@
 
 
 class Skidder(ForestMachine):
-    def __init__(self, namespace="fml40",  name="", identifier=""):
-        super().__init__(namespace=namespace, name=name, identifier=identifier)
+    def __init__(self, namespace="fml40", name="", identifier="", parent=None):
+        super().__init__(
+            namespace=namespace, name=name, identifier=identifier, parent=parent
+        )
diff --git a/ml/fml40/roles/dts/machines/wheel_loader.py b/ml/fml40/roles/dts/machines/wheel_loader.py
index f967416..e746ac4 100644
--- a/ml/fml40/roles/dts/machines/wheel_loader.py
+++ b/ml/fml40/roles/dts/machines/wheel_loader.py
@@ -2,5 +2,7 @@
 
 
 class WheelLoader(ForestMachine):
-    def __init__(self, namespace="fml40", name="", identifier=""):
-        super().__init__(namespace=namespace, name=name, identifier=identifier)
+    def __init__(self, namespace="fml40", name="", identifier="", parent=None):
+        super().__init__(
+            namespace=namespace, name=name, identifier=identifier, parent=parent
+        )
diff --git a/ml/fml40/roles/dts/parts/grabber.py b/ml/fml40/roles/dts/parts/grabber.py
index 7c722e3..8097d57 100644
--- a/ml/fml40/roles/dts/parts/grabber.py
+++ b/ml/fml40/roles/dts/parts/grabber.py
@@ -2,5 +2,7 @@
 
 
 class Grabber(Part):
-    def __init__(self, namespace="fml40", name="", identifier=""):
-        super().__init__(namespace=namespace, name=name, identifier=identifier)
+    def __init__(self, namespace="fml40", name="", identifier="", parent=None):
+        super().__init__(
+            namespace=namespace, name=name, identifier=identifier, parent=parent
+        )
diff --git a/ml/fml40/roles/dts/parts/harvesting_head.py b/ml/fml40/roles/dts/parts/harvesting_head.py
index bd13e32..90f8979 100644
--- a/ml/fml40/roles/dts/parts/harvesting_head.py
+++ b/ml/fml40/roles/dts/parts/harvesting_head.py
@@ -2,5 +2,7 @@
 
 
 class HarvestingHead(Part):
-    def __init__(self, namespace="fml40", name="", identifier=""):
-        super().__init__(namespace=namespace, name=name, identifier=identifier)
+    def __init__(self, namespace="fml40", name="", identifier="", parent=None):
+        super().__init__(
+            namespace=namespace, name=name, identifier=identifier, parent=parent
+        )
diff --git a/ml/fml40/roles/dts/parts/log_loading_area.py b/ml/fml40/roles/dts/parts/log_loading_area.py
index 1b3d2e2..0548e51 100644
--- a/ml/fml40/roles/dts/parts/log_loading_area.py
+++ b/ml/fml40/roles/dts/parts/log_loading_area.py
@@ -2,5 +2,7 @@
 
 
 class LogLoadingArea(Part):
-    def __init__(self, namespace="fml40", name="", identifier=""):
-        super().__init__(namespace=namespace, name=name, identifier=identifier)
+    def __init__(self, namespace="fml40", name="", identifier="", parent=None):
+        super().__init__(
+            namespace=namespace, name=name, identifier=identifier, parent=parent
+        )
diff --git a/ml/fml40/roles/dts/parts/saw.py b/ml/fml40/roles/dts/parts/saw.py
index 99e9432..00fa90a 100644
--- a/ml/fml40/roles/dts/parts/saw.py
+++ b/ml/fml40/roles/dts/parts/saw.py
@@ -2,5 +2,7 @@
 
 
 class Saw(Part):
-    def __init__(self, namespace="fml40", name="", identifier=""):
-        super().__init__(namespace=namespace, name=name, identifier=identifier)
+    def __init__(self, namespace="fml40", name="", identifier="", parent=None):
+        super().__init__(
+            namespace=namespace, name=name, identifier=identifier, parent=parent
+        )
diff --git a/ml/fml40/roles/dts/parts/stacking_shield.py b/ml/fml40/roles/dts/parts/stacking_shield.py
index 2103a3e..fe97b68 100644
--- a/ml/fml40/roles/dts/parts/stacking_shield.py
+++ b/ml/fml40/roles/dts/parts/stacking_shield.py
@@ -4,5 +4,7 @@
 class StackingShield(Part):
     """roles for stacking shield"""
 
-    def __init__(self, namespace="fml40", name="", identifier=""):
-        super().__init__(namespace=namespace, name=name, identifier=identifier)
+    def __init__(self, namespace="fml40", name="", identifier="", parent=None):
+        super().__init__(
+            namespace=namespace, name=name, identifier=identifier, parent=parent
+        )
diff --git a/ml/fml40/roles/dts/parts/winch.py b/ml/fml40/roles/dts/parts/winch.py
index a8fb6d7..e54f12e 100644
--- a/ml/fml40/roles/dts/parts/winch.py
+++ b/ml/fml40/roles/dts/parts/winch.py
@@ -2,5 +2,7 @@
 
 
 class Winch(Part):
-    def __init__(self, namespace="fml40", name="", identifier=""):
-        super().__init__(namespace=namespace, name=name, identifier=identifier)
+    def __init__(self, namespace="fml40", name="", identifier="", parent=None):
+        super().__init__(
+            namespace=namespace, name=name, identifier=identifier, parent=parent
+        )
diff --git a/ml/fml40/roles/dts/persons/forest_owner.py b/ml/fml40/roles/dts/persons/forest_owner.py
index a233dec..f74769f 100644
--- a/ml/fml40/roles/dts/persons/forest_owner.py
+++ b/ml/fml40/roles/dts/persons/forest_owner.py
@@ -2,5 +2,7 @@
 
 
 class ForestOwner(Person):
-    def __init__(self, namespace="fml40", name="", identifier=""):
-        super().__init__(namespace=namespace, name=name, identifier=identifier)
+    def __init__(self, namespace="fml40", name="", identifier="", parent=None):
+        super().__init__(
+            namespace=namespace, name=name, identifier=identifier, parent=parent
+        )
diff --git a/ml/fml40/roles/dts/persons/forest_worker.py b/ml/fml40/roles/dts/persons/forest_worker.py
index 21dc5c7..cb62f2c 100644
--- a/ml/fml40/roles/dts/persons/forest_worker.py
+++ b/ml/fml40/roles/dts/persons/forest_worker.py
@@ -2,5 +2,5 @@
 
 
 class ForestWorker(Person):
-    def __init__(self, namespace="fml40", name="", identifier=""):
-        super().__init__(namespace=namespace, name=name, identifier=identifier)
+    def __init__(self, namespace="fml40", name="", identifier="", parent=None):
+        super().__init__(namespace=namespace, name=name, identifier=identifier, parent=parent)
diff --git a/ml/fml40/roles/dts/persons/mini_tractor_operator.py b/ml/fml40/roles/dts/persons/mini_tractor_operator.py
index e078aa4..453c738 100644
--- a/ml/fml40/roles/dts/persons/mini_tractor_operator.py
+++ b/ml/fml40/roles/dts/persons/mini_tractor_operator.py
@@ -2,5 +2,7 @@
 
 
 class MiniTractorOperator(Person):
-    def __init__(self, namespace="fml40", name="", identifier=""):
-        super().__init__(namespace=namespace, name=name, identifier=identifier)
+    def __init__(self, namespace="fml40", name="", identifier="", parent=None):
+        super().__init__(
+            namespace=namespace, name=name, identifier=identifier, parent=parent
+        )
diff --git a/ml/fml40/roles/dts/persons/skidder_operator.py b/ml/fml40/roles/dts/persons/skidder_operator.py
index f53e076..2df051d 100644
--- a/ml/fml40/roles/dts/persons/skidder_operator.py
+++ b/ml/fml40/roles/dts/persons/skidder_operator.py
@@ -2,5 +2,7 @@
 
 
 class SkidderOperator(Person):
-    def __init__(self, namespace="fml40", name="", identifier=""):
-        super().__init__(namespace=namespace, name=name, identifier=identifier)
+    def __init__(self, namespace="fml40", name="", identifier="", parent=None):
+        super().__init__(
+            namespace=namespace, name=name, identifier=identifier, parent=parent
+        )
diff --git a/ml/fml40/roles/dts/sensors/barkbeetle_sensor.py b/ml/fml40/roles/dts/sensors/barkbeetle_sensor.py
index 8add194..c807737 100644
--- a/ml/fml40/roles/dts/sensors/barkbeetle_sensor.py
+++ b/ml/fml40/roles/dts/sensors/barkbeetle_sensor.py
@@ -2,5 +2,7 @@
 
 
 class BarkbeetleSensor(Sensor):
-    def __init__(self, namespace="fml40", name="", identifier=""):
-        super().__init__(namespace=namespace, name=name, identifier=identifier)
+    def __init__(self, namespace="fml40", name="", identifier="", parent=None):
+        super().__init__(
+            namespace=namespace, name=name, identifier=identifier, parent=parent
+        )
diff --git a/ml/fml40/roles/dts/sensors/vitality_sensor.py b/ml/fml40/roles/dts/sensors/vitality_sensor.py
index 39e755b..d63f929 100644
--- a/ml/fml40/roles/dts/sensors/vitality_sensor.py
+++ b/ml/fml40/roles/dts/sensors/vitality_sensor.py
@@ -2,5 +2,7 @@
 
 
 class VitalitySensor(Sensor):
-    def __init__(self, namespace="fml40", name="", identifier=""):
-        super().__init__(namespace=namespace, name=name, identifier=identifier)
+    def __init__(self, namespace="fml40", name="", identifier="", parent=None):
+        super().__init__(
+            namespace=namespace, name=name, identifier=identifier, parent=parent
+        )
diff --git a/ml/fml40/roles/dts/sites/forest_enterprise.py b/ml/fml40/roles/dts/sites/forest_enterprise.py
index 0c52b3e..3dacdcf 100644
--- a/ml/fml40/roles/dts/sites/forest_enterprise.py
+++ b/ml/fml40/roles/dts/sites/forest_enterprise.py
@@ -2,5 +2,7 @@
 
 
 class ForestEnterprise(Site):
-    def __init__(self, namespace="fml40", name="", identifier=""):
-        super().__init__(namespace=namespace, name=name, identifier=identifier)
+    def __init__(self, namespace="fml40", name="", identifier="", parent=None):
+        super().__init__(
+            namespace=namespace, name=name, identifier=identifier, parent=parent
+        )
diff --git a/ml/fml40/roles/dts/sites/hauler.py b/ml/fml40/roles/dts/sites/hauler.py
index 357d756..ec30f0e 100644
--- a/ml/fml40/roles/dts/sites/hauler.py
+++ b/ml/fml40/roles/dts/sites/hauler.py
@@ -2,5 +2,7 @@
 
 
 class Hauler(Site):
-    def __init__(self, namespace="fml40", name="", identifier=""):
-        super().__init__(namespace=namespace, name=name, identifier=identifier)
+    def __init__(self, namespace="fml40", name="", identifier="", parent=None):
+        super().__init__(
+            namespace=namespace, name=name, identifier=identifier, parent=parent
+        )
diff --git a/ml/fml40/roles/dts/woods/stem_segment.py b/ml/fml40/roles/dts/woods/stem_segment.py
index 9bab86c..2c8006f 100644
--- a/ml/fml40/roles/dts/woods/stem_segment.py
+++ b/ml/fml40/roles/dts/woods/stem_segment.py
@@ -2,5 +2,7 @@
 
 
 class StemSegment(Wood):
-    def __init__(self, namespace="fml40", name="", identifier=""):
-        super().__init__(namespace=namespace, name=name, identifier=identifier)
+    def __init__(self, namespace="fml40", name="", identifier="", parent=None):
+        super().__init__(
+            namespace=namespace, name=name, identifier=identifier, parent=parent
+        )
diff --git a/ml/fml40/roles/dts/woods/wood.py b/ml/fml40/roles/dts/woods/wood.py
index 916c5bc..9996a67 100644
--- a/ml/fml40/roles/dts/woods/wood.py
+++ b/ml/fml40/roles/dts/woods/wood.py
@@ -2,5 +2,7 @@
 
 
 class Wood(DT):
-    def __init__(self, namespace="fml40", name="", identifier=""):
-        super().__init__(namespace=namespace, name=name, identifier=identifier)
+    def __init__(self, namespace="fml40", name="", identifier="", parent=None):
+        super().__init__(
+            namespace=namespace, name=name, identifier=identifier, parent=parent
+        )
diff --git a/ml/fml40/roles/dts/woods/wood_pile.py b/ml/fml40/roles/dts/woods/wood_pile.py
index 31d73e2..486fb8d 100644
--- a/ml/fml40/roles/dts/woods/wood_pile.py
+++ b/ml/fml40/roles/dts/woods/wood_pile.py
@@ -2,5 +2,7 @@
 
 
 class WoodPile(Wood):
-    def __init__(self, namespace="fml40", name="", identifier=""):
-        super().__init__(namespace=namespace, name=name, identifier=identifier)
+    def __init__(self, namespace="fml40", name="", identifier="", parent=None):
+        super().__init__(
+            namespace=namespace, name=name, identifier=identifier, parent=parent
+        )
diff --git a/ml/ml40/features/functionalities/accepts_jobs.py b/ml/ml40/features/functionalities/accepts_jobs.py
index 7ab7338..0938891 100644
--- a/ml/ml40/features/functionalities/accepts_jobs.py
+++ b/ml/ml40/features/functionalities/accepts_jobs.py
@@ -1,16 +1,14 @@
 from ml.identifier import ID
 from ml.ml40.features.functionalities.functionality import Functionality
 from ml.ml40.features.properties.values.documents.jobs.job import Job
-from ml.ml40.features.properties.values.documents.jobs.job_status import \
-    JobStatus
+from ml.ml40.features.properties.values.documents.jobs.job_status import JobStatus
 
 
 class AcceptsJobs(Functionality):
-    def __init__(self, namespace="ml40", name="", identifier=""):
+    def __init__(self, namespace="ml40", name="", identifier="", parent=None):
         super().__init__(
-            namespace=namespace,
-            name=name,
-            identifier=identifier)
+            namespace=namespace, name=name, identifier=identifier, parent=parent
+        )
 
     def acceptJob(self, job: Job) -> bool:
         pass
diff --git a/ml/ml40/features/functionalities/accepts_reports.py b/ml/ml40/features/functionalities/accepts_reports.py
index 10099a6..0960370 100644
--- a/ml/ml40/features/functionalities/accepts_reports.py
+++ b/ml/ml40/features/functionalities/accepts_reports.py
@@ -3,11 +3,12 @@
 
 
 class AcceptsReports(Functionality):
-    def __init__(self,namespace="ml40", name="", identifier=""):
+    def __init__(self,namespace="ml40", name="", identifier="", parent=None):
         super().__init__(
             namespace=namespace,
             name=name,
-            identifier=identifier)
+            identifier=identifier,
+            parent=parent)
 
     def acceptReport(self, report: Report):
         pass
diff --git a/ml/ml40/features/functionalities/clears_jobs.py b/ml/ml40/features/functionalities/clears_jobs.py
index 83f7614..e7f0318 100644
--- a/ml/ml40/features/functionalities/clears_jobs.py
+++ b/ml/ml40/features/functionalities/clears_jobs.py
@@ -3,11 +3,10 @@
 
 
 class ClearsJobs(Functionality):
-    def __init__(self, namespace="ml40", name="", identifier=""):
+    def __init__(self, namespace="ml40", name="", identifier="", parent=None):
         super().__init__(
-            namespace=namespace,
-            name=name,
-            identifier=identifier)
+            namespace=namespace, name=name, identifier=identifier, parent=parent
+        )
 
     def clear(self, job: Job) -> bool:
         pass
diff --git a/ml/ml40/features/functionalities/functionality.py b/ml/ml40/features/functionalities/functionality.py
index 34ce66b..ff01b9d 100644
--- a/ml/ml40/features/functionalities/functionality.py
+++ b/ml/ml40/features/functionalities/functionality.py
@@ -3,11 +3,8 @@
 
 class Functionality(Feature):
     """Genric implementation of a Functionaliy."""
-    def __init__(self, namespace="ml40", name="", identifier=""):
-        super(Functionality, self).__init__(
-            namespace=namespace,
-            name=name,
-            identifier=identifier)
-
-
 
+    def __init__(self, namespace="ml40", name="", identifier="", parent=None):
+        super(Functionality, self).__init__(
+            namespace=namespace, name=name, identifier=identifier, parent=parent
+        )
diff --git a/ml/ml40/features/functionalities/manages_jobs.py b/ml/ml40/features/functionalities/manages_jobs.py
index 342e02b..96055e3 100644
--- a/ml/ml40/features/functionalities/manages_jobs.py
+++ b/ml/ml40/features/functionalities/manages_jobs.py
@@ -5,11 +5,12 @@
 
 
 class ManagesJobs(Functionality):
-    def __init__(self, namespace="ml40", name="", identifier=""):
+    def __init__(self, namespace="ml40", name="", identifier="", parent=None):
         super().__init__(
             namespace=namespace,
             name=name,
-            identifier=identifier)
+            identifier=identifier,
+            parent=parent)
 
     def acceptReport(self, report: Report):
         pass
diff --git a/ml/ml40/features/functionalities/plans_routes.py b/ml/ml40/features/functionalities/plans_routes.py
index 45e4fb3..9111c3f 100644
--- a/ml/ml40/features/functionalities/plans_routes.py
+++ b/ml/ml40/features/functionalities/plans_routes.py
@@ -4,12 +4,10 @@
 
 
 class PlansRoutes(Functionality):
-    def __init__(self, namespace="ml40", name="", identifier=""):
+    def __init__(self, namespace="ml40", name="", identifier="", parent=None):
         super().__init__(
-            namespace=namespace,
-            name=name,
-            identifier=identifier)
-
+            namespace=namespace, name=name, identifier=identifier, parent=parent
+        )
 
     def planRoute(self, start: Location, goal: Location) -> Route:
         pass
diff --git a/ml/ml40/features/functionalities/provides_map_data.py b/ml/ml40/features/functionalities/provides_map_data.py
index 93c148e..3e316e1 100644
--- a/ml/ml40/features/functionalities/provides_map_data.py
+++ b/ml/ml40/features/functionalities/provides_map_data.py
@@ -4,11 +4,12 @@
 
 
 class ProvidesMapData(Functionality):
-    def __init__(self,namespace="ml40", name="", identifier=""):
+    def __init__(self,namespace="ml40", name="", identifier="", parent=None):
         super().__init__(
             namespace=namespace,
             name=name,
-            identifier=identifier)
+            identifier=identifier,
+            parent=parent)
 
     def getMapData(self, map: int) -> PassabilityReport:
         pass
diff --git a/ml/ml40/features/functionalities/provides_operational_data.py b/ml/ml40/features/functionalities/provides_operational_data.py
index fdae2cf..c2aaee6 100644
--- a/ml/ml40/features/functionalities/provides_operational_data.py
+++ b/ml/ml40/features/functionalities/provides_operational_data.py
@@ -3,13 +3,10 @@
 
 
 class ProvidesOperationalData(Functionality):
-    def __init__(self, namespace="ml40", name="", identifier=""):
+    def __init__(self, namespace="ml40", name="", identifier="", parent=None):
         super().__init__(
-            namespace=namespace,
-            name=name,
-            identifier=identifier)
+            namespace=namespace, name=name, identifier=identifier, parent=parent
+        )
 
     def getOperationalData(self) -> Report:
         return "this is a simply report"
-
-
diff --git a/ml/ml40/features/functionalities/renders.py b/ml/ml40/features/functionalities/renders.py
index 1d7c685..bd3ce1f 100644
--- a/ml/ml40/features/functionalities/renders.py
+++ b/ml/ml40/features/functionalities/renders.py
@@ -3,11 +3,10 @@
 
 
 class Renders(Functionality):
-    def __init__(self, namespace="ml40", name="", identifier=""):
+    def __init__(self, namespace="ml40", name="", identifier="", parent=None):
         super().__init__(
-            namespace=namespace,
-            name=name,
-            identifier=identifier)
+            namespace=namespace, name=name, identifier=identifier, parent=parent
+        )
 
     def create3DVideo(self, identifier: ID) -> bytes:
         pass
diff --git a/ml/ml40/features/properties/associations/association.py b/ml/ml40/features/properties/associations/association.py
index 8103b88..f0f8c37 100644
--- a/ml/ml40/features/properties/associations/association.py
+++ b/ml/ml40/features/properties/associations/association.py
@@ -2,5 +2,7 @@
 
 
 class Association(Property):
-    def __init__(self, namespace="ml40", name="", identifier=""):
-        super().__init__(namespace=namespace, name=name, identifier=identifier)
+    def __init__(self, namespace="ml40", name="", identifier="", parent=None):
+        super().__init__(
+            namespace=namespace, name=name, identifier=identifier, parent=parent
+        )
diff --git a/ml/ml40/features/properties/associations/composite.py b/ml/ml40/features/properties/associations/composite.py
index e22d56e..4b19781 100644
--- a/ml/ml40/features/properties/associations/composite.py
+++ b/ml/ml40/features/properties/associations/composite.py
@@ -2,11 +2,10 @@
 
 
 class Composite(Association):
-    def __init__(self, namespace="ml40",name="", identifier=""):
+    def __init__(self, namespace="ml40", name="", identifier="", parent=None):
         super().__init__(
-            namespace=namespace,
-            name=name,
-            identifier=identifier)
+            namespace=namespace, name=name, identifier=identifier, parent=parent
+        )
         self.__targets = dict()
         self.__json_out = dict()
 
@@ -25,4 +24,3 @@ def to_json(self):
             for key in self.targets.keys():
                 self.__json_out["targets"].append(self.targets[key].to_subthing_json())
         return self.__json_out
-
diff --git a/ml/ml40/features/properties/associations/shared.py b/ml/ml40/features/properties/associations/shared.py
index b6a3253..a6a8198 100644
--- a/ml/ml40/features/properties/associations/shared.py
+++ b/ml/ml40/features/properties/associations/shared.py
@@ -2,11 +2,10 @@
 
 
 class Shared(Association):
-    def __init__(self, namespace="ml40",name="", identifier=""):
+    def __init__(self, namespace="ml40", name="", identifier="", parent=None):
         super().__init__(
-            namespace=namespace,
-            name=name,
-            identifier=identifier)
+            namespace=namespace, name=name, identifier=identifier, parent=parent
+        )
         self.__targets = []
         self.__targets = dict()
         self.__json_out = dict()
diff --git a/ml/ml40/features/properties/property.py b/ml/ml40/features/properties/property.py
index 129c361..56b1dc2 100644
--- a/ml/ml40/features/properties/property.py
+++ b/ml/ml40/features/properties/property.py
@@ -2,11 +2,7 @@
 
 
 class Property(Feature):
-    def __init__(self, namespace="ml40", name="", identifier=""):
+    def __init__(self, namespace="ml40", name="", identifier="", parent=None):
         super(Property, self).__init__(
-            namespace=namespace,
-            name=name,
-            identifier=identifier)
-
-
-
+            namespace=namespace, name=name, identifier=identifier, parent=parent
+        )
diff --git a/ml/ml40/features/properties/values/acceleration.py b/ml/ml40/features/properties/values/acceleration.py
index 322c7bb..2360577 100644
--- a/ml/ml40/features/properties/values/acceleration.py
+++ b/ml/ml40/features/properties/values/acceleration.py
@@ -2,8 +2,7 @@
 
 
 class Acceleration(Value):
-    def __init__(self, namespace="ml40", name="", identifier=""):
+    def __init__(self, namespace="ml40", name="", identifier="", parent=None):
         super().__init__(
-            namespace=namespace,
-            name=name,
-            identifier=identifier)
+            namespace=namespace, name=name, identifier=identifier, parent=parent
+        )
diff --git a/ml/ml40/features/properties/values/accoustic_indices.py b/ml/ml40/features/properties/values/accoustic_indices.py
index 42981bf..f6b8837 100644
--- a/ml/ml40/features/properties/values/accoustic_indices.py
+++ b/ml/ml40/features/properties/values/accoustic_indices.py
@@ -2,8 +2,7 @@
 
 
 class AcousticIndices(Value):
-    def __init__(self, namespace="ml40", name="", identifier=""):
+    def __init__(self, namespace="ml40", name="", identifier="", parent=None):
         super().__init__(
-            namespace=namespace,
-            name=name,
-            identifier=identifier)
+            namespace=namespace, name=name, identifier=identifier, parent=parent
+        )
diff --git a/ml/ml40/features/properties/values/address.py b/ml/ml40/features/properties/values/address.py
index 38e61f9..84d9038 100644
--- a/ml/ml40/features/properties/values/address.py
+++ b/ml/ml40/features/properties/values/address.py
@@ -2,11 +2,10 @@
 
 
 class Address(Value):
-    def __init__(self, namespace="ml40", name="", identifier=""):
+    def __init__(self, namespace="ml40", name="", identifier="", parent=None):
         super().__init__(
-            namespace=namespace,
-            name=name,
-            identifier=identifier)
+            namespace=namespace, name=name, identifier=identifier, parent=parent
+        )
 
         self.city = None
         self.country = None
diff --git a/ml/ml40/features/properties/values/air_pressure.py b/ml/ml40/features/properties/values/air_pressure.py
index 96e4a50..c06c849 100644
--- a/ml/ml40/features/properties/values/air_pressure.py
+++ b/ml/ml40/features/properties/values/air_pressure.py
@@ -2,9 +2,7 @@
 
 
 class AirPressure(Value):
-    def __init__(self, namespace="ml40", name="", identifier=""):
+    def __init__(self, namespace="ml40", name="", identifier="", parent=None):
         super().__init__(
-            namespace=namespace,
-            name=name,
-            identifier=identifier
+            namespace=namespace, name=name, identifier=identifier, parent=parent
         )
diff --git a/ml/ml40/features/properties/values/area.py b/ml/ml40/features/properties/values/area.py
index e60817c..0283c29 100644
--- a/ml/ml40/features/properties/values/area.py
+++ b/ml/ml40/features/properties/values/area.py
@@ -2,9 +2,7 @@
 
 
 class Area(Value):
-    def __init__(self, namespace="ml40", name="", identifier=""):
+    def __init__(self, namespace="ml40", name="", identifier="", parent=None):
         super().__init__(
-            namespace=namespace,
-            name=name,
-            identifier=identifier
+            namespace=namespace, name=name, identifier=identifier, parent=parent
         )
diff --git a/ml/ml40/features/properties/values/brightness.py b/ml/ml40/features/properties/values/brightness.py
index 4810a53..a10251d 100644
--- a/ml/ml40/features/properties/values/brightness.py
+++ b/ml/ml40/features/properties/values/brightness.py
@@ -2,9 +2,7 @@
 
 
 class Brightness(Value):
-    def __init__(self, namespace="ml40", name="", identifier=""):
+    def __init__(self, namespace="ml40", name="", identifier="", parent=None):
         super().__init__(
-            namespace=namespace,
-            name=name,
-            identifier=identifier
+            namespace=namespace, name=name, identifier=identifier, parent=parent
         )
diff --git a/ml/ml40/features/properties/values/count.py b/ml/ml40/features/properties/values/count.py
index c86af83..0316702 100644
--- a/ml/ml40/features/properties/values/count.py
+++ b/ml/ml40/features/properties/values/count.py
@@ -2,11 +2,10 @@
 
 
 class Count(Value):
-    def __init__(self, namespace="ml40", name="", identifier=""):
+    def __init__(self, namespace="ml40", name="", identifier="", parent=None):
         super().__init__(
-            namespace=namespace,
-            name=name,
-            identifier=identifier)
+            namespace=namespace, name=name, identifier=identifier, parent=parent
+        )
         self.currentCount = None
         self.maxCount = None
         self.minCount = None
diff --git a/ml/ml40/features/properties/values/dimensions.py b/ml/ml40/features/properties/values/dimensions.py
index e74f9ff..818cb30 100644
--- a/ml/ml40/features/properties/values/dimensions.py
+++ b/ml/ml40/features/properties/values/dimensions.py
@@ -2,11 +2,10 @@
 
 
 class Dimensions(Value):
-    def __init__(self, namespace="ml40", name="", identifier=""):
+    def __init__(self, namespace="ml40", name="", identifier="", parent=None):
         super().__init__(
-            namespace=namespace,
-            name=name,
-            identifier=identifier)
+            namespace=namespace, name=name, identifier=identifier, parent=parent
+        )
 
         self.height = None
         self.length = None
diff --git a/ml/ml40/features/properties/values/distance.py b/ml/ml40/features/properties/values/distance.py
index 36e93f7..0e1faa3 100644
--- a/ml/ml40/features/properties/values/distance.py
+++ b/ml/ml40/features/properties/values/distance.py
@@ -2,11 +2,10 @@
 
 
 class Distance(Value):
-    def __init__(self, namespace="ml40", name="", identifier=""):
+    def __init__(self, namespace="ml40", name="", identifier="", parent=None):
         super().__init__(
-            namespace=namespace,
-            name=name,
-            identifier=identifier)
+            namespace=namespace, name=name, identifier=identifier, parent=parent
+        )
         self.__distance = None
 
     @property
diff --git a/ml/ml40/features/properties/values/documents/document.py b/ml/ml40/features/properties/values/documents/document.py
index 8286928..703b98f 100644
--- a/ml/ml40/features/properties/values/documents/document.py
+++ b/ml/ml40/features/properties/values/documents/document.py
@@ -2,8 +2,7 @@
 
 
 class Document(Value):
-    def __init__(self, namespace="ml40", name="", identifier=""):
+    def __init__(self, namespace="ml40", name="", identifier="", parent=None):
         super().__init__(
-            namespace=namespace,
-            name=name,
-            identifier=identifier)
+            namespace=namespace, name=name, identifier=identifier, parent=parent
+        )
diff --git a/ml/ml40/features/properties/values/documents/jobs/generic_job.py b/ml/ml40/features/properties/values/documents/jobs/generic_job.py
index 6c9c88d..5d79eed 100644
--- a/ml/ml40/features/properties/values/documents/jobs/generic_job.py
+++ b/ml/ml40/features/properties/values/documents/jobs/generic_job.py
@@ -2,15 +2,13 @@
 
 
 class GenericJob(Job):
-    def __init__(self, namespace="ml40", name="", identifier=""):
+    def __init__(self, namespace="ml40", name="", identifier="", parent=None):
         super().__init__(
-            namespace=namespace,
-            name=name,
-            identifier=identifier)
+            namespace=namespace, name=name, identifier=identifier, parent=parent
+        )
         self.__content = None
         self.__json_out = dict()
 
-
     @property
     def content(self):
         return self.__content
diff --git a/ml/ml40/features/properties/values/documents/jobs/job.py b/ml/ml40/features/properties/values/documents/jobs/job.py
index 2be9abc..f7929f7 100644
--- a/ml/ml40/features/properties/values/documents/jobs/job.py
+++ b/ml/ml40/features/properties/values/documents/jobs/job.py
@@ -3,8 +3,10 @@
 
 
 class Job(Document):
-    def __init__(self, namespace="ml40", name="", identifier=""):
-        super().__init__(namespace=namespace, name=name, identifier=identifier)
+    def __init__(self, namespace="ml40", name="", identifier="", parent=None):
+        super().__init__(
+            namespace=namespace, name=name, identifier=identifier, parent=parent
+        )
         self.__status = None
         self.__json_out = dict()
 
diff --git a/ml/ml40/features/properties/values/documents/jobs/job_list.py b/ml/ml40/features/properties/values/documents/jobs/job_list.py
index 18a801a..7127aa8 100644
--- a/ml/ml40/features/properties/values/documents/jobs/job_list.py
+++ b/ml/ml40/features/properties/values/documents/jobs/job_list.py
@@ -2,8 +2,7 @@
 
 
 class JobList(Job):
-    def __init__(self, namespace="ml40", name="", identifier=""):
+    def __init__(self, namespace="ml40", name="", identifier="", parent=None):
         super().__init__(
-            namespace=namespace,
-            name=name,
-            identifier=identifier)
+            namespace=namespace, name=name, identifier=identifier, parent=parent
+        )
diff --git a/ml/ml40/features/properties/values/documents/reports/production_data.py b/ml/ml40/features/properties/values/documents/reports/production_data.py
index 406b7d1..9d6fb21 100644
--- a/ml/ml40/features/properties/values/documents/reports/production_data.py
+++ b/ml/ml40/features/properties/values/documents/reports/production_data.py
@@ -2,8 +2,7 @@
 
 
 class ProductionData(Report):
-    def __init__(self, namespace="ml40", name="", identifier=""):
+    def __init__(self, namespace="ml40", name="", identifier="", parent=None):
         super().__init__(
-            namespace=namespace,
-            name=name,
-            identifier=identifier)
+            namespace=namespace, name=name, identifier=identifier, parent=parent
+        )
diff --git a/ml/ml40/features/properties/values/documents/reports/report.py b/ml/ml40/features/properties/values/documents/reports/report.py
index 20963b8..51e5261 100644
--- a/ml/ml40/features/properties/values/documents/reports/report.py
+++ b/ml/ml40/features/properties/values/documents/reports/report.py
@@ -2,5 +2,7 @@
 
 
 class Report(Document):
-    def __init__(self, namespace="ml40", name="", identifier=""):
-        super().__init__(namespace=namespace, name=name, identifier=identifier)
+    def __init__(self, namespace="ml40", name="", identifier="", parent=None):
+        super().__init__(
+            namespace=namespace, name=name, identifier=identifier, parent=parent
+        )
diff --git a/ml/ml40/features/properties/values/expansion_length.py b/ml/ml40/features/properties/values/expansion_length.py
index 22ede75..370033e 100644
--- a/ml/ml40/features/properties/values/expansion_length.py
+++ b/ml/ml40/features/properties/values/expansion_length.py
@@ -2,11 +2,10 @@
 
 
 class ExpansionLength(Value):
-    def __init__(self, namespace="ml40", name="", identifier=""):
+    def __init__(self, namespace="ml40", name="", identifier="", parent=None):
         super().__init__(
-            namespace=namespace,
-            name=name,
-            identifier=identifier)
+            namespace=namespace, name=name, identifier=identifier, parent=parent
+        )
 
         self.__current_length = None
         self.__max_length = None
@@ -36,4 +35,3 @@ def to_json(self):
             self.__json_out["maxLength"] = self.__max_length
 
         return self.__json_out
-
diff --git a/ml/ml40/features/properties/values/force.py b/ml/ml40/features/properties/values/force.py
index 56b2f95..94bbfba 100644
--- a/ml/ml40/features/properties/values/force.py
+++ b/ml/ml40/features/properties/values/force.py
@@ -2,11 +2,9 @@
 
 
 class Force(Value):
-    def __init__(self, namespace="ml40", name="", identifier=""):
+    def __init__(self, namespace="ml40", name="", identifier="", parent=None):
         super().__init__(
-            namespace=namespace,
-            name=name,
-            identifier=identifier
+            namespace=namespace, name=name, identifier=identifier, parent=parent
         )
         self.__force = None
         self.__min_force = None
diff --git a/ml/ml40/features/properties/values/generic_property.py b/ml/ml40/features/properties/values/generic_property.py
index d01a0d2..d572cdf 100644
--- a/ml/ml40/features/properties/values/generic_property.py
+++ b/ml/ml40/features/properties/values/generic_property.py
@@ -2,11 +2,9 @@
 
 
 class GenericProperty(Value):
-    def __init__(self, namespace="ml40", name="", identifier=""):
+    def __init__(self, namespace="ml40", name="", identifier="", parent=None):
         super().__init__(
-            namespace=namespace,
-            name=name,
-            identifier=identifier
+            namespace=namespace, name=name, identifier=identifier, parent=parent
         )
         self.value = None
         self.__json_out = dict()
diff --git a/ml/ml40/features/properties/values/gyroscope_value.py b/ml/ml40/features/properties/values/gyroscope_value.py
index f314374..cb05304 100644
--- a/ml/ml40/features/properties/values/gyroscope_value.py
+++ b/ml/ml40/features/properties/values/gyroscope_value.py
@@ -2,8 +2,9 @@
 
 
 class GyroscopeValue(Value):
-    def __init__(self, namespace="ml40", name="", identifier=""):
+    def __init__(self, namespace="ml40", name="", identifier="", parent=None):
         super().__init__(
             namespace=namespace,
             name=name,
-            identifier=identifier)
+            identifier=identifier,
+            parent=parent)
diff --git a/ml/ml40/features/properties/values/infrared.py b/ml/ml40/features/properties/values/infrared.py
index 12a08eb..74e1ee5 100644
--- a/ml/ml40/features/properties/values/infrared.py
+++ b/ml/ml40/features/properties/values/infrared.py
@@ -2,9 +2,7 @@
 
 
 class Infrared(Value):
-    def __init__(self, namespace="ml40",name="", identifier=""):
+    def __init__(self, namespace="ml40", name="", identifier="", parent=None):
         super().__init__(
-            namespace=namespace,
-            name=name,
-            identifier=identifier
+            namespace=namespace, name=name, identifier=identifier, parent=parent
         )
diff --git a/ml/ml40/features/properties/values/last_service_check.py b/ml/ml40/features/properties/values/last_service_check.py
index a6af415..3bdde92 100644
--- a/ml/ml40/features/properties/values/last_service_check.py
+++ b/ml/ml40/features/properties/values/last_service_check.py
@@ -2,11 +2,10 @@
 
 
 class LastServiceCheck(Value):
-    def __init__(self, namespace="ml40", name="", identifier=""):
+    def __init__(self, namespace="ml40", name="", identifier="", parent=None):
         super().__init__(
-            namespace=namespace,
-            name=name,
-            identifier=identifier)
+            namespace=namespace, name=name, identifier=identifier, parent=parent
+        )
 
         self.__timestamp = None
         self.__json_out = dict()
@@ -24,4 +23,3 @@ def to_json(self):
         if self.__timestamp is not None:
             self.__json_out["weight"] = self.__timestamp
         return self.__json_out
-
diff --git a/ml/ml40/features/properties/values/lift.py b/ml/ml40/features/properties/values/lift.py
index f31f577..b3acc0c 100644
--- a/ml/ml40/features/properties/values/lift.py
+++ b/ml/ml40/features/properties/values/lift.py
@@ -2,11 +2,10 @@
 
 
 class Lift(Value):
-    def __init__(self, namespace="ml40", name="", identifier=""):
+    def __init__(self, namespace="ml40", name="", identifier="", parent=None):
         super().__init__(
-            namespace=namespace,
-            name=name,
-            identifier=identifier)
+            namespace=namespace, name=name, identifier=identifier, parent=parent
+        )
 
         self.__current_lift = None
         self.__max_lift = None
@@ -47,4 +46,3 @@ def to_json(self):
             self.__json_out["minLift"] = self.__min_lift
 
         return self.__json_out
-
diff --git a/ml/ml40/features/properties/values/liquid_filling_level.py b/ml/ml40/features/properties/values/liquid_filling_level.py
index 418e9f8..bf15acb 100644
--- a/ml/ml40/features/properties/values/liquid_filling_level.py
+++ b/ml/ml40/features/properties/values/liquid_filling_level.py
@@ -2,11 +2,10 @@
 
 
 class LiquidFillingLevel(Value):
-    def __init__(self, namespace="ml40", name="", identifier=""):
+    def __init__(self, namespace="ml40", name="", identifier="", parent=None):
         super().__init__(
-            namespace=namespace,
-            name=name,
-            identifier=identifier)
+            namespace=namespace, name=name, identifier=identifier, parent=parent
+        )
 
         self.currentLevel = None
         self.maxLevel = None
@@ -19,4 +18,3 @@ def to_json(self):
         if self.maxLevel is not None:
             self.__json_out["maxLevel"] = self.maxLevel
         return self.__json_out
-
diff --git a/ml/ml40/features/properties/values/location.py b/ml/ml40/features/properties/values/location.py
index bcfe1fa..0267886 100644
--- a/ml/ml40/features/properties/values/location.py
+++ b/ml/ml40/features/properties/values/location.py
@@ -2,8 +2,10 @@
 
 
 class Location(Value):
-    def __init__(self, namespace="ml40", name="", identifier=""):
-        super().__init__(namespace=namespace, name=name, identifier=identifier)
+    def __init__(self, namespace="ml40", name="", identifier="", parent=None):
+        super().__init__(
+            namespace=namespace, name=name, identifier=identifier, parent=parent
+        )
         self.__latitude = None
         self.__longitude = None
         self.__orientation = None
diff --git a/ml/ml40/features/properties/values/lot.py b/ml/ml40/features/properties/values/lot.py
index 36e1fa1..34524e3 100644
--- a/ml/ml40/features/properties/values/lot.py
+++ b/ml/ml40/features/properties/values/lot.py
@@ -2,8 +2,7 @@
 
 
 class Lot(Value):
-    def __init__(self, namespace="ml40", name="", identifier=""):
+    def __init__(self, namespace="ml40", name="", identifier="", parent=None):
         super().__init__(
-            namespace=namespace,
-            name=name,
-            identifier=identifier)
+            namespace=namespace, name=name, identifier=identifier, parent=parent
+        )
diff --git a/ml/ml40/features/properties/values/moisture.py b/ml/ml40/features/properties/values/moisture.py
index 4774df9..e94fb10 100644
--- a/ml/ml40/features/properties/values/moisture.py
+++ b/ml/ml40/features/properties/values/moisture.py
@@ -2,11 +2,10 @@
 
 
 class Moisture(Value):
-    def __init__(self, namespace="ml40", name="", identifier=""):
+    def __init__(self, namespace="ml40", name="", identifier="", parent=None):
         super().__init__(
-            namespace=namespace,
-            name=name,
-            identifier=identifier)
+            namespace=namespace, name=name, identifier=identifier, parent=parent
+        )
         self.__humidity = None
         self.__join_out = dict()
 
diff --git a/ml/ml40/features/properties/values/operating_hours.py b/ml/ml40/features/properties/values/operating_hours.py
index 3d8f8b4..8a6dd40 100644
--- a/ml/ml40/features/properties/values/operating_hours.py
+++ b/ml/ml40/features/properties/values/operating_hours.py
@@ -2,11 +2,9 @@
 
 
 class OperatingHours(Value):
-    def __init__(self, namespace="ml40", name="", identifier=""):
+    def __init__(self, namespace="ml40", name="", identifier="", parent=None):
         super().__init__(
-            namespace=namespace,
-            name=name,
-            identifier=identifier
+            namespace=namespace, name=name, identifier=identifier, parent=parent
         )
 
         self.__total = None
diff --git a/ml/ml40/features/properties/values/orientation_rpy.py b/ml/ml40/features/properties/values/orientation_rpy.py
index 2a6a489..9a9a5d4 100644
--- a/ml/ml40/features/properties/values/orientation_rpy.py
+++ b/ml/ml40/features/properties/values/orientation_rpy.py
@@ -2,11 +2,12 @@
 
 
 class OrientationRPY(Value):
-    def __init__(self, namespace="ml40", name="", identifier=""):
+    def __init__(self, namespace="ml40", name="", identifier="", parent=None):
         super().__init__(
             namespace=namespace,
             name=name,
-            identifier=identifier
+            identifier=identifier,
+            parent=parent
         )
 
         self.__roll = None
diff --git a/ml/ml40/features/properties/values/personal_name.py b/ml/ml40/features/properties/values/personal_name.py
index 95ce328..cf16afd 100644
--- a/ml/ml40/features/properties/values/personal_name.py
+++ b/ml/ml40/features/properties/values/personal_name.py
@@ -2,11 +2,9 @@
 
 
 class PersonalName(Value):
-    def __init__(self, namespace="ml40", name="", identifier=""):
+    def __init__(self, namespace="ml40", name="", identifier="", parent=None):
         super().__init__(
-            namespace=namespace,
-            name=name,
-            identifier=identifier
+            namespace=namespace, name=name, identifier=identifier, parent=parent
         )
 
         self.firstname = None
diff --git a/ml/ml40/features/properties/values/rgb_color.py b/ml/ml40/features/properties/values/rgb_color.py
index f72c3e4..c25805e 100644
--- a/ml/ml40/features/properties/values/rgb_color.py
+++ b/ml/ml40/features/properties/values/rgb_color.py
@@ -2,8 +2,7 @@
 
 
 class RGBColor(Value):
-    def __init__(self, namespace="ml40", name="", identifier=""):
+    def __init__(self, namespace="ml40", name="", identifier="", parent=None):
         super().__init__(
-            namespace=namespace,
-            name=name,
-            identifier=identifier)
+            namespace=namespace, name=name, identifier=identifier, parent=parent
+        )
diff --git a/ml/ml40/features/properties/values/rotational_speed.py b/ml/ml40/features/properties/values/rotational_speed.py
index dfe92fb..65cfe43 100644
--- a/ml/ml40/features/properties/values/rotational_speed.py
+++ b/ml/ml40/features/properties/values/rotational_speed.py
@@ -2,11 +2,10 @@
 
 
 class RotationalSpeed(Value):
-    def __init__(self, namespace="ml40", name="", identifier=""):
+    def __init__(self, namespace="ml40", name="", identifier="", parent=None):
         super().__init__(
-            namespace=namespace,
-            name=name,
-            identifier=identifier)
+            namespace=namespace, name=name, identifier=identifier, parent=parent
+        )
 
         self.__rpm = None
         self.__json_out = dict()
diff --git a/ml/ml40/features/properties/values/route.py b/ml/ml40/features/properties/values/route.py
index 66073a0..992a924 100644
--- a/ml/ml40/features/properties/values/route.py
+++ b/ml/ml40/features/properties/values/route.py
@@ -2,8 +2,7 @@
 
 
 class Route(Value):
-    def __init__(self, namespace="ml40", name="", identifier=""):
+    def __init__(self, namespace="ml40", name="", identifier="", parent=None):
         super().__init__(
-            namespace=namespace,
-            name=name,
-            identifier=identifier)
+            namespace=namespace, name=name, identifier=identifier, parent=parent
+        )
diff --git a/ml/ml40/features/properties/values/sound_level.py b/ml/ml40/features/properties/values/sound_level.py
index bd92d52..c6982a1 100644
--- a/ml/ml40/features/properties/values/sound_level.py
+++ b/ml/ml40/features/properties/values/sound_level.py
@@ -2,8 +2,7 @@
 
 
 class SoundLevel(Value):
-    def __init__(self, namespace="ml40", name="", identifier=""):
+    def __init__(self, namespace="ml40", name="", identifier="", parent=None):
         super().__init__(
-            namespace=namespace,
-            name=name,
-            identifier=identifier)
+            namespace=namespace, name=name, identifier=identifier, parent=parent
+        )
diff --git a/ml/ml40/features/properties/values/srid.py b/ml/ml40/features/properties/values/srid.py
index 507357a..6ccdda5 100644
--- a/ml/ml40/features/properties/values/srid.py
+++ b/ml/ml40/features/properties/values/srid.py
@@ -2,9 +2,7 @@
 
 
 class SRID(Value):
-    def __init__(self, namespace="ml40", name="", identifier=""):
+    def __init__(self, namespace="ml40", name="", identifier="", parent=None):
         super().__init__(
-            namespace=namespace,
-            name=name,
-            identifier=identifier
+            namespace=namespace, name=name, identifier=identifier, parent=parent
         )
diff --git a/ml/ml40/features/properties/values/surface.py b/ml/ml40/features/properties/values/surface.py
index 03c4097..9cbd1ff 100644
--- a/ml/ml40/features/properties/values/surface.py
+++ b/ml/ml40/features/properties/values/surface.py
@@ -2,8 +2,7 @@
 
 
 class Surface(Value):
-    def __init__(self, namespace="ml40", name="", identifier=""):
+    def __init__(self, namespace="ml40", name="", identifier="", parent=None):
         super().__init__(
-            namespace=namespace,
-            name=name,
-            identifier=identifier)
+            namespace=namespace, name=name, identifier=identifier, parent=parent
+        )
diff --git a/ml/ml40/features/properties/values/surface_wkt.py b/ml/ml40/features/properties/values/surface_wkt.py
index 1b77f35..cb5dc28 100644
--- a/ml/ml40/features/properties/values/surface_wkt.py
+++ b/ml/ml40/features/properties/values/surface_wkt.py
@@ -2,8 +2,7 @@
 
 
 class SurfaceWKT(Surface):
-    def __init__(self, namespace="ml40", name="", identifier=""):
+    def __init__(self, namespace="ml40", name="", identifier="", parent=None):
         super().__init__(
-            namespace=namespace,
-            name=name,
-            identifier=identifier)
+            namespace=namespace, name=name, identifier=identifier, parent=parent
+        )
diff --git a/ml/ml40/features/properties/values/switching_stage.py b/ml/ml40/features/properties/values/switching_stage.py
index c44da9c..7ebe566 100644
--- a/ml/ml40/features/properties/values/switching_stage.py
+++ b/ml/ml40/features/properties/values/switching_stage.py
@@ -2,11 +2,9 @@
 
 
 class SwitchingStage(Value):
-    def __init__(self, namespace="ml40", name="", identifier=""):
+    def __init__(self, namespace="ml40", name="", identifier="", parent=None):
         super().__init__(
-            namespace=namespace,
-            name=name,
-            identifier=identifier
+            namespace=namespace, name=name, identifier=identifier, parent=parent
         )
 
         self.__min_stage = None
diff --git a/ml/ml40/features/properties/values/temperature.py b/ml/ml40/features/properties/values/temperature.py
index e925118..15e3516 100644
--- a/ml/ml40/features/properties/values/temperature.py
+++ b/ml/ml40/features/properties/values/temperature.py
@@ -2,11 +2,9 @@
 
 
 class Temperature(Value):
-    def __init__(self, namespace="ml40", name="", identifier=""):
+    def __init__(self, namespace="ml40", name="", identifier="", parent=None):
         super().__init__(
-            namespace=namespace,
-            name=name,
-            identifier=identifier
+            namespace=namespace, name=name, identifier=identifier, parent=parent
         )
         self.__temperature = None
         self.__json_out = dict()
@@ -27,7 +25,3 @@ def to_json(self):
         if self.temperature is not None:
             self.__json_out["temperature"] = self.temperature
         return self.__json_out
-
-
-
-
diff --git a/ml/ml40/features/properties/values/time_slot.py b/ml/ml40/features/properties/values/time_slot.py
index 6f77d8d..056eef6 100644
--- a/ml/ml40/features/properties/values/time_slot.py
+++ b/ml/ml40/features/properties/values/time_slot.py
@@ -2,8 +2,10 @@
 
 
 class TimeSlot(Value):
-    def __init__(self, namespace="ml40", name="", identifier=""):
-        super().__init__(namespace=namespace, name=name, identifier=identifier)
+    def __init__(self, namespace="ml40", name="", identifier="", parent=None):
+        super().__init__(
+            namespace=namespace, name=name, identifier=identifier, parent=parent
+        )
         self.end = None
         self.start = None
         self.__json_out = dict()
diff --git a/ml/ml40/features/properties/values/value.py b/ml/ml40/features/properties/values/value.py
index 4d4a7d0..d8db697 100644
--- a/ml/ml40/features/properties/values/value.py
+++ b/ml/ml40/features/properties/values/value.py
@@ -2,14 +2,13 @@
 
 
 class Value(Property):
-    def __init__(self, namespace="ml40", name="", identifier=""):
+    def __init__(self, namespace="ml40", name="", identifier="", parent=None):
         super().__init__(
-            namespace=namespace,
-            name=name,
-            identifier=identifier)
+            namespace=namespace, name=name, identifier=identifier, parent=parent
+        )
         self.__valid_to = ""
         self.__valid_from = ""
-        #TODO validate the datetype of valid from and valid to
+        # TODO validate the datetype of valid from and valid to
         self.__json_out = {}
 
     @property
diff --git a/ml/ml40/features/properties/values/weight.py b/ml/ml40/features/properties/values/weight.py
index f485689..1050817 100644
--- a/ml/ml40/features/properties/values/weight.py
+++ b/ml/ml40/features/properties/values/weight.py
@@ -2,11 +2,10 @@
 
 
 class Weight(Value):
-    def __init__(self, namespace="ml40", name="", identifier=""):
+    def __init__(self, namespace="ml40", name="", identifier="", parent=None):
         super().__init__(
-            namespace=namespace,
-            name=name,
-            identifier=identifier)
+            namespace=namespace, name=name, identifier=identifier, parent=parent
+        )
 
         self.__weight = None
         self.__json_out = {}
@@ -24,4 +23,3 @@ def to_json(self):
         if self.weight is not None:
             self.__json_out["weight"] = self.weight
         return self.__json_out
-
diff --git a/ml/ml40/features/properties/values/white_level.py b/ml/ml40/features/properties/values/white_level.py
index 297abd7..89de9d0 100644
--- a/ml/ml40/features/properties/values/white_level.py
+++ b/ml/ml40/features/properties/values/white_level.py
@@ -2,8 +2,9 @@
 
 
 class WhiteLevel(Value):
-    def __init__(self, namespace="ml40", name="", identifier=""):
+    def __init__(self, namespace="ml40", name="", identifier="", parent=None):
         super().__init__(
             namespace=namespace,
             name=name,
-            identifier=identifier)
+            identifier=identifier,
+            parent=parent)
diff --git a/ml/ml40/roles/dts/dt.py b/ml/ml40/roles/dts/dt.py
index 13fbf47..e0306c7 100644
--- a/ml/ml40/roles/dts/dt.py
+++ b/ml/ml40/roles/dts/dt.py
@@ -2,5 +2,5 @@
 
 
 class DT(Role):
-    def __init__(self, namespace="ml40", name="", identifier=""):
-        super().__init__(namespace=namespace, name=name, identifier=identifier)
+    def __init__(self, namespace="ml40", name="", identifier="", parent=None):
+        super().__init__(namespace=namespace, name=name, identifier=identifier, parent=parent)
diff --git a/ml/ml40/roles/dts/handheld_devices/handheld_device.py b/ml/ml40/roles/dts/handheld_devices/handheld_device.py
index b6149ca..73044e1 100644
--- a/ml/ml40/roles/dts/handheld_devices/handheld_device.py
+++ b/ml/ml40/roles/dts/handheld_devices/handheld_device.py
@@ -2,5 +2,7 @@
 
 
 class HandheldDevice(DT):
-    def __init__(self, namespace="ml40", name="", identifier=""):
-        super().__init__(namespace=namespace, name=name, identifier=identifier)
+    def __init__(self, namespace="ml40", name="", identifier="", parent=None):
+        super().__init__(
+            namespace=namespace, name=name, identifier=identifier, parent=parent
+        )
diff --git a/ml/ml40/roles/dts/machines/machine.py b/ml/ml40/roles/dts/machines/machine.py
index 2262121..d0222a7 100644
--- a/ml/ml40/roles/dts/machines/machine.py
+++ b/ml/ml40/roles/dts/machines/machine.py
@@ -2,5 +2,7 @@
 
 
 class Machine(DT):
-    def __init__(self, namespace="ml40", name="", identifier=""):
-        super(DT, self).__init__(namespace=namespace, name=name, identifier=identifier)
+    def __init__(self, namespace="ml40", name="", identifier="", parent=None):
+        super(DT, self).__init__(
+            namespace=namespace, name=name, identifier=identifier, parent=parent
+        )
diff --git a/ml/ml40/roles/dts/parts/crane.py b/ml/ml40/roles/dts/parts/crane.py
index 3cba5ee..99e8a65 100644
--- a/ml/ml40/roles/dts/parts/crane.py
+++ b/ml/ml40/roles/dts/parts/crane.py
@@ -2,5 +2,7 @@
 
 
 class Crane(Part):
-    def __init__(self, namespace="ml40", name="", identifier=""):
-        super(Crane, self).__init__(namespace=namespace, name=name, identifier=identifier)
+    def __init__(self, namespace="ml40", name="", identifier="", parent=None):
+        super(Crane, self).__init__(
+            namespace=namespace, name=name, identifier=identifier, parent=parent
+        )
diff --git a/ml/ml40/roles/dts/parts/engine.py b/ml/ml40/roles/dts/parts/engine.py
index 50d689e..5e8dfde 100644
--- a/ml/ml40/roles/dts/parts/engine.py
+++ b/ml/ml40/roles/dts/parts/engine.py
@@ -2,5 +2,7 @@
 
 
 class Engine(Part):
-    def __init__(self, namespace="ml40", name="", identifier=""):
-        super(Engine, self).__init__(namespace=namespace, name=name, identifier=identifier)
+    def __init__(self, namespace="ml40", name="", identifier="", parent=None):
+        super(Engine, self).__init__(
+            namespace=namespace, name=name, identifier=identifier, parent=parent
+        )
diff --git a/ml/ml40/roles/dts/parts/part.py b/ml/ml40/roles/dts/parts/part.py
index e63dc61..4b1a160 100644
--- a/ml/ml40/roles/dts/parts/part.py
+++ b/ml/ml40/roles/dts/parts/part.py
@@ -2,7 +2,7 @@
 
 
 class Part(DT):
-    def __init__(self, namespace="ml40", name="", identifier=""):
+    def __init__(self, namespace="ml40", name="", identifier="", parent=None):
         super(Part, self).__init__(
-            namespace=namespace, name=name, identifier=identifier
+            namespace=namespace, name=name, identifier=identifier, parent=parent
         )
diff --git a/ml/ml40/roles/dts/parts/scale.py b/ml/ml40/roles/dts/parts/scale.py
index 76af6b6..59d5ff3 100644
--- a/ml/ml40/roles/dts/parts/scale.py
+++ b/ml/ml40/roles/dts/parts/scale.py
@@ -2,5 +2,7 @@
 
 
 class Scale(Part):
-    def __init__(self, namespace="ml40", name="", identifier=""):
-        super(Scale, self).__init__(namespace=namespace, name=name, identifier=identifier)
+    def __init__(self, namespace="ml40", name="", identifier="", parent=None):
+        super(Scale, self).__init__(
+            namespace=namespace, name=name, identifier=identifier, parent=parent
+        )
diff --git a/ml/ml40/roles/dts/parts/tank.py b/ml/ml40/roles/dts/parts/tank.py
index b9d7175..8d53ef4 100644
--- a/ml/ml40/roles/dts/parts/tank.py
+++ b/ml/ml40/roles/dts/parts/tank.py
@@ -2,5 +2,7 @@
 
 
 class Tank(Part):
-    def __init__(self, namespace="ml40", name="", identifier=""):
-        super(Tank, self).__init__(namespace=namespace, name=name, identifier=identifier)
+    def __init__(self, namespace="ml40", name="", identifier="", parent=None):
+        super(Tank, self).__init__(
+            namespace=namespace, name=name, identifier=identifier, parent=parent
+        )
diff --git a/ml/ml40/roles/dts/persons/machine_operator.py b/ml/ml40/roles/dts/persons/machine_operator.py
index 1ea4b8c..69aa545 100644
--- a/ml/ml40/roles/dts/persons/machine_operator.py
+++ b/ml/ml40/roles/dts/persons/machine_operator.py
@@ -2,7 +2,7 @@
 
 
 class MachineOperator(Person):
-    def __init__(self, namespace="ml40", name="", identifier=""):
+    def __init__(self, namespace="ml40", name="", identifier="", parent=None):
         super(MachineOperator, self).__init__(
-            namespace=namespace, name=name, identifier=identifier
+            namespace=namespace, name=name, identifier=identifier, parent=parent
         )
diff --git a/ml/ml40/roles/dts/persons/person.py b/ml/ml40/roles/dts/persons/person.py
index c8c2f97..bf94d0c 100644
--- a/ml/ml40/roles/dts/persons/person.py
+++ b/ml/ml40/roles/dts/persons/person.py
@@ -2,5 +2,5 @@
 
 
 class Person(DT):
-    def __init__(self, namespace="ml40", name="", identifier=""):
-        super(Person, self).__init__(namespace=namespace, name=name, identifier=identifier)
+    def __init__(self, namespace="ml40", name="", identifier="", parent=None):
+        super(Person, self).__init__(namespace=namespace, name=name, identifier=identifier, parent=parent)
diff --git a/ml/ml40/roles/dts/sensors/accelerometer.py b/ml/ml40/roles/dts/sensors/accelerometer.py
index 82ab9cf..a478e6e 100644
--- a/ml/ml40/roles/dts/sensors/accelerometer.py
+++ b/ml/ml40/roles/dts/sensors/accelerometer.py
@@ -2,7 +2,7 @@
 
 
 class Accelerometer(Sensor):
-    def __init__(self, namespace="ml40", name="", identifier=""):
+    def __init__(self, namespace="ml40", name="", identifier="", parent=None):
         super().__init__(
-            namespace=namespace, name=name, identifier=identifier
+            namespace=namespace, name=name, identifier=identifier, parent=parent
         )
diff --git a/ml/ml40/roles/dts/sensors/air_sensor.py b/ml/ml40/roles/dts/sensors/air_sensor.py
index 3552f6d..84634fa 100644
--- a/ml/ml40/roles/dts/sensors/air_sensor.py
+++ b/ml/ml40/roles/dts/sensors/air_sensor.py
@@ -2,7 +2,7 @@
 
 
 class AirSensor(Sensor):
-    def __init__(self, namespace="ml40", name="", identifier=""):
+    def __init__(self, namespace="ml40", name="", identifier="", parent=None):
         super(AirSensor, self).__init__(
-            namespace=namespace, name=name, identifier=identifier
+            namespace=namespace, name=name, identifier=identifier, parent=parent
         )
diff --git a/ml/ml40/roles/dts/sensors/gyroscope.py b/ml/ml40/roles/dts/sensors/gyroscope.py
index c81ed97..9c55c05 100644
--- a/ml/ml40/roles/dts/sensors/gyroscope.py
+++ b/ml/ml40/roles/dts/sensors/gyroscope.py
@@ -2,7 +2,7 @@
 
 
 class Gyroscope(Sensor):
-    def __init__(self, namespace="ml40", name="", identifier=""):
+    def __init__(self, namespace="ml40", name="", identifier="", parent=None):
         super(Gyroscope, self).__init__(
-            namespace=namespace, name=name, identifier=identifier
+            namespace=namespace, name=name, identifier=identifier, parent=parent
         )
diff --git a/ml/ml40/roles/dts/sensors/light_sensor.py b/ml/ml40/roles/dts/sensors/light_sensor.py
index 9474696..acb4f7e 100644
--- a/ml/ml40/roles/dts/sensors/light_sensor.py
+++ b/ml/ml40/roles/dts/sensors/light_sensor.py
@@ -2,7 +2,7 @@
 
 
 class LightSensor(Sensor):
-    def __init__(self, namespace="ml40", name="", identifier=""):
+    def __init__(self, namespace="ml40", name="", identifier="", parent=None):
         super(LightSensor, self).__init__(
-            namespace=namespace, name=name, identifier=identifier
+            namespace=namespace, name=name, identifier=identifier, parent=parent
         )
diff --git a/ml/ml40/roles/dts/sensors/sensor.py b/ml/ml40/roles/dts/sensors/sensor.py
index 386aee9..b53b28c 100644
--- a/ml/ml40/roles/dts/sensors/sensor.py
+++ b/ml/ml40/roles/dts/sensors/sensor.py
@@ -2,5 +2,7 @@
 
 
 class Sensor(DT):
-    def __init__(self, namespace="ml40", name="", identifier=""):
-        super().__init__(namespace=namespace, name=name, identifier=identifier)
+    def __init__(self, namespace="ml40", name="", identifier="", parent=None):
+        super().__init__(
+            namespace=namespace, name=name, identifier=identifier, parent=parent
+        )
diff --git a/ml/ml40/roles/dts/sensors/sensor_network.py b/ml/ml40/roles/dts/sensors/sensor_network.py
index 220253d..a4b665a 100644
--- a/ml/ml40/roles/dts/sensors/sensor_network.py
+++ b/ml/ml40/roles/dts/sensors/sensor_network.py
@@ -2,7 +2,7 @@
 
 
 class SensorNetwork(Sensor):
-    def __init__(self, namespace="ml40", name="", identifier=""):
+    def __init__(self, namespace="ml40", name="", identifier="", parent=None):
         super(SensorNetwork, self).__init__(
-            namespace=namespace, name=name, identifier=identifier
+            namespace=namespace, name=name, identifier=identifier, parent=parent
         )
diff --git a/ml/ml40/roles/dts/sensors/soil_sensor.py b/ml/ml40/roles/dts/sensors/soil_sensor.py
index a95dc59..6e8c98b 100644
--- a/ml/ml40/roles/dts/sensors/soil_sensor.py
+++ b/ml/ml40/roles/dts/sensors/soil_sensor.py
@@ -2,7 +2,7 @@
 
 
 class SoilSensor(Sensor):
-    def __init__(self, namespace="ml40", name="", identifier=""):
+    def __init__(self, namespace="ml40", name="", identifier="", parent=None):
         super(SoilSensor, self).__init__(
-            namespace=namespace, name=name, identifier=identifier
+            namespace=namespace, name=name, identifier=identifier, parent=parent
         )
diff --git a/ml/ml40/roles/dts/sensors/sound_sensor.py b/ml/ml40/roles/dts/sensors/sound_sensor.py
index 558af34..dde486a 100644
--- a/ml/ml40/roles/dts/sensors/sound_sensor.py
+++ b/ml/ml40/roles/dts/sensors/sound_sensor.py
@@ -2,7 +2,7 @@
 
 
 class SoundSensor(Sensor):
-    def __init__(self, namespace="ml40", name="", identifier=""):
+    def __init__(self, namespace="ml40", name="", identifier="", parent=None):
         super(SoundSensor, self).__init__(
-            namespace=namespace, name=name, identifier=identifier
+            namespace=namespace, name=name, identifier=identifier, parent=parent
         )
diff --git a/ml/ml40/roles/dts/sites/site.py b/ml/ml40/roles/dts/sites/site.py
index d644a61..dbc6c9e 100644
--- a/ml/ml40/roles/dts/sites/site.py
+++ b/ml/ml40/roles/dts/sites/site.py
@@ -2,5 +2,7 @@
 
 
 class Site(DT):
-    def __init__(self, namespace="ml40",  name="", identifier=""):
-        super(Site, self).__init__(namespace=namespace, name=name, identifier=identifier)
+    def __init__(self, namespace="ml40", name="", identifier="", parent=None):
+        super(Site, self).__init__(
+            namespace=namespace, name=name, identifier=identifier, parent=parent
+        )
diff --git a/ml/ml40/roles/dts/ways/way.py b/ml/ml40/roles/dts/ways/way.py
index b9fe3f3..3b57d73 100644
--- a/ml/ml40/roles/dts/ways/way.py
+++ b/ml/ml40/roles/dts/ways/way.py
@@ -2,5 +2,7 @@
 
 
 class Way(DT):
-    def __init__(self, namespace="ml40", name="", identifier=""):
-        super(Way, self).__init__(namespace=namespace, name=name, identifier=identifier)
+    def __init__(self, namespace="ml40", name="", identifier="", parent=None):
+        super(Way, self).__init__(
+            namespace=namespace, name=name, identifier=identifier, parent=parent
+        )
diff --git a/ml/ml40/roles/hmis/app.py b/ml/ml40/roles/hmis/app.py
index 173009f..021204f 100644
--- a/ml/ml40/roles/hmis/app.py
+++ b/ml/ml40/roles/hmis/app.py
@@ -2,5 +2,7 @@
 
 
 class App(HMI):
-    def __init__(self, namespace="ml40", name="", identifier=""):
-        super(App, self).__init__(namespace=namespace, name=name, identifier=identifier)
+    def __init__(self, namespace="ml40", name="", identifier="", parent=None):
+        super(App, self).__init__(
+            namespace=namespace, name=name, identifier=identifier, parent=parent
+        )
diff --git a/ml/ml40/roles/hmis/dashboard.py b/ml/ml40/roles/hmis/dashboard.py
index 3924cd1..ca866a8 100644
--- a/ml/ml40/roles/hmis/dashboard.py
+++ b/ml/ml40/roles/hmis/dashboard.py
@@ -2,7 +2,7 @@
 
 
 class Dashboard(HMI):
-    def __init__(self, namespace="ml40", name="", identifier=""):
+    def __init__(self, namespace="ml40", name="", identifier="", parent=None):
         super(Dashboard, self).__init__(
-            namespace=namespace, name=name, identifier=identifier
+            namespace=namespace, name=name, identifier=identifier, parent=parent
         )
diff --git a/ml/ml40/roles/hmis/hmd.py b/ml/ml40/roles/hmis/hmd.py
index 30c909c..cec0838 100644
--- a/ml/ml40/roles/hmis/hmd.py
+++ b/ml/ml40/roles/hmis/hmd.py
@@ -2,5 +2,7 @@
 
 
 class HMD(HMI):
-    def __init__(self, namespace="ml40", name="", identifier=""):
-        super().__init__(namespace=namespace, name=name, identifier=identifier)
+    def __init__(self, namespace="ml40", name="", identifier="", parent=None):
+        super().__init__(
+            namespace=namespace, name=name, identifier=identifier, parent=parent
+        )
diff --git a/ml/ml40/roles/hmis/hmi.py b/ml/ml40/roles/hmis/hmi.py
index d7ad91e..1d6e57c 100644
--- a/ml/ml40/roles/hmis/hmi.py
+++ b/ml/ml40/roles/hmis/hmi.py
@@ -2,5 +2,7 @@
 
 
 class HMI(Role):
-    def __init__(self, namespace="ml40", name="", identifier=""):
-        super(HMI, self).__init__(namespace=namespace, name=name, identifier=identifier)
+    def __init__(self, namespace="ml40", name="", identifier="", parent=None):
+        super(HMI, self).__init__(
+            namespace=namespace, name=name, identifier=identifier, parent=parent
+        )
diff --git a/ml/ml40/roles/hmis/machine_ui.py b/ml/ml40/roles/hmis/machine_ui.py
index 50669e5..5bc1b6d 100644
--- a/ml/ml40/roles/hmis/machine_ui.py
+++ b/ml/ml40/roles/hmis/machine_ui.py
@@ -2,5 +2,7 @@
 
 
 class MachineUI(HMI):
-    def __init__(self, namespace="ml40", name="", identifier=""):
-        super().__init__(namespace=namespace, name=name, identifier=identifier)
+    def __init__(self, namespace="ml40", name="", identifier="", parent=None):
+        super().__init__(
+            namespace=namespace, name=name, identifier=identifier, parent=parent
+        )
diff --git a/ml/ml40/roles/servives/service.py b/ml/ml40/roles/servives/service.py
index 397540a..bcbba39 100644
--- a/ml/ml40/roles/servives/service.py
+++ b/ml/ml40/roles/servives/service.py
@@ -2,7 +2,7 @@
 
 
 class Service(Role):
-    def __init__(self, namespace="ml40", name="", identifier=""):
+    def __init__(self, namespace="ml40", name="", identifier="", parent=None):
         super(Service, self).__init__(
-            namespace=namespace, name=name, identifier=identifier
+            namespace=namespace, name=name, identifier=identifier, parent=parent
         )
diff --git a/ml/mml40/features/functionalities/CantileverConfigure.py b/ml/mml40/features/functionalities/CantileverConfigure.py
index 9f21317..140c4c2 100644
--- a/ml/mml40/features/functionalities/CantileverConfigure.py
+++ b/ml/mml40/features/functionalities/CantileverConfigure.py
@@ -2,14 +2,16 @@
 
 
 class CantileverConfigure(Functionality):
-    def __init__(self, namespace="mml40", name="", identifier=""):
+    def __init__(self, namespace="mml40", name="", identifier="", parent=None):
         """Initializes the object.
 
         :param name: Object name
         :param identifier: Identifier
 
         """
-        super().__init__(namespace=namespace, name=name, identifier=identifier)
+        super().__init__(
+            namespace=namespace, name=name, identifier=identifier, parent=parent
+        )
 
     def getConfiguration(self):
         pass
diff --git a/ml/mml40/features/functionalities/ProvidesDisplacementData.py b/ml/mml40/features/functionalities/ProvidesDisplacementData.py
index 4889d51..11f4fe4 100644
--- a/ml/mml40/features/functionalities/ProvidesDisplacementData.py
+++ b/ml/mml40/features/functionalities/ProvidesDisplacementData.py
@@ -3,14 +3,14 @@
 
 
 class ProvidesDisplacementData(Functionality):
-    def __init__(self, namespace="mml40", name="", identifier=""):
+    def __init__(self, namespace="mml40", name="", identifier="", parent=None):
         """Initializes the object.
 
         :param name: Object name
         :param identifier: Identifier
 
         """
-        super().__init__(namespace=namespace, name=name, identifier=identifier)
+        super().__init__(namespace=namespace, name=name, identifier=identifier, parent=parent)
 
     def getMaxDisplacement(self) -> Displacement:
         pass
diff --git a/ml/mml40/features/functionalities/ProvidesForceData.py b/ml/mml40/features/functionalities/ProvidesForceData.py
index 56b95a7..d51901d 100644
--- a/ml/mml40/features/functionalities/ProvidesForceData.py
+++ b/ml/mml40/features/functionalities/ProvidesForceData.py
@@ -3,14 +3,16 @@
 
 
 class ProvidesForceData(Functionality):
-    def __init__(self, namespace="mml40", name="", identifier=""):
+    def __init__(self, namespace="mml40", name="", identifier="", parent=None):
         """Initializes the object.
 
         :param name: Object name
         :param identifier: Identifier
 
         """
-        super().__init__(namespace=namespace, name=name, identifier=identifier)
+        super().__init__(
+            namespace=namespace, name=name, identifier=identifier, parent=parent
+        )
 
     def getMaxForce(self) -> Force:
         pass
diff --git a/ml/mml40/features/functionalities/ProvidesStretchData.py b/ml/mml40/features/functionalities/ProvidesStretchData.py
index dd9612e..b1725ea 100644
--- a/ml/mml40/features/functionalities/ProvidesStretchData.py
+++ b/ml/mml40/features/functionalities/ProvidesStretchData.py
@@ -3,14 +3,16 @@
 
 
 class ProvidesStretchData(Functionality):
-    def __init__(self, namespace="mml40", name="", identifier=""):
+    def __init__(self, namespace="mml40", name="", identifier="", parent=None):
         """Initializes the object.
 
         :param name: Object name
         :param identifier: Identifier
 
         """
-        super().__init__(namespace=namespace, name=name, identifier=identifier)
+        super().__init__(
+            namespace=namespace, name=name, identifier=identifier, parent=parent
+        )
 
     def getStretchData(self, time) -> Stretch:
         pass
diff --git a/ml/role.py b/ml/role.py
index 413b4f1..85b4fd6 100644
--- a/ml/role.py
+++ b/ml/role.py
@@ -10,14 +10,14 @@
 class Role(ABC):
     """Each Role class manages a role which can be assigned to things."""
 
-    def __init__(self, namespace, name="", identifier=""):
+    def __init__(self, namespace, name="", identifier="", parent=None):
         """Constructs a new Role class object with the given name and
         identifier.
 
         :param name: Name of the feature
         :param identifier: Identifier of the feature
         """
-
+        self.parent = parent
         self.__identifier = identifier
         self.__name = name
         self.__class_name = f"{namespace}::{self.__class__.__name__}"
@@ -83,3 +83,6 @@ def to_json(self):
         if self.identifier:
             self.__json_out["identifier"] = self.identifier
         return self.__json_out
+
+    def set_parent(self, value):
+        self.parent = value
-- 
GitLab


From 562820a4197a192cefdade9eba3977fb8df01d97 Mon Sep 17 00:00:00 2001
From: "C. Albrecht" <gromet@gmx.de>
Date: Wed, 15 Dec 2021 17:14:19 +0100
Subject: [PATCH 3/3] Add parent relation between features and features and
 subthings

---
 ml/dt_factory.py | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/ml/dt_factory.py b/ml/dt_factory.py
index cc0ee45..fbb1e16 100644
--- a/ml/dt_factory.py
+++ b/ml/dt_factory.py
@@ -328,6 +328,7 @@ def build_sub_features(feature_ins, feature):
                     build_sub_features(sub_f_instance, sub_f)
                 else:
                     setattr(sub_f_instance, key, sub_f[key])
+            sub_f_instance.parent = feature_ins
             feature_ins.subFeatures[sub_f_name] = sub_f_instance
 
 
@@ -346,6 +347,7 @@ def build_sub_thing(feature_ins, feature):
         sub_thing_ref = create_thing(model={"attributes": json_sub_thing})
         sub_thing_name = json_sub_thing.get("name", None)
         feature_ins.targets[sub_thing_name] = sub_thing_ref
+        sub_thing_ref.parent = feature_ins
 
 
 def build(thing, model):
-- 
GitLab