diff --git a/cmd/diff.go b/cmd/diff.go
index 7c2a6e14692d76fb5ff5daa3c5e47f67db59b270..bb5ed355e52b40d638fbe4b475eda7b696563fae 100644
--- a/cmd/diff.go
+++ b/cmd/diff.go
@@ -295,7 +295,7 @@ func expandEnvObjs(fs afero.Fs, cmd *cobra.Command, env string, manager metadata
 		return nil, err
 	}
 
-	_, vendorPath := manager.LibPaths()
+	envPath, vendorPath := manager.LibPaths()
 	libPath, mainPath, paramsPath, err := manager.EnvPaths(env)
 	if err != nil {
 		return nil, err
@@ -315,7 +315,7 @@ func expandEnvObjs(fs afero.Fs, cmd *cobra.Command, env string, manager metadata
 		return nil, err
 	}
 
-	expander.FlagJpath = append([]string{string(vendorPath), string(libPath)}, expander.FlagJpath...)
+	expander.FlagJpath = append([]string{string(vendorPath), string(libPath), string(envPath)}, expander.FlagJpath...)
 	expander.ExtCodes = append([]string{baseObj, params, envSpec}, expander.ExtCodes...)
 
 	envFiles := []string{string(mainPath)}
diff --git a/cmd/root.go b/cmd/root.go
index 97970a34e6143cb152b1ac65b6a0dbd657185ab5..76c2d185b17d645ce8f0b21f3f249d2318802f94 100644
--- a/cmd/root.go
+++ b/cmd/root.go
@@ -268,13 +268,13 @@ func (te *cmdObjExpander) Expand() ([]*unstructured.Unstructured, error) {
 		return nil, errors.Wrap(err, "find metadata")
 	}
 
-	_, vendorPath := manager.LibPaths()
+	envPath, vendorPath := manager.LibPaths()
 	libPath, mainPath, _, err := manager.EnvPaths(te.config.env)
 	if err != nil {
 		return nil, err
 	}
 
-	expander.FlagJpath = append([]string{string(vendorPath), string(libPath)}, expander.FlagJpath...)
+	expander.FlagJpath = append([]string{string(vendorPath), string(libPath), string(envPath)}, expander.FlagJpath...)
 
 	namespacedComponentPaths, err := component.MakePathsByNamespace(te.config.fs, manager, te.config.cwd, te.config.env)
 	if err != nil {
diff --git a/integration/fixtures/sampleapp/environments/default/main.jsonnet b/integration/fixtures/sampleapp/environments/default/main.jsonnet
index 23010d3d5012f8954d1cb7b4b4ad62af5d56e9e6..a6363c7472fe2dcf60dcfa46f90a07b7f25c8607 100644
--- a/integration/fixtures/sampleapp/environments/default/main.jsonnet
+++ b/integration/fixtures/sampleapp/environments/default/main.jsonnet
@@ -1,4 +1,4 @@
-local base = import "../base.libsonnet";
+local base = import "base.libsonnet";
 local k = import "k.libsonnet";
 
 base + {
diff --git a/metadata/environment.go b/metadata/environment.go
index 14f867017661d414bc173cffb45ca163329886b7..7b0c2efae811c96c9329c3a32114aa5e3b1117b6 100644
--- a/metadata/environment.go
+++ b/metadata/environment.go
@@ -464,12 +464,8 @@ func (m *manager) cleanEmptyParentDirs(name string) error {
 }
 
 func (m *manager) generateOverrideData() []byte {
-	const (
-		relBaseLibsonnetPath = "../" + baseLibsonnetFile
-	)
-
 	var buf bytes.Buffer
-	buf.WriteString(fmt.Sprintf("local base = import \"%s\";\n", relBaseLibsonnetPath))
+	buf.WriteString(fmt.Sprintf("local base = import \"%s\";\n", baseLibsonnetFile))
 	buf.WriteString(fmt.Sprintf("local k = import \"%s\";\n\n", lib.ExtensionsLibFilename))
 	buf.WriteString("base + {\n")
 	buf.WriteString("  // Insert user-specified overrides here. For example if a component is named \"nginx-deployment\", you might have something like:\n")
diff --git a/metadata/environment_test.go b/metadata/environment_test.go
index 572c343969b22e7f58db9b624394e9218eed9a94..ef74fc111fcb955088a34be0a0c8902bbbe1624e 100644
--- a/metadata/environment_test.go
+++ b/metadata/environment_test.go
@@ -249,7 +249,7 @@ func TestSetEnvironment(t *testing.T) {
 func TestGenerateOverrideData(t *testing.T) {
 	m := mockEnvironments(t, "test-gen-override-data")
 
-	expected := `local base = import "../base.libsonnet";
+	expected := `local base = import "base.libsonnet";
 local k = import "k.libsonnet";
 
 base + {
diff --git a/metadata/interface.go b/metadata/interface.go
index d60dcd82785e6567f6d697752198ab9071785cd3..a2ef70c9fa6cd297c7085c8a19d39fd48e2e7eaa 100644
--- a/metadata/interface.go
+++ b/metadata/interface.go
@@ -37,7 +37,7 @@ var defaultFilePermissions = os.FileMode(0644)
 // libraries; and other non-core-application tasks.
 type Manager interface {
 	Root() string
-	LibPaths() (libPath, vendorPath string)
+	LibPaths() (envPath, vendorPath string)
 	EnvPaths(env string) (libPath, mainPath, paramsPath string, err error)
 
 	// Components API.
diff --git a/metadata/manager.go b/metadata/manager.go
index a6c07d02eba5a63470fe1446cf19cfbb440e77ae..9bae3038ca922617da60ab886a8f910aef7a10fe 100644
--- a/metadata/manager.go
+++ b/metadata/manager.go
@@ -181,8 +181,8 @@ func (m *manager) Root() string {
 	return m.rootPath
 }
 
-func (m *manager) LibPaths() (libPath, vendorPath string) {
-	return m.libPath, m.vendorPath
+func (m *manager) LibPaths() (envPath, vendorPath string) {
+	return m.environmentsPath, m.vendorPath
 }
 
 func (m *manager) createUserDirTree() error {
diff --git a/metadata/manager_test.go b/metadata/manager_test.go
index a8f02018acbd50f6fee94139c6fa520eaaa3de12..9ecb855c77a86f3f5768f09882cb99a8389f7846 100644
--- a/metadata/manager_test.go
+++ b/metadata/manager_test.go
@@ -179,12 +179,12 @@ func TestFindSuccess(t *testing.T) {
 func TestLibPaths(t *testing.T) {
 	appName := "test-lib-paths"
 	expectedVendorPath := path.Join(appName, vendorDir)
-	expectedLibPath := path.Join(appName, libDir)
+	expectedEnvPath := path.Join(appName, environmentsDir)
 	m := mockEnvironments(t, appName)
 
-	libPath, vendorPath := m.LibPaths()
-	if libPath != expectedLibPath {
-		t.Fatalf("Expected lib path to be:\n  '%s'\n, got:\n  '%s'", expectedLibPath, libPath)
+	envPath, vendorPath := m.LibPaths()
+	if envPath != expectedEnvPath {
+		t.Fatalf("Expected env path to be:\n  '%s'\n, got:\n  '%s'", expectedEnvPath, envPath)
 	}
 	if vendorPath != expectedVendorPath {
 		t.Fatalf("Expected vendor lib path to be:\n  '%s'\n, got:\n  '%s'", expectedVendorPath, vendorPath)