diff --git a/pylintrc b/pylintrc
index f781e2ed9a3a83e8da2152f0e81c4051c1256474..d3a2e89ae1990480e5377daf443e0a63224342bc 100644
--- a/pylintrc
+++ b/pylintrc
@@ -1,5 +1,3 @@
-# -*- mode:conf; -*-
-
 [FORMAT]
 # Good variable names which should always be accepted, separated by a comma
 good-names=ii,rt,df
diff --git a/src/caosadvancedtools/cfoods/h5.py b/src/caosadvancedtools/cfoods/h5.py
index 4e6832f2e96e0950ed99146d4907f1ffb70d8494..f3d41dd0037ce9393b5b7dac3cc5bb6cc3db41d8 100644
--- a/src/caosadvancedtools/cfoods/h5.py
+++ b/src/caosadvancedtools/cfoods/h5.py
@@ -1,9 +1,9 @@
 #!/usr/bin/env python3
 
-# This file is a part of the CaosDB Project.
+# This file is a part of the LinkAhead Project.
 #
 # Copyright (C) 2020,2021 IndiScale GmbH <www.indiscale.com>
-# Copyright (C) 2020 Daniel Hornung <d.hornung@indiscale.com>
+# Copyright (C) 2020-2025 Daniel Hornung <d.hornung@indiscale.com>
 # Copyright (C) 2021 Henrik tom Wörden <h.tomwoerden@indiscale.com>
 # Copyright (C) 2021 Alexander Kreft
 # Copyright (C) 2021 Laboratory for Fluid Physics and Biocomplexity,
@@ -33,19 +33,14 @@ attributes. Groups and datasets are mapped to Records and attributes to
 Properties.
 """
 
-import re
 from copy import deepcopy
 
 import caosdb as db
 import h5py
 import numpy as np
 from caosadvancedtools.cfood import fileguide
-from caosdb.common.datatype import is_reference
-from caosdb.common.utils import uuid
 
-from ..cfood import (AbstractFileCFood, assure_has_description,
-                     assure_has_parent, assure_has_property,
-                     assure_property_is)
+from ..cfood import AbstractFileCFood
 from ..structure_mapping import (EntityMapping, collect_existing_structure,
                                  update_structure)
 
@@ -100,8 +95,7 @@ def h5_attr_to_property(val):
         if hasattr(val, 'ndim'):
             if not isinstance(val, np.ndarray) and val.ndim != 0:
                 print(val, val.ndim)
-                raise Exception(
-                    "Implementation assumes that only np.arrays have ndim.")
+                raise RuntimeError("Implementation assumes that only np.arrays have ndim.")
 
         return val, dtype
 
@@ -127,6 +121,8 @@ class H5CFood(AbstractFileCFood):
         self.identifiable_root = None
         self.root_name = "root"
         self.hdf5Container = db.Container()
+        self.to_be_inserted = db.Container()
+        self.structure = db.Container()
         self.em = EntityMapping()
 
     def collect_information(self):
@@ -165,7 +161,8 @@ class H5CFood(AbstractFileCFood):
 
         """
 
-        self.structure._cuid = "root element"
+        # TODO Why do we need a protected member here?
+        self.structure._cuid = "root element"  # pylint: disable=protected-access
         self.em.add(self.structure, self.identifiable_root)
         collect_existing_structure(self.structure, self.identifiable_root,
                                    self.em)
@@ -282,7 +279,7 @@ class H5CFood(AbstractFileCFood):
         return rec
 
     def insert_missing_structure(self, target_structure: db.Record):
-        if target_structure._cuid not in self.em.to_existing:
+        if target_structure._cuid not in self.em.to_existing:  # pylint: disable=protected-access
             self.to_be_inserted.append(target_structure)
 
         for prop in target_structure.get_properties():
