diff --git a/cmd/recursive_glide.go b/cmd/recursive_glide.go
index 2166002..83ea5d6 100644
--- a/cmd/recursive_glide.go
+++ b/cmd/recursive_glide.go
@@ -18,29 +18,32 @@
 	}
 	force := p.Get("force", true).(bool)
 
-	godeps, gpm, deleteFlatten := false, false, false
+	godeps, gpm, gb, deleteFlatten := false, false, false, false
 	if g, ok := p.Has("importGodeps"); ok {
 		godeps = g.(bool)
 	}
 	if g, ok := p.Has("importGPM"); ok {
 		gpm = g.(bool)
 	}
+	if g, ok := p.Has("importGb"); ok {
+		gb = g.(bool)
+	}
 
 	if g, ok := p.Has("deleteFlatten"); ok {
 		deleteFlatten = g.(bool)
 	}
 
-	Info("Checking dependencies for updates. Godeps: %v, GPM: %v\n", godeps, gpm)
+	Info("Checking dependencies for updates. Godeps: %v, GPM: %v, gb: %v\n", godeps, gpm, gb)
 	if deleteFlatten == true {
 		Info("Deleting flattened dependencies enabled\n")
 	}
 	conf := p.Get("conf", &Config{}).(*Config)
 	vend, _ := VendorPath(c)
 
-	return recDepResolve(conf, vend, godeps, gpm, force, deleteFlatten)
+	return recDepResolve(conf, vend, godeps, gpm, gb, force, deleteFlatten)
 }
 
-func recDepResolve(conf *Config, vend string, godeps, gpm, force, deleteFlatten bool) (interface{}, error) {
+func recDepResolve(conf *Config, vend string, godeps, gpm, gb, force, deleteFlatten bool) (interface{}, error) {
 
 	Info("Inspecting %s.\n", vend)
 
@@ -62,24 +65,25 @@
 			if gpm {
 				importGPM(base, imp.Name)
 			}
+			if gb {
+				importGb(base, imp.Name)
+			}
 			if !needsGlideUp(base) {
 				Info("Package %s manages its own dependencies.\n", imp.Name)
 				continue
 			}
 		}
 
-		if err := dependencyGlideUp(conf, base, godeps, gpm, force, deleteFlatten); err != nil {
+		if err := dependencyGlideUp(conf, base, godeps, gpm, gb, force, deleteFlatten); err != nil {
 			Warn("Failed to update dependency %s: %s", imp.Name, err)
 		}
 	}
 
-	// Run `glide up`
 	return nil, nil
 }
 
-func dependencyGlideUp(parentConf *Config, base string, godep, gpm, force, deleteFlatten bool) error {
+func dependencyGlideUp(parentConf *Config, base string, godep, gpm, gb, force, deleteFlatten bool) error {
 	Info("Doing a glide in %s\n", base)
-	//conf := new(Config)
 	fname := path.Join(base, "glide.yaml")
 	f, err := yaml.ReadFile(fname)
 	if err != nil {
@@ -157,7 +161,7 @@
 
 		//recDepResolve(conf, path.Join(wd, "vendor"))
 	}
-	recDepResolve(conf, path.Join(base, "vendor"), godep, gpm, force, deleteFlatten)
+	recDepResolve(conf, path.Join(base, "vendor"), godep, gpm, gb, force, deleteFlatten)
 	return nil
 }
 
@@ -197,6 +201,15 @@
 	return quickDirtyYAMLWrite(dir, d, pkg)
 }
 
+func importGb(dir, pkg string) error {
+	Info("Looking in %s/vendor/ for a manifest file.\n", dir)
+	d, err := parseGbManifest(dir)
+	if err != nil {
+		return err
+	}
+	return quickDirtyYAMLWrite(dir, d, pkg)
+}
+
 func quickDirtyYAMLWrite(dir string, d []*Dependency, pkg string) error {
 	if len(d) == 0 {
 		return nil
diff --git a/glide.go b/glide.go
index 7d7e3d0..110d435 100644
--- a/glide.go
+++ b/glide.go
@@ -144,7 +144,7 @@
 	'--no-recursive'
 
 	If '--import' is set, this will also read the dependency projects, looking
-	for Godep and GPM files. When it finds them, it will build a comparable
+	for gb, Godep and GPM files. When it finds them, it will build a comparable
 	glide.yaml file, and then fetch all of the necessary dependencies. The
 	dependencies are then vendored in the appropriate project. Subsequent calls
 	to 'glide up' will use the glide.yaml to maintain those dependencies.
@@ -171,6 +171,7 @@
 				if c.Bool("import") {
 					cxt.Put("importGodeps", true)
 					cxt.Put("importGPM", true)
+					cxt.Put("importGb", true)
 				}
 				setupHandler(c, "get", cxt, router)
 			},
@@ -193,6 +194,13 @@
 						setupHandler(c, "import gpm", cxt, router)
 					},
 				},
+				{
+					Name:  "gb",
+					Usage: "Import gb's manifest file and display the would-be yaml file",
+					Action: func(c *cli.Context) {
+						setupHandler(c, "import gb", cxt, router)
+					},
+				},
 			},
 		},
 		{
@@ -312,6 +320,7 @@
 				if c.Bool("import") {
 					cxt.Put("importGodeps", true)
 					cxt.Put("importGPM", true)
+					cxt.Put("importGb", true)
 				}
 				cxt.Put("updateVendoredDeps", c.Bool("update-vendored"))
 				setupHandler(c, "update", cxt, router)
@@ -409,6 +418,7 @@
 		Using("enable").From("cxt:recursiveDependencies").
 		Using("importGodeps").From("cxt:importGodeps").
 		Using("importGPM").From("cxt:importGPM").
+		Using("importGb").From("cxt:importGb").
 		Using("force").From("cxt:forceUpdate").WithDefault(false).
 		Does(cmd.WriteYaml, "out").
 		Using("yaml.Node").From("cxt:merged").
@@ -440,6 +450,7 @@
 		Using("deleteFlatten").From("cxt:deleteFlatten").
 		Using("importGodeps").From("cxt:importGodeps").
 		Using("importGPM").From("cxt:importGPM").
+		Using("importGb").From("cxt:importGb").
 		Using("enable").From("cxt:recursiveDependencies").
 		Using("force").From("cxt:forceUpdate").
 		Does(cmd.VendoredCleanUp, "_").
@@ -489,6 +500,16 @@
 		Does(cmd.MergeToYaml, "merged").Using("conf").From("cxt:cfg").
 		Does(cmd.WriteYaml, "out").Using("yaml.Node").From("cxt:merged")
 
+	reg.Route("import gb", "Read a vendor/manifest file").
+		Includes("@startup").
+		Includes("@ready").
+		Does(cmd.GbManifest, "manifest").
+		Does(cmd.AddDependencies, "addGodeps").
+		Using("dependencies").From("cxt:manifest").
+		Using("conf").From("cxt:cfg").
+		Does(cmd.MergeToYaml, "merged").Using("conf").From("cxt:cfg").
+		Does(cmd.WriteYaml, "out").Using("yaml.Node").From("cxt:merged")
+
 	reg.Route("guess", "Guess dependencies").
 		Includes("@ready").
 		Does(cmd.GuessDeps, "cfg").
