diff --git a/path/path.go b/path/path.go
index 0b19442..b939bea 100644
--- a/path/path.go
+++ b/path/path.go
@@ -80,6 +80,25 @@
 
 	gopath := filepath.Join(yamldir, VendorDir)
 
+	// Resolve symlinks
+	info, err := os.Lstat(gopath)
+	if err != nil {
+		return gopath, nil
+	}
+	for i := 0; IsLink(info) && i < 255; i++ {
+		p, err := os.Readlink(gopath)
+		if err != nil {
+			return gopath, nil
+		}
+
+		gopath = filepath.Join(filepath.Dir(gopath), p)
+
+		info, err = os.Lstat(gopath)
+		if err != nil {
+			return gopath, nil
+		}
+	}
+
 	return gopath, nil
 }
 
diff --git a/path/path_test.go b/path/path_test.go
index 0c8a221..77a0276 100644
--- a/path/path_test.go
+++ b/path/path_test.go
@@ -34,6 +34,7 @@
 		t.Fatal(err)
 	}
 	wd, _ := os.Getwd()
+
 	os.Chdir(filepath.Join(td, "a/b/c"))
 	res, err := Vendor()
 	if err != nil {
@@ -43,6 +44,17 @@
 	if res != expect {
 		t.Errorf("Failed to find vendor: expected %s got %s", expect, res)
 	}
+
+	os.Chdir(filepath.Join(td, "x/y/z"))
+	res, err = Vendor()
+	if err != nil {
+		t.Errorf("Failed to resolve vendor directory: %s", err)
+	}
+	expect = filepath.Join(td, "x", "symlinked_vendor")
+	if res != expect {
+		t.Errorf("Failed to find vendor: expected %s got %s", expect, res)
+	}
+
 	os.Chdir(wd)
 }
 func TestGlide(t *testing.T) {
diff --git a/path/strip.go b/path/strip.go
index cb5d118..be00be9 100644
--- a/path/strip.go
+++ b/path/strip.go
@@ -11,7 +11,7 @@
 // StripVcs removes VCS metadata (.git, .hg, .bzr, .svn) from the vendor/
 // directory.
 func StripVcs() error {
-	searchPath := VendorDir + string(os.PathSeparator)
+	searchPath, _ := Vendor()
 	if _, err := os.Stat(searchPath); err != nil {
 		if os.IsNotExist(err) {
 			msg.Debug("Vendor directory does not exist.")
@@ -19,29 +19,27 @@
 
 		return err
 	}
-	return filepath.Walk(searchPath, stripHandler)
-}
 
-func stripHandler(path string, info os.FileInfo, err error) error {
+	return filepath.Walk(searchPath, func(path string, info os.FileInfo, err error) error {
+		name := info.Name()
+		if name == ".git" || name == ".bzr" || name == ".svn" || name == ".hg" {
+			if _, err := os.Stat(path); err == nil {
+				if info.IsDir() {
+					msg.Info("Removing: %s", path)
+					return os.RemoveAll(path)
+				}
 
-	name := info.Name()
-	if name == ".git" || name == ".bzr" || name == ".svn" || name == ".hg" {
-		if _, err := os.Stat(path); err == nil {
-			if info.IsDir() {
-				msg.Info("Removing: %s", path)
-				return os.RemoveAll(path)
+				msg.Debug("%s is not a directory. Skipping removal", path)
+				return nil
 			}
-
-			msg.Debug("%s is not a directory. Skipping removal", path)
-			return nil
 		}
-	}
-	return nil
+		return nil
+	})
 }
 
 // StripVendor removes nested vendor and Godeps/_workspace/ directories.
 func StripVendor() error {
-	searchPath := VendorDir + string(os.PathSeparator)
+	searchPath, _ := Vendor()
 	if _, err := os.Stat(searchPath); err != nil {
 		if os.IsNotExist(err) {
 			msg.Debug("Vendor directory does not exist.")
@@ -52,7 +50,7 @@
 
 	err := filepath.Walk(searchPath, func(path string, info os.FileInfo, err error) error {
 		// Skip the base vendor directory
-		if path == searchPath || path == VendorDir {
+		if path == searchPath {
 			return nil
 		}
 
diff --git a/path/strip_test.go b/path/strip_test.go
index 6c11194..23e9d94 100644
--- a/path/strip_test.go
+++ b/path/strip_test.go
@@ -21,36 +21,44 @@
 	}()
 
 	// Make VCS directories.
-	gp := filepath.Join(tempDir, ".git")
+	v := filepath.Join(tempDir, VendorDir)
+	err = os.Mkdir(v, 0755)
+	if err != nil {
+		t.Error(err)
+	}
+
+	gp := filepath.Join(tempDir, VendorDir, ".git")
 	err = os.Mkdir(gp, 0755)
 	if err != nil {
 		t.Error(err)
 	}
 
-	bp := filepath.Join(tempDir, ".bzr")
+	bp := filepath.Join(tempDir, VendorDir, ".bzr")
 	err = os.Mkdir(bp, 0755)
 	if err != nil {
 		t.Error(err)
 	}
 
-	hp := filepath.Join(tempDir, ".hg")
+	hp := filepath.Join(tempDir, VendorDir, ".hg")
 	err = os.Mkdir(hp, 0755)
 	if err != nil {
 		t.Error(err)
 	}
 
-	sp := filepath.Join(tempDir, ".svn")
+	sp := filepath.Join(tempDir, VendorDir, ".svn")
 	err = os.Mkdir(sp, 0755)
 	if err != nil {
 		t.Error(err)
 	}
 
-	ov := VendorDir
-	VendorDir = tempDir
+	wd, _ := os.Getwd()
+	os.Chdir(tempDir)
 
-	StripVcs()
+	if err := StripVcs(); err != nil {
+		t.Errorf("Failed to strip vcs: %s", err)
+	}
 
-	VendorDir = ov
+	os.Chdir(wd)
 
 	if _, err := os.Stat(gp); !os.IsNotExist(err) {
 		t.Error(".git directory not deleted")
diff --git a/testdata/path/x/glide.yaml b/testdata/path/x/glide.yaml
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/testdata/path/x/glide.yaml
diff --git a/testdata/path/x/vendor b/testdata/path/x/vendor
new file mode 120000
index 0000000..5b13353
--- /dev/null
+++ b/testdata/path/x/vendor
@@ -0,0 +1 @@
+symlinked_vendor
\ No newline at end of file
diff --git a/testdata/path/x/y/z/placeholder.empty b/testdata/path/x/y/z/placeholder.empty
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/testdata/path/x/y/z/placeholder.empty
