diff --git a/CHANGELOG.md b/CHANGELOG.md
index 934d23c..1e58e71 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -8,6 +8,7 @@
   (thanks janeczku).
 - Fixed #76: Glide tree doesn't exclude core libraries with the GOROOT is
   incorrect (thanks janeczku).
+- Fixed #81: rebuild command did not look in vendor/ directory
 
 # Release 0.5.1 (2015-08-31)
 
diff --git a/cmd/rebuild.go b/cmd/rebuild.go
index 3c52e11..716d8f5 100644
--- a/cmd/rebuild.go
+++ b/cmd/rebuild.go
@@ -5,6 +5,7 @@
 	"os/exec"
 	"path"
 	"path/filepath"
+	"strings"
 
 	"github.com/Masterminds/cookoo"
 )
@@ -16,7 +17,10 @@
 //
 func Rebuild(c cookoo.Context, p *cookoo.Params) (interface{}, cookoo.Interrupt) {
 	cfg := p.Get("conf", nil).(*Config)
-	gopaths := Gopaths()
+	vpath, err := VendorPath(c)
+	if err != nil {
+		return nil, err
+	}
 
 	Info("Building dependencies.\n")
 
@@ -26,8 +30,7 @@
 	}
 
 	for _, dep := range cfg.Imports {
-		gopath := findGopathFor(dep, gopaths)
-		if err := buildDep(c, dep, gopath); err != nil {
+		if err := buildDep(c, dep, vpath); err != nil {
 			Warn("Failed to build %s: %s\n", dep.Name, err)
 		}
 	}
@@ -35,27 +38,7 @@
 	return true, nil
 }
 
-// findPathFor returns a GOPATH for a particular dependency.
-//
-// This does not ensure that the returned GOPATH will result in finding the
-// package. It only ensures that IF this package exists, the most relevant
-// path for looking is the returned path.
-func findGopathFor(dep *Dependency, gopaths []string) string {
-	if len(gopaths) == 0 {
-		return "."
-	}
-	if len(gopaths) == 1 {
-		return gopaths[0]
-	}
-	for _, p := range gopaths {
-		if _, err := os.Stat(path.Join(p, dep.Name)); err == nil {
-			return p
-		}
-	}
-	return gopaths[0]
-}
-
-func buildDep(c cookoo.Context, dep *Dependency, gopath string) error {
+func buildDep(c cookoo.Context, dep *Dependency, vpath string) error {
 	if len(dep.Subpackages) == 0 {
 		buildPath(c, dep.Name)
 	}
@@ -65,7 +48,7 @@
 			//Info("Building all packages in %s\n", dep.Name)
 			buildPath(c, path.Join(dep.Name, "..."))
 		} else {
-			paths, err := resolvePackages(gopath, dep.Name, pkg)
+			paths, err := resolvePackages(vpath, dep.Name, pkg)
 			if err != nil {
 				Warn("Error resolving packages: %s", err)
 			}
@@ -76,14 +59,21 @@
 	return nil
 }
 
-func resolvePackages(gopath, pkg, subpkg string) ([]string, error) {
+func resolvePackages(vpath, pkg, subpkg string) ([]string, error) {
 	sdir, _ := os.Getwd()
-	if err := os.Chdir(path.Join(gopath, "src")); err != nil {
+	if err := os.Chdir(filepath.Join(vpath, pkg, subpkg)); err != nil {
 		return []string{}, err
 	}
 	defer os.Chdir(sdir)
-
-	return filepath.Glob(path.Join(pkg, subpkg))
+	p, err := filepath.Glob(path.Join(vpath, pkg, subpkg))
+	if err != nil {
+		return []string{}, err
+	}
+	for k, v := range p {
+		nv := strings.TrimPrefix(v, vpath)
+		p[k] = strings.TrimPrefix(nv, string(filepath.Separator))
+	}
+	return p, nil
 }
 
 func buildPaths(c cookoo.Context, paths []string) error {
@@ -98,7 +88,9 @@
 
 func buildPath(c cookoo.Context, path string) error {
 	Info("Running go build %s\n", path)
-	out, err := exec.Command("go", "install", path).CombinedOutput()
+	// . in a filepath.Join is removed so it needs to be prepended separately.
+	p := "." + string(filepath.Separator) + filepath.Join("vendor", path)
+	out, err := exec.Command("go", "install", p).CombinedOutput()
 	if err != nil {
 		Warn("Failed to run 'go install' for %s: %s", path, string(out))
 	}
