diff --git a/apps/tools/xaal/tools/dumper.py b/apps/tools/xaal/tools/dumper.py
index ee555320541d7c3c81889ed017b097c5adc758a8..d1b21038c2408aba6a6769d9138098ac7ecab0cf 100644
--- a/apps/tools/xaal/tools/dumper.py
+++ b/apps/tools/xaal/tools/dumper.py
@@ -18,7 +18,8 @@
 #
 
 
-from xaal.lib import Engine,helpers
+#from xaal.lib import Engine,helpers
+from xaal.aiolib import Engine,helpers
 
 helpers.setup_console_logger()
 helpers.set_console_title("xaal-dumper")
@@ -29,7 +30,7 @@ def display(msg):
 def main():
     try:
         eng = Engine()
-        eng.add_rx_handler(display)
+        eng.subscribe(display)
         eng.run()
     except KeyboardInterrupt:
         print("Bye Bye")
diff --git a/apps/tools/xaal/tools/info.py b/apps/tools/xaal/tools/info.py
index 6f5509e3abb3ddce40d4dab0f277a15bbeb13fa3..1225b5aa1c45ee45b3c7908b3ed5e90ea9ba9f6d 100644
--- a/apps/tools/xaal/tools/info.py
+++ b/apps/tools/xaal/tools/info.py
@@ -39,7 +39,7 @@ class InfoDumper:
         dev.vendor_id = "IHSEV"
         dev.product_id = "xAAL InfoDumper"
         self.eng.add_device(dev)
-        self.eng.add_rx_handler(self.parse_answer)
+        self.eng.subscribe(self.parse_answer)
         print(f"xAAL Info dumper [{addr}]")
         self.dev = dev
 
diff --git a/apps/tools/xaal/tools/isalive.py b/apps/tools/xaal/tools/isalive.py
index 5c6a69630014d7a2910f4409bdeac9ef7b6a0481..6a7080abfc100e74b16e1a7074b4be61c891cc65 100644
--- a/apps/tools/xaal/tools/isalive.py
+++ b/apps/tools/xaal/tools/isalive.py
@@ -33,7 +33,7 @@ class Scanner:
         # new fake device
         self.dev = Device("cli.experimental",tools.get_random_uuid())
         self.eng.add_device(self.dev)
-        self.eng.add_rx_handler(self.parse_answer)
+        self.eng.subscribe(self.parse_answer)
 
     def query(self,dev_type):
         if not tools.is_valid_dev_type(dev_type):
@@ -54,7 +54,7 @@ class Scanner:
         t0 = time.time()
         while 1:
             self.eng.loop()
-            if time.time() > (t0 + 1):
+            if time.time() > (t0 + 2):
                 break
 
     def parse_answer(self,msg):
diff --git a/apps/tools/xaal/tools/log.py b/apps/tools/xaal/tools/log.py
index 9e75f0bb3139495b7b872f49d9aaacc09187b997..face687c852386dc588423edf41e6b34bfb86809 100644
--- a/apps/tools/xaal/tools/log.py
+++ b/apps/tools/xaal/tools/log.py
@@ -15,7 +15,7 @@ def print_evt(msg):
 def main():
     try:
         eng = Engine()
-        eng.add_rx_handler(print_evt)
+        eng.subscribe(print_evt)
         eng.run()
     except KeyboardInterrupt:
         print("ByeBye..")
diff --git a/apps/tools/xaal/tools/tail.py b/apps/tools/xaal/tools/tail.py
index 0c091d87d33e6c11da2d975fee95655bf2c6f75c..b7f0725c8be38927df266704adef482087d3a727 100644
--- a/apps/tools/xaal/tools/tail.py
+++ b/apps/tools/xaal/tools/tail.py
@@ -80,7 +80,7 @@ def main():
         level = int(sys.argv[1])
 
         eng = Engine()
-        eng.add_rx_handler(display)
+        eng.subscribe(display)
 
         eng.start()
         term('@@')
diff --git a/apps/tools/xaal/tools/uuidgen.py b/apps/tools/xaal/tools/uuidgen.py
index cd80bd41e57f80efd6c792758d240b357d7d14e6..94c70e381e99d935b4997dbf3f5d905331de5cf3 100644
--- a/apps/tools/xaal/tools/uuidgen.py
+++ b/apps/tools/xaal/tools/uuidgen.py
@@ -1,4 +1,4 @@
-from xaal.lib import tools,config
+from xaal.lib import tools
 import sys
 
 
diff --git a/libs/lib/xaal/lib/core.py b/libs/lib/xaal/lib/core.py
index e756d3aa38fbc46159689a3ce2eb70c91f654750..c9a92eac67a31076ebdef89c1a077fa814f41775 100644
--- a/libs/lib/xaal/lib/core.py
+++ b/libs/lib/xaal/lib/core.py
@@ -28,16 +28,21 @@ from . import config
 import time
 import inspect
 import collections
