diff --git a/src/lhw_intelligence/lhw_intelligence/extra_behaviours.py b/src/lhw_intelligence/lhw_intelligence/extra_behaviours.py
index 7010d9b5e547704db6b8e0ebc1483730c993bf0a..6f94af11b41844bf084d8ba784a95dfaf7d82078 100644
--- a/src/lhw_intelligence/lhw_intelligence/extra_behaviours.py
+++ b/src/lhw_intelligence/lhw_intelligence/extra_behaviours.py
@@ -178,41 +178,50 @@ class Say(py_trees.behaviour.Behaviour):
         pass
 
 
-class AnalyseFace(py_trees.behaviour.Behaviour):
-    def __init__(self, name, node: str) -> None:
-        super(AnalyseFace, self).__init__(name)
+class DetectFaces(py_trees.behaviour.Behaviour):
+    def __init__(self, name, node) -> None:
+        super(DetectFaces, self).__init__(name)
         self.node = node
-        self.analyse_faces_publisher = self.node.analyse_faces_publisher
-    
+        self.detect_faces_client = self.node.detect_faces_client
+        
     def setup(self, **kwargs):
-        self.face_detect_service = FaceDetectServiced()
-        self.face_detect_client = FaceDetectClient()
+        pass
 
     def initialise(self):
-        self.face_detect_client.send_request()
+        self.request = DetectFaces.Request()
+        self.request.run = True
 
     def update(self):
-        rclpy.spin(face_detect_service)
-        
-        while rclpy.ok():
-            rclpy.spin_once(face_detect_client)
-            if face_detect_client.future.done():
-                try:
-                    response = face_detect_client.future.result()
-                except Exception as e:
-                    face_detect_client.get_logger().info('Service call failed %r' % (e,))
-                    return py_trees.common.Status.FAILURE
-                else:
-                    face_detect_client.get_logger().info('At least one person is detected')
-                    # add response to blackboard
-                    return py_trees.common.Status.SUCCESS
-
-        return py_trees.common.Status.RUNNING
+        self.result = self.detect_faces_client.call(self.request)
+        if (self.result.status == 1):
+            if not self.result.faces_detected:
+                return py_trees.common.Status.SUCCESS
+            print(self.result.faces_detected)
+            # Add the person and initialize different items if not recognized since earlier
+            if faces_detected.id not in self.blackboard.recognized_people:
+                self.blackboard.found_new_person = True
+                self.blackboard.recognized_people[faces_detected.id] = {
+                    "z_index" : faces_detected.z_index, 
+                    "name" : None, 
+                    "drinks" : None, 
+                    "age" : faces_detected.age, 
+                    "face_center" : [faces_detected.face_center_xy[0], faces_detected.face_center_xy[1]]
+                }
+            # Update the z_index of the detected person
+            else:
+                self.blackboard.recognized_people[faces_detected.id]["z_index"] = faces_detected.z_index
+                # Only change age if it is lower than previous, prevents age bouncing around
+                if faces_detected.age < self.blackboard.recognized_people[faces_detected.id]["age"]:
+                    self.blackboard.recognized_people[faces_detected.id]["age"] = faces_detected.age
+            print(self.blackboard.recognized_people)
+            return py_trees.common.Status.SUCCESS
+        elif (self.result.status == -1):
+            return py_trees.common.Status.FAILURE
+        else:
+            return py_trees.common.Status.RUNNING
 
     def terminate(self, new_status):
-        self.face_detect_service.destroy_node()
-        self.face_detect_client.destroy_node()
-        rclpy.shutdown()
+        pass
 
 
 class RobotPoint(py_trees.behaviour.Behaviour):
diff --git a/src/lhw_intelligence/lhw_intelligence/py_tree.py b/src/lhw_intelligence/lhw_intelligence/py_tree.py
index 4e2d7fcb9a7a74c88610ba3de3ce320d788ef2d5..4b4847b69c67a93be447aed939b9cf217d310732 100644
--- a/src/lhw_intelligence/lhw_intelligence/py_tree.py
+++ b/src/lhw_intelligence/lhw_intelligence/py_tree.py
@@ -15,6 +15,7 @@ from rclpy.action import ActionClient
 from lhw_interfaces.msg._goal import Goal
 from lhw_interfaces.msg._feedback import Feedback
 from lhw_interfaces.msg._result import Result
+from lhw_interfaces.srv import DetectFaces
 from diagnostic_msgs.msg._diagnostic_array import DiagnosticArray
 from diagnostic_msgs.msg._diagnostic_status import DiagnosticStatus
 
@@ -62,7 +63,7 @@ class Py_Tree(Node):
         self.move_to_publisher = self.create_publisher(Twist, "move_to", 10)
         self.say_publisher = self.create_publisher(String, 'say', 100)
         self.robot_action_pub = self.create_publisher(RobotAction, 'robot_action', 1)
-        self.face_detected_pub = self.create_publisher(Bool, 'face_detected', 1)
+        self.detected_faces_pub = self.create_publisher(Bool, 'face_detected', 1)
         
         # ------- Subscribers ---------
         self.dialogflow_sub = self.create_subscription(Response, 'dialogflow_response', self.dialogflow_response_callback, 1)
@@ -76,9 +77,13 @@ class Py_Tree(Node):
         #client server (/navigate_to_pose)
         self._action_client = ActionClient(self, NavigateToPose, 'navigate_to_pose')
         
