diff --git a/CHANGELOG.md b/CHANGELOG.md
index 06716e1..e7bf324 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -13,6 +13,8 @@
 - Switched to github.com/Masterminds/vcs for VCS integration.
 - When updating packages are now deleted if the --delete flag is set.
   This feature is now opt-in.
+- Fixed #32: Detects VCS type and endpoint changes along with a --force flag
+  to replace the checkout if desired.
 
 # Release 0.4.1 (2015-07-13)
 
diff --git a/cmd/get_imports.go b/cmd/get_imports.go
index 8929522..17f496d 100644
--- a/cmd/get_imports.go
+++ b/cmd/get_imports.go
@@ -112,6 +112,7 @@
 // UpdateImports iterates over the imported packages and updates them.
 func UpdateImports(c cookoo.Context, p *cookoo.Params) (interface{}, cookoo.Interrupt) {
 	cfg := p.Get("conf", nil).(*Config)
+	force := p.Get("force", true).(bool)
 	cwd, err := VendorPath(c)
 	if err != nil {
 		return false, err
@@ -123,7 +124,7 @@
 	}
 
 	for _, dep := range cfg.Imports {
-		if err := VcsUpdate(dep, cwd); err != nil {
+		if err := VcsUpdate(dep, cwd, force); err != nil {
 			Warn("Update failed for %s: %s\n", dep.Name, err)
 		}
 	}
@@ -207,7 +208,7 @@
 }
 
 // VcsUpdate updates to a particular checkout based on the VCS setting.
-func VcsUpdate(dep *Dependency, vend string) error {
+func VcsUpdate(dep *Dependency, vend string, force bool) error {
 	Info("Fetching updates for %s.\n", dep.Name)
 
 	if filterArchOs(dep) {
@@ -220,19 +221,40 @@
 	if _, err := os.Stat(dest); os.IsNotExist(err) {
 		if err = VcsGet(dep, dest); err != nil {
 			Warn("Unable to checkout %s\n", dep.Name)
-			fmt.Println(err)
 			return err
 		}
 	} else {
 		repo, err := dep.GetRepo(dest)
-		if err != nil {
+
+		// Tried to checkout a repo to a path that does not work. Either the
+		// type or endpoint has changed. Force is being passed in so the old
+		// location can be removed and replaced with the new one.
+		// Warning, any changes in the old location will be deleted.
+		// TODO: Put dirty checking in on the existing local checkout.
+		if (err == v.ErrWrongVCS || err == v.ErrWrongRemote) && force == true {
+			var newRemote string
+			if len(dep.Repository) > 0 {
+				newRemote = dep.Repository
+			} else {
+				newRemote = "https://" + dep.Name
+			}
+
+			Warn("Replacing %s with contents from %s\n", dep.Name, newRemote)
+			rerr := os.RemoveAll(dest)
+			if rerr != nil {
+				return rerr
+			}
+			if err = VcsGet(dep, dest); err != nil {
+				Warn("Unable to checkout %s\n", dep.Name)
+				return err
+			}
+		} else if err != nil {
 			return err
-		}
-		// TODO: Handle the case of a VCS switching. The could be the config
-		// for a VCS or the type of VCS.
-		if err := repo.Update(); err != nil {
-			Warn("Download failed.\n")
-			return err
+		} else {
+			if err := repo.Update(); err != nil {
+				Warn("Download failed.\n")
+				return err
+			}
 		}
 	}
 
diff --git a/cmd/recursive_glide.go b/cmd/recursive_glide.go
index c59ee5b..4916458 100644
--- a/cmd/recursive_glide.go
+++ b/cmd/recursive_glide.go
@@ -16,6 +16,7 @@
 	if !p.Get("enable", true).(bool) {
 		return nil, nil
 	}
+	force := p.Get("force", true).(bool)
 
 	godeps, gpm := false, false
 	if g, ok := p.Has("importGodeps"); ok {
@@ -29,10 +30,10 @@
 	conf := p.Get("conf", &Config{}).(*Config)
 	vend, _ := VendorPath(c)
 
-	return recDepResolve(conf, vend, godeps, gpm)
+	return recDepResolve(conf, vend, godeps, gpm, force)
 }
 
-func recDepResolve(conf *Config, vend string, godeps, gpm bool) (interface{}, error) {
+func recDepResolve(conf *Config, vend string, godeps, gpm, force bool) (interface{}, error) {
 
 	Info("Inspecting %s.\n", vend)
 
@@ -57,7 +58,7 @@
 				continue
 			}
 		}
-		if err := dependencyGlideUp(base, godeps, gpm); err != nil {
+		if err := dependencyGlideUp(base, godeps, gpm, force); err != nil {
 			Warn("Failed to update dependency %s: %s", imp.Name, err)
 		}
 	}
@@ -66,7 +67,7 @@
 	return nil, nil
 }
 
-func dependencyGlideUp(base string, godep, gpm bool) error {
+func dependencyGlideUp(base string, godep, gpm, force bool) error {
 	//conf := new(Config)
 	fname := path.Join(base, "glide.yaml")
 	f, err := yaml.ReadFile(fname)
@@ -91,7 +92,7 @@
 
 		if VcsExists(imp, wd) {
 			Info("Updating project %s (%s)\n", imp.Name, wd)
-			if err := VcsUpdate(imp, vdir); err != nil {
+			if err := VcsUpdate(imp, vdir, force); err != nil {
 				// We can still go on just fine even if this fails.
 				Warn("Skipped update %s: %s\n", imp.Name, err)
 				continue
@@ -112,7 +113,7 @@
 
 		//recDepResolve(conf, path.Join(wd, "vendor"))
 	}
-	recDepResolve(conf, path.Join(base, "vendor"), godep, gpm)
+	recDepResolve(conf, path.Join(base, "vendor"), godep, gpm, force)
 	return nil
 }
 
diff --git a/glide.go b/glide.go
index 6c59854..3d2bc93 100644
--- a/glide.go
+++ b/glide.go
@@ -281,9 +281,14 @@
 					Name:  "import",
 					Usage: "When updating dependencies, convert Godeps (GPM, Godep) to glide.yaml and pull dependencies",
 				},
+				cli.BoolFlag{
+					Name:  "force",
+					Usage: "If there was a change in the repo or VCS switch to new one. Warning, changes will be lost.",
+				},
 			},
 			Action: func(c *cli.Context) {
 				cxt.Put("deleteOptIn", c.Bool("delete"))
+				cxt.Put("forceUpdate", c.Bool("force"))
 				cxt.Put("recursiveDependencies", !c.Bool("no-recursive"))
 				if c.Bool("import") {
 					cxt.Put("importGodeps", true)
@@ -356,6 +361,7 @@
 		Using("enable").From("cxt:recursiveDependencies").
 		Using("importGodeps").From("cxt:importGodeps").
 		Using("importGPM").From("cxt:importGPM").
+		Using("force").From("cxt:forceUpdate").WithDefault(false).
 		Does(cmd.WriteYaml, "out").
 		Using("yaml.Node").From("cxt:merged").
 		Using("filename").WithDefault("glide.yaml").From("cxt:yaml")
@@ -375,12 +381,15 @@
 		Does(cmd.DeleteUnusedPackages, "deleted").
 		Using("conf").From("cxt:cfg").
 		Using("optIn").From("cxt:deleteOptIn").
-		Does(cmd.UpdateImports, "dependencies").Using("conf").From("cxt:cfg").
+		Does(cmd.UpdateImports, "dependencies").
+		Using("conf").From("cxt:cfg").
+		Using("force").From("cxt:forceUpdate").
 		Does(cmd.SetReference, "version").Using("conf").From("cxt:cfg").
 		Does(cmd.Recurse, "recurse").Using("conf").From("cxt:cfg").
 		Using("importGodeps").From("cxt:importGodeps").
 		Using("importGPM").From("cxt:importGPM").
-		Using("enable").From("cxt:recursiveDependencies")
+		Using("enable").From("cxt:recursiveDependencies").
+		Using("force").From("cxt:forceUpdate")
 
 	//Does(cmd.Rebuild, "rebuild").Using("conf").From("cxt:cfg")
 
