diff --git a/action/config_wizard.go b/action/config_wizard.go
index e941399..ae2b317 100644
--- a/action/config_wizard.go
+++ b/action/config_wizard.go
@@ -18,6 +18,7 @@
 // ConfigWizard reads configuration from a glide.yaml file and attempts to suggest
 // improvements. The wizard is interactive.
 func ConfigWizard(base string) {
+	cache.SystemLock()
 	_, err := gpath.Glide()
 	glidefile := gpath.GlideFile
 	if err != nil {
diff --git a/action/get.go b/action/get.go
index aab0e4a..0d5e004 100644
--- a/action/get.go
+++ b/action/get.go
@@ -19,9 +19,7 @@
 //
 // This includes resolving dependency resolution and re-generating the lock file.
 func Get(names []string, installer *repo.Installer, insecure, skipRecursive, stripVendor, nonInteract, testDeps bool) {
-	if installer.UseCache {
-		cache.SystemLock()
-	}
+	cache.SystemLock()
 
 	base := gpath.Basepath()
 	EnsureGopath()
diff --git a/action/install.go b/action/install.go
index b3f5052..2247e1f 100644
--- a/action/install.go
+++ b/action/install.go
@@ -13,9 +13,7 @@
 
 // Install installs a vendor directory based on an existing Glide configuration.
 func Install(installer *repo.Installer, stripVendor bool) {
-	if installer.UseCache {
-		cache.SystemLock()
-	}
+	cache.SystemLock()
 
 	base := "."
 	// Ensure GOPATH
diff --git a/action/list.go b/action/list.go
index f4b3379..29d815f 100644
--- a/action/list.go
+++ b/action/list.go
@@ -25,7 +25,7 @@
 	if err != nil {
 		msg.Die("Could not create a resolver: %s", err)
 	}
-	h := &dependency.DefaultMissingPackageHandler{Missing: []string{}, Gopath: []string{}}
+	h := &dependency.DefaultMissingPackageHandler{Missing: []string{}, Gopath: []string{}, Prefix: "vendor"}
 	r.Handler = h
 
 	localPkgs, _, err := r.ResolveLocal(deep)
diff --git a/action/remove.go b/action/remove.go
index bdf96a1..63a6a58 100644
--- a/action/remove.go
+++ b/action/remove.go
@@ -1,6 +1,7 @@
 package action
 
 import (
+	"github.com/Masterminds/glide/cache"
 	"github.com/Masterminds/glide/cfg"
 	"github.com/Masterminds/glide/msg"
 	gpath "github.com/Masterminds/glide/path"
@@ -9,6 +10,7 @@
 
 // Remove removes a dependncy from the configuration.
 func Remove(packages []string, inst *repo.Installer) {
+	cache.SystemLock()
 	base := gpath.Basepath()
 	EnsureGopath()
 	EnsureVendorDir()
diff --git a/action/update.go b/action/update.go
index 219c98e..91891f4 100644
--- a/action/update.go
+++ b/action/update.go
@@ -13,9 +13,7 @@
 
 // Update updates repos and the lock file from the main glide yaml.
 func Update(installer *repo.Installer, skipRecursive, stripVendor bool) {
-	if installer.UseCache {
-		cache.SystemLock()
-	}
+	cache.SystemLock()
 
 	base := "."
 	EnsureGopath()
diff --git a/cfg/config.go b/cfg/config.go
index 60d385b..06ba9b9 100644
--- a/cfg/config.go
+++ b/cfg/config.go
@@ -368,15 +368,14 @@
 
 // Dependency describes a package that the present package depends upon.
 type Dependency struct {
-	Name             string   `yaml:"package"`
-	Reference        string   `yaml:"version,omitempty"`
-	Pin              string   `yaml:"-"`
-	Repository       string   `yaml:"repo,omitempty"`
-	VcsType          string   `yaml:"vcs,omitempty"`
-	Subpackages      []string `yaml:"subpackages,omitempty"`
-	Arch             []string `yaml:"arch,omitempty"`
-	Os               []string `yaml:"os,omitempty"`
-	UpdateAsVendored bool     `yaml:"-"`
+	Name        string   `yaml:"package"`
+	Reference   string   `yaml:"version,omitempty"`
+	Pin         string   `yaml:"-"`
+	Repository  string   `yaml:"repo,omitempty"`
+	VcsType     string   `yaml:"vcs,omitempty"`
+	Subpackages []string `yaml:"subpackages,omitempty"`
+	Arch        []string `yaml:"arch,omitempty"`
+	Os          []string `yaml:"os,omitempty"`
 }
 
 // A transitive representation of a dependency for importing and exploting to yaml.
@@ -506,15 +505,14 @@
 // Clone creates a clone of a Dependency
 func (d *Dependency) Clone() *Dependency {
 	return &Dependency{
-		Name:             d.Name,
-		Reference:        d.Reference,
-		Pin:              d.Pin,
-		Repository:       d.Repository,
-		VcsType:          d.VcsType,
-		Subpackages:      d.Subpackages,
-		Arch:             d.Arch,
-		Os:               d.Os,
-		UpdateAsVendored: d.UpdateAsVendored,
+		Name:        d.Name,
+		Reference:   d.Reference,
+		Pin:         d.Pin,
+		Repository:  d.Repository,
+		VcsType:     d.VcsType,
+		Subpackages: d.Subpackages,
+		Arch:        d.Arch,
+		Os:          d.Os,
 	}
 }
 
diff --git a/dependency/delete.go b/dependency/delete.go
deleted file mode 100644
index 6456370..0000000
--- a/dependency/delete.go
+++ /dev/null
@@ -1,106 +0,0 @@
-package dependency
-
-import (
-	"errors"
-	"os"
-	"path/filepath"
-	"strings"
-
-	"github.com/Masterminds/glide/cfg"
-	"github.com/Masterminds/glide/msg"
-	gpath "github.com/Masterminds/glide/path"
-)
-
-// DeleteUnused removes packages from vendor/ that are no longer used.
-//
-// TODO: This should work off of a Lock file, not glide.yaml.
-func DeleteUnused(conf *cfg.Config) error {
-	vpath, err := gpath.Vendor()
-	if err != nil {
-		return err
-	}
-	if vpath == "" {
-		return errors.New("Vendor not set")
-	}
-
-	// Build directory tree of what to keep.
-	var pkgList []string
-	for _, dep := range conf.Imports {
-		pkgList = append(pkgList, dep.Name)
-	}
-	for _, dep := range conf.DevImports {
-		pkgList = append(pkgList, dep.Name)
-	}
-
-	var searchPath string
-	var markForDelete []string
-	// Callback function for filepath.Walk to delete packages not in yaml file.
-	fn := func(path string, info os.FileInfo, err error) error {
-		// Bubble up the error
-		if err != nil {
-			return err
-		}
-
-		if info.IsDir() == false || path == searchPath || path == vpath {
-			return nil
-		}
-
-		localPath := strings.TrimPrefix(path, searchPath)
-		keep := false
-
-		// First check if the path has a prefix that's a specific package. If
-		// so we keep it to keep the package.
-		for _, name := range pkgList {
-			if strings.HasPrefix(localPath, name) {
-				keep = true
-			}
-		}
-
-		// If a package is, for example, github.com/Masterminds/glide the
-		// previous look will not mark the directories github.com or
-		// github.com/Masterminds to keep. Here we see if these names prefix
-		// and packages we know about to mark as keepers.
-		if keep == false {
-			for _, name := range pkgList {
-				if strings.HasPrefix(name, localPath) {
-					keep = true
-				}
-			}
-		}
-
-		// If the parent directory has already been marked for delete this
-		// directory doesn't need to be marked.
-		for _, markedDirectory := range markForDelete {
-			if strings.HasPrefix(path, markedDirectory) {
-				return nil
-			}
-		}
-
-		// Remove the directory if we are not keeping it.
-		if keep == false {
-			// Mark for deletion
-			markForDelete = append(markForDelete, path)
-		}
-
-		return nil
-	}
-
-	// Walk vendor directory
-	searchPath = vpath + string(os.PathSeparator)
-	err = filepath.Walk(searchPath, fn)
-	if err != nil {
-		return err
-	}
-
-	// Perform the actual delete.
-	for _, path := range markForDelete {
-		localPath := strings.TrimPrefix(path, searchPath)
-		msg.Info("Removing unused package: %s\n", localPath)
-		rerr := os.RemoveAll(path)
-		if rerr != nil {
-			return rerr
-		}
-	}
-
-	return nil
-}
diff --git a/dependency/resolver.go b/dependency/resolver.go
index 5a31ae2..b3000ee 100644
--- a/dependency/resolver.go
+++ b/dependency/resolver.go
@@ -64,6 +64,7 @@
 type DefaultMissingPackageHandler struct {
 	Missing []string
 	Gopath  []string
+	Prefix  string
 }
 
 // NotFound prints a warning and then stores the package name in Missing.
@@ -88,7 +89,11 @@
 	return nil
 }
 
+// PkgPath returns the path to the package
 func (d *DefaultMissingPackageHandler) PkgPath(pkg string) string {
+	if d.Prefix != "" {
+		return filepath.Join(d.Prefix, pkg)
+	}
 	return pkg
 }
 
@@ -486,9 +491,9 @@
 			// try to brute force the packages with a slower scan.
 			msg.Debug("Using Iterative Scanning for %s", dep)
 			if testDeps {
-				_, imps, err = IterativeScan(vdep)
+				_, imps, err = IterativeScan(r.Handler.PkgPath(dep))
 			} else {
-				imps, _, err = IterativeScan(vdep)
+				imps, _, err = IterativeScan(r.Handler.PkgPath(dep))
 			}
 
 			if err != nil {
@@ -496,7 +501,7 @@
 				continue
 			}
 		} else if err != nil {
-			msg.Debug("ImportDir error on %s: %s", vdep, err)
+			msg.Debug("ImportDir error on %s: %s", r.Handler.PkgPath(dep), err)
 			if strings.HasPrefix(err.Error(), "no buildable Go source") {
 				msg.Debug("No subpackages declared. Skipping %s.", dep)
 				continue
@@ -782,9 +787,9 @@
 		// or main but +build ignore as a build tag. In that case we
 		// try to brute force the packages with a slower scan.
 		if testDeps {
-			_, imps, err = IterativeScan(pkg)
+			_, imps, err = IterativeScan(r.Handler.PkgPath(pkg))
 		} else {
-			imps, _, err = IterativeScan(pkg)
+			imps, _, err = IterativeScan(r.Handler.PkgPath(pkg))
 		}
 
 		if err != nil {
diff --git a/glide.lock b/glide.lock
index 06b0f01..2d3fc9c 100644
--- a/glide.lock
+++ b/glide.lock
@@ -1,5 +1,5 @@
 hash: 67c5571c33bfcb663d32d2b40b9ce1f2a05a3fa2e9f442077277c2782195729c
-updated: 2016-08-11T14:07:30.163990133-04:00
+updated: 2016-08-11T14:22:17.773372627-04:00
 imports:
 - name: github.com/codegangsta/cli
   version: 1efa31f08b9333f1bd4882d61f9d668a70cd902e
diff --git a/path/strip.go b/path/strip.go
index be00be9..62c5fd8 100644
--- a/path/strip.go
+++ b/path/strip.go
@@ -8,35 +8,6 @@
 	"github.com/Masterminds/glide/msg"
 )
 
-// StripVcs removes VCS metadata (.git, .hg, .bzr, .svn) from the vendor/
-// directory.
-func StripVcs() error {
-	searchPath, _ := Vendor()
-	if _, err := os.Stat(searchPath); err != nil {
-		if os.IsNotExist(err) {
-			msg.Debug("Vendor directory does not exist.")
-		}
-
-		return err
-	}
-
-	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)
-				}
-
-				msg.Debug("%s is not a directory. Skipping removal", path)
-				return nil
-			}
-		}
-		return nil
-	})
-}
-
 // StripVendor removes nested vendor and Godeps/_workspace/ directories.
 func StripVendor() error {
 	searchPath, _ := Vendor()
diff --git a/path/strip_test.go b/path/strip_test.go
deleted file mode 100644
index 23e9d94..0000000
--- a/path/strip_test.go
+++ /dev/null
@@ -1,75 +0,0 @@
-package path
-
-import (
-	"io/ioutil"
-	"os"
-	"path/filepath"
-	"testing"
-)
-
-func TestStripVcs(t *testing.T) {
-	tempDir, err := ioutil.TempDir("", "strip-vcs")
-	if err != nil {
-		t.Error(err)
-	}
-
-	defer func() {
-		err = os.RemoveAll(tempDir)
-		if err != nil {
-			t.Error(err)
-		}
-	}()
-
-	// Make VCS directories.
-	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, VendorDir, ".bzr")
-	err = os.Mkdir(bp, 0755)
-	if err != nil {
-		t.Error(err)
-	}
-
-	hp := filepath.Join(tempDir, VendorDir, ".hg")
-	err = os.Mkdir(hp, 0755)
-	if err != nil {
-		t.Error(err)
-	}
-
-	sp := filepath.Join(tempDir, VendorDir, ".svn")
-	err = os.Mkdir(sp, 0755)
-	if err != nil {
-		t.Error(err)
-	}
-
-	wd, _ := os.Getwd()
-	os.Chdir(tempDir)
-
-	if err := StripVcs(); err != nil {
-		t.Errorf("Failed to strip vcs: %s", err)
-	}
-
-	os.Chdir(wd)
-
-	if _, err := os.Stat(gp); !os.IsNotExist(err) {
-		t.Error(".git directory not deleted")
-	}
-	if _, err := os.Stat(hp); !os.IsNotExist(err) {
-		t.Error(".hg directory not deleted")
-	}
-	if _, err := os.Stat(bp); !os.IsNotExist(err) {
-		t.Error(".bzr directory not deleted")
-	}
-	if _, err := os.Stat(sp); !os.IsNotExist(err) {
-		t.Error(".svn directory not deleted")
-	}
-}
diff --git a/repo/installer.go b/repo/installer.go
index 99a6452..bb46db2 100644
--- a/repo/installer.go
+++ b/repo/installer.go
@@ -32,20 +32,6 @@
 	// Vendor contains the path to put the vendor packages
 	Vendor string
 
-	// Use a cache
-	UseCache bool
-	// Use Gopath to cache
-	UseCacheGopath bool
-	// Use Gopath as a source to read from
-	UseGopath bool
-
-	// UpdateVendored instructs the environment to update in a way that is friendly
-	// to packages that have been "vendored in" (e.g. are copies of source, not repos)
-	UpdateVendored bool
-
-	// DeleteUnused deletes packages that are unused, but found in the vendor dir.
-	DeleteUnused bool
-
 	// ResolveAllFiles enables a resolver that will examine the dependencies
 	// of every file of every package, rather than only following imported
 	// packages.
@@ -145,16 +131,11 @@
 
 	m := &MissingPackageHandler{
 		destination: vpath,
-
-		cache:          i.UseCache,
-		cacheGopath:    i.UseCacheGopath,
-		useGopath:      i.UseGopath,
-		home:           i.Home,
-		force:          i.Force,
-		updateVendored: i.UpdateVendored,
-		Config:         conf,
-		Use:            ic,
-		updated:        i.Updated,
+		home:        i.Home,
+		force:       i.Force,
+		Config:      conf,
+		Use:         ic,
+		updated:     i.Updated,
 	}
 
 	v := &VersionHandler{
@@ -502,12 +483,12 @@
 //
 // When a package is found on the GOPATH, this notifies the user.
 type MissingPackageHandler struct {
-	destination                                          string
-	home                                                 string
-	cache, cacheGopath, useGopath, force, updateVendored bool
-	Config                                               *cfg.Config
-	Use                                                  *importCache
-	updated                                              *UpdateTracker
+	destination string
+	home        string
+	force       bool
+	Config      *cfg.Config
+	Use         *importCache
+	updated     *UpdateTracker
 }
 
 // NotFound attempts to retrieve a package when not found in the local vendor/
@@ -573,11 +554,6 @@
 // vendor/ directory or download it from the internet. This is dependent if
 // useGopath on the installer is set to true to copy from the GOPATH.
 func (m *MissingPackageHandler) OnGopath(pkg string, addTest bool) (bool, error) {
-	// If useGopath is false, we fall back to the strategy of fetching from
-	// remote.
-	if !m.useGopath {
-		return m.NotFound(pkg, addTest)
-	}
 
 	root := util.GetRootFromPackage(pkg)
 
diff --git a/repo/vendored_cleanup.go b/repo/vendored_cleanup.go
deleted file mode 100644
index acbab91..0000000
--- a/repo/vendored_cleanup.go
+++ /dev/null
@@ -1,43 +0,0 @@
-package repo
-
-import (
-	"os"
-	"path/filepath"
-
-	"github.com/Masterminds/glide/cfg"
-	"github.com/Masterminds/glide/msg"
-	gpath "github.com/Masterminds/glide/path"
-)
-
-// VendoredCleanup cleans up vendored codebases after an update.
-//
-// This should _only_ be run for installations that do not want VCS repos inside
-// of the vendor/ directory.
-func VendoredCleanup(conf *cfg.Config) error {
-	vend, err := gpath.Vendor()
-	if err != nil {
-		return err
-	}
-
-	for _, dep := range conf.Imports {
-		if dep.UpdateAsVendored == true {
-			msg.Info("Cleaning up vendored package %s\n", dep.Name)
-
-			// Remove the VCS directory
-			cwd := filepath.Join(vend, dep.Name)
-			repo, err := dep.GetRepo(cwd)
-			if err != nil {
-				msg.Err("Error cleaning up %s:%s", dep.Name, err)
-				continue
-			}
-			t := repo.Vcs()
-			err = os.RemoveAll(cwd + string(os.PathSeparator) + "." + string(t))
-			if err != nil {
-				msg.Err("Error cleaning up VCS dir for %s:%s", dep.Name, err)
-			}
-		}
-
-	}
-
-	return nil
-}