+
+        # ------- Services ---------
+        self.detect_faces_client = self.create_client(DetectFaces, "detect_faces")
         self.pixel_to_xyz_serv = self.create_client(PixelToXYZ, "pixel_to_xyz")
 
 
+
         # Yolo subscriber
         #self.entities_sub = self.create_subscription(Entities, 'entities', self.entities_callback, 1)
         
diff --git a/src/lhw_intelligence/lhw_intelligence/services.py b/src/lhw_intelligence/lhw_intelligence/services.py
deleted file mode 100644
index 524f2a5772236090aa81064926a7f5ad4a880869..0000000000000000000000000000000000000000
--- a/src/lhw_intelligence/lhw_intelligence/services.py
+++ /dev/null
@@ -1,23 +0,0 @@
-from lhw_interfaces.srv import FacesDetected
-
-import rclpy
-from rclpy.node import Node
-
-class FaceDetectService(Node):
-
-    def __init__(self):
-        super().__init__('face_detect_service')
-        self.srv = self.create_service(FacesDetected, 'faces_detected', self.faces_detected_callback)
-
-    def faces_detected_callback(self, request, response):
-        if not request:
-            return
-        self.get_logger().info('Incoming request\nrun, %b' % (request.run))
-
-        
-
-        return response
-
-class FaceDetectClient(Node):
-    
-    
\ No newline at end of file
diff --git a/src/lhw_interfaces/CMakeLists.txt b/src/lhw_interfaces/CMakeLists.txt
index 9213b0cf78ddd1dd0f0cb23c6b148a7604ac5e58..685cf8095b5050f8e897deba843f04b708f8e16f 100644
--- a/src/lhw_interfaces/CMakeLists.txt
+++ b/src/lhw_interfaces/CMakeLists.txt
@@ -39,7 +39,6 @@ rosidl_generate_interfaces(${PROJECT_NAME}
   "msg_intelligence/Goal.msg"
   "msg_intelligence/Feedback.msg"
   "msg_intelligence/Result.msg"
-  "msg_intelligence/FacesDetected.srv"
   "msg_nlp/Parameter.msg"
   "msg_nlp/Response.msg"
   "msg_nlp/Event.msg"
@@ -58,6 +57,7 @@ rosidl_generate_interfaces(${PROJECT_NAME}
   "msg_vision/FacesDetected.msg"
   "msg_vision/PixelToXYZ.srv"
   "msg_vision/TransformXYZ.srv"
+  "msg_vision/DetectFaces.srv"
   DEPENDENCIES builtin_interfaces geometry_msgs sensor_msgs std_msgs
 )
 
diff --git a/src/lhw_interfaces/msg_intelligence/FacesDectected.srv b/src/lhw_interfaces/msg_intelligence/FacesDectected.srv
deleted file mode 100644
index 9fd49e9968c5fbda9ca44c282c21903d123b8d6a..0000000000000000000000000000000000000000
--- a/src/lhw_interfaces/msg_intelligence/FacesDectected.srv
+++ /dev/null
@@ -1,3 +0,0 @@
-Bool    run
----
-FacesDectected
\ No newline at end of file
diff --git a/src/lhw_interfaces/msg_vision/DetectFaces.srv b/src/lhw_interfaces/msg_vision/DetectFaces.srv
new file mode 100644
index 0000000000000000000000000000000000000000..ef67af7966b7b98cc38cafe2f09265fc88fb7149
--- /dev/null
+++ b/src/lhw_interfaces/msg_vision/DetectFaces.srv
@@ -0,0 +1,4 @@
+bool run
+---
+int64 status
+FacesDetected faces_detected
\ No newline at end of file
diff --git a/src/lhw_vision/lhw_vision/detect_faces_service.py b/src/lhw_vision/lhw_vision/detect_faces_service.py
new file mode 100644
index 0000000000000000000000000000000000000000..690333cef269fa165e51ff396998a9e4774bc354
--- /dev/null
+++ b/src/lhw_vision/lhw_vision/detect_faces_service.py
@@ -0,0 +1,32 @@
+from lhw_interfaces.srv import DetectFaces
+
+import rclpy
+from rclpy.node import Node
+
+class DetectFacesService(Node):
+
+    def __init__(self):
+        super().__init__('detect_faces_service')
+        self.srv = self.create_service(DetectFaces, 'detect_faces', self.detect_faces_callback)
+
+    def detect_faces_callback(self, request, response):
+        self.get_logger().info('Incoming request\nrun, %b' % (request.run))
+
+        if (request.run == True):
+            # enable face detection
+            pass
+        else:
+            # disable face detection
+            pass
+        
+        return response
+
+def main(args=None):
+    rclpy.init(args=args)
+    detect_faces_service = DetectFacesService()
+    rclpy.spin(detect_faces_service)
+    rclpy.shutdown()
+
+
+if __name__ == '__main__':
+    main()
\ No newline at end of file
diff --git a/src/lhw_vision/setup.py b/src/lhw_vision/setup.py
index ab82c1e51dfe1a36b7016e844cc7b912ad34e260..916a2be263a1ec2c8d7b8c6aa569f13b8e45bf39 100644
--- a/src/lhw_vision/setup.py
+++ b/src/lhw_vision/setup.py
@@ -38,6 +38,7 @@ setup(
             'debug_image_node = lhw_vision.debug_image_node:main',
             'debug_tracker_node = lhw_vision.debug_tracker_node:main',
             'depth_node = lhw_vision.depth_node:main',
+            'detect_faces_service = lhw_vision.detect_faces_service:main'
         ],
     },
 )