diff --git a/python/CMakeLists.txt b/python/CMakeLists.txt
deleted file mode 100644
index e7c16117d55773772389038f54366f01a164195b..0000000000000000000000000000000000000000
--- a/python/CMakeLists.txt
+++ /dev/null
@@ -1 +0,0 @@
-add_subdirectory(armarx_face_recognition)
diff --git a/python/armarx_face_recognition/CMakeLists.txt b/python/armarx_face_recognition/CMakeLists.txt
deleted file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000
diff --git a/python/armarx_face_recognition/README.rst b/python/armarx_face_recognition/README.rst
deleted file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000
diff --git a/python/armarx_face_recognition/armarx_face_recognition/__init__.py b/python/armarx_face_recognition/armarx_face_recognition/__init__.py
deleted file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000
diff --git a/python/armarx_face_recognition/armarx_face_recognition/actions.py b/python/armarx_face_recognition/armarx_face_recognition/actions.py
deleted file mode 100644
index 7fd8e3d8234500b6acd0f42a0a02e07e7af60ce0..0000000000000000000000000000000000000000
--- a/python/armarx_face_recognition/armarx_face_recognition/actions.py
+++ /dev/null
@@ -1,112 +0,0 @@
-import logging
-import datetime
-import sys
-import select
-
-from armarx.robots import A6
-from armarx import FramedPositionBase
-
-from .db_model import Person
-
-robot = A6()
-logger = logging.getLogger(__name__)
-
-
-# ToDo: Update to new data types / move data types to armarx-dev.
-
-
-def report_to_memory(p: Person):
-    import numpy as np
-    from armarx_memory.client import MemoryNameSystem
-    from armarx_memory.segments.PersonInstance import PersonInstanceWriter
-    from armarx_memory.segments.Person import PersonWriter
-
-    mns = MemoryNameSystem.get_mns(logger=logger)
-
-    person_writer = PersonWriter.from_mns(mns)
-    person_id = person_writer.core_segment_id.with_provider_segment_name('FaceRecognition')
-    person_id = person_id.with_entity_name(str(p))
-    family_name = p.family_name or ''
-    person_writer.commit(entity_id=person_id, given_name=p.given_name, family_name=family_name, roles=p.roles.split(','))
-
-    writer = PersonInstanceWriter.from_mns(mns)
-    entity_id = writer.core_segment_id.with_provider_segment_name('FaceRecognition')
-    entity_id = entity_id.with_entity_name(str(p))
-    pose = np.identity(4)
-    pose[0, 3] = p.x
-    pose[1, 3] = p.y
-    pose[2, 3] = p.z
-    pose = pose.astype(np.float32)
-    writer.commit(entity_id=entity_id, personID=person_id, pose=pose)
-
-
-def on_detected_faces(detected_faces, time):
-    logger.info('on_detect (%r)', detected_faces)
-    now = datetime.datetime.now()
-    for f in detected_faces:
-        if f.person.given_name == 'Unknown':
-            identify_face(f)
-
-            report_to_memory(f.person)
-        else:
-
-            report_to_memory(f.person)
-            check_birthday(f.person)
-            greet_persons(f.person)
-            # look_at_person(f.person)
-            f.person.update(last_seen=now)
-
-
-def look_at_person(p: Person):
-    f = FramedPositionBase(p.x, p.y, p.z, frame='Global')
-    robot.gaze.fixate(f, 1000)
-
-
-def check_birthday(p: Person):
-    if not p.birthday:
-        return
-    now = datetime.datetime.now()
-    birthday_in_current_year = p.birthday(year=now.date().year)
-    if birthday_in_current_year != now.date():
-        return
-    if p.birthday_year_congratulated >= now.date().year:
-        return
-    robot.say(f'Happy birthday dear {p.given_name}.')
-    p.birthday_year_congratulated = now.date().year
-    p.save()
-
-
-def greet_persons(p: Person):
-    if not p.given_name:
-        logger.error('no name set for person %s', p)
-        return
-    if not p.last_greeted:
-        robot.say(f'Hi {p.given_name}!')
-        p.last_greeted = datetime.datetime.now()
-        p.save()
-    elif (datetime.datetime.now() - p.last_greeted).total_seconds() > 120:
-        robot.say(f'Hi {p.given_name}!')
-        p.last_greeted = datetime.datetime.now()
-        p.save()
-
-
-def identify_face(f):
-    robot.say("What is your name?")
-
-    name = label_face()
-    if not name:
-        return
-    person = Person.select().where(Person.given_name==name).limit(1)
-    if not person:
-        person = Person.create(given_name=name)
-    f.person = person
-    f.save()
-
-
-def label_face() -> str:
-    robot.say("What is your name?")
-    i, o, e = select.select([sys.stdin], [], [], 5)
-    if i:
-        name = sys.stdin.readline().strip()
-        return name
-    return None
diff --git a/python/armarx_face_recognition/armarx_face_recognition/app/__init__.py b/python/armarx_face_recognition/armarx_face_recognition/app/__init__.py
deleted file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000
diff --git a/python/armarx_face_recognition/armarx_face_recognition/app/memory_face_recognition.py b/python/armarx_face_recognition/armarx_face_recognition/app/memory_face_recognition.py
deleted file mode 100755
index daf1ae0d1b18d5c1006fd9a5a36c4f5c235a186d..0000000000000000000000000000000000000000
--- a/python/armarx_face_recognition/armarx_face_recognition/app/memory_face_recognition.py
+++ /dev/null
@@ -1,54 +0,0 @@
-#!/usr/bin/env python3
-
-import logging
-import typing as ty
-
-import numpy as np
-
-from armarx_core import ice_manager
-from armarx.parser import ArmarXArgumentParser as ArgumentParser
-from armarx_memory.client import MemoryNameSystem
-
-from armarx_face_recognition.face_detection import FaceDetection, Person
-
-
-logger = logging.getLogger(__name__)
-
-
-def main():
-    parser = ArgumentParser("Example Image Provider")
-    parser.add_argument("-i", "--input-provider", default="OpenNIPointCloudProvider")
-    parser.add_argument("--depth", action="store_true", help="Use a depth image.")
-    parser.add_argument("--enable-result-image", action="store_true", help="Enable drawing and providing a result image.")
-    parser.add_argument("--create-tables", action="store_true", help="Initializes the database.")
-    parser.add_argument("--drop-tables", action="store_true", help="Drop tables if they already exist.")
-    parser.add_argument("--images", default="/tmp/*.jpg", help="Known faces.")
-    args = parser.parse_args()
-
-    np.set_printoptions(suppress=True, precision=2)
-
-    mns = MemoryNameSystem.wait_for_mns()
-
-    persons: ty.List[Person] = FaceDetection.query_human_profiles(mns=mns, logger=logger)
-    if persons:
-        logger.info(f"Found {len(persons)} persons with images.")
-        logger.debug(f"Images: {persons}")
-    else:
-        logger.error("No persons with images found. Aborting.")
-        return
-
-    logger.info("Starting image processor")
-    image_processor = FaceDetection(
-        args.input_provider,
-        persons=persons,
-        has_depth=args.depth,
-        enable_result_image=args.enable_result_image,
-    )
-    image_processor.on_connect()
-    image_processor.update_calibration()
-
-    ice_manager.wait_for_shutdown()
-
-
-if __name__ == "__main__":
-    main()
diff --git a/python/armarx_face_recognition/armarx_face_recognition/datatypes.py b/python/armarx_face_recognition/armarx_face_recognition/datatypes.py
deleted file mode 100644
index 303b0f075f119776a9b3bd067a20dd65bd4031f9..0000000000000000000000000000000000000000
--- a/python/armarx_face_recognition/armarx_face_recognition/datatypes.py
+++ /dev/null
@@ -1,47 +0,0 @@
-import dataclasses as dc
-import numpy as np
-import typing as ty
-
-from armarx_memory import client as mem
-from armarx_memory.aron.aron_dataclass import AronDataclass
-from armarx_memory.aron.conversion import to_aron
-from armarx_memory.segments.human.profile import Profile
-
-
-@dc.dataclass
-class Person:
-
-    face_encodings: ty.List[np.ndarray] = dc.field(default_factory=list)
-
-    profile_id: ty.Optional[mem.MemoryID] = None
-    profile: ty.Optional[Profile] = None
-
-    def name(self) -> str:
-        try:
-            return self.profile.names.spoken[0]
-        except (KeyError, AttributeError):
-            if self.profile_id is not None:
-                return self.profile_id.entity_name
-            else:
-                return "<unknown>"
-
-
-@dc.dataclass
-class FaceRecognition(AronDataclass):
-
-    position_3d: np.ndarray
-    position_2d: np.ndarray
-    extents_2d: np.ndarray
-
-    profile_id: mem.MemoryID
-
-    last_seen_usec: int = -1
-    last_greeted_usec: int = -1
-
-    def to_aron_ice(self):
-        return to_aron({
-            "position3D": self.position_3d.astype(np.float32).reshape(3, 1),
-            "position2D": self.position_2d.astype(np.int32),
-            "extents2D": self.extents_2d.astype(np.int32),
-            "profileID": self.profile_id.to_aron() if self.profile_id else None,
-        })
diff --git a/python/armarx_face_recognition/armarx_face_recognition/face_detection.py b/python/armarx_face_recognition/armarx_face_recognition/face_detection.py
deleted file mode 100755
index 431a0b3ac807a5e6a6c2786ba8cea6c0eb001b3f..0000000000000000000000000000000000000000
--- a/python/armarx_face_recognition/armarx_face_recognition/face_detection.py
+++ /dev/null
@@ -1,249 +0,0 @@
-#!/usr/bin/env python3
-
-import os
-import logging
-import math
-import typing as ty
-
-import Ice
-import cv2
-import numpy as np
-import face_recognition
-
-from armarx_core import slice_loader
-
-from armarx import arviz as viz
-from armarx_memory import client as mem
-
-from armarx.pose_helper import convert_position_to_global
-from armarx import FramedPositionBase
-
-slice_loader.load_armarx_slice("VisionX", "core/ImageProcessorInterface.ice")
-slice_loader.load_armarx_slice("VisionX", "components/Calibration.ice")
-from armarx_vision.image_processor import ImageProcessor
-from visionx import StereoCalibrationInterfacePrx
-
-from armarx_face_recognition.datatypes import Person, FaceRecognition
-
-
-class FaceDetection(ImageProcessor):
-
-    def __init__(
-            self,
-            provider_name: str,
-            persons: ty.List[Person],
-            num_result_images=None,
-            enable_result_image=True,
-            has_depth=False,
-            face_recognition_segment_id=mem.MemoryID("Human", "FaceRecognition"),
-    ):
-        super().__init__(provider_name=provider_name, num_result_images=num_result_images)
-
-        self.persons = persons
-        self.unknown_person = Person()
-
-        self.has_depth = has_depth
-        self.calibration = {
-            "fx": 500, "fy": 500,
-            "width": 640, "height": 480,
-            "horizontal_fov": 0.8, "vertical_fov": 0.9
-        }
-
-        self.enable_result_image = enable_result_image
-
-        self.agent_name = "Armar6"
-        self.camera_frame_name = "AzureKinectCamera"
-
-        self.logger = logging.getLogger(__name__)
-        self.arviz = viz.Client(__name__)
-
-        self.mns = mem.MemoryNameSystem.wait_for_mns()
-        self.face_recognition_segment_id = face_recognition_segment_id
-        self.face_reco_writer = self.mns.wait_for_writer(face_recognition_segment_id)
-
-
-    @classmethod
-    def query_human_profiles(
-            cls,
-            mns: mem.MemoryNameSystem,
-            logger=None
-    ):
-        from armarx_memory.segments.human.profile import ProfileReader
-
-        profile_reader = ProfileReader.from_mns(mns)
-        id_to_profile_dict = profile_reader.query_latest()
-
-        persons = []
-        for id, profile in id_to_profile_dict.items():
-            if logger:
-                logger.info(f"Gathering face images of {id} ...")
-
-            face_encodings = []
-            for face_image_path in profile.face_image_paths:
-                abs_path = face_image_path.get_system_path()
-                if os.path.isfile(abs_path):
-                    name = profile.names.spoken[0] or id.entity_name
-                    image = face_recognition.load_image_file(abs_path)
-                    encodings_of_faces = face_recognition.face_encodings(image)
-                    if len(encodings_of_faces) > 0:
-                        if logger:
-                            logger.info(f"Loaded image of person '{name}' from '{abs_path}.")
-                        encoding = encodings_of_faces[0]
-                    else:
-                        if logger:
-                            logger.info(f"Found no faces in image '{abs_path}' ...")
-
-                    face_encodings.append(encoding)
-
-            if face_encodings:
-                persons.append(Person(face_encodings=face_encodings, profile_id=id, profile=profile))
-
-        return persons
-
-    def update_calibration(self):
-        image_format = self.image_source.getImageFormat()
-
-        width = image_format.dimension.width
-        height = image_format.dimension.height
-
-        proxy = StereoCalibrationInterfacePrx.get_proxy(self.provider_name)
-        if proxy is not None:
-            stereo_calibration = proxy.getStereoCalibration()
-            fx = stereo_calibration.calibrationRight.cameraParam.focalLength[0]
-            fy = stereo_calibration.calibrationRight.cameraParam.focalLength[1]
-            calibration = {"fx": fx, "fy": fy, "width": width, "height": height,
-                           "vertical_fov": 2.0 * math.atan(height / (2.0 * fy)),
-                           "horizontal_fov": 2.0 * math.atan(width / (2.0 * fx))}
-
-            self.calibration.update(calibration)
-
-    def process_images(self, images: np.ndarray, info):
-        image_rgb = images[0]
-
-        face_locations = face_recognition.face_locations(image_rgb)
-        face_encodings = face_recognition.face_encodings(image_rgb, face_locations)
-        # self.logger.info("Found %s faces.", len(face_locations))
-
-        detected_persons = self.detect_persons(face_encodings)
-        self.logger.info(f"Detected {len(detected_persons)} persons "
-                         f"({', '.join(p.name() for p in detected_persons)}).")
-
-        face_recognitions = self.make_face_recognitions(images, face_locations, detected_persons)
-
-        self.commit_recognitions(face_recognitions, info.timeProvided)
-
-        if self.enable_result_image:
-            self.draw_result_image(image_rgb, face_locations, detected_persons)
-            self.result_image_provider.update_image(images, info.timeProvided)
-
-        # It seems we must return images to avoid errors ...
-        return images, info
-
-    def detect_persons(self, face_encodings) -> ty.List[Person]:
-        face_encoding_index: ty.Dict[int, Person] = {}
-        known_face_encodings: ty.List[np.ndarray] = []
-        for person in self.persons:
-            for encoding in person.face_encodings:
-                face_encoding_index[len(known_face_encodings)] = person
-                known_face_encodings.append(encoding)
-
-        detected_persons = []
-        for face_encoding in face_encodings:
-            matches = face_recognition.compare_faces(face_encoding, known_face_encodings)
-            face_distances = face_recognition.face_distance(face_encoding, known_face_encodings)
-            best_match_index = np.argmin(face_distances)
-
-            if matches[best_match_index] and face_distances[best_match_index] < 0.5:
-                person = face_encoding_index[best_match_index]
-            else:
-                person = self.unknown_person
-            detected_persons.append(person)
-
-        return detected_persons
-
-    def make_face_recognitions(
-            self,
-            images,
-            face_locations,
-            detected_persons: ty.List[Person],
-    ) -> ty.List[FaceRecognition]:
-        calibration = self.calibration
-        scale_x = math.tan(calibration["horizontal_fov"] / 2.0) * 2.0
-        scale_y = math.tan(calibration["vertical_fov"] / 2.0) * 2.0
-
-        face_recognitions = []
-        for (top, right, bottom, left), person in zip(face_locations, detected_persons):
-            i = int(left + 0.5 * (right - left))
-            j = int(top + 0.5 * (bottom - top))
-            if self.has_depth:
-                z = float(images[1][j][i][0] + (images[1][j][i][1] << 8) + (images[1][j][i][2] << 16))
-            else:
-                z = 1000.0
-            x = -1.0 * (i - calibration["width"] / 2.0) / calibration["width"] * z * scale_x
-            y = (calibration["height"] / 2.0 - j) / calibration["height"] * z * scale_y
-
-            f = FramedPositionBase(-x, -y, z, self.camera_frame_name, self.agent_name)
-            try:
-                global_transform_mat = convert_position_to_global(f)
-            except AttributeError:
-                # AttributeError: 'NoneType' object has no attribute 'getSynchronizedRobot'
-                position_3d = np.array([-x, -y, z])
-            except Ice.UnknownUserException:
-                position_3d = np.array([-x, -y, z])
-            else:
-                position_3d = global_transform_mat[:3, 3]
-
-            position_2d = 0.5 * np.array([left + right, bottom + top])
-            extents_2d = np.array([right - left, top - bottom])
-
-            recognition = FaceRecognition(
-                position_3d=position_3d,
-                position_2d=position_2d,
-                extents_2d=extents_2d,
-                profile_id=person.profile_id,
-            )
-            face_recognitions.append(recognition)
-
-            self.visu_pose(person.name(), position_3d)
-
-        return face_recognitions
-
-    def commit_recognitions(
-            self,
-            recognitions: ty.List[FaceRecognition],
-            time_usec: int
-    ):
-        commit = mem.Commit()
-        for reco in recognitions:
-            update = commit.add()
-            entity_name = reco.profile_id.entity_name if reco.profile_id else "<unknown>"
-            update.entity_id = (self.face_recognition_segment_id
-                                .with_provider_segment_name(__name__)
-                                .with_entity_name(entity_name))
-            update.time_created_usec = time_usec
-            update.instances_data = [reco.to_aron_ice()]
-
-        self.face_reco_writer.commit(commit)
-
-    def visu_pose(
-            self,
-            person_name,
-            position: np.ndarray,
-    ):
-        with self.arviz.begin_stage(commit_on_exit=True) as stage:
-            layer = stage.layer("Location")
-            layer.add(viz.Sphere(person_name, position=position, radius=100, color=(255, 0, 255)))
-
-    @classmethod
-    def draw_result_image(
-            cls,
-            image_rgb,
-            face_locations,
-            detected_persons,
-    ):
-        for (top, right, bottom, left), person in zip(face_locations, detected_persons):
-            cv2.rectangle(image_rgb, (left, top), (right, bottom), (0, 0, 255), 2)
-            cv2.rectangle(image_rgb, (left, bottom - 35), (right, bottom), (0, 0, 255), cv2.FILLED)
-
-            cv2.putText(image_rgb, person.name(), (left + 6, bottom - 6),
-                        cv2.FONT_HERSHEY_DUPLEX, 1.0, (255, 255, 255), 1)
diff --git a/python/armarx_face_recognition/armarx_face_recognition/helper.py b/python/armarx_face_recognition/armarx_face_recognition/helper.py
deleted file mode 100644
index d2c55e163f3174efb042015313695d51b6a9c3c5..0000000000000000000000000000000000000000
--- a/python/armarx_face_recognition/armarx_face_recognition/helper.py
+++ /dev/null
@@ -1,50 +0,0 @@
-import numpy as np
-import transforms3d as tf3d
-
-from armarx import RobotStateComponentInterfacePrx
-from armarx import FramedPositionBase
-from armarx import FramedPoseBase
-from armarx import FramedOrientationBase
-
-
-def pose2mat(pose: FramedPoseBase) -> np.ndarray:
-    """
-    Converts a FramedPoseBase to a homogeneous matrix
-
-    :param pose: FramedPoseBase
-    :return: numpy.ndarry
-    """
-    qw = pose.orientation.qw
-    qx = pose.orientation.qx
-    qy = pose.orientation.qy
-    qz = pose.orientation.qz
-    rot_mat = tf3d.quaternions.quat2mat([qw, qx, qy, qz])
-    transform_mat = np.identity(4)
-    transform_mat[0:3, 0:3] = rot_mat
-    position = pose.position
-    transform_mat[0, 3] = position.x
-    transform_mat[1, 3] = position.y
-    transform_mat[2, 3] = position.z
-
-    return transform_mat
-
-
-def convert_position_to_global(f: FramedPositionBase) -> np.ndarray:
-    pose = FramedPoseBase(position=f, orientation=FramedOrientationBase(), frame=f.frame, agent=f.agent)
-    print(pose)
-    return convert_pose_to_global(pose)
-
-
-def convert_pose_to_global(f: FramedPoseBase) -> np.ndarray:
-    robot_state = RobotStateComponentInterfacePrx.get_proxy()
-    current_robot_state = robot_state.getSynchronizedRobot()
-    robot_pose = current_robot_state.getGlobalPose()
-    robot_node = current_robot_state.getRobotNode(f.frame).getPoseInRootFrame()
-
-    transform = pose2mat(f)
-    transform_robot_node_to_root = pose2mat(robot_node)
-
-    transform_root_to_global = pose2mat(robot_pose)
-
-    return np.dot(transform_root_to_global, np.dot(transform_robot_node_to_root, transform))
-
diff --git a/python/armarx_face_recognition/pyproject.toml b/python/armarx_face_recognition/pyproject.toml
deleted file mode 100644
index 28f388f58ae6d32007da43441bd5db6727869952..0000000000000000000000000000000000000000
--- a/python/armarx_face_recognition/pyproject.toml
+++ /dev/null
@@ -1,36 +0,0 @@
-[tool.poetry]
-name = "armarx_face_recognition"
-version = "0.1.0"
-description = ""
-authors = ["Markus Grotz <markus dot grotz at kit dot edu>", "Rainer Kartmann <rainer dot kartmann at kit dot edu>"]
-
-
-[tool.poetry.dependencies]
-python = "^3.6.9"
-# armarx-dev = "^0.16.2"
-# armarx-dev = { path="../../../python3-armarx/", develop=true }  # "^0.16.2"
-ipython = "5.5"
-numpy = "*"
-face-recognition = "^1.3.0"
-opencv-python = "4.3.0.36"
-peewee = "^3.14.4"
-transforms3d = "*"
-pyzbar = "^0.1.8"
-cbor2 = "^5.4.2"
-base45 = "^0.4.3"
-matplotlib = "2.1"
-dataclasses = { version = "^0.8", python = "~3.6" }
-
-
-[tool.poetry.dev-dependencies]
-pytest = "^5.2"
-
-[build-system]
-# requires = ["setuptools", "wheel"]
-# build-backend = "setuptools.build_meta"
-requires = ["poetry-core@https://github.com/python-poetry/poetry-core/archive/325312c016d69189ac93c945ba0c1b69296c5e54.zip"]
-build-backend = "poetry.core.masonry.api"
-
-[[tool.poetry.source]]
-name = "h2t"
-url = "https://pypi.humanoids.kit.edu/simple/"
diff --git a/python/armarx_face_recognition/tests/__init__.py b/python/armarx_face_recognition/tests/__init__.py
deleted file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000
diff --git a/scenarios/MemoryFaceRecognition/MemoryFaceRecognition.scx b/scenarios/MemoryFaceRecognition/MemoryFaceRecognition.scx
deleted file mode 100644
index d9367d758fca7243c09871239b644eb4c8514c26..0000000000000000000000000000000000000000
--- a/scenarios/MemoryFaceRecognition/MemoryFaceRecognition.scx
+++ /dev/null
@@ -1,5 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<scenario name="MemoryFaceRecognition" creation="2022-09-08.13:48:46" globalConfigName="./config/global.cfg" package="VisionX" deploymentType="local" nodeName="NodeMain">
-	<application name="PythonApplicationManager" instance="memory_face_recognition" package="ArmarXCore" nodeName="" enabled="true" iceAutoRestart="false"/>
-</scenario>
-
diff --git a/scenarios/MemoryFaceRecognition/config/PythonApplicationManager.memory_face_recognition.cfg b/scenarios/MemoryFaceRecognition/config/PythonApplicationManager.memory_face_recognition.cfg
deleted file mode 100644
index b989de26a8c8b7bacc3588cd6ec70bfdb3730351..0000000000000000000000000000000000000000
--- a/scenarios/MemoryFaceRecognition/config/PythonApplicationManager.memory_face_recognition.cfg
+++ /dev/null
@@ -1,356 +0,0 @@
-# ==================================================================
-# PythonApplicationManager properties
-# ==================================================================
-
-# ArmarX.AdditionalPackages:  List of additional ArmarX packages which should be in the list of default packages. If you have custom packages, which should be found by the gui or other apps, specify them here. Comma separated List.
-#  Attributes:
-#  - Default:            Default value not mapped.
-#  - Case sensitivity:   yes
-#  - Required:           no
-# ArmarX.AdditionalPackages = Default value not mapped.
-
-
-# ArmarX.ApplicationName:  Application name
-#  Attributes:
-#  - Default:            ""
-#  - Case sensitivity:   yes
-#  - Required:           no
-# ArmarX.ApplicationName = ""
-
-
-# ArmarX.CachePath:  Path for cache files. If relative path AND env. variable ARMARX_CONFIG_DIR is set, the cache path will be made relative to ARMARX_CONFIG_DIR. Otherwise if relative it will be relative to the default ArmarX config dir (${ARMARX_WORKSPACE}/armarx_config)
-#  Attributes:
-#  - Default:            mongo/.cache
-#  - Case sensitivity:   yes
-#  - Required:           no
-# ArmarX.CachePath = mongo/.cache
-
-
-# ArmarX.Config:  Comma-separated list of configuration files 
-#  Attributes:
-#  - Default:            ""
-#  - Case sensitivity:   yes
-#  - Required:           no
-# ArmarX.Config = ""
-
-
-# ArmarX.DataPath:  Semicolon-separated search list for data files
-#  Attributes:
-#  - Default:            ""
-#  - Case sensitivity:   yes
-#  - Required:           no
-# ArmarX.DataPath = ""
-
-
-# ArmarX.DefaultPackages:  List of ArmarX packages which are accessible by default. Comma separated List. If you want to add your own packages and use all default ArmarX packages, use the property 'AdditionalPackages'.
-#  Attributes:
-#  - Default:            Default value not mapped.
-#  - Case sensitivity:   yes
-#  - Required:           no
-# ArmarX.DefaultPackages = Default value not mapped.
-
-
-# ArmarX.DependenciesConfig:  Path to the (usually generated) config file containing all data paths of all dependent projects. This property usually does not need to be edited.
-#  Attributes:
-#  - Default:            ./config/dependencies.cfg
-#  - Case sensitivity:   yes
-#  - Required:           no
-# ArmarX.DependenciesConfig = ./config/dependencies.cfg
-
-
-# ArmarX.DisableLogging:  Turn logging off in whole application
-#  Attributes:
-#  - Default:            false
-#  - Case sensitivity:   yes
-#  - Required:           no
-#  - Possible values: {0, 1, false, no, true, yes}
-# ArmarX.DisableLogging = false
-
-
-# ArmarX.EnableProfiling:  Enable profiling of CPU load produced by this application
-#  Attributes:
-#  - Default:            false
-#  - Case sensitivity:   yes
-#  - Required:           no
-#  - Possible values: {0, 1, false, no, true, yes}
-# ArmarX.EnableProfiling = false
-
-
-# ArmarX.LoadLibraries:  Libraries to load at start up of the application. Must be enabled by the Application with enableLibLoading(). Format: PackageName:LibraryName;... or /absolute/path/to/library;...
-#  Attributes:
-#  - Default:            ""
-#  - Case sensitivity:   yes
-#  - Required:           no
-# ArmarX.LoadLibraries = ""
-
-
-# ArmarX.LoggingGroup:  The logging group is transmitted with every ArmarX log message over Ice in order to group the message in the GUI.
-#  Attributes:
-#  - Default:            ""
-#  - Case sensitivity:   yes
-#  - Required:           no
-# ArmarX.LoggingGroup = ""
-
-
-# ArmarX.PythonApplicationManager.AdditionalEnvVars:  Comma-seperated list of env-var assignment, e.g. MYVAR=1,ADDPATH=/tmp
-#  Attributes:
-#  - Default:            Default value not mapped.
-#  - Case sensitivity:   yes
-#  - Required:           no
-# ArmarX.PythonApplicationManager.AdditionalEnvVars = Default value not mapped.
-
-
-# ArmarX.PythonApplicationManager.BinaryPathAsWorkingDirectory:  If true the path of the binary is set as the working directory.
-#  Attributes:
-#  - Default:            false
-#  - Case sensitivity:   yes
-#  - Required:           no
-#  - Possible values: {0, 1, false, no, true, yes}
-# ArmarX.PythonApplicationManager.BinaryPathAsWorkingDirectory = false
-
-
-# ArmarX.PythonApplicationManager.Dependencies:  Comma-seperated list of Ice Object dependencies. The external app will only be started after all dependencies have been found.
-#  Attributes:
-#  - Default:            Default value not mapped.
-#  - Case sensitivity:   yes
-#  - Required:           no
-# ArmarX.PythonApplicationManager.Dependencies = Default value not mapped.
-
-
-# ArmarX.PythonApplicationManager.DisconnectInCaseOfCrash:  Whether this component should disconnect as long as the application is not running.
-#  Attributes:
-#  - Default:            true
-#  - Case sensitivity:   yes
-#  - Required:           no
-#  - Possible values: {0, 1, false, no, true, yes}
-# ArmarX.PythonApplicationManager.DisconnectInCaseOfCrash = true
-
-
-# ArmarX.PythonApplicationManager.EnableProfiling:  enable profiler which is used for logging performance events
-#  Attributes:
-#  - Default:            false
-#  - Case sensitivity:   yes
-#  - Required:           no
-#  - Possible values: {0, 1, false, no, true, yes}
-# ArmarX.PythonApplicationManager.EnableProfiling = false
-
-
-# ArmarX.PythonApplicationManager.FakeObjectDelayedStartKeyword:  If not empty, the start up of the fake armarx object will be delayed until this keyword is found in the stdout of the subprocess.
-#  Attributes:
-#  - Default:            ""
-#  - Case sensitivity:   yes
-#  - Required:           no
-# ArmarX.PythonApplicationManager.FakeObjectDelayedStartKeyword = ""
-
-
-# ArmarX.PythonApplicationManager.FakeObjectStartDelay:  Delay in ms after which the fake armarx object is started on which other apps can depend. Not used if property FakeObjectDelayedStartKeyword is used.
-#  Attributes:
-#  - Default:            0
-#  - Case sensitivity:   yes
-#  - Required:           no
-# ArmarX.PythonApplicationManager.FakeObjectStartDelay = 0
-
-
-# ArmarX.PythonApplicationManager.KillDelay:  Delay ins ms before the subprocess is killed after sending the stop signal
-#  Attributes:
-#  - Default:            2000
-#  - Case sensitivity:   yes
-#  - Required:           no
-# ArmarX.PythonApplicationManager.KillDelay = 2000
-
-
-# ArmarX.PythonApplicationManager.MinimumLoggingLevel:  Local logging level only for this component
-#  Attributes:
-#  - Default:            Undefined
-#  - Case sensitivity:   yes
-#  - Required:           no
-#  - Possible values: {Debug, Error, Fatal, Important, Info, Undefined, Verbose, Warning}
-# ArmarX.PythonApplicationManager.MinimumLoggingLevel = Undefined
-
-
-# ArmarX.PythonApplicationManager.ObjectName:  Name of IceGrid well-known object
-#  Attributes:
-#  - Default:            ""
-#  - Case sensitivity:   yes
-#  - Required:           no
-# ArmarX.PythonApplicationManager.ObjectName = ""
-
-
-# ArmarX.PythonApplicationManager.PythonUnbuffered:  If true, PYTHONUNBUFFERED=1 is added to the environment variables.
-#  Attributes:
-#  - Default:            true
-#  - Case sensitivity:   yes
-#  - Required:           no
-#  - Possible values: {0, 1, false, no, true, yes}
-# ArmarX.PythonApplicationManager.PythonUnbuffered = true
-
-
-# ArmarX.PythonApplicationManager.RedirectToArmarXLog:  If true, all outputs from the subprocess are printed with ARMARX_LOG, otherwise with std::cout
-#  Attributes:
-#  - Default:            true
-#  - Case sensitivity:   yes
-#  - Required:           no
-#  - Possible values: {0, 1, false, no, true, yes}
-# ArmarX.PythonApplicationManager.RedirectToArmarXLog = true
-
-
-# ArmarX.PythonApplicationManager.RestartInCaseOfCrash:  Whether the application should be restarted in case it crashed.
-#  Attributes:
-#  - Default:            false
-#  - Case sensitivity:   yes
-#  - Required:           no
-#  - Possible values: {0, 1, false, no, true, yes}
-# ArmarX.PythonApplicationManager.RestartInCaseOfCrash = false
-
-
-# ArmarX.PythonApplicationManager.py.10_ArmarXPackageName:  Name of the ArmarX package.
-#  Attributes:
-#  - Case sensitivity:   yes
-#  - Required:           yes
-ArmarX.PythonApplicationManager.py.10_ArmarXPackageName = VisionX
-
-
-# ArmarX.PythonApplicationManager.py.11_ArmarXPythonPackagesDir:  Directory where python packages are located (relative to the root of the ArmarX package).
-#  Attributes:
-#  - Default:            python/
-#  - Case sensitivity:   yes
-#  - Required:           no
-# ArmarX.PythonApplicationManager.py.11_ArmarXPythonPackagesDir = python/
-
-
-# ArmarX.PythonApplicationManager.py.20_PythonPackageName:  Name of the Python package in the ArmarXPackage/python/ directory.
-#  Attributes:
-#  - Case sensitivity:   yes
-#  - Required:           yes
-ArmarX.PythonApplicationManager.py.20_PythonPackageName = armarx_face_recognition
-
-
-# ArmarX.PythonApplicationManager.py.21_PythonScriptPath:  Path to the python script (inside the python package).
-#  Attributes:
-#  - Case sensitivity:   yes
-#  - Required:           yes
-ArmarX.PythonApplicationManager.py.21_PythonScriptPath = app/memory_face_recognition.py
-
-
-# ArmarX.PythonApplicationManager.py.22_PythonScriptArgs:  Whitespace separated list of arguments.
-#  Attributes:
-#  - Default:            ""
-#  - Case sensitivity:   yes
-#  - Required:           no
-ArmarX.PythonApplicationManager.py.22_PythonScriptArgs = -i WebCamImageProvider --enable-result-image
-
-
-# ArmarX.PythonApplicationManager.py.23_PythonPathEntries:  Colon-separated list of paths to add to the PYTHONPATH.
-#  Attributes:
-#  - Default:            ""
-#  - Case sensitivity:   yes
-#  - Required:           no
-# ArmarX.PythonApplicationManager.py.23_PythonPathEntries = ""
-
-
-# ArmarX.PythonApplicationManager.py.24_PythonPoetry:  Use python poetry.
-#  Attributes:
-#  - Default:            false
-#  - Case sensitivity:   yes
-#  - Required:           no
-#  - Possible values: {0, 1, false, no, true, yes}
-# ArmarX.PythonApplicationManager.py.24_PythonPoetry = false
-
-
-# ArmarX.PythonApplicationManager.py.30_venv.Name:  Name of the virtual environment.
-#  Attributes:
-#  - Default:            venv
-#  - Case sensitivity:   yes
-#  - Required:           no
-ArmarX.PythonApplicationManager.py.30_venv.Name = .venv
-
-
-# ArmarX.PythonApplicationManager.py.31_venv.Type:  Type of the virtual environment.
-# 	- Auto       	Derive automatically.
-# 	- Dedicated	Search inside the python package root directory.
-# 	- Shared   	Search in the shared_envs directory.
-#  Attributes:
-#  - Default:            Auto
-#  - Case sensitivity:   yes
-#  - Required:           no
-#  - Possible values: {Auto, Dedicated, Shared}
-# ArmarX.PythonApplicationManager.py.31_venv.Type = Auto
-
-
-# ArmarX.PythonApplicationManager.py.40_WorkingDirectory:  If set, this path is used as working directory for the python script (overriding BinaryPathAsWorkingDirectory).
-# ${HOME} for env vars, $C{RobotAPI:BINARY_DIR} for CMakePackageFinder vars
-#  Attributes:
-#  - Default:            ""
-#  - Case sensitivity:   yes
-#  - Required:           no
-# ArmarX.PythonApplicationManager.py.40_WorkingDirectory = ""
-
-
-# ArmarX.RedirectStdout:  Redirect std::cout and std::cerr to ArmarXLog
-#  Attributes:
-#  - Default:            true
-#  - Case sensitivity:   yes
-#  - Required:           no
-#  - Possible values: {0, 1, false, no, true, yes}
-# ArmarX.RedirectStdout = true
-
-
-# ArmarX.RemoteHandlesDeletionTimeout:  The timeout (in ms) before a remote handle deletes the managed object after the use count reached 0. This time can be used by a client to increment the count again (may be required when transmitting remote handles)
-#  Attributes:
-#  - Default:            3000
-#  - Case sensitivity:   yes
-#  - Required:           no
-# ArmarX.RemoteHandlesDeletionTimeout = 3000
-
-
-# ArmarX.SecondsStartupDelay:  The startup will be delayed by this number of seconds (useful for debugging)
-#  Attributes:
-#  - Default:            0
-#  - Case sensitivity:   yes
-#  - Required:           no
-# ArmarX.SecondsStartupDelay = 0
-
-
-# ArmarX.StartDebuggerOnCrash:  If this application crashes (segmentation fault) qtcreator will attach to this process and start the debugger.
-#  Attributes:
-#  - Default:            false
-#  - Case sensitivity:   yes
-#  - Required:           no
-#  - Possible values: {0, 1, false, no, true, yes}
-# ArmarX.StartDebuggerOnCrash = false
-
-
-# ArmarX.ThreadPoolSize:  Size of the ArmarX ThreadPool that is always running.
-#  Attributes:
-#  - Default:            1
-#  - Case sensitivity:   yes
-#  - Required:           no
-# ArmarX.ThreadPoolSize = 1
-
-
-# ArmarX.TopicSuffix:  Suffix appended to all topic names for outgoing topics. This is mainly used to direct all topics to another name for TopicReplaying purposes.
-#  Attributes:
-#  - Default:            ""
-#  - Case sensitivity:   yes
-#  - Required:           no
-# ArmarX.TopicSuffix = ""
-
-
-# ArmarX.UseTimeServer:  Enable using a global Timeserver (e.g. from ArmarXSimulator)
-#  Attributes:
-#  - Default:            false
-#  - Case sensitivity:   yes
-#  - Required:           no
-#  - Possible values: {0, 1, false, no, true, yes}
-# ArmarX.UseTimeServer = false
-
-
-# ArmarX.Verbosity:  Global logging level for whole application
-#  Attributes:
-#  - Default:            Info
-#  - Case sensitivity:   yes
-#  - Required:           no
-#  - Possible values: {Debug, Error, Fatal, Important, Info, Undefined, Verbose, Warning}
-# ArmarX.Verbosity = Info
-
-
diff --git a/scenarios/MemoryFaceRecognition/config/global.cfg b/scenarios/MemoryFaceRecognition/config/global.cfg
deleted file mode 100644
index 1ccae0da37670539ab1e28159f864738dbd7848b..0000000000000000000000000000000000000000
--- a/scenarios/MemoryFaceRecognition/config/global.cfg
+++ /dev/null
@@ -1,4 +0,0 @@
-# ==================================================================
-# Global Config from Scenario MemoryFaceRecognition
-# ==================================================================
-