diff --git a/cmd/get_imports.go b/cmd/get_imports.go
index 27b1eec..e977266 100644
--- a/cmd/get_imports.go
+++ b/cmd/get_imports.go
@@ -28,6 +28,65 @@
 	//v.Logger = log.New(os.Stdout, "go-vcs", log.LstdFlags)
 }
 
+// GetAll gets zero or more repos.
+//
+// Params:
+//	- packages ([]string): Package names to get.
+// 	- verbose (bool): default false
+//
+// Returns:
+// 	- []*Dependency: A list of constructed dependencies.
+func GetAll(c cookoo.Context, p *cookoo.Params) (interface{}, cookoo.Interrupt) {
+	names := p.Get("packages", []string{}).([]string)
+	cfg := p.Get("conf", nil).(*Config)
+
+	Info("Preparing to install %d package.", len(names))
+
+	deps := []*Dependency{}
+	for _, name := range names {
+		cwd, err := VendorPath(c)
+		if err != nil {
+			return nil, err
+		}
+
+		root := getRepoRootFromPackage(name)
+		if len(root) == 0 {
+			return nil, fmt.Errorf("Package name is required for %q.", name)
+		}
+
+		if cfg.HasDependency(root) {
+			Warn("Package %q is already in glide.yaml. Skipping", root)
+			continue
+		}
+
+		dest := path.Join(cwd, root)
+		repoURL := "https://" + root
+		repo, err := v.NewRepo(repoURL, dest)
+		if err != nil {
+			Error("Could not construct repo for %q: %s", name, err)
+			return false, err
+		}
+
+		dep := &Dependency{
+			Name: root,
+		}
+		subpkg := strings.TrimPrefix(name, root)
+		if len(subpkg) > 0 && subpkg != "/" {
+			dep.Subpackages = []string{subpkg}
+		}
+
+		if err := repo.Get(); err != nil {
+			return dep, err
+		}
+
+		cfg.Imports = append(cfg.Imports, dep)
+
+		deps = append(deps, dep)
+
+	}
+	return deps, nil
+}
+
 // Get fetches a single package and puts it in vendor/.
 //
 // Params:
diff --git a/cmd/msg.go b/cmd/msg.go
index 0835821..5f7e555 100644
--- a/cmd/msg.go
+++ b/cmd/msg.go
@@ -65,6 +65,12 @@
 		return
 	}
 	fmt.Fprintf(os.Stderr, msg, args...)
+
+	// Get rid of the annoying fact that messages need \n at the end, but do
+	// it in a backward compatible way.
+	if !strings.HasSuffix(msg, "\n") {
+		fmt.Fprintln(os.Stderr)
+	}
 }
 
 // Msg prints a message with optional arguments, that can be printed, of
@@ -79,6 +85,6 @@
 	// Get rid of the annoying fact that messages need \n at the end, but do
 	// it in a backward compatible way.
 	if !strings.HasSuffix(msg, "\n") {
-		fmt.Println("")
+		fmt.Println()
 	}
 }
diff --git a/glide.go b/glide.go
index 4ef0fbd..ca3364e 100644
--- a/glide.go
+++ b/glide.go
@@ -166,7 +166,7 @@
 					fmt.Println("Oops! Package name is required.")
 					os.Exit(1)
 				}
-				cxt.Put("package", c.Args()[0])
+				cxt.Put("packages", []string(c.Args()))
 				cxt.Put("recursiveDependencies", !c.Bool("no-recursive"))
 				if c.Bool("import") {
 					cxt.Put("importGodeps", true)
@@ -409,9 +409,9 @@
 	reg.Route("get", "Install a pkg in vendor, and store the results in the glide.yaml").
 		Includes("@startup").
 		Includes("@ready").
-		Does(cmd.Get, "goget").
+		Does(cmd.GetAll, "goget").
 		Using("filename").From("cxt:yaml").
-		Using("package").From("cxt:package").
+		Using("packages").From("cxt:packages").
 		Using("conf").From("cxt:cfg").
 		Does(cmd.MergeToYaml, "merged").Using("conf").From("cxt:cfg").
 		Does(cmd.Recurse, "recurse").Using("conf").From("cxt:cfg").