diff --git a/src/caosadvancedtools/scifolder/analysis_cfood.py b/src/caosadvancedtools/scifolder/analysis_cfood.py
index 27cb871aed08f41531c367567ea36ea9a3faaf69..608054cf1fa0eacd3e86f086bfc98b526357302a 100644
--- a/src/caosadvancedtools/scifolder/analysis_cfood.py
+++ b/src/caosadvancedtools/scifolder/analysis_cfood.py
@@ -16,17 +16,14 @@
 # You should have received a copy of the GNU Affero General Public License
 # along with this program. If not, see <https://www.gnu.org/licenses/>.
 
-import os
-from itertools import chain
-
 import caosdb as db
-from caosadvancedtools.cfood import (AbstractFileCFood, assure_has_parent,
+from caosadvancedtools.cfood import (AbstractFileCFood,
                                      assure_has_property,
-                                     assure_object_is_in_list, get_entity)
-from caosadvancedtools.read_md_header import get_header
+                                     assure_object_is_in_list,
+                                     )
 
 from .generic_pattern import full_pattern
-from .utils import (get_files_referenced_by_field, parse_responsibles,
+from .utils import (parse_responsibles,
                     reference_records_corresponding_to_files)
 from .withreadme import DATAMODEL as dm
 from .withreadme import (RESULTS, REVISIONOF, SCRIPTS, SOURCES, WithREADME,
diff --git a/src/caosadvancedtools/scifolder/experiment_cfood.py b/src/caosadvancedtools/scifolder/experiment_cfood.py
index 38606b5f8ffd372d7bf6f507ed96738d9345f16c..d217719b1ab054ef57d818d18713d476c6e6eed9 100644
--- a/src/caosadvancedtools/scifolder/experiment_cfood.py
+++ b/src/caosadvancedtools/scifolder/experiment_cfood.py
@@ -17,15 +17,13 @@
 # along with this program. If not, see <https://www.gnu.org/licenses/>.
 
 import caosdb as db
-from caosadvancedtools.cfood import (AbstractFileCFood, assure_has_description,
-                                     assure_has_parent, assure_has_property,
-                                     assure_object_is_in_list, get_entity)
-from caosadvancedtools.read_md_header import get_header
+from caosadvancedtools.cfood import (AbstractFileCFood, assure_has_property,
+                                     assure_object_is_in_list)
 
 from .generic_pattern import full_pattern
 from .utils import parse_responsibles, reference_records_corresponding_to_files
 from .withreadme import DATAMODEL as dm
-from .withreadme import RESULTS, REVISIONOF, SCRIPTS, WithREADME, get_glob
+from .withreadme import RESULTS, REVISIONOF, WithREADME, get_glob
 
 
 class ExperimentCFood(AbstractFileCFood, WithREADME):
@@ -40,6 +38,9 @@ class ExperimentCFood(AbstractFileCFood, WithREADME):
 
     def __init__(self,  *args, **kwargs):
         super().__init__(*args, **kwargs)
+        self.project = db.Record()
+        self.experiment = db.Record()
+        self.people = []
         WithREADME.__init__(self)
 
         self.name_map = {},
@@ -52,7 +53,7 @@ class ExperimentCFood(AbstractFileCFood, WithREADME):
         self.find_referenced_files([RESULTS])
 
     @staticmethod
-    def create_identifiable_experiment(match):
+    def create_identifiable_experiment(match) -> tuple[db.Record, db.Record]:
         # create the project identifiable
         name = ExperimentCFood.name_beautifier(
             match.group("project_identifier"))
diff --git a/src/caosadvancedtools/scifolder/publication_cfood.py b/src/caosadvancedtools/scifolder/publication_cfood.py
index fc78e5b759e98e8989c952ccbafeef117e2ed33d..b4bc70b8b86b7af21dbb7acde3b36aa120e5d508 100644
--- a/src/caosadvancedtools/scifolder/publication_cfood.py
+++ b/src/caosadvancedtools/scifolder/publication_cfood.py
@@ -16,18 +16,14 @@
 # You should have received a copy of the GNU Affero General Public License
 # along with this program. If not, see <https://www.gnu.org/licenses/>.
 
-import os
-from itertools import chain
-
 import caosdb as db
 from caosadvancedtools.cfood import (AbstractFileCFood,
                                      assure_object_is_in_list, fileguide,
-                                     get_entity)
+                                     )
 from caosadvancedtools.read_md_header import get_header
-from caosadvancedtools.utils import find_records_that_reference_ids
 
 from .generic_pattern import date_suffix_pattern, readme_pattern
-from .utils import (get_files_referenced_by_field, parse_responsibles,
+from .utils import (parse_responsibles,
                     reference_records_corresponding_to_files)
 from .withreadme import DATAMODEL as dm
 from .withreadme import (RESULTS, REVISIONOF, SCRIPTS, SOURCES, WithREADME,
@@ -57,6 +53,8 @@ class PublicationCFood(AbstractFileCFood, WithREADME):
 
     def __init__(self,  *args, **kwargs):
         super().__init__(*args, **kwargs)
+        self.publication = db.Record()
+        self.people = []
         WithREADME.__init__(self)
 
     def collect_information(self):
diff --git a/src/caosadvancedtools/scifolder/result_table_cfood.py b/src/caosadvancedtools/scifolder/result_table_cfood.py
index deaa2d00118659a9b177a05fe40b19a1793a16fb..71668d3a3a7bda1351780ad4e059200ebedb1713 100644
--- a/src/caosadvancedtools/scifolder/result_table_cfood.py
+++ b/src/caosadvancedtools/scifolder/result_table_cfood.py
@@ -20,17 +20,12 @@ import re
 
 import caosdb as db
 import pandas as pd
-from caosadvancedtools.cfood import (AbstractFileCFood, assure_has_description,
-                                     assure_has_parent, assure_has_property,
-                                     assure_object_is_in_list, get_entity)
-from caosadvancedtools.read_md_header import get_header
+from caosadvancedtools.cfood import (AbstractFileCFood,
+                                     )
 
 from ..cfood import assure_property_is, fileguide
 from .experiment_cfood import ExperimentCFood
 from .generic_pattern import date_pattern, date_suffix_pattern, project_pattern
-from .utils import parse_responsibles, reference_records_corresponding_to_files
-from .withreadme import DATAMODEL as dm
-from .withreadme import RESULTS, REVISIONOF, SCRIPTS, WithREADME, get_glob
 
 
 # TODO similarities with TableCrawler
@@ -48,6 +43,8 @@ class ResultTableCFood(AbstractFileCFood):
 
     def __init__(self,  *args, **kwargs):
         super().__init__(*args, **kwargs)
+        self.recs = []
+        self.experiment, self.project = (db.Record(), db.Record())
         self.table = pd.read_csv(fileguide.access(self.crawled_path))
 
     @staticmethod
@@ -60,7 +57,7 @@ class ResultTableCFood(AbstractFileCFood):
         self.experiment, self.project = (
             ExperimentCFood.create_identifiable_experiment(self.match))
 
-        for idx, row in self.table.iterrows():
+        for _, row in self.table.iterrows():
             rec = db.Record()
             rec.add_parent(self.match.group("recordtype"))
 
@@ -77,10 +74,11 @@ class ResultTableCFood(AbstractFileCFood):
         self.identifiables.extend([self.project, self.experiment])
 
     def update_identifiables(self):
-        for ii, (idx, row) in enumerate(self.table.iterrows()):
+        for ii, (_, row) in enumerate(self.table.iterrows()):
             for col in row.index:
                 match = re.match(ResultTableCFood.property_name_re, col)
-                assure_property_is(self.recs[ii], match.group("pname"), row.loc[col], to_be_updated=self.to_be_updated)
+                assure_property_is(self.recs[ii], match.group("pname"), row.loc[col],
+                                   to_be_updated=self.to_be_updated)
         assure_property_is(self.experiment, self.match.group("recordtype"),
                            self.recs, to_be_updated=self.to_be_updated,
                            datatype=db.LIST(self.match.group("recordtype")))
diff --git a/src/caosadvancedtools/scifolder/simulation_cfood.py b/src/caosadvancedtools/scifolder/simulation_cfood.py
index c8f23f1485d7a1f64dcd940552051d2e1ec5bb07..24f4fdafd94e848299d16e6055f3176feb0672a8 100644
--- a/src/caosadvancedtools/scifolder/simulation_cfood.py
+++ b/src/caosadvancedtools/scifolder/simulation_cfood.py
@@ -16,17 +16,13 @@
 # You should have received a copy of the GNU Affero General Public License
 # along with this program. If not, see <https://www.gnu.org/licenses/>.
 
-import os
-from itertools import chain
-
 import caosdb as db
-from caosadvancedtools.cfood import (AbstractFileCFood, assure_has_parent,
+from caosadvancedtools.cfood import (AbstractFileCFood,
                                      assure_has_property,
-                                     assure_object_is_in_list, get_entity)
-from caosadvancedtools.read_md_header import get_header
+                                     assure_object_is_in_list)
 
 from .generic_pattern import full_pattern
-from .utils import (get_files_referenced_by_field, parse_responsibles,
+from .utils import (parse_responsibles,
                     reference_records_corresponding_to_files)
 from .withreadme import DATAMODEL as dm
 from .withreadme import (RESULTS, REVISIONOF, SCRIPTS, SOURCES, WithREADME,
@@ -41,6 +37,9 @@ class SimulationCFood(AbstractFileCFood, WithREADME):
 
     def __init__(self,  *args, **kwargs):
         super().__init__(*args, **kwargs)
+        self.project = db.Record()
+        self.simulation = db.Record()
+        self.people = []
         WithREADME.__init__(self)
 
     def collect_information(self):
diff --git a/src/caosadvancedtools/scifolder/software_cfood.py b/src/caosadvancedtools/scifolder/software_cfood.py
index 77fb46521e9aab875b6f99d0a1ee4ac44177e09c..47abda230be6e136c0b8486b210117ca19131110 100644
--- a/src/caosadvancedtools/scifolder/software_cfood.py
+++ b/src/caosadvancedtools/scifolder/software_cfood.py
@@ -17,20 +17,16 @@
 # You should have received a copy of the GNU Affero General Public License
 # along with this program. If not, see <https://www.gnu.org/licenses/>.
 
-import os
-from itertools import chain
 
 import caosdb as db
-from caosadvancedtools.cfood import (AbstractFileCFood, assure_has_parent,
+from caosadvancedtools.cfood import (AbstractFileCFood,
                                      assure_has_property, assure_name_is,
-                                     assure_object_is_in_list, get_entity)
+                                     assure_object_is_in_list)
 from caosadvancedtools.guard import global_guard as guard
-from caosadvancedtools.read_md_header import get_header
 
 from .generic_pattern import full_pattern
-from .utils import get_files_referenced_by_field, parse_responsibles
+from .utils import parse_responsibles
 from .withreadme import BINARIES
-from .withreadme import DATAMODEL as dm
 from .withreadme import SOURCECODE, WithREADME
 
 
@@ -43,6 +39,9 @@ class SoftwareCFood(AbstractFileCFood, WithREADME):
 
     def __init__(self,  *args, **kwargs):
         super().__init__(*args, **kwargs)
+        self.software = db.Record()
+        self.softwareversion = db.Record()
+        self.people = []
         WithREADME.__init__(self)
 
     def collect_information(self):
diff --git a/src/caosadvancedtools/scifolder/utils.py b/src/caosadvancedtools/scifolder/utils.py
index 50e897c7d2f19c6269ec622489c5a2c6ce1a28e0..cbf87c4b802c829f34f4368c3605ce05fa42cfb2 100644
--- a/src/caosadvancedtools/scifolder/utils.py
+++ b/src/caosadvancedtools/scifolder/utils.py
@@ -26,7 +26,6 @@ import pandas as pd
 from caosadvancedtools.cfood import assure_object_is_in_list, fileguide
 from caosadvancedtools.utils import (find_records_that_reference_ids,
                                      read_field_as_list,
-                                     return_field_or_property,
                                      string_to_person)
 
 logger = logging.getLogger("caosadvancedtools")
diff --git a/src/caosadvancedtools/scifolder/withreadme.py b/src/caosadvancedtools/scifolder/withreadme.py
index e1968ba49799827467c7ef93a7070b7f090010fb..2b9108bc7eaf078fb2609a08f37000007dbfe288 100644
--- a/src/caosadvancedtools/scifolder/withreadme.py
+++ b/src/caosadvancedtools/scifolder/withreadme.py
@@ -26,8 +26,7 @@ import caosdb as db
 from caosadvancedtools.cfood import (assure_has_description, assure_has_parent,
                                      assure_object_is_in_list, fileguide)
 from caosadvancedtools.read_md_header import get_header as get_md_header
-from caosadvancedtools.table_importer import (win_path_converter,
-                                              win_path_list_converter)
+from caosadvancedtools.table_importer import win_path_converter
 from caosadvancedtools.utils import return_field_or_property
 
 from .utils import (get_entity_ids_from_include_file,
@@ -157,8 +156,8 @@ class WithREADME(object):
                          for f in sublist]
 
             if len(flat_list) == 0:
-                LOGGER.warn("ATTENTION: the field {} does not reference any "
-                            "known files".format(field.key))
+                LOGGER.warning("ATTENTION: the field {} does not reference any "
+                               "known files".format(field.key))
 
             self.attached_filenames.extend(flat_list)  # pylint: disable=no-member
 
diff --git a/src/caosadvancedtools/serverside/helper.py b/src/caosadvancedtools/serverside/helper.py
index a7db25197911de4640e64ff6b3e302d6c8969422..a5f82988c7f61669d81a4f6c1b29525fe91e44cf 100644
--- a/src/caosadvancedtools/serverside/helper.py
+++ b/src/caosadvancedtools/serverside/helper.py
@@ -223,6 +223,7 @@ def init_data_model(entities):
                         "be a {}.".format(e.role, local_role))
                 raise DataModelError(e.name, info)
     except db.exceptions.EntityDoesNotExistError:
+        # pylint: disable-next=raise-missing-from
         raise DataModelError(e.name, "This entity does not exist.")
 
     return True
@@ -242,11 +243,11 @@ def get_data(filename, default=None):
 
     Returns
     -------
-    dict
+    out: dict
         Data from the given file.
     """
     result = default.copy() if default is not None else {}
-    with open(filename, 'r') as fi:
+    with open(filename, "r", encoding="utf8") as fi:
         data = json.load(fi)
     result.update(data)
 
diff --git a/src/caosadvancedtools/table_json_conversion/fill_xlsx.py b/src/caosadvancedtools/table_json_conversion/fill_xlsx.py
index 05ec84386f0bfff5a05d3f7c431545a32ea4b615..60b5c96c7de141b1ecb12254e6928252fe4a9f5c 100644
--- a/src/caosadvancedtools/table_json_conversion/fill_xlsx.py
+++ b/src/caosadvancedtools/table_json_conversion/fill_xlsx.py
@@ -173,7 +173,7 @@ class TemplateFiller:
 
         def next_level(self, next_level: str) -> TemplateFiller.Context:
             result = self.copy()
-            result._current_path.append(next_level)
+            result._current_path.append(next_level)  # pylint: disable=protected-access
             return result
 
         def __getitem__(self, path: Union[List[str], str], owner=None) -> Any: