diff --git a/action/create.go b/action/create.go
index 800ec48..bad74e1 100644
--- a/action/create.go
+++ b/action/create.go
@@ -31,13 +31,13 @@
 // If skipImport is set to true, this will not attempt to import from an existing
 // GPM, Godep, or GB project if one should exist. However, it will still attempt
 // to read the local source to determine required packages.
-func Create(base string, skipImport bool) {
+func Create(base string, skipImport, noInteract bool) {
 	glidefile := gpath.GlideFile
 	// Guard against overwrites.
 	guardYAML(glidefile)
 
 	// Guess deps
-	conf := guessDeps(base, skipImport)
+	conf := guessDeps(base, skipImport, noInteract)
 	// Write YAML
 	msg.Info("Writing glide.yaml file")
 	if err := conf.WriteFile(glidefile); err != nil {
@@ -64,7 +64,7 @@
 //
 // FIXME: This function is likely a one-off that has a more standard alternative.
 // It's also long and could use a refactor.
-func guessDeps(base string, skipImport bool) *cfg.Config {
+func guessDeps(base string, skipImport, noInteract bool) *cfg.Config {
 	buildContext, err := util.GetBuildContext()
 	if err != nil {
 		msg.Die("Failed to build an import context: %s", err)
@@ -80,21 +80,17 @@
 
 	// Import by looking at other package managers and looking over the
 	// entire directory structure.
+	var deps cfg.Dependencies
 
 	// Attempt to import from other package managers.
 	if !skipImport {
-		guessImportDeps(base, config)
+		deps = guessImportDeps(base)
+		if len(deps) == 0 {
+			msg.Info("No dependencies found to import")
+		}
 	}
 
-	importLen := len(config.Imports)
-	if importLen > 0 {
-		msg.Info("Scanning code to look for additional dependencies")
-	} else if !skipImport {
-		msg.Info("No dependencies found to import")
-		msg.Info("Scanning code to look for dependencies")
-	} else {
-		msg.Info("Scanning code to look for dependencies")
-	}
+	msg.Info("Scanning code to look for dependencies")
 
 	// Resolve dependencies by looking at the tree.
 	r, err := dependency.NewResolver(base)
@@ -124,37 +120,72 @@
 
 		if !config.HasDependency(root) {
 			count++
-			msg.Info("--> Found reference to %s\n", n)
-			d := &cfg.Dependency{
-				Name: root,
+			d := deps.Get(root)
+			if d == nil {
+				d = &cfg.Dependency{
+					Name: root,
+				}
+				msg.Info("--> Found reference to %s", n)
+			} else {
+				msg.Info("--> Found reference to %s. Importing version %s", n, d.Reference)
 			}
-			if len(subpkg) > 0 {
-				d.Subpackages = []string{subpkg}
+
+			if subpkg != "" {
+				if !d.HasSubpackage(subpkg) {
+					d.Subpackages = append(d.Subpackages, subpkg)
+				}
+				msg.Verbose("--> Noting sub-package %s to %s", subpkg, root)
 			}
+
 			config.Imports = append(config.Imports, d)
 		} else {
 			if len(subpkg) > 0 {
 				subpkg = strings.TrimPrefix(subpkg, "/")
 				d := config.Imports.Get(root)
 				if !d.HasSubpackage(subpkg) {
-					count++
-					msg.Info("--> Adding sub-package %s to %s\n", subpkg, root)
 					d.Subpackages = append(d.Subpackages, subpkg)
 				}
+				msg.Verbose("--> Noting sub-package %s to %s", subpkg, root)
+			}
+		}
+	}
+
+	if !skipImport && len(deps) > count {
+		var res string
+		if noInteract {
+			res = "y"
+		} else {
+			msg.Info("%d unused imported dependencies found. These are likely transitive dependencies ", len(deps)-count)
+			msg.Info("(dependencies of your dependencies). Would you like to track them in your")
+			msg.Info("glide.yaml file? Note, Glide will automatically scan your codebase to detect")
+			msg.Info("the complete dependency tree and import the complete tree. If your dependencies")
+			msg.Info("do not track dependency version information some version information may be lost.")
+			msg.Info("Yes (y) or No (n)?")
+			res, err = msg.PromptUntil([]string{"y", "yes", "n", "no"})
+			if err != nil {
+				msg.Die("Error processing response: %s", err)
+			}
+		}
+		if res == "y" || res == "yes" {
+			msg.Info("Including additional imports in the glide.yaml file")
+			for _, dep := range deps {
+				found := config.Imports.Get(dep.Name)
+				if found == nil {
+					config.Imports = append(config.Imports, dep)
+					if dep.Reference != "" {
+						msg.Info("--> Adding %s at version %s", dep.Name, dep.Reference)
+					} else {
+						msg.Info("--> Adding %s", dep.Name)
+					}
+				}
 			}
 		}
 	}
 
-	if count == 0 && importLen > 0 {
-		msg.Info("--> Scanning found no additional dependencies to import")
-	} else if count == 0 {
-		msg.Info("--> Scanning found no dependencies to import")
-	}
-
 	return config
 }
 
-func guessImportDeps(base string, config *cfg.Config) {
+func guessImportDeps(base string) cfg.Dependencies {
 	msg.Info("Attempting to import from other package managers (use --skip-import to skip)")
 	deps := []*cfg.Dependency{}
 	absBase, err := filepath.Abs(base)
@@ -178,7 +209,7 @@
 	}
 
 	if len(deps) > 0 {
-		msg.Info("--> Attempting to detect versions from commit ids")
+		msg.Info("--> Attempting to detect versions from imported commit ids")
 	}
 
 	var wg sync.WaitGroup
@@ -194,19 +225,19 @@
 			}
 			ver := createGuessVersion(remote, dep.Reference)
 			if ver != dep.Reference {
-				msg.Info("--> Found imported reference to %s at version %s", dep.Name, ver)
+				msg.Verbose("--> Found imported reference to %s at version %s", dep.Name, ver)
 				dep.Reference = ver
-			} else {
-				msg.Info("--> Found imported reference to %s", dep.Name)
 			}
 
+			msg.Debug("--> Found imported reference to %s at revision %s", dep.Name, dep.Reference)
+
 			wg.Done()
 		}(i)
-
-		config.Imports = append(config.Imports, i)
 	}
 
 	wg.Wait()
+
+	return deps
 }
 
 func guessImportGodep(dir string) ([]*cfg.Dependency, bool) {
diff --git a/action/debug.go b/action/debug.go
index 7b8eea6..6af9d26 100644
--- a/action/debug.go
+++ b/action/debug.go
@@ -7,6 +7,15 @@
 // Debug sets the debugging flags across components.
 func Debug(on bool) {
 	msg.Default.IsDebugging = on
+
+	if on == true {
+		msg.Default.IsVerbose = on
+	}
+}
+
+// Verbose sets the verbose flags across components.
+func Verbose(on bool) {
+	msg.Default.IsVerbose = on
 }
 
 // Quiet sets the quiet flags across components.
diff --git a/glide.go b/glide.go
index 2ce9fcc..3f703b4 100644
--- a/glide.go
+++ b/glide.go
@@ -92,8 +92,12 @@
 			Usage: "Quiet (no info or debug messages)",
 		},
 		cli.BoolFlag{
+			Name:  "verbose",
+			Usage: "Print detailed informational messages",
+		},
+		cli.BoolFlag{
 			Name:  "debug",
-			Usage: "Print Debug messages (verbose)",
+			Usage: "Print debug verbose informational messages",
 		},
 		cli.StringFlag{
 			Name:   "home",
@@ -146,9 +150,13 @@
 					Name:  "skip-import",
 					Usage: "When initializing skip importing from other package managers.",
 				},
+				cli.BoolFlag{
+					Name:  "non-interactive",
+					Usage: "Disable interactive prompts.",
+				},
 			},
 			Action: func(c *cli.Context) {
-				action.Create(".", c.Bool("skip-import"))
+				action.Create(".", c.Bool("skip-import"), c.Bool("non-interactive"))
 			},
 		},
 		{
@@ -664,6 +672,7 @@
 // so it can be used by any Glide command.
 func startup(c *cli.Context) error {
 	action.Debug(c.Bool("debug"))
+	action.Verbose(c.Bool("verbose"))
 	action.NoColor(c.Bool("no-color"))
 	action.Quiet(c.Bool("quiet"))
 	action.Init(c.String("yaml"), c.String("home"))
diff --git a/msg/msg.go b/msg/msg.go
index b2a7bfe..2f9c6c8 100644
--- a/msg/msg.go
+++ b/msg/msg.go
@@ -1,6 +1,7 @@
 package msg
 
 import (
+	"bufio"
 	"fmt"
 	"io"
 	"os"
@@ -16,9 +17,12 @@
 	// Quiet, if true, suppresses chatty levels, like Info.
 	Quiet bool
 
-	// IsDebugging, if true, shows verbose levels, like Debug.
+	// IsDebugging, if true, shows Debug.
 	IsDebugging bool
 
+	// IsVerbose, if true, shows detailed informational messages.
+	IsVerbose bool
+
 	// NoColor, if true, will not use color in the output.
 	NoColor bool
 
@@ -28,6 +32,9 @@
 	// Stderr is the location where this prints logs.
 	Stderr io.Writer
 
+	// Stdin is the location where input is read.
+	Stdin io.Reader
+
 	// PanicOnDie if true Die() will panic instead of exiting.
 	PanicOnDie bool
 
@@ -43,9 +50,11 @@
 	m := &Messenger{
 		Quiet:       false,
 		IsDebugging: false,
+		IsVerbose:   false,
 		NoColor:     false,
 		Stdout:      os.Stdout,
 		Stderr:      os.Stderr,
+		Stdin:       os.Stdin,
 		PanicOnDie:  false,
 		ecode:       1,
 	}
@@ -76,7 +85,7 @@
 		return
 	}
 	prefix := "[DEBUG] "
-	Msg(prefix+msg, args...)
+	m.Msg(prefix+msg, args...)
 }
 
 // Debug logs debug information using the Default Messenger
@@ -84,6 +93,19 @@
 	Default.Debug(msg, args...)
 }
 
+// Verbose logs detailed information
+func (m *Messenger) Verbose(msg string, args ...interface{}) {
+	if m.Quiet || !m.IsVerbose {
+		return
+	}
+	m.Info(msg, args...)
+}
+
+// Verbose detailed information using the Default Messenger
+func Verbose(msg string, args ...interface{}) {
+	Default.Verbose(msg, args...)
+}
+
 // Warn logs a warning
 func (m *Messenger) Warn(msg string, args ...interface{}) {
 	prefix := m.Color(Yellow, "[WARN] ")
@@ -238,3 +260,30 @@
 func Color(code, msg string) string {
 	return Default.Color(code, msg)
 }
+
+// PromptUntil provides a prompt until one of the passed in strings has been
+// entered and return is hit. Note, the comparisons are case insensitive meaning
+// Y == y. The returned value is the one from the passed in options (same case).
+func (m *Messenger) PromptUntil(opts []string) (string, error) {
+	reader := bufio.NewReader(os.Stdin)
+	for {
+		text, err := reader.ReadString('\n')
+		if err != nil {
+			return "", err
+		}
+
+		for _, c := range opts {
+			if strings.EqualFold(c, strings.TrimSpace(text)) {
+				return c, nil
+			}
+		}
+	}
+}
+
+// PromptUntil provides a prompt until one of the passed in strings has been
+// entered and return is hit. Note, the comparisons are case insensitive meaning
+// Y == y. The returned value is the one from the passed in options (same case).
+// Uses the default setup.
+func PromptUntil(opts []string) (string, error) {
+	return Default.PromptUntil(opts)
+}
