diff --git a/action/list.go b/action/list.go
index 0e5158f..df8935d 100644
--- a/action/list.go
+++ b/action/list.go
@@ -1,6 +1,9 @@
 package action
 
 import (
+	"encoding/json"
+	"fmt"
+	"os"
 	"path/filepath"
 	"sort"
 
@@ -13,7 +16,8 @@
 // Params:
 //  - dir (string): basedir
 //  - deep (bool): whether to do a deep scan or a shallow scan
-func List(basedir string, deep bool) PackageList {
+//  - format (string): The format to output (text, json, json-pretty)
+func List(basedir string, deep bool, format string) {
 	basedir, err := filepath.Abs(basedir)
 	if err != nil {
 		msg.Die("Could not read directory: %s", err)
@@ -40,15 +44,57 @@
 		}
 		installed[i] = relPkg
 	}
-	return PackageList{
+	l := PackageList{
 		Installed: installed,
 		Missing:   h.Missing,
 		Gopath:    h.Gopath,
 	}
+
+	outputList(l, format)
 }
 
+// PackageList contains the packages being used by their location
 type PackageList struct {
 	Installed []string `json:"installed"`
 	Missing   []string `json:"missing"`
 	Gopath    []string `json:"gopath"`
 }
+
+const (
+	textFormat       = "text"
+	jsonFormat       = "json"
+	jsonPrettyFormat = "json-pretty"
+)
+
+func outputList(l PackageList, format string) {
+	switch format {
+	case textFormat:
+		msg.Puts("INSTALLED packages:")
+		for _, pkg := range l.Installed {
+			msg.Puts("\t%s", pkg)
+		}
+
+		if len(l.Missing) > 0 {
+			msg.Puts("\nMISSING packages:")
+			for _, pkg := range l.Missing {
+				msg.Puts("\t%s", pkg)
+			}
+		}
+		if len(l.Gopath) > 0 {
+			msg.Puts("\nGOPATH packages:")
+			for _, pkg := range l.Gopath {
+				msg.Puts("\t%s", pkg)
+			}
+		}
+	case jsonFormat:
+		json.NewEncoder(os.Stdout).Encode(l)
+	case jsonPrettyFormat:
+		b, err := json.MarshalIndent(l, "", "  ")
+		if err != nil {
+			msg.Die("could not unmarshal package list: %s", err)
+		}
+		fmt.Println(string(b))
+	default:
+		msg.Die("invalid output format: must be one of: json|json-pretty|text")
+	}
+}
diff --git a/glide.go b/glide.go
index 566a86f..0b9bd4b 100644
--- a/glide.go
+++ b/glide.go
@@ -37,7 +37,6 @@
 package main
 
 import (
-	"encoding/json"
 	"path/filepath"
 
 	"github.com/Masterminds/glide/action"
@@ -588,9 +587,7 @@
 			vendor are only included if they are used by the project.
 			`,
 			Action: func(c *cli.Context) {
-				outputFormat := c.String("output")
-				pkgList := action.List(".", true)
-				outputList(pkgList, outputFormat)
+				action.List(".", true, c.String("output"))
 			},
 			Flags: []cli.Flag{
 				cli.StringFlag{
@@ -649,42 +646,3 @@
 	}
 	return a
 }
-
-const (
-	textFormat       = "text"
-	jsonFormat       = "json"
-	jsonPrettyFormat = "json-pretty"
-)
-
-func outputList(l action.PackageList, format string) {
-	switch format {
-	case textFormat:
-		msg.Puts("INSTALLED packages:")
-		for _, pkg := range l.Installed {
-			msg.Puts("\t%s", pkg)
-		}
-
-		if len(l.Missing) > 0 {
-			msg.Puts("\nMISSING packages:")
-			for _, pkg := range l.Missing {
-				msg.Puts("\t%s", pkg)
-			}
-		}
-		if len(l.Gopath) > 0 {
-			msg.Puts("\nGOPATH packages:")
-			for _, pkg := range l.Gopath {
-				msg.Puts("\t%s", pkg)
-			}
-		}
-	case jsonFormat:
-		json.NewEncoder(os.Stdout).Encode(l)
-	case jsonPrettyFormat:
-		b, err := json.MarshalIndent(l, "", "  ")
-		if err != nil {
-			msg.Die("could not unmarshal package list: %s", err)
-		}
-		fmt.Println(string(b))
-	default:
-		msg.Die("invalid output format: must be one of: json|json-pretty|text")
-	}
-}
