diff --git a/action/create.go b/action/create.go
index bad74e1..ab98574 100644
--- a/action/create.go
+++ b/action/create.go
@@ -19,6 +19,7 @@
 	"github.com/Masterminds/glide/msg"
 	gpath "github.com/Masterminds/glide/path"
 	"github.com/Masterminds/glide/util"
+	"github.com/Masterminds/semver"
 	"github.com/Masterminds/vcs"
 )
 
@@ -114,6 +115,8 @@
 	}
 
 	var count int
+	var all string
+	var allOnce bool
 	for _, pa := range sortable {
 		n := strings.TrimPrefix(pa, vpath)
 		root, subpkg := util.NormalizeName(n)
@@ -127,9 +130,11 @@
 				}
 				msg.Info("--> Found reference to %s", n)
 			} else {
-				msg.Info("--> Found reference to %s. Importing version %s", n, d.Reference)
+				msg.Info("--> Found imported reference to %s", n)
 			}
 
+			all, allOnce = guessAskVersion(noInteract, all, allOnce, d)
+
 			if subpkg != "" {
 				if !d.HasSubpackage(subpkg) {
 					d.Subpackages = append(d.Subpackages, subpkg)
@@ -160,7 +165,7 @@
 			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)?")
+			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)
@@ -173,6 +178,7 @@
 				if found == nil {
 					config.Imports = append(config.Imports, dep)
 					if dep.Reference != "" {
+						all, allOnce = guessAskVersion(noInteract, all, allOnce, dep)
 						msg.Info("--> Adding %s at version %s", dep.Name, dep.Reference)
 					} else {
 						msg.Info("--> Adding %s", dep.Name)
@@ -185,6 +191,58 @@
 	return config
 }
 
+func guessAskVersion(noInteract bool, all string, allonce bool, d *cfg.Dependency) (string, bool) {
+	if !noInteract && d.Reference != "" {
+		ver, err := semver.NewVersion(d.Reference)
+		if err == nil {
+			if all == "" {
+				vstr := ver.String()
+				msg.Info("Imported dependency %s (%s) appears to use semantic versions (http://semver.org).", d.Name, d.Reference)
+				msg.Info("Would you like Glide to track the latest minor or patch releases (major.minor.path)?")
+				msg.Info("Tracking minor version releases would use '>= %s, < %d.0.0' ('^%s'). Tracking patch version", vstr, ver.Major()+1, vstr)
+				msg.Info("releases would use '>= %s, < %d.%d.0' ('~%s'). For more information on Glide versions", vstr, ver.Major(), ver.Minor()+1, vstr)
+				msg.Info("and ranges see https://glide.sh/docs/versions")
+				msg.Info("Minor (M), Patch (P), or Skip Ranges (S)?")
+				res, err := msg.PromptUntil([]string{"minor", "m", "patch", "p", "skip ranges", "s"})
+				if err != nil {
+					msg.Die("Error processing response: %s", err)
+				}
+				if res == "m" || res == "minor" {
+					d.Reference = "~" + vstr
+				} else if res == "p" || res == "patch" {
+					d.Reference = "^" + vstr
+				}
+
+				if !allonce {
+					msg.Info("Would you like to same response (%s) for future dependencies? Yes (Y) or No (N)", res)
+					res2, err := msg.PromptUntil([]string{"y", "yes", "n", "no"})
+					if err != nil {
+						msg.Die("Error processing response: %s", err)
+					}
+					if res2 == "yes" || res2 == "y" {
+						return res, true
+					}
+
+					return "", true
+				}
+
+			} else {
+				if all == "m" || all == "minor" {
+					d.Reference = "~" + ver.String()
+				} else if all == "p" || all == "patch" {
+					d.Reference = "^" + ver.String()
+				}
+			}
+
+			return all, allonce
+		}
+
+		return all, allonce
+	}
+
+	return all, allonce
+}
+
 func guessImportDeps(base string) cfg.Dependencies {
 	msg.Info("Attempting to import from other package managers (use --skip-import to skip)")
 	deps := []*cfg.Dependency{}
