diff --git a/ccnode/handlers.py b/ccnode/handlers.py
index dbac4caaa5acab2615a31032dd6e428a54af2a9e..5e613bb8e9953dc501735737794fbb4056227bb3 100644
--- a/ccnode/handlers.py
+++ b/ccnode/handlers.py
@@ -285,9 +285,9 @@ class NodeHandler(RpcHandler):
         '''
         '''
         result = {}
-        debug('get_tags: server requested tags=`%s` noresolve_tags=`%s`'
-                                                % (tags, noresolve_tags))
-        # build a single list of tags
+        info('get_tags: server requested tags=`%s` noresolve_tags=`%s`', tags,
+                                                                noresolve_tags)
+        # build a single dict of tags, boolean means "resolve"
         mytags = {}
         if tags:
             for t in tags:
@@ -382,32 +382,35 @@ class NodeHandler(RpcHandler):
         result.extend(self.VM_TAG_MAP.keys())
         # add globbing tags
         for pattern, handler in self.VM_TAG_GLOB.iteritems():
-            # helper is available on the current host
-            if handler[0](sub_obj):
-                debug('sub_tags: sub node implements `%s`' % pattern)
-                # get tags from helper
-                htags = handler[0](sub_obj, resolve=False)
-                debug('sub_tags: handler provides `%s`' % htags)
-                # append all tags
-                for t in htags.keys():
-                    result.append(t)
+            try:
+                # helper is available on the current host
+                if handler[0](sub_obj):
+                    debug('sub_tags: sub node implements `%s`' % pattern)
+                    # get tags from helper
+                    htags = handler[0](sub_obj, resolve=False)
+                    debug('sub_tags: handler provides `%s`' % htags)
+                    # append all tags
+                    for t in htags.keys():
+                        result.append(t)
+            except Exception as err:
+                warning('_sub_tag_list: `%s` -> `%s`', repr(err), err)
         return result
     
     @pure
     def sub_tags(self, sub_id, tags=None, noresolve_tags=None):
         '''
         '''
-        debug('sub_tags: server requested tags for `%s`' % sub_id)
+        info('sub_tags: server requested tags for `%s`', sub_id)
         if sub_id not in self._host_handle.vm_list():
-            debug('sub_tags: sub node `%s` is unknown !' % sub_id)
-            raise CCException('sub node `%s` is unknown' % sub_id)
+            warning('sub_tags: sub node `%s` is unknown !', sub_id)
+            raise HypervisorError('sub node `%s` is unknown' % sub_id)
         else:
             # open a wrapper to the VM
-            debug('sub_tags: fetching vm data for `%s`' % sub_id)
+            debug('sub_tags: fetching vm data for `%s`', sub_id)
             sub = self._host_handle.vm_get(sub_id)
         # build a single list of tags
-        debug('sub_tags: server requested tags `%s` + `%s`'
-                                                    % (tags, noresolve_tags))
+        info('sub_tags: server requested tags `%s` + `%s`', tags,
+                                                                noresolve_tags)
         available_tags = self._sub_tag_list(sub)
         mytags = {}
         # return all resolved tags case
@@ -430,7 +433,7 @@ class NodeHandler(RpcHandler):
                 mytags[t] = False
             for t in tags:
                 mytags[t] = True
-        debug('sub_tags: expanded list to `%s`' % mytags.keys())
+        debug('sub_tags: expanded list to `%s`', mytags.keys())
         # add mandatory tags if missing in the list, or set noresolve
         for t in self.VM_TAG_MANDATORY:
             if t not in mytags or not mytags[t]: