diff --git a/bootstrap.js b/bootstrap.js
index 9306abe66304e6c2873b0162e5e4104ea35633aa..d6e8dcd5217f14e028b24ef15adb578689e75120 100644
--- a/bootstrap.js
+++ b/bootstrap.js
@@ -77,7 +77,6 @@ window.onload = () => {
           let nview = view.defs.find((cnd) =>{
             return (cnd.type === 'view' && cnd.name !== 'tlview')
           })
-          view.globalOrganize()
           view.zoomExtents()
           nview.hunk.refresh()
         })
diff --git a/hunks/view.js b/hunks/view.js
index cc036c5340d798242460d2c55e934e651a8ae266..ad86527dc497f449a8a6755271a6bd6aa7895a26 100644
--- a/hunks/view.js
+++ b/hunks/view.js
@@ -375,7 +375,7 @@ function View() {
     // trace should return, for an output, the next input.
     // if the input is a link, it should try to traverse
     let trace = (output) => {
-      console.log(`tracing from ${output.name} in ${output.parent.name}`)
+      console.log(`tracing from ${output.name} in hunk ${output.parent.name} in view ${this.name}`)
       // ok, traces through links / heirarchy, returning final destination
       // of *connected* links
       if (output.connections.length !== 1) {
@@ -383,14 +383,17 @@ function View() {
         return false
       }
       let next = output.connections[0]
+      console.log(`TRACE: NEXT:`, next)
       if (next.parent.type === 'link') {
         // this is the heirarchy dive
         let thru = next.parent.reciprocalLink
+        console.log(`TRACE: NEXT: LINK`, thru)
         if (thru) {
           // a mirror,
           let otp = thru.outputs[next.ind]
           if (otp) {
-            trace(otp)
+            // return / recurse 
+            return trace(otp)
           } else {
             console.log('found link, but no output on the other side')
             return false
@@ -438,14 +441,14 @@ function View() {
           // well, ya didn't know it, but you're here to write a graph traversal scheme
           // one must start somewhere,
           // let's find the links of the output's parent
-          for(let df of opv.defs){
-            if(df.type === 'link'){
+          for (let df of opv.defs) {
+            if (df.type === 'link') {
               console.log(`BUILD: find link ${df.name}`)
               let dfr = df.reciprocalLink
-              if(dfr){
+              if (dfr) {
                 console.log(`BUILD: find reciprocal link ${dfr.name} for ${df.name}`)
                 // that's one traverse, let's check
-                if(dfr.parentView === ipv){
+                if (dfr.parentView === ipv) {
                   // this is the 'other side'
                   // let's add that side first ... bottom - up
                   let opList = dfr.states[3].value
@@ -490,64 +493,74 @@ function View() {
 
 
     this.globalOrganize = () => {
-      console.log("GO KICKOFF ORGANIZING PARTY")
+      console.log("GO: KICKOFF ORGANIZING PARTY")
       // this is a request made:
       /*
       (1) when any view refreshes,
       (2) when we load a new patch
       (3) when we load a new system
-      - this doesn't change topology
-      - this just sets up links' visual relationships, ok ok ?
+      (4) when we build a route with .buildRoute(output, input)
+      - this doesn't change topologies, or make any requests to managers,
+      - it just organizes visually
       */
-      // the code for a lower-level view,
-      let links = []
-      for (let df of defs) {
-        // but links are the way home, so
-        if (df.type === 'link') {
-          links.push(df)
-        }
-      }
-      // and
-      if (links.length > 0) {
-        console.log(`GO finds ${links.length} links`)
-        for (let lk of links) {
-          console.log('GO tracing')
-          // 1th output of a link is mgrmsgs to its manager
-          let viewDef = trace(lk.outputs[1]).parent
-          // if we found a view at the end of the trace,
-          if (viewDef && !lk.reciprocalView && !lk.isWrappedOn) {
-            lk.wrapon(viewDef)
-            viewDef.unwrap()
-          } else {
-            // no op
-          } // and if the view is refreshed ...
-          if (viewDef.hunk.hasRefreshed) {
-            // find the interior link (by search for ol state)
-            let oind = lk.states.find((cnd) => {
-              return cnd.name === 'otherLink'
-            }).value
-            if (!oind) throw new Error('cannot find link oind state for hookup')
-            // doth it ?
-            let internalLink = viewDef.hunk.defs[oind]
-            if (internalLink) {
-              if (internalLink.type !== 'link') throw new Error('link mixup alert')
-              // hook em up
-              lk.reciprocalLink = internalLink
-              internalLink.reciprocalLink = lk
-              // and do,
-              internalLink.edgecase()
-              // still logging these, bc it's nice 2 kno
-              console.log(`GO cn link ${lk.name} to ${internalLink.name}`)
-            } else {
-              console.error("organizing ... cannot find a reciprocal link")
+      // we need to recurse here,
+      let recursor = (scope, order) => {
+        console.log(`GO: recurses ${scope.name} at ${order}`)
+        // scope is a view (hunk)
+        // order is nth- level down tree, with us (toplevel) at root 0
+        console.log(`GO: scope defs, tl defs`)
+        for(let df of scope.defs){
+          console.log(`GO: df over ${df.name} in ${scope.name}`)
+          // edgecased is a block to not walk back-up heirarchy,
+          if(df.type === 'link' && df.grouptype !== 'edgecased'){
+            // find recirprocal view relationship via trace, which returns an input, thru links,
+            // given some output
+            console.log(`GO: TRACELOG FROM ${df.name}`)
+            let rvi = trace(df.outputs[1])
+            console.log(`GO: TRACELOG RETURNS`, rvi)
+            if(rvi){
+              // we have ah link definition, and ah view definition, connected by routing,
+              // so we are safe to do
+              let rvd = rvi.parent
+              // if the rvd is a manager, this is the bottom level -> a link thru to a manager,
+              if(rvd.type === 'manager') continue
+              // mark,
+              if (order % 2) $(rvd.hunk.dom).css('background-color', '#d6d6d6')
+              // and,
+              console.log(`GO: wrap ${df.name} around ${rvd.name}`)
+              df.wrapon(rvd)
+              rvd.unwrap()
+              // now, if we have ll data,
+              if(rvd.hunk.hasRefreshed){
+                // find the interior link (by search for ol state)
+                let oind = df.states.find((cnd) => {
+                  return cnd.name === 'otherLink'
+                }).value
+                if (!oind) throw new Error('cannot find link oind state for hookup')
+                // doth it ?
+                let internalLink = rvd.hunk.defs[oind]
+                if (internalLink) {
+                  if (internalLink.type !== 'link') throw new Error('link mixup alert')
+                  // hook em up
+                  df.reciprocalLink = internalLink
+                  internalLink.reciprocalLink = df
+                  // and do,
+                  internalLink.edgecase()
+                  // still logging these, bc it's nice 2 kno
+                  console.log(`GO cn link ${df.name} to ${internalLink.name}`)
+                  // done w/ internal, now we can
+                  recursor(rvd.hunk, order ++)
+                } else {
+                  console.error("organizing ... cannot find a reciprocal link")
+                }
+              }
             }
           }
         }
+        // and roll zerbraHeirarchy in here also, using order ...
       }
-
-      if (this.isTopLevel) {
-        this.zebraHeirarchy()
-      }
+      // kickoff w/
+      recursor(this, 1)
     }
 
     this.zebraHeirarchy = () => {
diff --git a/view/vptch.js b/view/vptch.js
index c12eca69bfff8c2536a4ad500a297c9e5024c3de..0bfccad4bf23b0c191c912576cf20bb683d3f431 100644
--- a/view/vptch.js
+++ b/view/vptch.js
@@ -213,6 +213,7 @@ function PatchSet(View, MsgBox) {
         mergeHunkList(patch).then((defs) => {
           // (4) then we can follow on adding links,
           mergeLinkList(patch).then(() => {
+            view.tlv.globalOrganize()
             resolve(defs)
           }).catch((errmsg) => {
             // link catch