+from enum import Enum
 
 import logging
 logger = logging.getLogger(__name__)
 
+class EngineState(Enum):
+    start = 0
+    run  = 1
+    halt   = 2
+
 class Engine(object):
 
     def __init__(self,address=config.address,port=config.port,hops=config.hops,key=config.key):
         self.devices = []                        # list of devices / use (un)register_devices()
-        self.started = False                     # engine started or not
-        self.running = False                     # engine is running or not
+        self.state = EngineState.halt
         self.timers = []                         # functions to call periodic
         self.__last_timer = 0                    # last timer check
         self.subscribers =[self.handle_request]  # message receive workflow
@@ -319,21 +324,21 @@ class Engine(object):
 
     def start(self):
         """Start the core engine: send queue alive msg"""
-        if self.started:
+        if self.state in [EngineState.start,EngineState.run]:
             return
         self.network.connect()
         for dev in self.devices:
             self.send_alive(dev)
             dev.update_alive()
-        self.started = True
+        self.state = EngineState.start
 
     def stop(self):
-        self.running = False
+        self.state = EngineState.halt
 
     def run(self):
         self.start()
-        self.running = True
-        while self.running:
+        self.state = EngineState.run
+        while self.state == EngineState.run:
             self.loop()
 
 
@@ -341,7 +346,7 @@ def filter_msg_for_devices(msg, devices):
     """loop throught the devices, to find which are
     expected w/ the msg
 
-    - Filter on devTypes for isAlive request.
+    - Filter on dev_types for is_alive request.
     - Filter on device address
     """
     results = []
diff --git a/libs/monitor/xaal/monitor/monitor.py b/libs/monitor/xaal/monitor/monitor.py
index e399166d88e5096487867d8fddd8eb55713a14c5..b106c09d9946f4228e1d90eea4cfc29bd7f313e9 100644
--- a/libs/monitor/xaal/monitor/monitor.py
+++ b/libs/monitor/xaal/monitor/monitor.py
@@ -212,7 +212,7 @@ class Monitor:
         self.devices = Devices()
         self.filter = filter_func
         self.subscribers = []
-        self.engine.add_rx_handler(self.on_receive_msg)
+        self.engine.subscribe(self.on_receive_msg)
         # only send isAlive message every 2 expirations
         self.send_isalive()
         self.engine.add_timer(self.refresh_alives,REFRESH_TIMER)
diff --git a/scripts/alarm.py b/scripts/alarm.py
index c778097ac05b02d018a3ee7d5a6e17f9504744c7..2705800bbf35af116fcc613e11021e7f5ae35c6f 100644
--- a/scripts/alarm.py
+++ b/scripts/alarm.py
@@ -111,7 +111,7 @@ def main():
     dev.new_attribute('state')
     engine = Engine()
     engine.add_device(dev)
-    engine.add_rx_handler(handle_msg)
+    engine.subscribe(handle_msg)
     engine.add_timer(update,1)
     engine.run()
 
diff --git a/scripts/btn_relay.py b/scripts/btn_relay.py
index 488b4d7f85bafe8587a2f12ececaf75689f0e89d..b91c36bc1bcfa4e881d215d335dd00160f134866 100644
--- a/scripts/btn_relay.py
+++ b/scripts/btn_relay.py
@@ -68,7 +68,7 @@ def main():
     dev.info = '%s@%s' % (PKG_NAME,platform.node())
     engine = Engine()
     engine.add_device(dev)
-    engine.add_rx_handler(handle_msg)
+    engine.subscribe(handle_msg)
     engine.run()
 
 if __name__ == '__main__':
diff --git a/scripts/btn_relay_labo.py b/scripts/btn_relay_labo.py
index 9d9abbe3f2674ab917824694cb291d1878a6e0bc..b526e6542b38bf42f0affc370e5ccc815cc15fe8 100644
--- a/scripts/btn_relay_labo.py
+++ b/scripts/btn_relay_labo.py
@@ -146,7 +146,7 @@ def main():
     dev.info = '%s@%s' % (PKG_NAME,platform.node())
     engine = Engine()
     engine.add_device(dev)
-    engine.add_rx_handler(handle_msg)
+    engine.subscribe(handle_msg)
     mon = Monitor(dev)
     engine.run()
 
diff --git a/scripts/ensibs_btn.py b/scripts/ensibs_btn.py
index aa5b53deed4de098ee11965741295e8645a75769..cc39b6fb0cac13fdf4f606a26f8d96c8331a8201 100644
--- a/scripts/ensibs_btn.py
+++ b/scripts/ensibs_btn.py
@@ -160,7 +160,7 @@ def main():
     dev.info = '%s@%s' % (PKG_NAME,platform.node())
     engine = Engine()
     engine.add_device(dev)
-    engine.add_rx_handler(handle_msg)
+    engine.subscribe(handle_msg)
     mon = Monitor(dev)
     engine.run()