diff --git a/_modules/reclass.py b/_modules/reclass.py
index 227faf0..e53aecb 100644
--- a/_modules/reclass.py
+++ b/_modules/reclass.py
@@ -242,34 +242,47 @@
     return True
 
 
-def _guess_host_from_target(host, domain=None):
+def _get_grains(*args, **kwargs):
+    res = __salt__['saltutil.cmd'](tgt='*',
+                                   fun='grains.item',
+                                   arg=args,
+                                   **{'timeout': 10})
+    return res or {}
+
+
+def _guess_host_from_target(network_grains, host, domain=' '):
     '''
     Guess minion ID from given host and domain arguments. Host argument can contain
     hostname, FQDN, IPv4 or IPv6 addresses.
     '''
+    key = None
+    value = None
+
     if _is_valid_ipv4_address(host):
-        tgt = 'ipv4:%s' % host
+        key = 'ipv4'
+        value = host
     elif _is_valid_ipv6_address(host):
-        tgt = 'ipv6:%s' % host
+        key = 'ipv6'
+        value = host
     elif host.endswith(domain):
-        tgt = 'fqdn:%s' % host
+        key = 'fqdn'
+        value = host
     else:
-        tgt = 'fqdn:%s.%s' % (host, domain)
+        key = 'fqdn'
+        value = '%s.%s' % (host, domain)
 
-    res = __salt__['saltutil.cmd'](tgt=tgt,
-                                   expr_form='grain',
-                                   fun='grains.item',
-                                   arg=('id',))
-    if res.values():
-        ret = res.values()[0].get('ret', {}).get('id', '')
-    else:
-        ret = host
+    target = None
+    if network_grains and isinstance(network_grains, dict) and key and value:
+        for minion, grains in network_grains.items():
+            if grains.get('retcode', 1) == 0 and value in grains.get('ret', {}).get(key, ''):
+                target = minion
 
-    return ret
+    return target or host
 
 
 def _interpolate_graph_data(graph_data, **kwargs):
     new_nodes = []
+    network_grains = _get_grains('ipv4', 'ipv6', 'fqdn')
     for node in graph_data:
         if not node.get('relations', []):
             node['relations'] = []
@@ -277,7 +290,7 @@
             if not relation.get('status', None):
                 relation['status'] = 'unknown'
             if relation.get('host_from_target', None):
-                host = _guess_host_from_target(relation.pop('host_from_target'))
+                host = _guess_host_from_target(network_grains, relation.pop('host_from_target'))
                 relation['host'] = host
             if relation.get('host_external', None):
                 parsed_host_external = [urlparse(item).netloc
@@ -306,9 +319,7 @@
 
 
 def _grain_graph_data(*args, **kwargs):
-    ret = __salt__['saltutil.cmd'](tgt='*',
-                                   fun='grains.item',
-                                   arg=('salt:graph',))
+    ret = _get_grains('salt:graph')
     graph_data = []
     for minion_ret in ret.values():
         if minion_ret.get('retcode', 1) == 0:
@@ -346,7 +357,7 @@
 
     .. code-block:: bash
 
-        salt '*' reclass.graph_data
+        salt-call reclass.graph_data
     
     '''
     pillar_data = _pillar_graph_data().get('graph')
