     else
       [])
 
+addSiblingDefines = (ctx, nameSet) ->
+  auxiliaries = ctx.auxiliaries()
+  arrayToSet concat (for name of values auxiliaries
+    (lookupInMap auxiliaries, name)?.defines)
+
 findDeps = (ctx) -> (names) ->
   auxiliaries = ctx.auxiliaries()
   depSet = newSet()
-  auxiliaryDependencies auxiliaries, names, depSet
-  arrayToSet reverse setToArray depSet
-
-auxiliaryDependencies = (graph, names, allSet) ->
+  depList = []
+  auxiliaryDependencies auxiliaries, names, depSet, depList
+  arrayToSet reverse depList
+
+auxiliaryDependencies = (graph, names, allSet, allList) ->
   for name in names
+    allList.push name
     if not inSet allSet, name
       addToSet allSet, name
-      auxiliaryDependencies graph, ((lookupInMap graph, name)?.deps or []), allSet
+      auxiliaryDependencies graph, ((lookupInMap graph, name)?.deps or []), allSet, allList
   return
   # concat (for name in names
   #   join (deps = ((lookupInMap graph, name)?.deps or [])),

      ctx.leaveDefinition()
      ctx.closeScope()
      branchUsedNames = ctx.usedNames()

      if ctx.shouldDefer()
        continue


      [branchUsedNames, precs, assigns, compiledResult])

    [usedNameLists] = unzip compiledResults
    lifting = map (findDeps ctx), usedNameLists
    jointlyUsed = addSiblingDefines ctx, intersectSets lifting

    compiledCases = conditional (for [used, precs, assigns, compiledResult], i in compiledResults
      lifted = lifting[i]
