           return childScopes.join('::')
     # Search in use
     result = null
-    if 'use' of @projectObjList[scope]
-      for use_mod in @projectObjList[scope]['use']
-        if use_mod[0] of @projectObjList
-          if use_mod[1].length > 0
-            if use_mod[1].indexOf(name) == -1
-              continue
-          result = @findInScope(use_mod[0], name)
-          if result?
-            return result
+    usedMod = @getUseSearches(scope, { }, [])
+    for useMod of usedMod
+      if usedMod[useMod].length > 0
+        if usedMod[useMod].indexOf(name) == -1
+          continue
+      result = @findInScope(useMod, name)
+      if result?
+        return result
     # Search parent
     if not result?
       endOfScope = scope.lastIndexOf('::')

      if containingScope?
        FQN = containingScope+"::"+wordLower
        return @getDefLoc(@projectObjList[FQN])
    #
    lineContext = @getLineContext(editor, bufferPosition)
    for lineScope in lineScopes
      containingScope = @findInScope(lineScope, wordLower)

    if 'in_children' of @projectObjList[scope]
      for childKey in @projectObjList[scope]['in_children']
        completions.push(@buildCompletion(@projectObjList[childKey]))
    return completions

  getUseSearches: (scope, modDict, onlyList) ->
    # Process USE STMT (only if no onlyList)
    if 'use' of @projectObjList[scope]
      for useMod in @projectObjList[scope]['use']
        if useMod[0] of @projectObjList
          mergedOnly = @getOnlyOverlap(onlyList, useMod[1])
          unless mergedOnly?
            continue
          if useMod[0] of modDict
            if modDict[useMod[0]].length > 0
              if mergedOnly.length == 0
                modDict[useMod[0]] = []
              else
                for only in mergedOnly
                  if modDict[useMod[0]].indexOf(only) == -1
                    modDict[useMod[0]].push(only)
          else
            modDict[useMod[0]] = mergedOnly
          modDict = @getUseSearches(useMod[0], modDict, mergedOnly)
    return modDict

  getOnlyOverlap: (currList, newList) ->
    if currList.length == 0
      return newList
    if newList.length == 0
      return currList
    mergeList = []
    hasOverlap = false
    for elem in newList
      unless currList.indexOf(elem) == -1
        mergeList.push(elem)
        hasOverlap = true
    if hasOverlap
      return mergeList
    else
      return null

  addPublicChildren: (scope, completions, prefix, onlyList) ->
    unless scope of @projectObjList
      return completions
    unless 'children' of @projectObjList[scope]
      return
    children = @projectObjList[scope]['children']
    currVis = 1
    if 'vis' of @projectObjList[scope]
      currVis = parseInt(@projectObjList[scope]['vis'])
    for child in children
      if prefix?
        unless child.startsWith(prefix)
          continue
      if onlyList.length > 0
        if onlyList.indexOf(child) == -1
          continue
      childKey = scope+'::'+child
      if childKey of @projectObjList
        if 'vis' of @projectObjList[childKey]
          if parseInt(@projectObjList[childKey]['vis']) + currVis < 0
            continue
        else
          if currVis < 0
            continue
        if @projectObjList[childKey]['type'] == 'copy'
          @resolveInterface(childKey, scope)
