diff --git a/filetreeview.go b/filetreeview.go
index 9eed1cd..1a24fdf 100644
--- a/filetreeview.go
+++ b/filetreeview.go
@@ -35,50 +35,50 @@ func NewFileTreeView(name string, gui *gocui.Gui, view *gocui.View, tree *FileTr
 	return treeview
 }
 
-func (treeview *FileTreeView) keybindings() error {
-	if err := treeview.gui.SetKeybinding(treeview.name, gocui.KeyArrowDown, gocui.ModNone, func(*gocui.Gui, *gocui.View) error { return treeview.cursorDown() }); err != nil {
+func (view *FileTreeView) keybindings() error {
+	if err := view.gui.SetKeybinding(view.name, gocui.KeyArrowDown, gocui.ModNone, func(*gocui.Gui, *gocui.View) error { return view.cursorDown() }); err != nil {
 		return err
 	}
-	if err := treeview.gui.SetKeybinding(treeview.name, gocui.KeyArrowUp, gocui.ModNone, func(*gocui.Gui, *gocui.View) error { return treeview.cursorUp() }); err != nil {
+	if err := view.gui.SetKeybinding(view.name, gocui.KeyArrowUp, gocui.ModNone, func(*gocui.Gui, *gocui.View) error { return view.cursorUp() }); err != nil {
 		return err
 	}
-	if err := treeview.gui.SetKeybinding(treeview.name, gocui.KeySpace, gocui.ModNone, func(*gocui.Gui, *gocui.View) error { return treeview.toggleCollapse() }); err != nil {
+	if err := view.gui.SetKeybinding(view.name, gocui.KeySpace, gocui.ModNone, func(*gocui.Gui, *gocui.View) error { return view.toggleCollapse() }); err != nil {
 		return err
 	}
 	return nil
 }
 
 // Mehh, this is just a bad method
-func (treeview *FileTreeView) reset(tree *FileTree) error {
-	treeview.tree = tree
-	treeview.view.SetCursor(0, 0)
-	treeview.absTreeIndex = 0
-	return treeview.render()
+func (view *FileTreeView) reset(tree *FileTree) error {
+	view.tree = tree
+	view.view.SetCursor(0, 0)
+	view.absTreeIndex = 0
+	return view.render()
 }
 
-func (treeview *FileTreeView) cursorDown() error {
-	err := cursorDown(treeview.gui, treeview.view)
+func (view *FileTreeView) cursorDown() error {
+	err := cursorDown(view.gui, view.view)
 	if err == nil {
-		treeview.absTreeIndex++
+		view.absTreeIndex++
 	}
 	return nil
 }
 
-func (treeview *FileTreeView) cursorUp() error {
-	err := cursorUp(treeview.gui, treeview.view)
+func (view *FileTreeView) cursorUp() error {
+	err := cursorUp(view.gui, view.view)
 	if err == nil {
-		treeview.absTreeIndex--
+		view.absTreeIndex--
 	}
 	return nil
 }
 
-func (treeview *FileTreeView) getAbsPositionNode() (node *FileNode) {
+func (view *FileTreeView) getAbsPositionNode() (node *FileNode) {
 	var visiter func(*FileNode) error
 	var evaluator func(*FileNode) bool
 	var dfsCounter uint
 
 	visiter = func(curNode *FileNode) error {
-		if dfsCounter == treeview.absTreeIndex {
+		if dfsCounter == view.absTreeIndex {
 			node = curNode
 		}
 		dfsCounter++
@@ -89,7 +89,7 @@ func (treeview *FileTreeView) getAbsPositionNode() (node *FileNode) {
 		return !curNode.collapsed
 	}
 
-	err := treeview.tree.VisitDepthParentFirst(visiter, evaluator)
+	err := view.tree.VisitDepthParentFirst(visiter, evaluator)
 	if err != nil {
 		// todo: you guessed it, check errors
 	}
@@ -97,17 +97,17 @@ func (treeview *FileTreeView) getAbsPositionNode() (node *FileNode) {
 	return node
 }
 
-func (treeview *FileTreeView) toggleCollapse() error {
-	node := treeview.getAbsPositionNode()
+func (view *FileTreeView) toggleCollapse() error {
+	node := view.getAbsPositionNode()
 	node.collapsed = !node.collapsed
-	return treeview.render()
+	return view.render()
 }
 
-func (treeview *FileTreeView) render() error {
-	renderString := treeview.tree.String()
-	treeview.gui.Update(func(g *gocui.Gui) error {
-		treeview.view.Clear()
-		_, err := fmt.Fprintln(treeview.view, renderString)
+func (view *FileTreeView) render() error {
+	renderString := view.tree.String()
+	view.gui.Update(func(g *gocui.Gui) error {
+		view.view.Clear()
+		_, err := fmt.Fprintln(view.view, renderString)
 		return err
 	})
 	return nil
diff --git a/layerview.go b/layerview.go
index 929ad64..1cbd437 100644
--- a/layerview.go
+++ b/layerview.go
@@ -6,14 +6,51 @@ import (
 	"github.com/jroimartin/gocui"
 )
 
-func renderSideBar(g *gocui.Gui, v *gocui.View) error {
-	g.Update(func(g *gocui.Gui) error {
-		v, _ := g.View("side")
-		// todo: handle above error.
-		v.Clear()
-		//_, err := fmt.Fprintf(v, "FileNode:\n%+v\n\n", getAbsPositionNode())
-		for ix, layerName := range data.manifest.Layers {
-			fmt.Fprintf(v, "%d: %s\n", ix+1, layerName[0:25])
+type LayerView struct {
+	name       string
+	gui        *gocui.Gui
+	view       *gocui.View
+	layerIndex uint
+	manifest   *Manifest
+}
+
+func NewLayerView(name string, gui *gocui.Gui, view *gocui.View, manifest *Manifest) (layerview *LayerView) {
+	layerview = new(LayerView)
+
+	// populate main fields
+	layerview.name = name
+	layerview.gui = gui
+	layerview.view = view
+	layerview.manifest = manifest
+
+	// set view options
+	layerview.view.Wrap = true
+	layerview.view.Highlight = true
+	layerview.view.SelBgColor = gocui.ColorGreen
+	layerview.view.SelFgColor = gocui.ColorBlack
+
+	layerview.render()
+
+	return layerview
+}
+
+func (view *LayerView) keybindings() error {
+
+	if err := view.gui.SetKeybinding("side", gocui.KeyArrowDown, gocui.ModNone, func(*gocui.Gui, *gocui.View) error { return view.cursorDown() }); err != nil {
+		return err
+	}
+	if err := view.gui.SetKeybinding("side", gocui.KeyArrowUp, gocui.ModNone, func(*gocui.Gui, *gocui.View) error { return view.cursorUp() }); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (view *LayerView) render() error {
+	view.gui.Update(func(g *gocui.Gui) error {
+		view.view.Clear()
+		for ix, layerName := range view.manifest.Layers {
+			fmt.Fprintf(view.view, "%d: %s\n", ix+1, layerName[0:25])
 		}
 		return nil
 	})
@@ -21,22 +58,22 @@ func renderSideBar(g *gocui.Gui, v *gocui.View) error {
 	return nil
 }
 
-func cursorDownLayers(g *gocui.Gui, v *gocui.View) error {
-	if v != nil && int(view.layerIndex) < len(data.manifest.Layers) {
-		cursorDown(g, v)
+func (view *LayerView) cursorDown() error {
+	if int(view.layerIndex) < len(data.manifest.Layers) {
+		cursorDown(view.gui, view.view)
 		view.layerIndex++
-		renderSideBar(g, v)
-		view.treeView.reset(StackRange(data.refTrees, view.layerIndex))
+		view.render()
+		views.treeView.reset(StackRange(data.refTrees, view.layerIndex))
 	}
 	return nil
 }
 
-func cursorUpLayers(g *gocui.Gui, v *gocui.View) error {
-	if v != nil && int(view.layerIndex) > 0 {
-		cursorUp(g, v)
+func (view *LayerView) cursorUp() error {
+	if int(view.layerIndex) > 0 {
+		cursorUp(view.gui, view.view)
 		view.layerIndex--
-		renderSideBar(g, v)
-		view.treeView.reset(StackRange(data.refTrees, view.layerIndex))
+		view.render()
+		views.treeView.reset(StackRange(data.refTrees, view.layerIndex))
 	}
 	return nil
 }
diff --git a/main.go b/main.go
index a948250..6ea032c 100644
--- a/main.go
+++ b/main.go
@@ -19,10 +19,9 @@ var data struct {
 	manifest *Manifest
 }
 
-var view struct {
-	treeView *FileTreeView
-	// layerView   *LayerView
-	layerIndex uint
+var views struct {
+	treeView  *FileTreeView
+	layerView *LayerView
 }
 
 func check(e error) {
@@ -119,11 +118,11 @@ func demo() {
 ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 
 func nextView(g *gocui.Gui, v *gocui.View) error {
-	if v == nil || v.Name() == "side" {
-		_, err := g.SetCurrentView("main")
+	if v == nil || v.Name() == views.layerView.name {
+		_, err := g.SetCurrentView(views.treeView.name)
 		return err
 	}
-	_, err := g.SetCurrentView("side")
+	_, err := g.SetCurrentView(views.layerView.name)
 	return err
 }
 
@@ -175,12 +174,6 @@ func keybindings(g *gocui.Gui) error {
 	if err := g.SetKeybinding("main", gocui.KeyCtrlSpace, gocui.ModNone, nextView); err != nil {
 		return err
 	}
-	if err := g.SetKeybinding("side", gocui.KeyArrowDown, gocui.ModNone, cursorDownLayers); err != nil {
-		return err
-	}
-	if err := g.SetKeybinding("side", gocui.KeyArrowUp, gocui.ModNone, cursorUpLayers); err != nil {
-		return err
-	}
 
 	return nil
 }
@@ -192,21 +185,19 @@ func layout(g *gocui.Gui) error {
 		if err != gocui.ErrUnknownView {
 			return err
 		}
-		v.Wrap = true
-		v.Highlight = true
-		v.SelBgColor = gocui.ColorGreen
-		v.SelFgColor = gocui.ColorBlack
-		renderSideBar(g, v)
+		views.layerView = NewLayerView("side", g, v, data.manifest)
+		views.layerView.keybindings()
+
 	}
 	if v, err := g.SetView("main", splitCol, -1, maxX, maxY); err != nil {
 		if err != gocui.ErrUnknownView {
 			return err
 		}
 
-		view.treeView = NewFileTreeView("main", g, v, StackRange(data.refTrees, 0))
-		view.treeView.keybindings()
+		views.treeView = NewFileTreeView("main", g, v, StackRange(data.refTrees, 0))
+		views.treeView.keybindings()
 
-		if _, err := g.SetCurrentView("main"); err != nil {
+		if _, err := g.SetCurrentView(views.treeView.name); err != nil {
 			return err
 		}
 	}