diff --git a/cmd/path-traversal/path_traversal.go b/cmd/path-traversal/path_traversal.go
index 5275f794b6ae4711c91fe94e8db55d79f751cb19..353c2b8e1c9fcb2538818651e40e6759af2e22a3 100644
--- a/cmd/path-traversal/path_traversal.go
+++ b/cmd/path-traversal/path_traversal.go
@@ -3,16 +3,19 @@ package main
 import (
 	"code.fbi.h-da.de/cocsn/gosdn/nucleus/util"
 	"code.fbi.h-da.de/cocsn/yang-models/generated/arista"
+	log "github.com/sirupsen/logrus"
 )
 
 func main() {
-	schema,_ := arista.Schema()
+	log.SetLevel(log.DebugLevel)
+	schema, _ := arista.Schema()
 	paths := util.NewPaths()
-
 	paths.ParseSchema(schema, "device")
 
-	for _,v := range paths {
+	for _, v := range paths {
 		v.Print()
 	}
-}
 
+	p := paths.StringBuilder()
+	log.Debug(p)
+}
diff --git a/nucleus/util/path_traversal.go b/nucleus/util/path_traversal.go
index 713f05f7cf038aa21800b72d905a51ea8739d13b..9811d6341523fe7906da6897a354cfece404e512 100644
--- a/nucleus/util/path_traversal.go
+++ b/nucleus/util/path_traversal.go
@@ -4,14 +4,18 @@ import (
 	"fmt"
 	"github.com/openconfig/goyang/pkg/yang"
 	"github.com/openconfig/ygot/ytypes"
+	log "github.com/sirupsen/logrus"
+	"strings"
 )
 
+const DELIM = "/"
+
 type PathElement struct {
 	Children []*PathElement
 	Name     string
 }
 
-func (p *PathElement)Print()  {
+func (p *PathElement) Print() {
 	printPE(0, p)
 }
 
@@ -21,7 +25,7 @@ func printPE(indent int, pe *PathElement) {
 	}
 	fmt.Println(pe.Name)
 	if len(pe.Children) > 0 {
-		for _,p := range pe.Children {
+		for _, p := range pe.Children {
 			printPE(indent+1, p)
 		}
 	}
@@ -33,34 +37,84 @@ func NewPaths() Paths {
 
 type Paths map[string]*PathElement
 
-func (p Paths) processEntry(e *yang.Entry) *PathElement {
+func processEntry(e *yang.Entry) *PathElement {
 	if e.Dir != nil {
 		elem := &PathElement{
 			Children: make([]*PathElement, len(e.Dir)),
 			Name:     e.Name,
 		}
 		i := 0
-		for _,v := range e.Dir {
-			elem.Children[i] =  p.processEntry(v)
+		for _, v := range e.Dir {
+			elem.Children[i] = processEntry(v)
 			i++
 		}
-		p[e.Name] = elem
 		return elem
 	}
 	leaf := &PathElement{
-		Name:     e.Name,
+		Name: e.Name,
 	}
 	return leaf
 }
 
 func (p Paths) ParseSchema(schema *ytypes.Schema, root string) error {
 	tree := schema.SchemaTree
-	for _,v := range tree {
+	for k, v := range tree {
 		if v.Parent != nil {
 			if v.Parent.Name == root {
-				p.processEntry(v)
+				path := processEntry(v)
+				p[k] = path
 			}
 		}
 	}
 	return nil
-}
\ No newline at end of file
+}
+
+func (p Paths) StringBuilder() []string {
+	paths := make([]string, 0)
+	ch := make(chan string)
+	stop := make(chan bool)
+	val := make(chan []string)
+	go appendix(ch, stop, val)
+	for _, v := range p {
+		var b strings.Builder
+		stringBuilder(ch, &b, v)
+	}
+	stop <- true
+	paths = <-val
+	return paths
+}
+
+func appendix(c chan string, stop chan bool,p chan []string) {
+	paths := make([]string, 0)
+	var sig bool
+	for {
+		select {
+		case path := <-c:
+			paths = append(paths, path)
+			log.Debug(path)
+		case sig = <-stop:
+			log.Debug("Signal received: %v", sig)
+
+		}
+		if sig {break}
+	}
+	p <- paths
+}
+
+func stringBuilder(ch chan string, b *strings.Builder, v *PathElement) {
+	if b.Len() == 0 {
+		b.WriteString("/")
+	}
+	b.WriteString(v.Name)
+	if v.Children != nil {
+		b.WriteString(DELIM)
+		for _, c := range v.Children {
+			var b_cpy strings.Builder
+			b_cpy.WriteString(b.String())
+			stringBuilder(ch, &b_cpy, c)
+		}
+	} else {
+		log.Debug("leaf")
+		ch <- b.String()
+	}
+}