diff --git a/_engines/architect.py b/_engines/architect.py
index 4096a73..a6d6bed 100644
--- a/_engines/architect.py
+++ b/_engines/architect.py
@@ -1,19 +1,17 @@
 # -*- coding: utf-8 -*-
 """
-Salt engine for intercepting state jobs and forwarding to the Architect
-service.
+Salt engine for intercepting state jobs and forwarding to the Architect.
 """
 
 # Import python libs
 from __future__ import absolute_import
-import json
 import logging
+from architect_client.libarchitect import ArchitectClient
 
 # Import salt libs
 import salt.utils.event
-import salt.utils.http
 
-log = logging.getLogger(__name__)
+logger = logging.getLogger(__name__)
 
 
 def start(project='default',
@@ -22,14 +20,11 @@
           username=None,
           password=None):
     '''
-    Listen to state jobs events and forward Salt states
+    Listen to state jobs events and forward state functions and node info
     '''
-    url = "{}://{}:{}/salt/{}/event/{}".format('http',
-                                               host,
-                                               port,
-                                               'v1',
-                                               project)
-    target_functions = ['state.sls', 'state.apply', 'state.highstate']
+    state_functions = ['state.sls', 'state.apply', 'state.highstate']
+    model_functions = ['architect.node_info']
+    class_tag = 'architect/minion/classify'
 
     if __opts__['__role'] == 'master':
         event_bus = salt.utils.event.get_master_event(__opts__,
@@ -43,20 +38,21 @@
             sock_dir=__opts__['sock_dir'],
             listen=True)
 
-    log.info('Salt Architect engine initialised')
+    logger.info('Architect Engine initialised')
 
     while True:
         event = event_bus.get_event()
-        if event and event.get('fun', None) in target_functions:
+        if event and event.get('fun', None) in state_functions:
             is_test_run = 'test=true' in [arg.lower() for arg in event.get('fun_args', [])]
             if not is_test_run:
-                data = salt.utils.http.query(url=url,
-                                             method='POST',
-                                             decode=False,
-                                             data=json.dumps(event))
-                if 'OK' in data.get('body', ''):
-                    log.info("Architect Engine request to '{}'"
-                             " was successful".format(url))
-                else:
-                    log.warning("Problem with Architect Engine"
-                                " request to '{}' ({})".format(url, data))
+                output = ArchitectClient().push_event(event)
+                logger.info("Sent Architect state function {}".format(output))
+        if event and event.get('fun', None) in model_functions:
+            output = ArchitectClient().push_node_info({event['id']: event['return']})
+            logger.info("Sent Architect node info function {}".format(output))
+        if event and event.get('tag', None) == class_tag:
+            output = ArchitectClient().classify_node({
+                'name': event['id'],
+                'data': event['data']
+            })
+            logger.info("Sent Architect node classification {}".format(output))
