diff --git a/actions/actions.go b/actions/actions.go
index dc7036fab7f08c427f4c24690a77400ae25b6069..2059cccf30faa1e06aca14d369b163c33568b845 100644
--- a/actions/actions.go
+++ b/actions/actions.go
@@ -54,8 +54,10 @@ const (
 	OptionLibName = "lib-name"
 	// OptionName is name option.
 	OptionName = "name"
-	// OptionNamespaceName is namespaceName option.
-	OptionNamespaceName = "namespace-name"
+	// OptionModule is component module option.
+	OptionModule = "module"
+	// OptionNamespace is a cluster namespace option
+	OptionNamespace = "namespace"
 	// OptionNewEnvName is newEnvName option. Used for renaming environments.
 	OptionNewEnvName = "new-env-name"
 	// OptionOutput is output option.
diff --git a/actions/actions_test.go b/actions/actions_test.go
index 526012bfe2a98ae5db83becb903e1f4fe6b5facc..f643969cd7b0b9fa88ebe38cf3a5bd178ddb8189 100644
--- a/actions/actions_test.go
+++ b/actions/actions_test.go
@@ -101,8 +101,8 @@ func stageFile(t *testing.T, fs afero.Fs, src, dest string) {
 	require.NoError(t, err)
 }
 
-func mockNsWithName(name string) *cmocks.Namespace {
-	m := &cmocks.Namespace{}
+func mockNsWithName(name string) *cmocks.Module {
+	m := &cmocks.Module{}
 	m.On("Name").Return(name)
 	return m
 }
diff --git a/actions/component_list.go b/actions/component_list.go
index e7598a658c8eb8612c331b5e2e80a9cffe1b34fa..305903e9908a20f8f6123cfc9effc320a07cf149 100644
--- a/actions/component_list.go
+++ b/actions/component_list.go
@@ -36,10 +36,10 @@ func RunComponentList(m map[string]interface{}) error {
 	return cl.Run()
 }
 
-// ComponentList create a list of components in a namespace.
+// ComponentList create a list of components in a module.
 type ComponentList struct {
 	app    app.App
-	nsName string
+	module string
 	output string
 	cm     component.Manager
 	out    io.Writer
@@ -51,7 +51,7 @@ func NewComponentList(m map[string]interface{}) (*ComponentList, error) {
 
 	cl := &ComponentList{
 		app:    ol.loadApp(),
-		nsName: ol.loadString(OptionNamespaceName),
+		module: ol.loadString(OptionModule),
 		output: ol.loadString(OptionOutput),
 
 		cm:  component.DefaultManager,
@@ -67,7 +67,7 @@ func NewComponentList(m map[string]interface{}) (*ComponentList, error) {
 
 // Run runs the ComponentList action.
 func (cl *ComponentList) Run() error {
-	ns, err := cl.cm.Namespace(cl.app, cl.nsName)
+	ns, err := cl.cm.Module(cl.app, cl.module)
 	if err != nil {
 		return err
 	}
diff --git a/actions/component_list_test.go b/actions/component_list_test.go
index ff6a1051d74c0a1e86d8c9100fbd41aad7528ccb..609840731b7e2436ba82e78b76d01e1dfd0eff2b 100644
--- a/actions/component_list_test.go
+++ b/actions/component_list_test.go
@@ -28,7 +28,7 @@ import (
 
 func TestComponentList(t *testing.T) {
 	withApp(t, func(appMock *amocks.App) {
-		nsName := ""
+		module := ""
 		output := ""
 
 		c := &cmocks.Component{}
@@ -36,16 +36,16 @@ func TestComponentList(t *testing.T) {
 
 		cs := []component.Component{c}
 
-		ns := &cmocks.Namespace{}
+		ns := &cmocks.Module{}
 		ns.On("Components").Return(cs, nil)
 
 		cm := &cmocks.Manager{}
-		cm.On("Namespace", mock.Anything, "").Return(ns, nil)
+		cm.On("Module", mock.Anything, "").Return(ns, nil)
 
 		in := map[string]interface{}{
-			OptionApp:           appMock,
-			OptionNamespaceName: nsName,
-			OptionOutput:        output,
+			OptionApp:    appMock,
+			OptionModule: module,
+			OptionOutput: output,
 		}
 
 		a, err := NewComponentList(in)
@@ -65,7 +65,7 @@ func TestComponentList(t *testing.T) {
 
 func TestComponentList_wide(t *testing.T) {
 	withApp(t, func(appMock *amocks.App) {
-		nsName := ""
+		module := ""
 		output := "wide"
 
 		summary := []component.Summary{
@@ -76,16 +76,16 @@ func TestComponentList_wide(t *testing.T) {
 
 		cs := []component.Component{c}
 
-		ns := &cmocks.Namespace{}
+		ns := &cmocks.Module{}
 		ns.On("Components").Return(cs, nil)
 
 		cm := &cmocks.Manager{}
-		cm.On("Namespace", mock.Anything, "").Return(ns, nil)
+		cm.On("Module", mock.Anything, "").Return(ns, nil)
 
 		in := map[string]interface{}{
-			OptionApp:           appMock,
-			OptionNamespaceName: nsName,
-			OptionOutput:        output,
+			OptionApp:    appMock,
+			OptionModule: module,
+			OptionOutput: output,
 		}
 
 		a, err := NewComponentList(in)
diff --git a/actions/component_rm.go b/actions/component_rm.go
index 985ad96fd934dad400eb3d1409a3af2e0e556954..3ac8e6df169f70103fdfaefe8a783991ea2b1956 100644
--- a/actions/component_rm.go
+++ b/actions/component_rm.go
@@ -30,7 +30,7 @@ func RunComponentRm(m map[string]interface{}) error {
 	return cr.Run()
 }
 
-// ComponentRm create a list of components in a namespace.
+// ComponentRm removes a component from a module.
 type ComponentRm struct {
 	app  app.App
 	name string
diff --git a/actions/env_add.go b/actions/env_add.go
index d5269c9f75929547b0e8a50f1316b9fd1b302ad9..26af36d5faa35ddb5afcf3c120709da2a9ace140 100644
--- a/actions/env_add.go
+++ b/actions/env_add.go
@@ -50,7 +50,7 @@ func NewEnvAdd(m map[string]interface{}) (*EnvAdd, error) {
 		app:         ol.loadApp(),
 		envName:     ol.loadString(OptionEnvName),
 		server:      ol.loadString(OptionServer),
-		namespace:   ol.loadString(OptionNamespaceName),
+		namespace:   ol.loadString(OptionModule),
 		k8sSpecFlag: ol.loadString(OptionSpecFlag),
 		isOverride:  ol.loadBool(OptionOverride),
 
diff --git a/actions/env_add_test.go b/actions/env_add_test.go
index 48fbb1e85efcfe5e121106f8c53f75bf557265e2..e5515da056355ae607017fa83088d312c56bace6 100644
--- a/actions/env_add_test.go
+++ b/actions/env_add_test.go
@@ -34,12 +34,12 @@ func TestEnvAdd(t *testing.T) {
 		aIsOverride := false
 
 		in := map[string]interface{}{
-			OptionApp:           appMock,
-			OptionEnvName:       aName,
-			OptionServer:        aServer,
-			OptionNamespaceName: aNamespace,
-			OptionSpecFlag:      aK8sSpecFlag,
-			OptionOverride:      aIsOverride,
+			OptionApp:      appMock,
+			OptionEnvName:  aName,
+			OptionServer:   aServer,
+			OptionModule:   aNamespace,
+			OptionSpecFlag: aK8sSpecFlag,
+			OptionOverride: aIsOverride,
 		}
 
 		a, err := NewEnvAdd(in)
diff --git a/actions/env_set.go b/actions/env_set.go
index e18e1737b07a75ae938cd2acd3eee84dd6ad2d31..2458b4e5b63292d8655582f8f9cbd6977ad22797 100644
--- a/actions/env_set.go
+++ b/actions/env_set.go
@@ -67,7 +67,7 @@ func NewEnvSet(m map[string]interface{}) (*EnvSet, error) {
 		app:       ol.loadApp(),
 		envName:   ol.loadString(OptionEnvName),
 		newName:   ol.loadOptionalString(OptionNewEnvName),
-		newNsName: ol.loadOptionalString(OptionNamespaceName),
+		newNsName: ol.loadOptionalString(OptionNamespace),
 
 		envRenameFn: env.Rename,
 		updateEnvFn: updateEnv,
diff --git a/actions/env_set_test.go b/actions/env_set_test.go
index 8cff81f8d96356861b6fc45f619929c4b3a60853..bac47661fcd4315e626857c663be512a979e11d4 100644
--- a/actions/env_set_test.go
+++ b/actions/env_set_test.go
@@ -62,12 +62,12 @@ func TestEnvSet_name(t *testing.T) {
 func TestEnvSet_namespace(t *testing.T) {
 	withApp(t, func(appMock *amocks.App) {
 		envName := "default"
-		nsName := "ns2"
+		namespace := "ns2"
 
 		in := map[string]interface{}{
-			OptionApp:           appMock,
-			OptionEnvName:       envName,
-			OptionNamespaceName: nsName,
+			OptionApp:     appMock,
+			OptionEnvName: envName,
+			OptionModule:  namespace,
 		}
 		a, err := NewEnvSet(in)
 		require.NoError(t, err)
@@ -80,7 +80,7 @@ func TestEnvSet_namespace(t *testing.T) {
 
 		updatedSpec := &app.EnvironmentSpec{
 			Destination: &app.EnvironmentDestinationSpec{
-				Namespace: nsName,
+				Namespace: namespace,
 			},
 		}
 
@@ -96,13 +96,13 @@ func TestEnvSet_name_and_namespace(t *testing.T) {
 	withApp(t, func(appMock *amocks.App) {
 		envName := "default"
 		newName := "dev"
-		nsName := "ns2"
+		namespace := "ns2"
 
 		in := map[string]interface{}{
-			OptionApp:           appMock,
-			OptionEnvName:       envName,
-			OptionNewEnvName:    newName,
-			OptionNamespaceName: nsName,
+			OptionApp:        appMock,
+			OptionEnvName:    envName,
+			OptionNewEnvName: newName,
+			OptionModule:     namespace,
 		}
 
 		a, err := NewEnvSet(in)
@@ -118,7 +118,7 @@ func TestEnvSet_name_and_namespace(t *testing.T) {
 
 		a.updateEnvFn = func(a app.App, name string, spec *app.EnvironmentSpec, override bool) error {
 			assert.Equal(t, envName, name)
-			assert.Equal(t, nsName, spec.Destination.Namespace)
+			assert.Equal(t, namespace, spec.Destination.Namespace)
 			assert.False(t, override)
 
 			return nil
@@ -132,7 +132,7 @@ func TestEnvSet_name_and_namespace(t *testing.T) {
 
 		updatedSpec := &app.EnvironmentSpec{
 			Destination: &app.EnvironmentDestinationSpec{
-				Namespace: nsName,
+				Namespace: namespace,
 			},
 		}
 
diff --git a/actions/env_targets.go b/actions/env_targets.go
index d7e31867fc9c5acda3f085220206f6adf6aeeaad..2e9650931d428925b98ee3c360957b21815be111 100644
--- a/actions/env_targets.go
+++ b/actions/env_targets.go
@@ -34,7 +34,7 @@ func RunEnvTargets(m map[string]interface{}) error {
 type EnvTargets struct {
 	app     app.App
 	envName string
-	nsNames []string
+	modules []string
 	cm      component.Manager
 }
 
@@ -45,7 +45,7 @@ func NewEnvTargets(m map[string]interface{}) (*EnvTargets, error) {
 	et := &EnvTargets{
 		app:     ol.loadApp(),
 		envName: ol.loadString(OptionEnvName),
-		nsNames: ol.loadStringSlice(OptionNamespaceName),
+		modules: ol.loadStringSlice(OptionModule),
 
 		cm: component.DefaultManager,
 	}
@@ -64,12 +64,12 @@ func (et *EnvTargets) Run() error {
 		return err
 	}
 
-	for _, nsName := range et.nsNames {
-		_, err := et.cm.Namespace(et.app, nsName)
+	for _, module := range et.modules {
+		_, err := et.cm.Module(et.app, module)
 		if err != nil {
 			return err
 		}
 	}
 
-	return et.app.UpdateTargets(et.envName, et.nsNames)
+	return et.app.UpdateTargets(et.envName, et.modules)
 }
diff --git a/actions/env_targets_test.go b/actions/env_targets_test.go
index 7aff7b87578fb01a04c4684327357ce89ef8618b..6763e508eeb8e604942156f2a1c325b39b51a8a8 100644
--- a/actions/env_targets_test.go
+++ b/actions/env_targets_test.go
@@ -30,25 +30,25 @@ import (
 func TestEnvTargets(t *testing.T) {
 	withApp(t, func(appMock *amocks.App) {
 		envName := "default"
-		nsNames := []string{"foo"}
+		modules := []string{"foo"}
 
 		env := &app.EnvironmentSpec{}
 		appMock.On("Environment", "default").Return(env, nil)
-		appMock.On("UpdateTargets", envName, nsNames).Return(nil)
+		appMock.On("UpdateTargets", envName, modules).Return(nil)
 
 		in := map[string]interface{}{
-			OptionApp:           appMock,
-			OptionEnvName:       envName,
-			OptionNamespaceName: nsNames,
+			OptionApp:     appMock,
+			OptionEnvName: envName,
+			OptionModule:  modules,
 		}
 
 		a, err := NewEnvTargets(in)
 		require.NoError(t, err)
 
-		ns := &cmocks.Namespace{}
+		ns := &cmocks.Module{}
 
 		cm := &cmocks.Manager{}
-		cm.On("Namespace", mock.Anything, "foo").Return(ns, nil)
+		cm.On("Module", mock.Anything, "foo").Return(ns, nil)
 
 		a.cm = cm
 
@@ -57,28 +57,28 @@ func TestEnvTargets(t *testing.T) {
 	})
 }
 
-func TestEnvTargets_invalid_namespace(t *testing.T) {
+func TestEnvTargets_invalid_module(t *testing.T) {
 	withApp(t, func(appMock *amocks.App) {
 		envName := "default"
-		nsNames := []string{"foo"}
+		modules := []string{"foo"}
 
 		env := &app.EnvironmentSpec{}
 		appMock.On("Environment", "default").Return(env, nil)
-		appMock.On("UpdateTargets", envName, nsNames).Return(nil)
+		appMock.On("UpdateTargets", envName, modules).Return(nil)
 
 		in := map[string]interface{}{
-			OptionApp:           appMock,
-			OptionEnvName:       envName,
-			OptionNamespaceName: nsNames,
+			OptionApp:     appMock,
+			OptionEnvName: envName,
+			OptionModule:  modules,
 		}
 
 		a, err := NewEnvTargets(in)
 		require.NoError(t, err)
 
-		ns := &cmocks.Namespace{}
+		ns := &cmocks.Module{}
 
 		cm := &cmocks.Manager{}
-		cm.On("Namespace", mock.Anything, "foo").Return(ns, errors.New("fail"))
+		cm.On("Module", mock.Anything, "foo").Return(ns, errors.New("fail"))
 
 		a.cm = cm
 
@@ -90,16 +90,16 @@ func TestEnvTargets_invalid_namespace(t *testing.T) {
 func TestEnvTargets_invalid_environment(t *testing.T) {
 	withApp(t, func(appMock *amocks.App) {
 		envName := "invalid"
-		nsNames := []string{"foo"}
+		modules := []string{"foo"}
 
 		env := &app.EnvironmentSpec{}
 		envErr := errors.New("environment invalid was not found")
 		appMock.On("Environment", "invalid").Return(env, envErr)
 
 		in := map[string]interface{}{
-			OptionApp:           appMock,
-			OptionEnvName:       envName,
-			OptionNamespaceName: nsNames,
+			OptionApp:     appMock,
+			OptionEnvName: envName,
+			OptionModule:  modules,
 		}
 
 		a, err := NewEnvTargets(in)
diff --git a/actions/import.go b/actions/import.go
index 9d10b89fb030d3ffa3758ae37585aff699b867cc..98624c8b086e025adf3645d39b2755a349817e15 100644
--- a/actions/import.go
+++ b/actions/import.go
@@ -42,19 +42,19 @@ func RunImport(m map[string]interface{}) error {
 // Import imports files or directories into ksonnet.
 type Import struct {
 	app    app.App
-	nsName string
+	module string
 	path   string
 	cm     component.Manager
 }
 
-// NewImport creates an instance of Import. `nsName` is the name of the component and
+// NewImport creates an instance of Import. `module` is the name of the component and
 // entity is the file or directory to import.
 func NewImport(m map[string]interface{}) (*Import, error) {
 	ol := newOptionLoader(m)
 
 	i := &Import{
 		app:    ol.loadApp(),
-		nsName: ol.loadString(OptionNamespaceName),
+		module: ol.loadString(OptionModule),
 		path:   ol.loadString(OptionPath),
 
 		cm: component.DefaultManager,
@@ -106,8 +106,8 @@ func (i *Import) Run() error {
 
 func (i *Import) importFile(fileName string) error {
 	var name bytes.Buffer
-	if i.nsName != "" {
-		name.WriteString(i.nsName + "/")
+	if i.module != "" {
+		name.WriteString(i.module + "/")
 	}
 
 	base := filepath.Base(fileName)
diff --git a/actions/import_test.go b/actions/import_test.go
index fb19f8d3d1d33e8b57163941379526023c5f8944..f0a89d34bcfba17c963c105e7f6fe721e1ee5dbd 100644
--- a/actions/import_test.go
+++ b/actions/import_test.go
@@ -29,15 +29,15 @@ import (
 
 func TestImport_file(t *testing.T) {
 	withApp(t, func(appMock *amocks.App) {
-		nsName := "/"
+		module := "/"
 		path := "/file.yaml"
 
 		stageFile(t, appMock.Fs(), "import/file.yaml", path)
 
 		in := map[string]interface{}{
-			OptionApp:           appMock,
-			OptionNamespaceName: nsName,
-			OptionPath:          path,
+			OptionApp:    appMock,
+			OptionModule: module,
+			OptionPath:   path,
 		}
 
 		a, err := NewImport(in)
@@ -56,15 +56,15 @@ func TestImport_file(t *testing.T) {
 
 func TestImport_directory(t *testing.T) {
 	withApp(t, func(appMock *amocks.App) {
-		nsName := "/"
+		module := "/"
 		path := "/import"
 
 		stageFile(t, appMock.Fs(), "import/file.yaml", "/import/file.yaml")
 
 		in := map[string]interface{}{
-			OptionApp:           appMock,
-			OptionNamespaceName: nsName,
-			OptionPath:          path,
+			OptionApp:    appMock,
+			OptionModule: module,
+			OptionPath:   path,
 		}
 
 		a, err := NewImport(in)
@@ -83,13 +83,13 @@ func TestImport_directory(t *testing.T) {
 
 func TestImport_invalid_file(t *testing.T) {
 	withApp(t, func(appMock *amocks.App) {
-		nsName := "/"
+		module := "/"
 		path := "/import"
 
 		in := map[string]interface{}{
-			OptionApp:           appMock,
-			OptionNamespaceName: nsName,
-			OptionPath:          path,
+			OptionApp:    appMock,
+			OptionModule: module,
+			OptionPath:   path,
 		}
 
 		a, err := NewImport(in)
diff --git a/actions/init.go b/actions/init.go
index 5ef2f716b810f76c8b5b8327568f3a27a50c31e5..8723871b90740f610591033bc038496acc27b8e8 100644
--- a/actions/init.go
+++ b/actions/init.go
@@ -27,7 +27,7 @@ const (
 	defaultIncubatorURI     = "github.com/ksonnet/parts/tree/master/" + defaultIncubatorRegName
 )
 
-// RunInit creates a namespace.
+// RunInit initializes an app.
 func RunInit(m map[string]interface{}) error {
 	i, err := NewInit(m)
 	if err != nil {
@@ -68,7 +68,7 @@ func NewInit(m map[string]interface{}) (*Init, error) {
 		rootPath:              ol.loadString(OptionRootPath),
 		k8sSpecFlag:           ol.loadString(OptionSpecFlag),
 		serverURI:             ol.loadOptionalString(OptionServer),
-		namespace:             ol.loadString(OptionNamespaceName),
+		namespace:             ol.loadString(OptionNamespace),
 		skipDefaultRegistries: ol.loadBool(OptionSkipDefaultRegistries),
 
 		appInitFn:       appinit.Init,
diff --git a/actions/init_test.go b/actions/init_test.go
index 6a77915ec02fa3bdbd2e118cf3cdde20cfafd361..63598dc3dc3e27016f5adc2806948a39666f0a26 100644
--- a/actions/init_test.go
+++ b/actions/init_test.go
@@ -57,7 +57,7 @@ func TestInit(t *testing.T) {
 					OptionRootPath:              aRootPath,
 					OptionSpecFlag:              aK8sSpecFlag,
 					OptionServer:                aServerURI,
-					OptionNamespaceName:         aNamespace,
+					OptionNamespace:             aNamespace,
 					OptionSkipDefaultRegistries: tc.skipRegistries,
 				}
 
diff --git a/actions/ns_create.go b/actions/module_create.go
similarity index 61%
rename from actions/ns_create.go
rename to actions/module_create.go
index 221706ff40442bac6aabf314e1ba12842975b88e..630f94742a8b2cb23b373d3467e5107e0daf7666 100644
--- a/actions/ns_create.go
+++ b/actions/module_create.go
@@ -21,43 +21,43 @@ import (
 	"github.com/pkg/errors"
 )
 
-// RunNsCreate creates a namespace.
-func RunNsCreate(m map[string]interface{}) error {
-	nc, err := NewNsCreate(m)
+// RunModuleCreate creates a module.
+func RunModuleCreate(m map[string]interface{}) error {
+	mc, err := NewModuleCreate(m)
 	if err != nil {
 		return err
 	}
 
-	return nc.Run()
+	return mc.Run()
 }
 
-// NsCreate creates a component namespace
-type NsCreate struct {
+// ModuleCreate creates a component module
+type ModuleCreate struct {
 	app    app.App
-	nsName string
+	module string
 	cm     component.Manager
 }
 
-// NewNsCreate creates an instance of NsCreate.
-func NewNsCreate(m map[string]interface{}) (*NsCreate, error) {
+// NewModuleCreate creates an instance of ModuleCreate.
+func NewModuleCreate(m map[string]interface{}) (*ModuleCreate, error) {
 	ol := newOptionLoader(m)
 
-	et := &NsCreate{
+	mc := &ModuleCreate{
 		app:    ol.loadApp(),
-		nsName: ol.loadString(OptionNamespaceName),
+		module: ol.loadString(OptionModule),
 
 		cm: component.DefaultManager,
 	}
 
-	return et, nil
+	return mc, nil
 }
 
 // Run runs that ns create action.
-func (nc *NsCreate) Run() error {
-	_, err := nc.cm.Namespace(nc.app, nc.nsName)
+func (mc *ModuleCreate) Run() error {
+	_, err := mc.cm.Module(mc.app, mc.module)
 	if err == nil {
-		return errors.Errorf("namespace %q already exists", nc.nsName)
+		return errors.Errorf("module %q already exists", mc.module)
 	}
 
-	return nc.cm.CreateNamespace(nc.app, nc.nsName)
+	return mc.cm.CreateModule(mc.app, mc.module)
 }
diff --git a/actions/ns_create_test.go b/actions/module_create_test.go
similarity index 70%
rename from actions/ns_create_test.go
rename to actions/module_create_test.go
index 6e0bf54c84ed14e091b3d1aee8ea7a3cbc8ce9ff..2cd1dadf2fe4f0d9dfa36f48860279ce6d3ab253 100644
--- a/actions/ns_create_test.go
+++ b/actions/module_create_test.go
@@ -26,21 +26,21 @@ import (
 	"github.com/stretchr/testify/require"
 )
 
-func TestNsCreate(t *testing.T) {
+func TestModuleCreate(t *testing.T) {
 	withApp(t, func(appMock *amocks.App) {
 		in := map[string]interface{}{
-			OptionApp:           appMock,
-			OptionNamespaceName: "name",
+			OptionApp:    appMock,
+			OptionModule: "name",
 		}
 
-		a, err := NewNsCreate(in)
+		a, err := NewModuleCreate(in)
 		require.NoError(t, err)
 
-		ns := &cmocks.Namespace{}
+		ns := &cmocks.Module{}
 
 		cm := &cmocks.Manager{}
-		cm.On("Namespace", mock.Anything, "name").Return(ns, errors.New("it exists"))
-		cm.On("CreateNamespace", mock.Anything, "name").Return(nil)
+		cm.On("Module", mock.Anything, "name").Return(ns, errors.New("it exists"))
+		cm.On("CreateModule", mock.Anything, "name").Return(nil)
 
 		a.cm = cm
 
@@ -50,20 +50,20 @@ func TestNsCreate(t *testing.T) {
 	})
 }
 
-func TestNsCreate_already_exists(t *testing.T) {
+func TestModuleCreate_already_exists(t *testing.T) {
 	withApp(t, func(appMock *amocks.App) {
 		in := map[string]interface{}{
-			OptionApp:           appMock,
-			OptionNamespaceName: "name",
+			OptionApp:    appMock,
+			OptionModule: "name",
 		}
 
-		a, err := NewNsCreate(in)
+		a, err := NewModuleCreate(in)
 		require.NoError(t, err)
 
-		ns := &cmocks.Namespace{}
+		ns := &cmocks.Module{}
 
 		cm := &cmocks.Manager{}
-		cm.On("Namespace", mock.Anything, "name").Return(ns, nil)
+		cm.On("Module", mock.Anything, "name").Return(ns, nil)
 
 		a.cm = cm
 
diff --git a/actions/ns_list.go b/actions/module_list.go
similarity index 70%
rename from actions/ns_list.go
rename to actions/module_list.go
index a7fca49f2f5a14dfb3f3721a6319f11b4532786b..c9dd16af4a99e0addf6882e81906b151a344c6e0 100644
--- a/actions/ns_list.go
+++ b/actions/module_list.go
@@ -25,9 +25,9 @@ import (
 	"github.com/ksonnet/ksonnet/pkg/util/table"
 )
 
-// RunNsList runs `ns list`
-func RunNsList(m map[string]interface{}) error {
-	nl, err := NewNsList(m)
+// RunModuleList runs `module list`
+func RunModuleList(m map[string]interface{}) error {
+	nl, err := NewModuleList(m)
 	if err != nil {
 		return err
 	}
@@ -35,19 +35,19 @@ func RunNsList(m map[string]interface{}) error {
 	return nl.Run()
 }
 
-// NsList lists namespaces.
-type NsList struct {
+// ModuleList lists modules.
+type ModuleList struct {
 	app     app.App
 	envName string
 	out     io.Writer
 	cm      component.Manager
 }
 
-// NewNsList creates an instance of NsList.
-func NewNsList(m map[string]interface{}) (*NsList, error) {
+// NewModuleList creates an instance of ModuleList.
+func NewModuleList(m map[string]interface{}) (*ModuleList, error) {
 	ol := newOptionLoader(m)
 
-	nl := &NsList{
+	nl := &ModuleList{
 		app:     ol.loadApp(),
 		envName: ol.loadString(OptionEnvName),
 
@@ -62,19 +62,19 @@ func NewNsList(m map[string]interface{}) (*NsList, error) {
 	return nl, nil
 }
 
-// Run lists namespaces.
-func (nl *NsList) Run() error {
-	namespaces, err := nl.cm.Namespaces(nl.app, nl.envName)
+// Run lists modules.
+func (nl *ModuleList) Run() error {
+	modules, err := nl.cm.Modules(nl.app, nl.envName)
 	if err != nil {
 		return err
 	}
 
 	t := table.New(nl.out)
-	t.SetHeader([]string{"namespace"})
+	t.SetHeader([]string{"module"})
 
-	names := make([]string, len(namespaces))
-	for i := range namespaces {
-		names[i] = namespaces[i].Name()
+	names := make([]string, len(modules))
+	for i := range modules {
+		names[i] = modules[i].Name()
 	}
 
 	sort.Strings(names)
diff --git a/actions/ns_list_test.go b/actions/module_list_test.go
similarity index 88%
rename from actions/ns_list_test.go
rename to actions/module_list_test.go
index 4689c51aa1d7e00860310505c7dccae6cded2879..1ef1e72322d152ea5c2f3ec718fe4650492d4311 100644
--- a/actions/ns_list_test.go
+++ b/actions/module_list_test.go
@@ -25,22 +25,22 @@ import (
 	"github.com/stretchr/testify/require"
 )
 
-func TestNsList(t *testing.T) {
+func TestModuleList(t *testing.T) {
 	withApp(t, func(appMock *amocks.App) {
 		cm := &cmocks.Manager{}
 
-		namespaces := []component.Namespace{
+		modules := []component.Module{
 			mockNsWithName("b"),
 			mockNsWithName("a"),
 		}
-		cm.On("Namespaces", appMock, "").Return(namespaces, nil)
+		cm.On("Modules", appMock, "").Return(modules, nil)
 
 		in := map[string]interface{}{
 			OptionApp:     appMock,
 			OptionEnvName: "",
 		}
 
-		a, err := NewNsList(in)
+		a, err := NewModuleList(in)
 		require.NoError(t, err)
 
 		a.cm = cm
diff --git a/actions/param_list.go b/actions/param_list.go
index 394877e5233b7d66f2b7a91e43ce2db9146c6215..7e6e28a7db71491ac5bebcfbd48ff1bc5aee3362 100644
--- a/actions/param_list.go
+++ b/actions/param_list.go
@@ -38,7 +38,7 @@ func RunParamList(m map[string]interface{}) error {
 // ParamList lists parameters for a component.
 type ParamList struct {
 	app           app.App
-	nsName        string
+	module        string
 	componentName string
 	envName       string
 	cm            component.Manager
@@ -51,7 +51,7 @@ func NewParamList(m map[string]interface{}) (*ParamList, error) {
 
 	pl := &ParamList{
 		app:           ol.loadApp(),
-		nsName:        ol.loadString(OptionNamespaceName),
+		module:        ol.loadString(OptionModule),
 		componentName: ol.loadString(OptionComponentName),
 		envName:       ol.loadString(OptionEnvName),
 
@@ -68,7 +68,7 @@ func NewParamList(m map[string]interface{}) (*ParamList, error) {
 
 // Run runs the ParamList action.
 func (pl *ParamList) Run() error {
-	ns, err := pl.cm.Namespace(pl.app, pl.nsName)
+	ns, err := pl.cm.Module(pl.app, pl.module)
 	if err != nil {
 		return errors.Wrap(err, "could not find namespace")
 	}
@@ -90,12 +90,12 @@ func (pl *ParamList) Run() error {
 	return nil
 }
 
-func (pl *ParamList) collectParams(ns component.Namespace) ([]component.NamespaceParameter, error) {
+func (pl *ParamList) collectParams(ns component.Module) ([]component.ModuleParameter, error) {
 	if pl.componentName == "" {
 		return ns.Params(pl.envName)
 	}
 
-	c, err := pl.cm.Component(pl.app, pl.nsName, pl.componentName)
+	c, err := pl.cm.Component(pl.app, pl.module, pl.componentName)
 	if err != nil {
 		return nil, err
 	}
diff --git a/actions/param_list_test.go b/actions/param_list_test.go
index b6fc08c99d4730a6b4c3ba705889efea1adfbbd8..13d1bb7d57a86dd097beec46cccc54e4b02d14b0 100644
--- a/actions/param_list_test.go
+++ b/actions/param_list_test.go
@@ -29,26 +29,26 @@ import (
 func TestParamList_with_component_name(t *testing.T) {
 	withApp(t, func(appMock *amocks.App) {
 		componentName := "deployment"
-		nsName := "ns"
+		module := "ns"
 		envName := ""
 
-		ns := &cmocks.Namespace{}
+		ns := &cmocks.Module{}
 
 		c := &cmocks.Component{}
 
-		nsParams := []component.NamespaceParameter{
+		nsParams := []component.ModuleParameter{
 			{Component: "deployment", Index: "0", Key: "key", Value: `"value"`},
 		}
 		c.On("Params", "").Return(nsParams, nil)
 
 		cm := &cmocks.Manager{}
-		cm.On("Namespace", mock.Anything, "ns").Return(ns, nil)
+		cm.On("Module", mock.Anything, "ns").Return(ns, nil)
 		cm.On("Component", mock.Anything, "ns", "deployment").Return(c, nil)
 
 		in := map[string]interface{}{
 			OptionApp:           appMock,
 			OptionComponentName: componentName,
-			OptionNamespaceName: nsName,
+			OptionModule:        module,
 			OptionEnvName:       envName,
 		}
 
@@ -70,25 +70,25 @@ func TestParamList_with_component_name(t *testing.T) {
 func TestParamList_without_component_name(t *testing.T) {
 	withApp(t, func(appMock *amocks.App) {
 		componentName := ""
-		nsName := "ns"
+		module := "ns"
 		envName := ""
 
-		nsParams := []component.NamespaceParameter{
+		nsParams := []component.ModuleParameter{
 			{Component: "deployment", Index: "0", Key: "key1", Value: `"value"`},
 			{Component: "deployment", Index: "0", Key: "key2", Value: `"value"`},
 		}
 
-		ns := &cmocks.Namespace{}
+		ns := &cmocks.Module{}
 
 		ns.On("Params", "").Return(nsParams, nil)
 
 		cm := &cmocks.Manager{}
-		cm.On("Namespace", mock.Anything, "ns").Return(ns, nil)
+		cm.On("Module", mock.Anything, "ns").Return(ns, nil)
 
 		in := map[string]interface{}{
 			OptionApp:           appMock,
 			OptionComponentName: componentName,
-			OptionNamespaceName: nsName,
+			OptionModule:        module,
 			OptionEnvName:       envName,
 		}
 
diff --git a/actions/param_set.go b/actions/param_set.go
index 2db3d16c830c041647fa8df3d7a673ece2fe7707..78b1fa1ccad68e1daaf622c8121254df6674ac70 100644
--- a/actions/param_set.go
+++ b/actions/param_set.go
@@ -107,12 +107,12 @@ func (ps *ParamSet) Run() error {
 }
 
 func (ps *ParamSet) setGlobal(path []string, value interface{}) error {
-	ns, err := ps.cm.Namespace(ps.app, ps.name)
+	module, err := ps.cm.Module(ps.app, ps.name)
 	if err != nil {
-		return errors.Wrap(err, "retrieve namespace")
+		return errors.Wrap(err, "retrieve module")
 	}
 
-	if err := ns.SetParam(path, value); err != nil {
+	if err := module.SetParam(path, value); err != nil {
 		return errors.Wrap(err, "set global param")
 	}
 
diff --git a/actions/param_set_test.go b/actions/param_set_test.go
index 6d5ce0e0341b5028ab720d39992e9356fc9a6f85..ae2d36a4b0ab8bf98f1468e4fb49bdfb65c1ceee 100644
--- a/actions/param_set_test.go
+++ b/actions/param_set_test.go
@@ -91,20 +91,20 @@ func TestParamSet_index(t *testing.T) {
 
 func TestParamSet_global(t *testing.T) {
 	withApp(t, func(appMock *amocks.App) {
-		nsName := "/"
+		module := "/"
 		path := "replicas"
 		value := "3"
 
 		cm := &cmocks.Manager{}
 
-		ns := &cmocks.Namespace{}
+		ns := &cmocks.Module{}
 		ns.On("SetParam", []string{"replicas"}, 3).Return(nil)
 
-		cm.On("Namespace", appMock, "/").Return(ns, nil)
+		cm.On("Module", appMock, "/").Return(ns, nil)
 
 		in := map[string]interface{}{
 			OptionApp:    appMock,
-			OptionName:   nsName,
+			OptionName:   module,
 			OptionPath:   path,
 			OptionValue:  value,
 			OptionGlobal: true,
diff --git a/actions/pkg_describe.go b/actions/pkg_describe.go
index aa96545ff9d5698e9951ef41e029e24fbc8f3a57..ad2e3d1816e79e3bdfc6924235564fcd7eb5db04 100644
--- a/actions/pkg_describe.go
+++ b/actions/pkg_describe.go
@@ -35,7 +35,7 @@ func RunPkgDescribe(m map[string]interface{}) error {
 	return pd.Run()
 }
 
-// PkgDescribe lists namespaces.
+// PkgDescribe describes a package.
 type PkgDescribe struct {
 	app            app.App
 	pkgName        string
@@ -64,7 +64,7 @@ func NewPkgDescribe(m map[string]interface{}) (*PkgDescribe, error) {
 	return pd, nil
 }
 
-// Run lists namespaces.
+// Run describes a package.
 func (pd *PkgDescribe) Run() error {
 	d, err := pkg.ParseName(pd.pkgName)
 	if err != nil {
diff --git a/actions/pkg_install.go b/actions/pkg_install.go
index e7d7e7b83a0c5e51f532a329e77256732d94e4d4..bb29a08b9bba4a18fe1918e02925c87e16755527 100644
--- a/actions/pkg_install.go
+++ b/actions/pkg_install.go
@@ -34,7 +34,7 @@ func RunPkgInstall(m map[string]interface{}) error {
 	return pi.Run()
 }
 
-// PkgInstall lists namespaces.
+// PkgInstall installs packages.
 type PkgInstall struct {
 	app         app.App
 	libName     string
@@ -61,7 +61,7 @@ func NewPkgInstall(m map[string]interface{}) (*PkgInstall, error) {
 	return nl, nil
 }
 
-// Run lists namespaces.
+// Run installs packages.
 func (pi *PkgInstall) Run() error {
 	d, customName, err := pi.parseDepSpec()
 	if err != nil {
diff --git a/actions/prototype_describe.go b/actions/prototype_describe.go
index f964be9b05123cd2e823ec582659ada536a73437..96fe910fd1de98130006756b7b6627247491f297 100644
--- a/actions/prototype_describe.go
+++ b/actions/prototype_describe.go
@@ -37,7 +37,7 @@ func RunPrototypeDescribe(m map[string]interface{}) error {
 	return pd.Run()
 }
 
-// PrototypeDescribe lists available namespaces
+// PrototypeDescribe describes a prototype.
 type PrototypeDescribe struct {
 	app             app.App
 	out             io.Writer
diff --git a/actions/prototype_list.go b/actions/prototype_list.go
index f625403fbaf2579d1594808d37ed5ecb493ccb6d..98a19e5da0ef12097a0433bd47da6bff5d0c64af 100644
--- a/actions/prototype_list.go
+++ b/actions/prototype_list.go
@@ -36,7 +36,7 @@ func RunPrototypeList(m map[string]interface{}) error {
 	return pl.Run()
 }
 
-// PrototypeList lists available namespaces
+// PrototypeList lists available prototypes.
 type PrototypeList struct {
 	app          app.App
 	out          io.Writer
diff --git a/actions/prototype_search.go b/actions/prototype_search.go
index 0179d5da74d071557a9122932acc61bf2b329a60..d88670a0720012eda56e0ea0dfccdc05d7656a76 100644
--- a/actions/prototype_search.go
+++ b/actions/prototype_search.go
@@ -37,7 +37,7 @@ func RunPrototypeSearch(m map[string]interface{}) error {
 	return ps.Run()
 }
 
-// PrototypeSearch lists available namespaces
+// PrototypeSearch searches for prototypes by name.
 type PrototypeSearch struct {
 	app           app.App
 	query         string
diff --git a/actions/prototype_use.go b/actions/prototype_use.go
index baaab1d344d10a89790ef067adbf827bc0a876b2..d5b64568c4faff8cc3a33c153909e647924357ba 100644
--- a/actions/prototype_use.go
+++ b/actions/prototype_use.go
@@ -37,7 +37,7 @@ func RunPrototypeUse(m map[string]interface{}) error {
 	return pl.Run()
 }
 
-// PrototypeUse lists available namespaces
+// PrototypeUse generates a component from a prototype.
 type PrototypeUse struct {
 	app               app.App
 	args              []string
@@ -126,7 +126,7 @@ func (pl *PrototypeUse) Run() error {
 		return err
 	}
 
-	_, prototypeName := component.ExtractNamespacedComponent(pl.app, componentName)
+	_, prototypeName := component.ExtractModuleComponent(pl.app, componentName)
 
 	text, err := expandPrototype(p, templateType, params, prototypeName)
 	if err != nil {
diff --git a/actions/registry_add.go b/actions/registry_add.go
index b418266da933d80eff984ebddbb46a851493d652..57c00ab8e8b6f74b0f1da97b2ce916b180475e4a 100644
--- a/actions/registry_add.go
+++ b/actions/registry_add.go
@@ -33,7 +33,7 @@ func RunRegistryAdd(m map[string]interface{}) error {
 	return ra.Run()
 }
 
-// RegistryAdd lists namespaces.
+// RegistryAdd adds a registry.
 type RegistryAdd struct {
 	app           app.App
 	name          string
@@ -64,7 +64,7 @@ func NewRegistryAdd(m map[string]interface{}) (*RegistryAdd, error) {
 	return ra, nil
 }
 
-// Run lists namespaces.
+// Run adds a registry.
 func (ra *RegistryAdd) Run() error {
 	uri, protocol := ra.protocol()
 	_, err := ra.registryAddFn(ra.app, ra.name, protocol, uri, ra.version, ra.isOverride)
diff --git a/actions/registry_describe.go b/actions/registry_describe.go
index 28cbf534fc6bc5af5018279789d28fd157d27cd4..4d7a1caa55335350e75414e08a5f3474d1b557ee 100644
--- a/actions/registry_describe.go
+++ b/actions/registry_describe.go
@@ -36,7 +36,7 @@ func RunRegistryDescribe(m map[string]interface{}) error {
 	return rd.Run()
 }
 
-// RegistryDescribe lists available namespaces
+// RegistryDescribe describes a registry
 type RegistryDescribe struct {
 	app                 app.App
 	name                string
diff --git a/actions/testdata/ns/list/output.txt b/actions/testdata/ns/list/output.txt
index c9c57bbb0b478c37801c81a0fc3e7559efe6692b..c45e0ede458f44534157cc727b641735289adb53 100644
--- a/actions/testdata/ns/list/output.txt
+++ b/actions/testdata/ns/list/output.txt
@@ -1,4 +1,4 @@
-NAMESPACE
-=========
+MODULE
+======
 a
 b
diff --git a/actions/validate.go b/actions/validate.go
index 1a7ea6a71f56b7b6a6d634db88a212cf2c0e961b..a87fc225beaf1f00dec01b218244f2f638f50e42 100644
--- a/actions/validate.go
+++ b/actions/validate.go
@@ -52,7 +52,7 @@ type findObjectsFn func(a app.App, envName string,
 type Validate struct {
 	app            app.App
 	envName        string
-	nsName         string
+	module         string
 	componentNames []string
 	clientConfig   *client.Config
 	out            io.Writer
@@ -69,7 +69,7 @@ func NewValidate(m map[string]interface{}) (*Validate, error) {
 	v := &Validate{
 		app:            ol.loadApp(),
 		envName:        ol.loadString(OptionEnvName),
-		nsName:         ol.loadString(OptionNamespaceName),
+		module:         ol.loadString(OptionModule),
 		componentNames: ol.loadStringSlice(OptionComponentNames),
 		clientConfig:   ol.loadClientConfig(),
 
diff --git a/actions/validate_test.go b/actions/validate_test.go
index 9e2a7b4532b14719e5b2cb912d0f6ac4b8a0d28c..b2fc7201e2073145d3037a85fb880e27b6c24437 100644
--- a/actions/validate_test.go
+++ b/actions/validate_test.go
@@ -47,7 +47,7 @@ func TestValidate(t *testing.T) {
 		in := map[string]interface{}{
 			OptionApp:            appMock,
 			OptionEnvName:        aEnvName,
-			OptionNamespaceName:  aModuleName,
+			OptionModule:         aModuleName,
 			OptionComponentNames: aComponentNames,
 			OptionClientConfig:   aClientConfig,
 		}
diff --git a/cmd/actions.go b/cmd/actions.go
index 9b185e76f8ea1a97fc5f858c9380926d0ed17e72..5527312c17827e736b52fab3f977dd8189101aeb 100644
--- a/cmd/actions.go
+++ b/cmd/actions.go
@@ -36,8 +36,8 @@ const (
 	actionEnvTargets
 	actionImport
 	actionInit
-	actionNsCreate
-	actionNsList
+	actionModuleCreate
+	actionModuleList
 	actionParamDiff
 	actionParamList
 	actionParamSet
@@ -66,16 +66,16 @@ var (
 		actionComponentRm:   actions.RunComponentRm,
 		// actionDelete
 		// actionDiff
-		actionEnvAdd:      actions.RunEnvAdd,
-		actionEnvDescribe: actions.RunEnvDescribe,
-		actionEnvList:     actions.RunEnvList,
-		actionEnvRm:       actions.RunEnvRm,
-		actionEnvSet:      actions.RunEnvSet,
-		actionEnvTargets:  actions.RunEnvTargets,
-		actionImport:      actions.RunImport,
-		actionInit:        actions.RunInit,
-		actionNsCreate:    actions.RunNsCreate,
-		actionNsList:      actions.RunNsList,
+		actionEnvAdd:       actions.RunEnvAdd,
+		actionEnvDescribe:  actions.RunEnvDescribe,
+		actionEnvList:      actions.RunEnvList,
+		actionEnvRm:        actions.RunEnvRm,
+		actionEnvSet:       actions.RunEnvSet,
+		actionEnvTargets:   actions.RunEnvTargets,
+		actionImport:       actions.RunImport,
+		actionInit:         actions.RunInit,
+		actionModuleCreate: actions.RunModuleCreate,
+		actionModuleList:   actions.RunModuleList,
 		// actionParamDiff
 		actionParamList:         actions.RunParamList,
 		actionParamSet:          actions.RunParamSet,
diff --git a/cmd/component_list.go b/cmd/component_list.go
index 68c62811f3626bce62f1e4100f7b67cdb61e7995..e9ee48e023ada3231914cfd8cf78adeea8fba3b6 100644
--- a/cmd/component_list.go
+++ b/cmd/component_list.go
@@ -37,9 +37,9 @@ var componentListCmd = &cobra.Command{
 		}
 
 		m := map[string]interface{}{
-			actions.OptionApp:           ka,
-			actions.OptionNamespaceName: viper.GetString(vComponentListNamespace),
-			actions.OptionOutput:        viper.GetString(vComponentListOutput),
+			actions.OptionApp:    ka,
+			actions.OptionModule: viper.GetString(vComponentListNamespace),
+			actions.OptionOutput: viper.GetString(vComponentListOutput),
 		}
 
 		return runAction(actionComponentList, m)
@@ -59,6 +59,6 @@ func init() {
 
 	componentListCmd.Flags().StringP(flagOutput, shortOutput, "", "Output format. Valid options: wide")
 	viper.BindPFlag(vComponentListOutput, componentListCmd.Flags().Lookup(flagOutput))
-	componentListCmd.Flags().String(flagNamespace, "", "Namespace")
-	viper.BindPFlag(vComponentListNamespace, componentListCmd.Flags().Lookup(flagNamespace))
+	componentListCmd.Flags().String(flagModule, "", "Component module")
+	viper.BindPFlag(vComponentListNamespace, componentListCmd.Flags().Lookup(flagModule))
 }
diff --git a/cmd/component_list_test.go b/cmd/component_list_test.go
index 0b934c1e88c81f5564540ec8e62771cd260febb6..c12082400c9fe6b1d51f6be4ee6b5cf7cc74756d 100644
--- a/cmd/component_list_test.go
+++ b/cmd/component_list_test.go
@@ -29,9 +29,9 @@ func Test_componentListCmd(t *testing.T) {
 			args:   []string{"component", "list"},
 			action: actionComponentList,
 			expected: map[string]interface{}{
-				actions.OptionApp:           ka,
-				actions.OptionNamespaceName: "",
-				actions.OptionOutput:        "",
+				actions.OptionApp:    ka,
+				actions.OptionModule: "",
+				actions.OptionOutput: "",
 			},
 		},
 	}
diff --git a/cmd/env_add.go b/cmd/env_add.go
index ce967cf7ded4c076dc9693c94c3ebdc79b98875b..f49d9d6114d15d220b154809e3be63fe7f6a8792 100644
--- a/cmd/env_add.go
+++ b/cmd/env_add.go
@@ -57,12 +57,12 @@ var envAddCmd = &cobra.Command{
 		isOverride := viper.GetBool(vEnvAddOverride)
 
 		m := map[string]interface{}{
-			actions.OptionApp:           ka,
-			actions.OptionEnvName:       name,
-			actions.OptionServer:        server,
-			actions.OptionNamespaceName: namespace,
-			actions.OptionSpecFlag:      specFlag,
-			actions.OptionOverride:      isOverride,
+			actions.OptionApp:      ka,
+			actions.OptionEnvName:  name,
+			actions.OptionServer:   server,
+			actions.OptionModule:   namespace,
+			actions.OptionSpecFlag: specFlag,
+			actions.OptionOverride: isOverride,
 		}
 
 		return runAction(actionEnvAdd, m)
diff --git a/cmd/env_add_test.go b/cmd/env_add_test.go
index 44026a7e1b0b08ea13d49e0860375b61964edf83..60cdcd0ce267f5f83900ed84ba7fd47a5c2bd2f8 100644
--- a/cmd/env_add_test.go
+++ b/cmd/env_add_test.go
@@ -28,12 +28,12 @@ func Test_envAddCmd(t *testing.T) {
 			args:   []string{"env", "add", "prod", "--server", "http://example.com"},
 			action: actionEnvAdd,
 			expected: map[string]interface{}{
-				actions.OptionApp:           ka,
-				actions.OptionEnvName:       "prod",
-				actions.OptionNamespaceName: "default",
-				actions.OptionOverride:      false,
-				actions.OptionServer:        "http://example.com",
-				actions.OptionSpecFlag:      "version:v1.7.0",
+				actions.OptionApp:      ka,
+				actions.OptionEnvName:  "prod",
+				actions.OptionModule:   "default",
+				actions.OptionOverride: false,
+				actions.OptionServer:   "http://example.com",
+				actions.OptionSpecFlag: "version:v1.7.0",
 			},
 		},
 	}
diff --git a/cmd/env_set.go b/cmd/env_set.go
index 0d2b5f8bc5389d9a2cf3ef8600b01c7d69371dfd..ed2a6c110063363dc2ba020eac29fd3b53c6633b 100644
--- a/cmd/env_set.go
+++ b/cmd/env_set.go
@@ -37,10 +37,10 @@ var envSetCmd = &cobra.Command{
 		}
 
 		m := map[string]interface{}{
-			actions.OptionApp:           ka,
-			actions.OptionEnvName:       args[0],
-			actions.OptionNewEnvName:    viper.GetString(vEnvSetName),
-			actions.OptionNamespaceName: viper.GetString(vEnvSetNamespace),
+			actions.OptionApp:        ka,
+			actions.OptionEnvName:    args[0],
+			actions.OptionNewEnvName: viper.GetString(vEnvSetName),
+			actions.OptionNamespace:  viper.GetString(vEnvSetNamespace),
 		}
 
 		return runAction(actionEnvSet, m)
diff --git a/cmd/env_set_test.go b/cmd/env_set_test.go
index 9e0589cfb2ba794ef7d6ed577158e9d51f90c108..82446f056d6a32a9b800464ca8f75c57eb801b95 100644
--- a/cmd/env_set_test.go
+++ b/cmd/env_set_test.go
@@ -28,10 +28,10 @@ func Test_envSetCmd(t *testing.T) {
 			args:   []string{"env", "set", "default", "--namespace", "new-name"},
 			action: actionEnvSet,
 			expected: map[string]interface{}{
-				actions.OptionApp:           ka,
-				actions.OptionEnvName:       "default",
-				actions.OptionNamespaceName: "new-name",
-				actions.OptionNewEnvName:    "",
+				actions.OptionApp:        ka,
+				actions.OptionEnvName:    "default",
+				actions.OptionNamespace:  "new-name",
+				actions.OptionNewEnvName: "",
 			},
 		},
 	}
diff --git a/cmd/env_targets.go b/cmd/env_targets.go
index 6072cb4d84f9c9b72d6169f8fb258eeabe0746e3..4cc087cd265541d60a3cbcf7eb1f7e4e28b8eff0 100644
--- a/cmd/env_targets.go
+++ b/cmd/env_targets.go
@@ -23,7 +23,7 @@ import (
 )
 
 const (
-	vEnvTargetNamespaces = "env-target-namespaces"
+	vEnvTargetModules = "env-target-modules"
 )
 
 // envTargetsCmd represents the env targets command
@@ -33,13 +33,13 @@ var envTargetsCmd = &cobra.Command{
 	Long:  `targets`,
 	RunE: func(cmd *cobra.Command, args []string) error {
 		if len(args) != 1 {
-			return errors.New("env targets <environment> --namespace name")
+			return errors.New("env targets <environment> <--module name>...")
 		}
 
 		m := map[string]interface{}{
-			actions.OptionApp:           ka,
-			actions.OptionEnvName:       args[0],
-			actions.OptionNamespaceName: viper.GetStringSlice(vEnvTargetNamespaces),
+			actions.OptionApp:     ka,
+			actions.OptionEnvName: args[0],
+			actions.OptionModule:  viper.GetStringSlice(vEnvTargetModules),
 		}
 
 		return runAction(actionEnvTargets, m)
@@ -49,6 +49,6 @@ var envTargetsCmd = &cobra.Command{
 func init() {
 	envCmd.AddCommand(envTargetsCmd)
 
-	envTargetsCmd.Flags().StringSlice(flagNamespace, nil, "Components to include")
-	viper.BindPFlag(vEnvTargetNamespaces, envTargetsCmd.Flags().Lookup(flagNamespace))
+	envTargetsCmd.Flags().StringSlice(flagModule, nil, "Component modules to include")
+	viper.BindPFlag(vEnvTargetModules, envTargetsCmd.Flags().Lookup(flagModule))
 }
diff --git a/cmd/env_targets_test.go b/cmd/env_targets_test.go
index ad36dfad244a607c45427c2fbc2e054e4942a739..5306fc62da8d4cf3eaca27eb0ed11aa327b613e3 100644
--- a/cmd/env_targets_test.go
+++ b/cmd/env_targets_test.go
@@ -25,12 +25,12 @@ func Test_envTargetsCmd(t *testing.T) {
 	cases := []cmdTestCase{
 		{
 			name:   "in general",
-			args:   []string{"env", "targets", "prod", "--namespace", "app1"},
+			args:   []string{"env", "targets", "prod", "--module", "app1"},
 			action: actionEnvTargets,
 			expected: map[string]interface{}{
-				actions.OptionApp:           ka,
-				actions.OptionEnvName:       "prod",
-				actions.OptionNamespaceName: []string{"app1"},
+				actions.OptionApp:     ka,
+				actions.OptionEnvName: "prod",
+				actions.OptionModule:  []string{"app1"},
 			},
 		},
 	}
diff --git a/cmd/flags.go b/cmd/flags.go
index 64a9d544b7c9b84b64adc5338c0f3339e1ed11a9..b907ba2fd6139837deadeaf0031524dd5c2be081 100644
--- a/cmd/flags.go
+++ b/cmd/flags.go
@@ -30,6 +30,7 @@ const (
 	flagGcTag                 = "gc-tag"
 	flagIndex                 = "index"
 	flagJpath                 = "jpath"
+	flagModule                = "module"
 	flagNamespace             = "namespace"
 	flagResolver              = "resolve-images"
 	flagResolvFail            = "resolve-images-error"
diff --git a/cmd/import.go b/cmd/import.go
index 9a1c216d1af021aa94fce88028a4ae23da71ba80..c4d49fcae7b97b9d0fe4b8a102cb988b993c669b 100644
--- a/cmd/import.go
+++ b/cmd/import.go
@@ -23,8 +23,8 @@ import (
 )
 
 const (
-	vImportFilename  = "import-filename"
-	vImportNamespace = "import-namespace"
+	vImportFilename = "import-filename"
+	vImportModule   = "import-module"
 )
 
 // importCmd represents the import command
@@ -34,9 +34,9 @@ var importCmd = &cobra.Command{
 	Long:  `Import manifest`,
 	RunE: func(cmd *cobra.Command, args []string) error {
 		m := map[string]interface{}{
-			actions.OptionApp:           ka,
-			actions.OptionNamespaceName: viper.GetString(vImportNamespace),
-			actions.OptionPath:          viper.GetString(vImportFilename),
+			actions.OptionApp:    ka,
+			actions.OptionModule: viper.GetString(vImportModule),
+			actions.OptionPath:   viper.GetString(vImportFilename),
 		}
 
 		return runAction(actionImport, m)
@@ -48,6 +48,6 @@ func init() {
 
 	importCmd.Flags().StringP(flagFilename, shortFilename, "", "Filename or directory for component to import")
 	viper.BindPFlag(vImportFilename, importCmd.Flags().Lookup(flagFilename))
-	importCmd.Flags().String(flagNamespace, "", "Component namespace")
-	viper.BindPFlag(vImportNamespace, importCmd.Flags().Lookup(flagNamespace))
+	importCmd.Flags().String(flagModule, "", "Component module")
+	viper.BindPFlag(vImportModule, importCmd.Flags().Lookup(flagModule))
 }
diff --git a/cmd/init.go b/cmd/init.go
index f3d5aea44634ac9cf9375864c579ff11bbb8f5ad..903be992a7daf2ead28a7976b27ef533239d58f0 100644
--- a/cmd/init.go
+++ b/cmd/init.go
@@ -95,7 +95,7 @@ var initCmd = &cobra.Command{
 			actions.OptionRootPath:              appRoot,
 			actions.OptionSpecFlag:              specFlag,
 			actions.OptionServer:                server,
-			actions.OptionNamespaceName:         namespace,
+			actions.OptionNamespace:             namespace,
 			actions.OptionSkipDefaultRegistries: viper.GetBool(vInitSkipDefaultRegistries),
 		}
 
diff --git a/cmd/init_test.go b/cmd/init_test.go
index 3ca8b4c79e75cdb203ac8bfea67bff91e7835dfc..43d933ff3144fdf394c799336aa98aa5de99afbb 100644
--- a/cmd/init_test.go
+++ b/cmd/init_test.go
@@ -41,7 +41,7 @@ func Test_initCmd(t *testing.T) {
 				actions.OptionRootPath:              root,
 				actions.OptionServer:                "http://127.0.0.1",
 				actions.OptionSpecFlag:              "version:v1.7.0",
-				actions.OptionNamespaceName:         "new-namespace",
+				actions.OptionNamespace:             "new-namespace",
 				actions.OptionSkipDefaultRegistries: false,
 			},
 		},
diff --git a/cmd/initname_string.go b/cmd/initname_string.go
index b7795d3e9fe3ad25cc8df5c400972ed35b862892..ef85b01de494826524afc11c3df0f10cedfd0f0c 100644
--- a/cmd/initname_string.go
+++ b/cmd/initname_string.go
@@ -1,27 +1,12 @@
-// Copyright 2018 The ksonnet authors
-//
-//
-//    Licensed under the Apache License, Version 2.0 (the "License");
-//    you may not use this file except in compliance with the License.
-//    You may obtain a copy of the License at
-//
-//      http://www.apache.org/licenses/LICENSE-2.0
-//
-//    Unless required by applicable law or agreed to in writing, software
-//    distributed under the License is distributed on an "AS IS" BASIS,
-//    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-//    See the License for the specific language governing permissions and
-//    limitations under the License.
-
 // Code generated by "stringer -type=initName"; DO NOT EDIT.
 
 package cmd
 
 import "strconv"
 
-const _initName_name = "actionApplyactionComponentListactionComponentNameactionDeleteactionDiffactionEnvAddactionEnvDescribeactionEnvListactionEnvRmactionEnvSetactionEnvTargetsactionImportactionInitactionNsCreateactionNsListactionParamDiffactionParamListactionParamSetactionPkgDescribeactionPkgInstallactionPkgListactionPrototypeDescribeactionPrototypeListactionPrototypePreviewactionPrototypeSearchactionPrototypeUseactionRegistryAddactionRegistryDescribeactionRegistryListactionShowactionUpgradeactionValidate"
+const _initName_name = "actionApplyactionComponentListactionComponentRmactionDeleteactionDiffactionEnvAddactionEnvDescribeactionEnvListactionEnvRmactionEnvSetactionEnvTargetsactionImportactionInitactionModuleCreateactionModuleListactionParamDiffactionParamListactionParamSetactionPkgDescribeactionPkgInstallactionPkgListactionPrototypeDescribeactionPrototypeListactionPrototypePreviewactionPrototypeSearchactionPrototypeUseactionRegistryAddactionRegistryDescribeactionRegistryListactionShowactionUpgradeactionValidate"
 
-var _initName_index = [...]uint16{0, 11, 30, 49, 61, 71, 83, 100, 113, 124, 136, 152, 164, 174, 188, 200, 215, 230, 244, 261, 277, 290, 313, 332, 354, 375, 393, 410, 432, 450, 460, 473, 487}
+var _initName_index = [...]uint16{0, 11, 30, 47, 59, 69, 81, 98, 111, 122, 134, 150, 162, 172, 190, 206, 221, 236, 250, 267, 283, 296, 319, 338, 360, 381, 399, 416, 438, 456, 466, 479, 493}
 
 func (i initName) String() string {
 	if i < 0 || i >= initName(len(_initName_index)-1) {
diff --git a/cmd/ns.go b/cmd/module.go
similarity index 81%
rename from cmd/ns.go
rename to cmd/module.go
index 59f5196c37385922dd7e14eb4337df4aec593250..37d4696f9f836751609e5223ab5f6e90b0eae101 100644
--- a/cmd/ns.go
+++ b/cmd/module.go
@@ -17,13 +17,13 @@ package cmd
 
 import "github.com/spf13/cobra"
 
-// nsCmd represents the ns command
-var nsCmd = &cobra.Command{
-	Use:   "ns",
-	Short: "ns",
-	Long:  `ns`,
+// moduleCmd represents the module command
+var moduleCmd = &cobra.Command{
+	Use:   "module",
+	Short: "module",
+	Long:  `module`,
 }
 
 func init() {
-	RootCmd.AddCommand(nsCmd)
+	RootCmd.AddCommand(moduleCmd)
 }
diff --git a/cmd/ns_create.go b/cmd/module_create.go
similarity index 74%
rename from cmd/ns_create.go
rename to cmd/module_create.go
index 1bf7e6e2441dd20229f82ae24a1d5d7679704995..15ed65cad0359692b72e62beca83a27263d9a554 100644
--- a/cmd/ns_create.go
+++ b/cmd/module_create.go
@@ -22,29 +22,29 @@ import (
 )
 
 const (
-	vNsCreateNamespace = "ns-create-namespace"
+	vModuleCreateNamespace = "module-create-namespace"
 )
 
-// nsCreateCmd creates a ns create command.
-var nsCreateCmd = &cobra.Command{
+// moduleCreateCmd creates a ns create command.
+var moduleCreateCmd = &cobra.Command{
 	Use:   "create <name>",
 	Short: "create",
 	Long:  `create`,
 	RunE: func(cmd *cobra.Command, args []string) error {
 		if len(args) != 1 {
-			return errors.New("ns create <namespace>")
+			return errors.New("module create <module name>")
 		}
 
 		m := map[string]interface{}{
-			actions.OptionApp:           ka,
-			actions.OptionNamespaceName: args[0],
+			actions.OptionApp:    ka,
+			actions.OptionModule: args[0],
 		}
 
-		return runAction(actionNsCreate, m)
+		return runAction(actionModuleCreate, m)
 	},
 }
 
 func init() {
-	nsCmd.AddCommand(nsCreateCmd)
+	moduleCmd.AddCommand(moduleCreateCmd)
 
 }
diff --git a/cmd/ns_create_test.go b/cmd/module_create_test.go
similarity index 81%
rename from cmd/ns_create_test.go
rename to cmd/module_create_test.go
index 366e1010fe7b949da12f9ca480c959fd16fe0712..7742be882643970fc44422802c6c77ce04ce3795 100644
--- a/cmd/ns_create_test.go
+++ b/cmd/module_create_test.go
@@ -21,15 +21,15 @@ import (
 	"github.com/ksonnet/ksonnet/actions"
 )
 
-func Test_nsCreateCmd(t *testing.T) {
+func Test_moduleCreateCmd(t *testing.T) {
 	cases := []cmdTestCase{
 		{
 			name:   "in general",
-			args:   []string{"ns", "create", "app1"},
-			action: actionNsCreate,
+			args:   []string{"module", "create", "app1"},
+			action: actionModuleCreate,
 			expected: map[string]interface{}{
-				actions.OptionApp:           ka,
-				actions.OptionNamespaceName: "app1",
+				actions.OptionApp:    ka,
+				actions.OptionModule: "app1",
 			},
 		},
 	}
diff --git a/cmd/ns_list.go b/cmd/module_list.go
similarity index 73%
rename from cmd/ns_list.go
rename to cmd/module_list.go
index e01e43bcb31419f76819de94a9b393b337e71a21..33b04129341c95c7b616b01702e1489cea6a9c90 100644
--- a/cmd/ns_list.go
+++ b/cmd/module_list.go
@@ -22,10 +22,10 @@ import (
 )
 
 const (
-	vNsListEnv = "ns-list-env"
+	vModuleListEnv = "module-list-env"
 )
 
-// nsListCmd represents the ns list command
+// moduleListCmd represents the ns list command
 var nsListCmd = &cobra.Command{
 	Use:   "list",
 	Short: "list",
@@ -33,17 +33,17 @@ var nsListCmd = &cobra.Command{
 	RunE: func(cmd *cobra.Command, args []string) error {
 		m := map[string]interface{}{
 			actions.OptionApp:     ka,
-			actions.OptionEnvName: viper.GetString(vNsListEnv),
+			actions.OptionEnvName: viper.GetString(vModuleListEnv),
 		}
 
-		return runAction(actionNsList, m)
+		return runAction(actionModuleList, m)
 	},
 }
 
 func init() {
-	nsCmd.AddCommand(nsListCmd)
+	moduleCmd.AddCommand(nsListCmd)
 
-	nsListCmd.Flags().String(flagEnv, "", "Environment to list namespaces for")
-	viper.BindPFlag(vNsListEnv, nsListCmd.Flags().Lookup(flagEnv))
+	nsListCmd.Flags().String(flagEnv, "", "Environment to list modules for")
+	viper.BindPFlag(vModuleListEnv, nsListCmd.Flags().Lookup(flagEnv))
 
 }
diff --git a/cmd/ns_list_test.go b/cmd/module_list_test.go
similarity index 89%
rename from cmd/ns_list_test.go
rename to cmd/module_list_test.go
index 9eda6decec79f3a79dc6da5a006905399518a321..d5df07b2e6318f992cd85f8050a131ceced1147d 100644
--- a/cmd/ns_list_test.go
+++ b/cmd/module_list_test.go
@@ -21,12 +21,12 @@ import (
 	"github.com/ksonnet/ksonnet/actions"
 )
 
-func Test_nsListCmd(t *testing.T) {
+func Test_moduleListCmd(t *testing.T) {
 	cases := []cmdTestCase{
 		{
 			name:   "in general",
-			args:   []string{"ns", "list"},
-			action: actionNsList,
+			args:   []string{"module", "list"},
+			action: actionModuleList,
 			expected: map[string]interface{}{
 				actions.OptionApp:     ka,
 				actions.OptionEnvName: "",
diff --git a/cmd/param.go b/cmd/param.go
index 0545f0ebe7d33bf1c1e9565c225b1dd43b9fbe36..a771d953d556be70c0202b522f7bb297615370d3 100644
--- a/cmd/param.go
+++ b/cmd/param.go
@@ -22,12 +22,6 @@ import (
 	"github.com/spf13/cobra"
 )
 
-const (
-	flagParamEnv       = "env"
-	flagParamComponent = "component"
-	flagParamNamespace = "namespace"
-)
-
 var paramShortDesc = map[string]string{
 	"set":  "Change component or environment parameters (e.g. replica count, name)",
 	"list": "List known component parameters",
diff --git a/cmd/param_diff.go b/cmd/param_diff.go
index 11745d1ccb692c435bebec6fefc6237ffc51f974..d3e9a6b4edd55f446b009cfb0c5cba3868ad981f 100644
--- a/cmd/param_diff.go
+++ b/cmd/param_diff.go
@@ -40,7 +40,7 @@ var paramDiffCmd = &cobra.Command{
 		env1 := args[0]
 		env2 := args[1]
 
-		component, err := flags.GetString(flagParamComponent)
+		component, err := flags.GetString(flagComponent)
 		if err != nil {
 			return err
 		}
@@ -76,7 +76,7 @@ ks param diff dev prod --component=guestbook`,
 func init() {
 	paramCmd.AddCommand(paramDiffCmd)
 
-	paramListCmd.PersistentFlags().String(flagParamEnv, "", "Specify environment to list parameters for")
-	paramListCmd.Flags().String(flagParamNamespace, "", "Specify namespace to list parameters for")
-	paramDiffCmd.PersistentFlags().String(flagParamComponent, "", "Specify the component to diff against")
+	paramListCmd.PersistentFlags().String(flagEnv, "", "Specify environment to list parameters for")
+	paramListCmd.Flags().String(flagModule, "", "Specify module to list parameters for")
+	paramDiffCmd.PersistentFlags().String(flagComponent, "", "Specify the component to diff against")
 }
diff --git a/cmd/param_list.go b/cmd/param_list.go
index 14d2aac4410ecc13a8130cd25eb12e65be105f1d..517ff4dd21c3ddeb748a3428ba7fbe943920fbb8 100644
--- a/cmd/param_list.go
+++ b/cmd/param_list.go
@@ -36,12 +36,12 @@ var paramListCmd = &cobra.Command{
 			component = args[0]
 		}
 
-		env, err := flags.GetString(flagParamEnv)
+		env, err := flags.GetString(flagEnv)
 		if err != nil {
 			return err
 		}
 
-		nsName, err := flags.GetString(flagParamNamespace)
+		module, err := flags.GetString(flagModule)
 		if err != nil {
 			return err
 		}
@@ -50,7 +50,7 @@ var paramListCmd = &cobra.Command{
 			actions.OptionApp:           ka,
 			actions.OptionComponentName: component,
 			actions.OptionEnvName:       env,
-			actions.OptionNamespaceName: nsName,
+			actions.OptionModule:        module,
 		}
 
 		return runAction(actionParamList, m)
diff --git a/cmd/param_list_test.go b/cmd/param_list_test.go
index 7a309b3fec34a87edd6b1128aaa591444d43257b..47d86071491f56dd9dff6c004dfde9833a3ff110 100644
--- a/cmd/param_list_test.go
+++ b/cmd/param_list_test.go
@@ -30,7 +30,7 @@ func Test_paramListCmd(t *testing.T) {
 			expected: map[string]interface{}{
 				actions.OptionApp:           ka,
 				actions.OptionEnvName:       "",
-				actions.OptionNamespaceName: "",
+				actions.OptionModule:        "",
 				actions.OptionComponentName: "",
 			},
 		},
diff --git a/cmd/validate.go b/cmd/validate.go
index aca9451ea98d7204bc0d5babc5744223a79ea2c7..6d01b4f1eaba1199ffbedde2f9c3a2bd0eb3fa4d 100644
--- a/cmd/validate.go
+++ b/cmd/validate.go
@@ -55,7 +55,7 @@ var validateCmd = &cobra.Command{
 		m := map[string]interface{}{
 			actions.OptionApp:            ka,
 			actions.OptionEnvName:        args[0],
-			actions.OptionNamespaceName:  "",
+			actions.OptionModule:         "",
 			actions.OptionComponentNames: viper.GetStringSlice(vValidateComponent),
 			actions.OptionClientConfig:   validateClientConfig,
 		}
diff --git a/cmd/validate_test.go b/cmd/validate_test.go
index 9dc13f71446d249226a1d21a38feb5404c5a0ccf..3e6e88542b1f5f691d4377bd40bd12d51b0644c8 100644
--- a/cmd/validate_test.go
+++ b/cmd/validate_test.go
@@ -30,7 +30,7 @@ func Test_validateCmd(t *testing.T) {
 			expected: map[string]interface{}{
 				actions.OptionApp:            ka,
 				actions.OptionEnvName:        "env-name",
-				actions.OptionNamespaceName:  "",
+				actions.OptionModule:         "",
 				actions.OptionComponentNames: make([]string, 0),
 				actions.OptionClientConfig:   validateClientConfig,
 			},
diff --git a/component/component.go b/component/component.go
index 1dd3796fe87c29d22a2648e62287f4d5ebafa2ee..96ed22056b881a3d1a458b4d41bde13c302d91b6 100644
--- a/component/component.go
+++ b/component/component.go
@@ -59,7 +59,7 @@ type Component interface {
 	DeleteParam(path []string, options ParamOptions) error
 	// Params returns a list of all parameters for a component. If envName is a
 	// blank string, it will report the local parameters.
-	Params(envName string) ([]NamespaceParameter, error)
+	Params(envName string) ([]ModuleParameter, error)
 	// Summarize returns a summary of the component.
 	Summarize() ([]Summary, error)
 }
@@ -71,11 +71,11 @@ const (
 	paramsFile = "params.libsonnet"
 )
 
-// LocateComponent locates a component given a nsName and a name.
-func LocateComponent(ksApp app.App, nsName, name string) (Component, error) {
+// LocateComponent locates a component given a module and a name.
+func LocateComponent(ksApp app.App, module, name string) (Component, error) {
 	path := make([]string, 0)
-	if nsName != "" && nsName != "/" {
-		path = append(path, nsName)
+	if module != "" && module != "/" {
+		path = append(path, module)
 	}
 
 	path = append(path, name)
@@ -84,7 +84,7 @@ func LocateComponent(ksApp app.App, nsName, name string) (Component, error) {
 
 // Path returns returns the file system path for a component.
 func Path(a app.App, name string) (string, error) {
-	ns, localName := ExtractNamespacedComponent(a, name)
+	ns, localName := ExtractModuleComponent(a, name)
 
 	fis, err := afero.ReadDir(a.Fs(), ns.Dir())
 	if err != nil {
@@ -119,7 +119,7 @@ func Path(a app.App, name string) (string, error) {
 
 // ExtractComponent extracts a component from a path.
 func ExtractComponent(a app.App, path string) (Component, error) {
-	ns, componentName := ExtractNamespacedComponent(a, path)
+	ns, componentName := ExtractModuleComponent(a, path)
 	members, err := ns.Components()
 	if err != nil {
 		return nil, err
diff --git a/component/create.go b/component/create.go
index 2b40e07888a3a9e7f1bd2ac1377e9e10d4d10ea0..10963416a79a57270baaed891cd48627470daaa1 100644
--- a/component/create.go
+++ b/component/create.go
@@ -59,9 +59,9 @@ func (cc *componentCreator) Create(name, text string, params param.Params, templ
 		return "", errors.Errorf("Component name '%s' is not valid; must not contain punctuation, spaces, or begin or end with a slash", name)
 	}
 
-	nsName, componentName := namespaceComponent(name)
+	module, componentName := namespaceComponent(name)
 
-	componentDir, componentPath, err := cc.location(nsName, componentName, templateType)
+	componentDir, componentPath, err := cc.location(module, componentName, templateType)
 	if err != nil {
 		return "", errors.Wrap(err, "generate component location")
 	}
@@ -103,8 +103,8 @@ func (cc *componentCreator) Create(name, text string, params param.Params, templ
 }
 
 // location returns the dir and full path for the component.
-func (cc *componentCreator) location(nsName, name string, templateType prototype.TemplateType) (string, string, error) {
-	componentDir := filepath.Join(cc.app.Root(), componentsRoot, nsName)
+func (cc *componentCreator) location(module, name string, templateType prototype.TemplateType) (string, string, error) {
+	componentDir := filepath.Join(cc.app.Root(), componentsRoot, module)
 	componentPath := filepath.Join(componentDir, name)
 	switch templateType {
 	case prototype.YAML:
@@ -170,7 +170,7 @@ func namespaceComponent(name string) (string, string) {
 		return "", parts[0]
 	}
 
-	var nsName []string
+	var module []string
 	var componentName string
 	for i := range parts {
 		if i == len(parts)-1 {
@@ -178,10 +178,10 @@ func namespaceComponent(name string) (string, string) {
 			break
 		}
 
-		nsName = append(nsName, parts[i])
+		module = append(module, parts[i])
 	}
 
-	return strings.Join(nsName, "/"), componentName
+	return strings.Join(module, "/"), componentName
 }
 
 // GenParamsContent is the default content for params.libsonnet.
diff --git a/component/delete.go b/component/delete.go
index d858a715a962bc1c46afab8a2eeb94dfa097a301..e0e888fbc1d28de223fcd9b55ac1871ae18b9329 100644
--- a/component/delete.go
+++ b/component/delete.go
@@ -35,7 +35,7 @@ func Delete(a app.App, name string) error {
 		return err
 	}
 
-	ns, _ := ExtractNamespacedComponent(a, name)
+	ns, _ := ExtractModuleComponent(a, name)
 
 	// Build the new component/params.libsonnet file.
 	componentParamsFile, err := afero.ReadFile(a.Fs(), ns.ParamsPath())
diff --git a/component/jsonnet.go b/component/jsonnet.go
index c5ea16b80f24e2b97e4088c1ecb53148b7abb03d..a6bee4654485062402046211bde7932aa214b19e 100644
--- a/component/jsonnet.go
+++ b/component/jsonnet.go
@@ -38,7 +38,7 @@ import (
 // Jsonnet is a component base on jsonnet.
 type Jsonnet struct {
 	app        app.App
-	nsName     string
+	module     string
 	source     string
 	paramsPath string
 }
@@ -46,10 +46,10 @@ type Jsonnet struct {
 var _ Component = (*Jsonnet)(nil)
 
 // NewJsonnet creates an instance of Jsonnet.
-func NewJsonnet(a app.App, nsName, source, paramsPath string) *Jsonnet {
+func NewJsonnet(a app.App, module, source, paramsPath string) *Jsonnet {
 	return &Jsonnet{
 		app:        a,
-		nsName:     nsName,
+		module:     module,
 		source:     source,
 		paramsPath: paramsPath,
 	}
@@ -63,11 +63,11 @@ func (j *Jsonnet) Name(wantsNameSpaced bool) string {
 		return name
 	}
 
-	if j.nsName == "/" {
+	if j.module == "/" {
 		return name
 	}
 
-	return path.Join(j.nsName, name)
+	return path.Join(j.module, name)
 }
 
 func (j *Jsonnet) vmImporter(envName string) (*jsonnet.MemoryImporter, error) {
@@ -226,7 +226,7 @@ func (j *Jsonnet) DeleteParam(path []string, options ParamOptions) error {
 }
 
 // Params returns params for a component.
-func (j *Jsonnet) Params(envName string) ([]NamespaceParameter, error) {
+func (j *Jsonnet) Params(envName string) ([]ModuleParameter, error) {
 	paramsData, err := j.readParams(envName)
 	if err != nil {
 		return nil, err
@@ -237,13 +237,13 @@ func (j *Jsonnet) Params(envName string) ([]NamespaceParameter, error) {
 		return nil, errors.Wrap(err, "could not find components")
 	}
 
-	var params []NamespaceParameter
+	var params []ModuleParameter
 	for k, v := range props {
 		vStr, err := j.paramValue(v)
 		if err != nil {
 			return nil, err
 		}
-		np := NamespaceParameter{
+		np := ModuleParameter{
 			Component: j.Name(false),
 			Key:       k,
 			Index:     "0",
@@ -294,7 +294,7 @@ func (j *Jsonnet) readParams(envName string) (string, error) {
 		return j.readNamespaceParams()
 	}
 
-	ns, err := GetNamespace(j.app, j.nsName)
+	ns, err := GetModule(j.app, j.module)
 	if err != nil {
 		return "", err
 	}
diff --git a/component/jsonnet_test.go b/component/jsonnet_test.go
index a3ab9b532484065cef17970ff3cc5d805b40fdd4..fcd94383c32a8c6f44944cf2aa9526a9cfb25661 100644
--- a/component/jsonnet_test.go
+++ b/component/jsonnet_test.go
@@ -167,7 +167,7 @@ func TestJsonnet_Params(t *testing.T) {
 	params, err := c.Params("")
 	require.NoError(t, err)
 
-	expected := []NamespaceParameter{
+	expected := []ModuleParameter{
 		{
 			Component: "guestbook-ui",
 			Index:     "0",
diff --git a/component/manager.go b/component/manager.go
index f000d2a081c8d350d592430540b7b70b6791af3a..723e924198e9dce8c5c2fc3e7817adab1f6c13b7 100644
--- a/component/manager.go
+++ b/component/manager.go
@@ -34,45 +34,45 @@ var (
 
 // Manager is an interface for interating with components.
 type Manager interface {
-	Components(ns Namespace) ([]Component, error)
-	Component(ksApp app.App, nsName, componentName string) (Component, error)
+	Components(ns Module) ([]Component, error)
+	Component(ksApp app.App, module, componentName string) (Component, error)
 	CreateComponent(ksApp app.App, name, text string, params param.Params, templateType prototype.TemplateType) (string, error)
-	CreateNamespace(ksApp app.App, name string) error
-	Namespace(ksApp app.App, nsName string) (Namespace, error)
-	Namespaces(ksApp app.App, envName string) ([]Namespace, error)
-	NSResolveParams(ns Namespace) (string, error)
-	ResolvePath(ksApp app.App, path string) (Namespace, Component, error)
+	CreateModule(ksApp app.App, name string) error
+	Module(ksApp app.App, module string) (Module, error)
+	Modules(ksApp app.App, envName string) ([]Module, error)
+	NSResolveParams(ns Module) (string, error)
+	ResolvePath(ksApp app.App, path string) (Module, Component, error)
 }
 
 type defaultManager struct{}
 
 var _ Manager = (*defaultManager)(nil)
 
-func (dm *defaultManager) Namespaces(ksApp app.App, envName string) ([]Namespace, error) {
-	return NamespacesFromEnv(ksApp, envName)
+func (dm *defaultManager) Modules(ksApp app.App, envName string) ([]Module, error) {
+	return ModulesFromEnv(ksApp, envName)
 }
 
-func (dm *defaultManager) Namespace(ksApp app.App, nsName string) (Namespace, error) {
-	return GetNamespace(ksApp, nsName)
+func (dm *defaultManager) Module(ksApp app.App, module string) (Module, error) {
+	return GetModule(ksApp, module)
 }
 
-func (dm *defaultManager) NSResolveParams(ns Namespace) (string, error) {
+func (dm *defaultManager) NSResolveParams(ns Module) (string, error) {
 	return ns.ResolvedParams()
 }
 
-func (dm *defaultManager) Components(ns Namespace) ([]Component, error) {
+func (dm *defaultManager) Components(ns Module) ([]Component, error) {
 	return ns.Components()
 }
 
-func (dm *defaultManager) Component(ksApp app.App, nsName, componentName string) (Component, error) {
-	return LocateComponent(ksApp, nsName, componentName)
+func (dm *defaultManager) Component(ksApp app.App, module, componentName string) (Component, error) {
+	return LocateComponent(ksApp, module, componentName)
 }
 
 func (dm *defaultManager) CreateComponent(ksApp app.App, name, text string, params param.Params, templateType prototype.TemplateType) (string, error) {
 	return Create(ksApp, name, text, params, templateType)
 }
 
-func (dm *defaultManager) CreateNamespace(ksApp app.App, name string) error {
+func (dm *defaultManager) CreateModule(ksApp app.App, name string) error {
 	parts := strings.Split(name, "/")
 	dir := filepath.Join(append([]string{ksApp.Root(), "components"}, parts...)...)
 
@@ -84,14 +84,14 @@ func (dm *defaultManager) CreateNamespace(ksApp app.App, name string) error {
 	return afero.WriteFile(ksApp.Fs(), paramsDir, GenParamsContent(), app.DefaultFilePermissions)
 }
 
-func (dm *defaultManager) ResolvePath(ksApp app.App, path string) (Namespace, Component, error) {
+func (dm *defaultManager) ResolvePath(ksApp app.App, path string) (Module, Component, error) {
 	isDir, err := dm.isComponentDir(ksApp, path)
 	if err != nil {
 		return nil, nil, errors.Wrap(err, "check for namespace directory")
 	}
 
 	if isDir {
-		ns, err := dm.Namespace(ksApp, path)
+		ns, err := dm.Module(ksApp, path)
 		if err != nil {
 			return nil, nil, err
 		}
@@ -99,17 +99,17 @@ func (dm *defaultManager) ResolvePath(ksApp app.App, path string) (Namespace, Co
 		return ns, nil, nil
 	}
 
-	nsName, cName, err := dm.checkComponent(ksApp, path)
+	module, cName, err := dm.checkComponent(ksApp, path)
 	if err != nil {
 		return nil, nil, err
 	}
 
-	ns, err := dm.Namespace(ksApp, nsName)
+	ns, err := dm.Module(ksApp, module)
 	if err != nil {
 		return nil, nil, err
 	}
 
-	c, err := dm.Component(ksApp, nsName, cName)
+	c, err := dm.Component(ksApp, module, cName)
 	if err != nil {
 		return nil, nil, err
 	}
@@ -139,12 +139,12 @@ func (dm *defaultManager) checkComponent(ksApp app.App, name string) (string, st
 
 		if exists {
 			dir, file := path.Split(base)
-			nsName := strings.TrimPrefix(dir, path.Join(ksApp.Root(), componentsRoot))
-			if len(nsName) > 0 {
-				nsName = strings.TrimSuffix(nsName, "/")
+			module := strings.TrimPrefix(dir, path.Join(ksApp.Root(), componentsRoot))
+			if len(module) > 0 {
+				module = strings.TrimSuffix(module, "/")
 			}
 
-			return nsName, file, nil
+			return module, file, nil
 		}
 	}
 
diff --git a/component/manager_test.go b/component/manager_test.go
index 9c42c4128ef82c7583f6ff2117a97b6ed8c94cd2..7004fec44a29bf39db14a79cee361530368cc964 100644
--- a/component/manager_test.go
+++ b/component/manager_test.go
@@ -52,31 +52,31 @@ func Test_default_manager_ResolvePath(t *testing.T) {
 	cases := []struct {
 		name   string
 		cName  string
-		nsName string
+		module string
 		isErr  bool
 	}{
 		{
 			name:   "/",
-			nsName: "/",
+			module: "/",
 		},
 		{
 			name:   "deployment",
-			nsName: "/",
+			module: "/",
 			cName:  "deployment",
 		},
 		{
 			name:   "/deployment",
-			nsName: "/",
+			module: "/",
 			cName:  "deployment",
 		},
 		{
 			name:   "/nested/deployment",
-			nsName: "/nested",
+			module: "/nested",
 			cName:  "deployment",
 		},
 		{
 			name:   "nested/deployment",
-			nsName: "/nested",
+			module: "/nested",
 			cName:  "deployment",
 		},
 		{
@@ -107,7 +107,7 @@ func Test_default_manager_ResolvePath(t *testing.T) {
 				assert.Equal(t, tc.cName, c.Name(false))
 			}
 
-			assert.Equal(t, tc.nsName, ns.Name())
+			assert.Equal(t, tc.module, ns.Name())
 		})
 	}
 }
diff --git a/component/mocks/Component.go b/component/mocks/Component.go
index 52e609e759e1e9405a1d124679d35c36e38a4eea..a29e15b5a351693bb054a1039d2ebfb40155d91e 100644
--- a/component/mocks/Component.go
+++ b/component/mocks/Component.go
@@ -77,15 +77,15 @@ func (_m *Component) Objects(paramsStr string, envName string) ([]*unstructured.
 }
 
 // Params provides a mock function with given fields: envName
-func (_m *Component) Params(envName string) ([]component.NamespaceParameter, error) {
+func (_m *Component) Params(envName string) ([]component.ModuleParameter, error) {
 	ret := _m.Called(envName)
 
-	var r0 []component.NamespaceParameter
-	if rf, ok := ret.Get(0).(func(string) []component.NamespaceParameter); ok {
+	var r0 []component.ModuleParameter
+	if rf, ok := ret.Get(0).(func(string) []component.ModuleParameter); ok {
 		r0 = rf(envName)
 	} else {
 		if ret.Get(0) != nil {
-			r0 = ret.Get(0).([]component.NamespaceParameter)
+			r0 = ret.Get(0).([]component.ModuleParameter)
 		}
 	}
 
diff --git a/component/mocks/Manager.go b/component/mocks/Manager.go
index de0c0bc2893b56c11b288520e8d10bad99b6229e..a9106672997c5b26be7b602e04a11b7b9539bf01 100644
--- a/component/mocks/Manager.go
+++ b/component/mocks/Manager.go
@@ -27,13 +27,13 @@ type Manager struct {
 	mock.Mock
 }
 
-// Component provides a mock function with given fields: ksApp, nsName, componentName
-func (_m *Manager) Component(ksApp app.App, nsName string, componentName string) (component.Component, error) {
-	ret := _m.Called(ksApp, nsName, componentName)
+// Component provides a mock function with given fields: ksApp, module, componentName
+func (_m *Manager) Component(ksApp app.App, module string, componentName string) (component.Component, error) {
+	ret := _m.Called(ksApp, module, componentName)
 
 	var r0 component.Component
 	if rf, ok := ret.Get(0).(func(app.App, string, string) component.Component); ok {
-		r0 = rf(ksApp, nsName, componentName)
+		r0 = rf(ksApp, module, componentName)
 	} else {
 		if ret.Get(0) != nil {
 			r0 = ret.Get(0).(component.Component)
@@ -42,7 +42,7 @@ func (_m *Manager) Component(ksApp app.App, nsName string, componentName string)
 
 	var r1 error
 	if rf, ok := ret.Get(1).(func(app.App, string, string) error); ok {
-		r1 = rf(ksApp, nsName, componentName)
+		r1 = rf(ksApp, module, componentName)
 	} else {
 		r1 = ret.Error(1)
 	}
@@ -51,11 +51,11 @@ func (_m *Manager) Component(ksApp app.App, nsName string, componentName string)
 }
 
 // Components provides a mock function with given fields: ns
-func (_m *Manager) Components(ns component.Namespace) ([]component.Component, error) {
+func (_m *Manager) Components(ns component.Module) ([]component.Component, error) {
 	ret := _m.Called(ns)
 
 	var r0 []component.Component
-	if rf, ok := ret.Get(0).(func(component.Namespace) []component.Component); ok {
+	if rf, ok := ret.Get(0).(func(component.Module) []component.Component); ok {
 		r0 = rf(ns)
 	} else {
 		if ret.Get(0) != nil {
@@ -64,7 +64,7 @@ func (_m *Manager) Components(ns component.Namespace) ([]component.Component, er
 	}
 
 	var r1 error
-	if rf, ok := ret.Get(1).(func(component.Namespace) error); ok {
+	if rf, ok := ret.Get(1).(func(component.Module) error); ok {
 		r1 = rf(ns)
 	} else {
 		r1 = ret.Error(1)
@@ -94,8 +94,8 @@ func (_m *Manager) CreateComponent(ksApp app.App, name string, text string, _a3
 	return r0, r1
 }
 
-// CreateNamespace provides a mock function with given fields: ksApp, name
-func (_m *Manager) CreateNamespace(ksApp app.App, name string) error {
+// CreateModule provides a mock function with given fields: ksApp, name
+func (_m *Manager) CreateModule(ksApp app.App, name string) error {
 	ret := _m.Called(ksApp, name)
 
 	var r0 error
@@ -108,20 +108,22 @@ func (_m *Manager) CreateNamespace(ksApp app.App, name string) error {
 	return r0
 }
 
-// NSResolveParams provides a mock function with given fields: ns
-func (_m *Manager) NSResolveParams(ns component.Namespace) (string, error) {
-	ret := _m.Called(ns)
+// Module provides a mock function with given fields: ksApp, module
+func (_m *Manager) Module(ksApp app.App, module string) (component.Module, error) {
+	ret := _m.Called(ksApp, module)
 
-	var r0 string
-	if rf, ok := ret.Get(0).(func(component.Namespace) string); ok {
-		r0 = rf(ns)
+	var r0 component.Module
+	if rf, ok := ret.Get(0).(func(app.App, string) component.Module); ok {
+		r0 = rf(ksApp, module)
 	} else {
-		r0 = ret.Get(0).(string)
+		if ret.Get(0) != nil {
+			r0 = ret.Get(0).(component.Module)
+		}
 	}
 
 	var r1 error
-	if rf, ok := ret.Get(1).(func(component.Namespace) error); ok {
-		r1 = rf(ns)
+	if rf, ok := ret.Get(1).(func(app.App, string) error); ok {
+		r1 = rf(ksApp, module)
 	} else {
 		r1 = ret.Error(1)
 	}
@@ -129,22 +131,22 @@ func (_m *Manager) NSResolveParams(ns component.Namespace) (string, error) {
 	return r0, r1
 }
 
-// Namespace provides a mock function with given fields: ksApp, nsName
-func (_m *Manager) Namespace(ksApp app.App, nsName string) (component.Namespace, error) {
-	ret := _m.Called(ksApp, nsName)
+// Modules provides a mock function with given fields: ksApp, envName
+func (_m *Manager) Modules(ksApp app.App, envName string) ([]component.Module, error) {
+	ret := _m.Called(ksApp, envName)
 
-	var r0 component.Namespace
-	if rf, ok := ret.Get(0).(func(app.App, string) component.Namespace); ok {
-		r0 = rf(ksApp, nsName)
+	var r0 []component.Module
+	if rf, ok := ret.Get(0).(func(app.App, string) []component.Module); ok {
+		r0 = rf(ksApp, envName)
 	} else {
 		if ret.Get(0) != nil {
-			r0 = ret.Get(0).(component.Namespace)
+			r0 = ret.Get(0).([]component.Module)
 		}
 	}
 
 	var r1 error
 	if rf, ok := ret.Get(1).(func(app.App, string) error); ok {
-		r1 = rf(ksApp, nsName)
+		r1 = rf(ksApp, envName)
 	} else {
 		r1 = ret.Error(1)
 	}
@@ -152,22 +154,20 @@ func (_m *Manager) Namespace(ksApp app.App, nsName string) (component.Namespace,
 	return r0, r1
 }
 
-// Namespaces provides a mock function with given fields: ksApp, envName
-func (_m *Manager) Namespaces(ksApp app.App, envName string) ([]component.Namespace, error) {
-	ret := _m.Called(ksApp, envName)
+// NSResolveParams provides a mock function with given fields: ns
+func (_m *Manager) NSResolveParams(ns component.Module) (string, error) {
+	ret := _m.Called(ns)
 
-	var r0 []component.Namespace
-	if rf, ok := ret.Get(0).(func(app.App, string) []component.Namespace); ok {
-		r0 = rf(ksApp, envName)
+	var r0 string
+	if rf, ok := ret.Get(0).(func(component.Module) string); ok {
+		r0 = rf(ns)
 	} else {
-		if ret.Get(0) != nil {
-			r0 = ret.Get(0).([]component.Namespace)
-		}
+		r0 = ret.Get(0).(string)
 	}
 
 	var r1 error
-	if rf, ok := ret.Get(1).(func(app.App, string) error); ok {
-		r1 = rf(ksApp, envName)
+	if rf, ok := ret.Get(1).(func(component.Module) error); ok {
+		r1 = rf(ns)
 	} else {
 		r1 = ret.Error(1)
 	}
@@ -176,15 +176,15 @@ func (_m *Manager) Namespaces(ksApp app.App, envName string) ([]component.Namesp
 }
 
 // ResolvePath provides a mock function with given fields: ksApp, path
-func (_m *Manager) ResolvePath(ksApp app.App, path string) (component.Namespace, component.Component, error) {
+func (_m *Manager) ResolvePath(ksApp app.App, path string) (component.Module, component.Component, error) {
 	ret := _m.Called(ksApp, path)
 
-	var r0 component.Namespace
-	if rf, ok := ret.Get(0).(func(app.App, string) component.Namespace); ok {
+	var r0 component.Module
+	if rf, ok := ret.Get(0).(func(app.App, string) component.Module); ok {
 		r0 = rf(ksApp, path)
 	} else {
 		if ret.Get(0) != nil {
-			r0 = ret.Get(0).(component.Namespace)
+			r0 = ret.Get(0).(component.Module)
 		}
 	}
 
diff --git a/component/mocks/Namespace.go b/component/mocks/Module.go
similarity index 80%
rename from component/mocks/Namespace.go
rename to component/mocks/Module.go
index 5fdfc899f33aa7158a5952b8785b3bc42c8a0d79..ca874f493c4d2cbb3af85c7750ae74727aae44cb 100644
--- a/component/mocks/Namespace.go
+++ b/component/mocks/Module.go
@@ -19,13 +19,13 @@ package mocks
 import component "github.com/ksonnet/ksonnet/component"
 import mock "github.com/stretchr/testify/mock"
 
-// Namespace is an autogenerated mock type for the Namespace type
-type Namespace struct {
+// Module is an autogenerated mock type for the Module type
+type Module struct {
 	mock.Mock
 }
 
 // Components provides a mock function with given fields:
-func (_m *Namespace) Components() ([]component.Component, error) {
+func (_m *Module) Components() ([]component.Component, error) {
 	ret := _m.Called()
 
 	var r0 []component.Component
@@ -48,7 +48,7 @@ func (_m *Namespace) Components() ([]component.Component, error) {
 }
 
 // Dir provides a mock function with given fields:
-func (_m *Namespace) Dir() string {
+func (_m *Module) Dir() string {
 	ret := _m.Called()
 
 	var r0 string
@@ -62,7 +62,7 @@ func (_m *Namespace) Dir() string {
 }
 
 // Name provides a mock function with given fields:
-func (_m *Namespace) Name() string {
+func (_m *Module) Name() string {
 	ret := _m.Called()
 
 	var r0 string
@@ -76,15 +76,15 @@ func (_m *Namespace) Name() string {
 }
 
 // Params provides a mock function with given fields: envName
-func (_m *Namespace) Params(envName string) ([]component.NamespaceParameter, error) {
+func (_m *Module) Params(envName string) ([]component.ModuleParameter, error) {
 	ret := _m.Called(envName)
 
-	var r0 []component.NamespaceParameter
-	if rf, ok := ret.Get(0).(func(string) []component.NamespaceParameter); ok {
+	var r0 []component.ModuleParameter
+	if rf, ok := ret.Get(0).(func(string) []component.ModuleParameter); ok {
 		r0 = rf(envName)
 	} else {
 		if ret.Get(0) != nil {
-			r0 = ret.Get(0).([]component.NamespaceParameter)
+			r0 = ret.Get(0).([]component.ModuleParameter)
 		}
 	}
 
@@ -99,7 +99,7 @@ func (_m *Namespace) Params(envName string) ([]component.NamespaceParameter, err
 }
 
 // ParamsPath provides a mock function with given fields:
-func (_m *Namespace) ParamsPath() string {
+func (_m *Module) ParamsPath() string {
 	ret := _m.Called()
 
 	var r0 string
@@ -113,7 +113,7 @@ func (_m *Namespace) ParamsPath() string {
 }
 
 // ResolvedParams provides a mock function with given fields:
-func (_m *Namespace) ResolvedParams() (string, error) {
+func (_m *Module) ResolvedParams() (string, error) {
 	ret := _m.Called()
 
 	var r0 string
@@ -134,7 +134,7 @@ func (_m *Namespace) ResolvedParams() (string, error) {
 }
 
 // SetParam provides a mock function with given fields: path, value
-func (_m *Namespace) SetParam(path []string, value interface{}) error {
+func (_m *Module) SetParam(path []string, value interface{}) error {
 	ret := _m.Called(path, value)
 
 	var r0 error
diff --git a/component/namespace.go b/component/module.go
similarity index 67%
rename from component/namespace.go
rename to component/module.go
index e02ce4a4bf1a7d5ebe5b3c4b5e9dcf8480198448..2ec9bb451b612c8757a62514642b78cabfe1e699 100644
--- a/component/namespace.go
+++ b/component/module.go
@@ -28,59 +28,59 @@ import (
 	"github.com/spf13/afero"
 )
 
-func nsErrorMsg(format, nsName string) string {
-	s := fmt.Sprintf("namespace %q", nsName)
-	if nsName == "" {
+func nsErrorMsg(format, module string) string {
+	s := fmt.Sprintf("namespace %q", module)
+	if module == "" {
 		s = "root namespace"
 	}
 
 	return fmt.Sprintf(format, s)
 }
 
-// Namespace is a component namespace
-type Namespace interface {
+// Module is a component module
+type Module interface {
 	Components() ([]Component, error)
 	// TODO: is this needed?
 	Dir() string
 	Name() string
-	Params(envName string) ([]NamespaceParameter, error)
+	Params(envName string) ([]ModuleParameter, error)
 	ParamsPath() string
 	ResolvedParams() (string, error)
 	SetParam(path []string, value interface{}) error
 }
 
-// FilesystemNamespace is a component namespace that uses a filesystem for storage.
-type FilesystemNamespace struct {
+// FilesystemModule is a component namespace that uses a filesystem for storage.
+type FilesystemModule struct {
 	path string
 
 	app app.App
 }
 
-var _ Namespace = (*FilesystemNamespace)(nil)
+var _ Module = (*FilesystemModule)(nil)
 
-// NewNamespace creates an instance of Namespace.
-func NewNamespace(ksApp app.App, path string) *FilesystemNamespace {
-	return &FilesystemNamespace{app: ksApp, path: path}
+// NewModule creates an instance of .
+func NewModule(ksApp app.App, path string) *FilesystemModule {
+	return &FilesystemModule{app: ksApp, path: path}
 }
 
-// ExtractNamespacedComponent extracts a namespace and a component from a path.
-func ExtractNamespacedComponent(a app.App, path string) (Namespace, string) {
+// ExtractModuleComponent extracts a namespace and a component from a path.
+func ExtractModuleComponent(a app.App, path string) (Module, string) {
 	nsPath, component := filepath.Split(path)
-	ns := &FilesystemNamespace{path: nsPath, app: a}
+	ns := &FilesystemModule{path: nsPath, app: a}
 	return ns, component
 }
 
 // Name returns the namespace name.
-func (n *FilesystemNamespace) Name() string {
+func (n *FilesystemModule) Name() string {
 	if n.path == "" {
 		return "/"
 	}
 	return n.path
 }
 
-// GetNamespace gets a namespace by path.
-func GetNamespace(a app.App, nsName string) (Namespace, error) {
-	parts := strings.Split(nsName, "/")
+// GetModule gets a namespace by path.
+func GetModule(a app.App, module string) (Module, error) {
+	parts := strings.Split(module, "/")
 	nsDir := filepath.Join(append([]string{a.Root(), componentsRoot}, parts...)...)
 
 	exists, err := afero.Exists(a.Fs(), nsDir)
@@ -89,19 +89,19 @@ func GetNamespace(a app.App, nsName string) (Namespace, error) {
 	}
 
 	if !exists {
-		return nil, errors.New(nsErrorMsg("unable to find %s", nsName))
+		return nil, errors.New(nsErrorMsg("unable to find %s", module))
 	}
 
-	return &FilesystemNamespace{path: nsName, app: a}, nil
+	return &FilesystemModule{path: module, app: a}, nil
 }
 
 // ParamsPath generates the path to params.libsonnet for a namespace.
-func (n *FilesystemNamespace) ParamsPath() string {
+func (n *FilesystemModule) ParamsPath() string {
 	return filepath.Join(n.Dir(), paramsFile)
 }
 
 // SetParam sets params for a namespace.
-func (n *FilesystemNamespace) SetParam(path []string, value interface{}) error {
+func (n *FilesystemModule) SetParam(path []string, value interface{}) error {
 	paramsData, err := n.readParams()
 	if err != nil {
 		return err
@@ -119,12 +119,12 @@ func (n *FilesystemNamespace) SetParam(path []string, value interface{}) error {
 	return nil
 }
 
-func (n *FilesystemNamespace) writeParams(src string) error {
+func (n *FilesystemModule) writeParams(src string) error {
 	return afero.WriteFile(n.app.Fs(), n.ParamsPath(), []byte(src), 0644)
 }
 
 // Dir is the absolute directory for a namespace.
-func (n *FilesystemNamespace) Dir() string {
+func (n *FilesystemModule) Dir() string {
 	parts := strings.Split(n.path, "/")
 	path := []string{n.app.Root(), componentsRoot}
 	if len(n.path) != 0 {
@@ -134,8 +134,8 @@ func (n *FilesystemNamespace) Dir() string {
 	return filepath.Join(path...)
 }
 
-// NamespaceParameter is a namespaced paramater.
-type NamespaceParameter struct {
+// ModuleParameter is a namespaced paramater.
+type ModuleParameter struct {
 	Component string
 	Index     string
 	Key       string
@@ -144,7 +144,7 @@ type NamespaceParameter struct {
 
 // ResolvedParams resolves paramaters for a namespace. It returns a JSON encoded
 // string of component parameters.
-func (n *FilesystemNamespace) ResolvedParams() (string, error) {
+func (n *FilesystemModule) ResolvedParams() (string, error) {
 	s, err := n.readParams()
 	if err != nil {
 		return "", err
@@ -154,13 +154,13 @@ func (n *FilesystemNamespace) ResolvedParams() (string, error) {
 }
 
 // Params returns the params for a namespace.
-func (n *FilesystemNamespace) Params(envName string) ([]NamespaceParameter, error) {
+func (n *FilesystemModule) Params(envName string) ([]ModuleParameter, error) {
 	components, err := n.Components()
 	if err != nil {
 		return nil, err
 	}
 
-	var nsps []NamespaceParameter
+	var nsps []ModuleParameter
 	for _, c := range components {
 		params, err := c.Params(envName)
 		if err != nil {
@@ -175,7 +175,7 @@ func (n *FilesystemNamespace) Params(envName string) ([]NamespaceParameter, erro
 	return nsps, nil
 }
 
-func (n *FilesystemNamespace) readParams() (string, error) {
+func (n *FilesystemModule) readParams() (string, error) {
 	b, err := afero.ReadFile(n.app.Fs(), n.ParamsPath())
 	if err != nil {
 		return "", err
@@ -184,8 +184,8 @@ func (n *FilesystemNamespace) readParams() (string, error) {
 	return string(b), nil
 }
 
-// NamespacesFromEnv returns all namespaces given an environment.
-func NamespacesFromEnv(a app.App, env string) ([]Namespace, error) {
+// ModulesFromEnv returns all namespaces given an environment.
+func ModulesFromEnv(a app.App, env string) ([]Module, error) {
 	paths, err := MakePaths(a, env)
 	if err != nil {
 		return nil, err
@@ -194,12 +194,12 @@ func NamespacesFromEnv(a app.App, env string) ([]Namespace, error) {
 	prefix := a.Root() + "/components"
 
 	seen := make(map[string]bool)
-	var namespaces []Namespace
+	var namespaces []Module
 	for _, path := range paths {
-		nsName := strings.TrimPrefix(path, prefix)
-		if _, ok := seen[nsName]; !ok {
-			seen[nsName] = true
-			ns, err := GetNamespace(a, nsName)
+		module := strings.TrimPrefix(path, prefix)
+		if _, ok := seen[module]; !ok {
+			seen[module] = true
+			ns, err := GetModule(a, module)
 			if err != nil {
 				return nil, err
 			}
@@ -211,11 +211,11 @@ func NamespacesFromEnv(a app.App, env string) ([]Namespace, error) {
 	return namespaces, nil
 }
 
-// Namespaces returns all component namespaces
-func Namespaces(a app.App) ([]Namespace, error) {
+// Modules returns all component namespaces
+func Modules(a app.App) ([]Module, error) {
 	componentRoot := filepath.Join(a.Root(), componentsRoot)
 
-	var namespaces []Namespace
+	var namespaces []Module
 
 	err := afero.Walk(a.Fs(), componentRoot, func(path string, fi os.FileInfo, err error) error {
 		if err != nil {
@@ -231,7 +231,7 @@ func Namespaces(a app.App) ([]Namespace, error) {
 			if ok {
 				nsPath := strings.TrimPrefix(path, componentRoot)
 				nsPath = strings.TrimPrefix(nsPath, string(filepath.Separator))
-				ns := &FilesystemNamespace{path: nsPath, app: a}
+				ns := &FilesystemModule{path: nsPath, app: a}
 				namespaces = append(namespaces, ns)
 			}
 		}
@@ -251,7 +251,7 @@ func Namespaces(a app.App) ([]Namespace, error) {
 }
 
 // Components returns the components in a namespace.
-func (n *FilesystemNamespace) Components() ([]Component, error) {
+func (n *FilesystemModule) Components() ([]Component, error) {
 	parts := strings.Split(n.path, "/")
 	nsDir := filepath.Join(append([]string{n.app.Root(), componentsRoot}, parts...)...)
 
diff --git a/component/namespace_test.go b/component/module_test.go
similarity index 88%
rename from component/namespace_test.go
rename to component/module_test.go
index 1640817f071d83a243d64706b3719a0890bd4fed..b05aab3a8028d05e254eb70efa27be22b0143219 100644
--- a/component/namespace_test.go
+++ b/component/module_test.go
@@ -22,7 +22,7 @@ import (
 	"github.com/stretchr/testify/require"
 )
 
-func TestNamespace_Components(t *testing.T) {
+func TestModule_Components(t *testing.T) {
 	app, fs := appMock("/app")
 
 	stageFile(t, fs, "certificate-crd.yaml", "/app/components/ns1/certificate-crd.yaml")
@@ -31,16 +31,16 @@ func TestNamespace_Components(t *testing.T) {
 
 	cases := []struct {
 		name   string
-		nsName string
+		module string
 		count  int
 	}{
 		{
 			name:   "no components",
-			nsName: "/",
+			module: "/",
 		},
 		{
 			name:   "with components",
-			nsName: "ns1",
+			module: "ns1",
 			count:  1,
 		},
 	}
@@ -48,10 +48,10 @@ func TestNamespace_Components(t *testing.T) {
 	for _, tc := range cases {
 		t.Run(tc.name, func(t *testing.T) {
 
-			ns, err := GetNamespace(app, tc.nsName)
+			ns, err := GetModule(app, tc.module)
 			require.NoError(t, err)
 
-			assert.Equal(t, tc.nsName, ns.Name())
+			assert.Equal(t, tc.module, ns.Name())
 			components, err := ns.Components()
 			require.NoError(t, err)
 
diff --git a/component/yaml.go b/component/yaml.go
index 1063c48c799ebd42fc48932f110203abc267ed02..e1dbecbea3eabd2a856b4e3ec776ab97e1bf6bd6 100644
--- a/component/yaml.go
+++ b/component/yaml.go
@@ -85,7 +85,7 @@ func ImportYaml(r io.Reader) (*TypeSpec, Properties, error) {
 // YAML represents a YAML component. Since JSON is a subset of YAML, it can handle JSON as well.
 type YAML struct {
 	app        app.App
-	nsName     string
+	module     string
 	source     string
 	paramsPath string
 }
@@ -93,10 +93,10 @@ type YAML struct {
 var _ Component = (*YAML)(nil)
 
 // NewYAML creates an instance of YAML.
-func NewYAML(a app.App, nsName, source, paramsPath string) *YAML {
+func NewYAML(a app.App, module, source, paramsPath string) *YAML {
 	return &YAML{
 		app:        a,
-		nsName:     nsName,
+		module:     module,
 		source:     source,
 		paramsPath: paramsPath,
 	}
@@ -110,15 +110,15 @@ func (y *YAML) Name(wantsNameSpaced bool) string {
 		return name
 	}
 
-	if y.nsName == "/" {
+	if y.module == "/" {
 		return name
 	}
 
-	return path.Join(y.nsName, name)
+	return path.Join(y.module, name)
 }
 
 // Params returns params for a component.
-func (y *YAML) Params(envName string) ([]NamespaceParameter, error) {
+func (y *YAML) Params(envName string) ([]ModuleParameter, error) {
 	libPath, err := y.app.LibPath("default")
 	if err != nil {
 		return nil, err
@@ -154,7 +154,7 @@ func (y *YAML) Params(envName string) ([]NamespaceParameter, error) {
 		return nil, err
 	}
 
-	var params []NamespaceParameter
+	var params []ModuleParameter
 	for componentName, componentValue := range props {
 		matches := re.FindAllStringSubmatch(componentName, 1)
 		if len(matches) > 0 {
@@ -202,8 +202,8 @@ func isLeaf(path []string, key string, valueMap map[string]Values) (string, bool
 	return "", false
 }
 
-func (y *YAML) paramValues(componentName, index string, valueMap map[string]Values, m map[string]interface{}, path []string) ([]NamespaceParameter, error) {
-	var params []NamespaceParameter
+func (y *YAML) paramValues(componentName, index string, valueMap map[string]Values, m map[string]interface{}, path []string) ([]ModuleParameter, error) {
+	var params []ModuleParameter
 
 	for k, v := range m {
 		var s string
@@ -211,7 +211,7 @@ func (y *YAML) paramValues(componentName, index string, valueMap map[string]Valu
 		default:
 			if childPath, exists := isLeaf(path, k, valueMap); exists {
 				s = fmt.Sprintf("%v", v)
-				p := NamespaceParameter{
+				p := ModuleParameter{
 					Component: componentName,
 					Index:     index,
 					Key:       childPath,
@@ -227,7 +227,7 @@ func (y *YAML) paramValues(componentName, index string, valueMap map[string]Valu
 					return nil, err
 				}
 				s = string(b)
-				p := NamespaceParameter{
+				p := ModuleParameter{
 					Component: componentName,
 					Index:     index,
 					Key:       childPath,
@@ -250,7 +250,7 @@ func (y *YAML) paramValues(componentName, index string, valueMap map[string]Valu
 					return nil, err
 				}
 				s = string(b)
-				p := NamespaceParameter{
+				p := ModuleParameter{
 					Component: componentName,
 					Index:     index,
 					Key:       childPath,
@@ -331,7 +331,7 @@ func (y *YAML) readParams(envName string) (string, error) {
 		return y.readNamespaceParams()
 	}
 
-	ns, err := GetNamespace(y.app, y.nsName)
+	ns, err := GetModule(y.app, y.module)
 	if err != nil {
 		return "", err
 	}
diff --git a/component/yaml_test.go b/component/yaml_test.go
index 5828e9852ef10e63876da2a91cb85bc3710ab543..f9dec01d8c80498bef505c49361d4b0b870148f5 100644
--- a/component/yaml_test.go
+++ b/component/yaml_test.go
@@ -73,7 +73,7 @@ func TestYAML_Params(t *testing.T) {
 	require.Len(t, params, 1)
 
 	param := params[0]
-	expected := NamespaceParameter{
+	expected := ModuleParameter{
 		Component: "deployment",
 		Index:     "0",
 		Key:       "metadata.labels",
@@ -96,7 +96,7 @@ func TestYAML_Params_literal(t *testing.T) {
 	require.Len(t, params, 1)
 
 	param := params[0]
-	expected := NamespaceParameter{
+	expected := ModuleParameter{
 		Component: "rbac",
 		Index:     "1",
 		Key:       "metadata.name",
diff --git a/docs/cli-reference/ks.md b/docs/cli-reference/ks.md
index fd92abd7e8c66ed28bf24b09dabf937c2cd49e90..397fc15eac4d1c358190257cc7c3eb91ea73f755 100644
--- a/docs/cli-reference/ks.md
+++ b/docs/cli-reference/ks.md
@@ -32,7 +32,7 @@ ks [flags]
 * [ks generate](ks_generate.md)	 - Use the specified prototype to generate a component manifest
 * [ks import](ks_import.md)	 - Import manifest
 * [ks init](ks_init.md)	 - Initialize a ksonnet application
-* [ks ns](ks_ns.md)	 - ns
+* [ks module](ks_module.md)	 - module
 * [ks param](ks_param.md)	 - Manage ksonnet parameters for components and environments
 * [ks pkg](ks_pkg.md)	 - Manage packages and dependencies for the current ksonnet application
 * [ks prototype](ks_prototype.md)	 - Instantiate, inspect, and get examples for ksonnet prototypes
diff --git a/docs/cli-reference/ks_component_list.md b/docs/cli-reference/ks_component_list.md
index e82d82fa59075f05b010bdb6e89c71233024ba48..ce5bbf79029e28b87d6df4e36897198f7fec7980 100644
--- a/docs/cli-reference/ks_component_list.md
+++ b/docs/cli-reference/ks_component_list.md
@@ -25,9 +25,9 @@ ks component list
 ### Options
 
 ```
-  -h, --help               help for list
-      --namespace string   Namespace
-  -o, --output string      Output format. Valid options: wide
+  -h, --help            help for list
+      --module string   Component module
+  -o, --output string   Output format. Valid options: wide
 ```
 
 ### Options inherited from parent commands
diff --git a/docs/cli-reference/ks_env_targets.md b/docs/cli-reference/ks_env_targets.md
index b1d072c919dff1c20fc7137b561d1cfbab57e1fb..854ac7fa8c5900399b19baa307bf19cfe86b8a55 100644
--- a/docs/cli-reference/ks_env_targets.md
+++ b/docs/cli-reference/ks_env_targets.md
@@ -13,7 +13,8 @@ ks env targets [flags]
 ### Options
 
 ```
-  -h, --help   help for targets
+  -h, --help                 help for targets
+      --module stringSlice   Component modules to include
 ```
 
 ### Options inherited from parent commands
diff --git a/docs/cli-reference/ks_import.md b/docs/cli-reference/ks_import.md
index 0b0699a00d54a3b8bb6b77fc5c2d791fef9462cb..db55343ace96634e18e53d4bbb219c900b524993 100644
--- a/docs/cli-reference/ks_import.md
+++ b/docs/cli-reference/ks_import.md
@@ -13,9 +13,9 @@ ks import [flags]
 ### Options
 
 ```
-  -f, --filename string    Filename or directory for component to import
-  -h, --help               help for import
-      --namespace string   Component namespace
+  -f, --filename string   Filename or directory for component to import
+  -h, --help              help for import
+      --module string     Component module
 ```
 
 ### Options inherited from parent commands
diff --git a/docs/cli-reference/ks_ns.md b/docs/cli-reference/ks_module.md
similarity index 62%
rename from docs/cli-reference/ks_ns.md
rename to docs/cli-reference/ks_module.md
index 5ccfe111d9a57b89aba0d3f19daf5337097c5c47..6f0ab3d247d3ea6f0c2e1371457635a9eac35690 100644
--- a/docs/cli-reference/ks_ns.md
+++ b/docs/cli-reference/ks_module.md
@@ -1,15 +1,15 @@
-## ks ns
+## ks module
 
-ns
+module
 
 ### Synopsis
 
-ns
+module
 
 ### Options
 
 ```
-  -h, --help   help for ns
+  -h, --help   help for module
 ```
 
 ### Options inherited from parent commands
@@ -21,6 +21,6 @@ ns
 ### SEE ALSO
 
 * [ks](ks.md)	 - Configure your application to deploy to a Kubernetes cluster
-* [ks ns create](ks_ns_create.md)	 - create
-* [ks ns list](ks_ns_list.md)	 - list
+* [ks module create](ks_module_create.md)	 - create
+* [ks module list](ks_module_list.md)	 - list
 
diff --git a/docs/cli-reference/ks_ns_create.md b/docs/cli-reference/ks_module_create.md
similarity index 72%
rename from docs/cli-reference/ks_ns_create.md
rename to docs/cli-reference/ks_module_create.md
index 3239b29106d3fd02f5b68021969835ee36fa423d..9fe6fd7363fe667d7b52437bd416f29d2ed4a062 100644
--- a/docs/cli-reference/ks_ns_create.md
+++ b/docs/cli-reference/ks_module_create.md
@@ -1,4 +1,4 @@
-## ks ns create
+## ks module create
 
 create
 
@@ -7,7 +7,7 @@ create
 create
 
 ```
-ks ns create <name> [flags]
+ks module create <name> [flags]
 ```
 
 ### Options
@@ -24,5 +24,5 @@ ks ns create <name> [flags]
 
 ### SEE ALSO
 
-* [ks ns](ks_ns.md)	 - ns
+* [ks module](ks_module.md)	 - module
 
diff --git a/docs/cli-reference/ks_ns_list.md b/docs/cli-reference/ks_module_list.md
similarity index 64%
rename from docs/cli-reference/ks_ns_list.md
rename to docs/cli-reference/ks_module_list.md
index 0929c20066042d2f824fa5463682bc6618d263b9..c2aaacc10b29a008771b20e955d621cb8f78d082 100644
--- a/docs/cli-reference/ks_ns_list.md
+++ b/docs/cli-reference/ks_module_list.md
@@ -1,4 +1,4 @@
-## ks ns list
+## ks module list
 
 list
 
@@ -7,13 +7,13 @@ list
 list
 
 ```
-ks ns list [flags]
+ks module list [flags]
 ```
 
 ### Options
 
 ```
-      --env string   Environment to list namespaces for
+      --env string   Environment to list modules for
   -h, --help         help for list
 ```
 
@@ -25,5 +25,5 @@ ks ns list [flags]
 
 ### SEE ALSO
 
-* [ks ns](ks_ns.md)	 - ns
+* [ks module](ks_module.md)	 - module
 
diff --git a/docs/cli-reference/ks_param_list.md b/docs/cli-reference/ks_param_list.md
index 390980ed6d84ae986c432263889619655dea7e4b..7ef1dffcdf63472ed759573a5567e004dc76e359 100644
--- a/docs/cli-reference/ks_param_list.md
+++ b/docs/cli-reference/ks_param_list.md
@@ -42,9 +42,9 @@ ks param list guestbook --env=dev
 ### Options
 
 ```
-      --env string         Specify environment to list parameters for
-  -h, --help               help for list
-      --namespace string   Specify namespace to list parameters for
+      --env string      Specify environment to list parameters for
+  -h, --help            help for list
+      --module string   Specify module to list parameters for
 ```
 
 ### Options inherited from parent commands
diff --git a/e2e/component_test.go b/e2e/component_test.go
index 0281b33e1c80584d9039d9a8b980d78a052fcef7..1a577890a18cea2c031c9894365977aa3c3a10df 100644
--- a/e2e/component_test.go
+++ b/e2e/component_test.go
@@ -46,7 +46,7 @@ var _ = Describe("ks component", func() {
 
 		Context("with a namespace", func() {
 			It("lists the components for a namespace in wide format", func() {
-				o := a.runKs("component", "list", "--namespace", "/")
+				o := a.runKs("component", "list", "--module", "/")
 				assertExitStatus(o, 0)
 				assertOutput("component/list/output.txt", o.stdout)
 			})
diff --git a/e2e/env_test.go b/e2e/env_test.go
index 6f79ffe763b045ba7f96575f4c3ed19ce6835558..6b3bc5ef2dd2927f2e5a9caf9a8a6e02403f7091 100644
--- a/e2e/env_test.go
+++ b/e2e/env_test.go
@@ -165,7 +165,7 @@ var _ = Describe("ks env", func() {
 			Context("updating the targets", func() {
 				It("updates the name of an environment", func() {
 					o := a.runKs("env", "targets", "default",
-						"--namespace", "/")
+						"--module", "/")
 					assertExitStatus(o, 0)
 
 					o = a.envDescribe("default")
@@ -182,7 +182,7 @@ var _ = Describe("ks env", func() {
 			Context("target namespace does not exist", func() {
 				It("return an error", func() {
 					o := a.runKs("env", "targets", "default",
-						"--namespace", "bad")
+						"--module", "bad")
 					assertExitStatus(o, 1)
 					assertOutput("env/targets/invalid-target.txt", o.stderr)
 				})
diff --git a/e2e/ns_test.go b/e2e/module_test.go
similarity index 71%
rename from e2e/ns_test.go
rename to e2e/module_test.go
index 9eb71e85730de9680753742f7e3053358b8b1ea7..bf5e08dccc3a7c59c57f64afe61e6ea1f9d37a71 100644
--- a/e2e/ns_test.go
+++ b/e2e/module_test.go
@@ -21,7 +21,7 @@ import (
 	. "github.com/onsi/ginkgo"
 )
 
-var _ = Describe("ks ns", func() {
+var _ = Describe("ks module", func() {
 	var a app
 
 	BeforeEach(func() {
@@ -32,39 +32,39 @@ var _ = Describe("ks ns", func() {
 	Describe("create", func() {
 		Context("it does not exist", func() {
 			It("creates the namespace", func() {
-				o := a.runKs("ns", "create", "new-ns")
+				o := a.runKs("module", "create", "new-module")
 				assertExitStatus(o, 0)
 			})
 		})
 		Context("it exists", func() {
 			It("returns an error", func() {
-				o := a.runKs("ns", "create", "/")
+				o := a.runKs("module", "create", "/")
 				assertExitStatus(o, 1)
-				assertOutput("ns/create/invalid.txt", o.stderr)
+				assertOutput("module/create/invalid.txt", o.stderr)
 			})
 		})
 	})
 
 	Describe("list", func() {
-		It("shows a list of namespaces", func() {
-			o := a.runKs("ns", "list")
+		It("shows a list of modules", func() {
+			o := a.runKs("module", "list")
 			assertExitStatus(o, 0)
-			assertOutput("ns/list/output.txt", o.stdout)
+			assertOutput("module/list/output.txt", o.stdout)
 		})
 
 		Context("with a valid environment", func() {
 			It("shows a list of namespaces", func() {
-				o := a.runKs("ns", "list", "--env", "default")
+				o := a.runKs("module", "list", "--env", "default")
 				assertExitStatus(o, 0)
-				assertOutput("ns/list/output.txt", o.stdout)
+				assertOutput("module/list/output.txt", o.stdout)
 			})
 		})
 
 		Context("with an invalid environment", func() {
 			It("returns an error", func() {
-				o := a.runKs("ns", "list", "--env", "invalid")
+				o := a.runKs("module", "list", "--env", "invalid")
 				assertExitStatus(o, 1)
-				assertOutput("ns/list/invalid.txt", o.stderr)
+				assertOutput("module/list/invalid.txt", o.stderr)
 			})
 		})
 	})
diff --git a/e2e/testdata/output/module/create/invalid.txt b/e2e/testdata/output/module/create/invalid.txt
new file mode 100644
index 0000000000000000000000000000000000000000..47d43d11a93bb885654d2db0e6bcaf4b053731bc
--- /dev/null
+++ b/e2e/testdata/output/module/create/invalid.txt
@@ -0,0 +1 @@
+module "/" already exists
diff --git a/e2e/testdata/output/ns/list/invalid.txt b/e2e/testdata/output/module/list/invalid.txt
similarity index 100%
rename from e2e/testdata/output/ns/list/invalid.txt
rename to e2e/testdata/output/module/list/invalid.txt
diff --git a/e2e/testdata/output/module/list/output.txt b/e2e/testdata/output/module/list/output.txt
new file mode 100644
index 0000000000000000000000000000000000000000..43acadd5e5adf2e8ef26a19fc8a3adc9adf9750c
--- /dev/null
+++ b/e2e/testdata/output/module/list/output.txt
@@ -0,0 +1,3 @@
+MODULE
+======
+/
diff --git a/e2e/testdata/output/ns/create/invalid.txt b/e2e/testdata/output/ns/create/invalid.txt
deleted file mode 100644
index 8ae68547256c8f2efad720d145ff588b7fc4aea8..0000000000000000000000000000000000000000
--- a/e2e/testdata/output/ns/create/invalid.txt
+++ /dev/null
@@ -1 +0,0 @@
-namespace "/" already exists
diff --git a/e2e/testdata/output/ns/list/output.txt b/e2e/testdata/output/ns/list/output.txt
deleted file mode 100644
index 14ca3bcf00cf40b49366ca71e8301801862551c7..0000000000000000000000000000000000000000
--- a/e2e/testdata/output/ns/list/output.txt
+++ /dev/null
@@ -1,3 +0,0 @@
-NAMESPACE
-=========
-/
diff --git a/metadata/component.go b/metadata/component.go
index a9ce6c55103f67158c26ac47451f0f6cbe2416d1..84dd7e5c7cb0903bea3472e8a09bbdb4927daec8 100644
--- a/metadata/component.go
+++ b/metadata/component.go
@@ -52,7 +52,7 @@ func (m *manager) GetAllComponents() ([]component.Component, error) {
 	if err != nil {
 		return nil, err
 	}
-	namespaces, err := component.Namespaces(ksApp)
+	namespaces, err := component.Modules(ksApp)
 	if err != nil {
 		return nil, err
 	}
@@ -100,7 +100,7 @@ func (m *manager) GetAllComponentParams(root string) (map[string]param.Params, e
 		return nil, err
 	}
 
-	namespaces, err := component.Namespaces(ksApp)
+	namespaces, err := component.Modules(ksApp)
 	if err != nil {
 		return nil, errors.Wrap(err, "find component namespaces")
 	}
@@ -137,7 +137,7 @@ func (m *manager) SetComponentParams(path string, params param.Params) error {
 		return err
 	}
 
-	ns, componentName := component.ExtractNamespacedComponent(ksApp, path)
+	ns, componentName := component.ExtractModuleComponent(ksApp, path)
 	paramsPath := ns.ParamsPath()
 
 	text, err := afero.ReadFile(m.appFS, paramsPath)
diff --git a/metadata/environment.go b/metadata/environment.go
index df366d55cb8008df64f99fce19ad6e30b9295ecc..6f533fb0a461cfea90ed44865acf50b4e092c3ed 100644
--- a/metadata/environment.go
+++ b/metadata/environment.go
@@ -34,7 +34,7 @@ var (
 	envCreate = env.Create
 )
 
-func (m *manager) GetEnvironmentParams(name, nsName string) (map[string]param.Params, error) {
+func (m *manager) GetEnvironmentParams(name, module string) (map[string]param.Params, error) {
 	a, err := m.App()
 	if err != nil {
 		return nil, err
@@ -44,7 +44,7 @@ func (m *manager) GetEnvironmentParams(name, nsName string) (map[string]param.Pa
 		App: a,
 	}
 
-	return env.GetParams(name, nsName, config)
+	return env.GetParams(name, module, config)
 }
 
 func (m *manager) SetEnvironmentParams(envName, component string, params param.Params) error {
diff --git a/metadata/interface.go b/metadata/interface.go
index c31324fc62c35c8dc1d12b25d2d325e10b798d1a..05d8f3c9ad1c0b009c19cb6daba1a4c47fa592e2 100644
--- a/metadata/interface.go
+++ b/metadata/interface.go
@@ -48,7 +48,7 @@ type Manager interface {
 	// mapping of parameters of the form:
 	// componentName => {param key => param val}
 	// i.e.: "nginx" => {"replicas" => 1, "name": "nginx"}
-	GetEnvironmentParams(name, nsName string) (map[string]param.Params, error)
+	GetEnvironmentParams(name, module string) (map[string]param.Params, error)
 	SetEnvironmentParams(env, component string, params param.Params) error
 }
 
diff --git a/pkg/env/params.go b/pkg/env/params.go
index d435b894479d564a86cf399c9c8f13aefd079e1f..8903ee6cc2fec5852398f800d0dcafa0b75e7cfd 100644
--- a/pkg/env/params.go
+++ b/pkg/env/params.go
@@ -66,7 +66,7 @@ type GetParamsConfig struct {
 }
 
 // GetParams gets all parameters for an environment.
-func GetParams(envName, nsName string, config GetParamsConfig) (map[string]param.Params, error) {
+func GetParams(envName, module string, config GetParamsConfig) (map[string]param.Params, error) {
 	exists, err := envExists(config.App, envName)
 	if err != nil {
 		return nil, err
@@ -87,7 +87,7 @@ func GetParams(envName, nsName string, config GetParamsConfig) (map[string]param
 	}
 
 	// figure out what component we need
-	ns := component.NewNamespace(config.App, nsName)
+	ns := component.NewModule(config.App, module)
 	componentParamsFile, err := afero.ReadFile(config.App.Fs(), ns.ParamsPath())
 	if err != nil {
 		return nil, err
diff --git a/pkg/kubecfg/param_diff.go b/pkg/kubecfg/param_diff.go
index f302467188879ce5247a630e6de56afe229d4987..1dcfb3a436bad803150aec3fd0e4394feed2153b 100644
--- a/pkg/kubecfg/param_diff.go
+++ b/pkg/kubecfg/param_diff.go
@@ -75,7 +75,7 @@ func (c *ParamDiffCmd) Run(out io.Writer) error {
 		return err
 	}
 
-	ns, componentName := component.ExtractNamespacedComponent(ksApp, c.component)
+	ns, componentName := component.ExtractModuleComponent(ksApp, c.component)
 
 	params1, err := manager.GetEnvironmentParams(c.env1, ns.Name())
 	if err != nil {
diff --git a/pkg/pipeline/pipeline.go b/pkg/pipeline/pipeline.go
index 8715a754314cca12d3a9b314640964e12d34239b..eeabd4ae137d42da0be967f7cc774e1d629d1865 100644
--- a/pkg/pipeline/pipeline.go
+++ b/pkg/pipeline/pipeline.go
@@ -63,20 +63,20 @@ func New(ksApp app.App, envName string, opts ...Opt) *Pipeline {
 }
 
 // Namespaces returns the namespaces that belong to this pipeline.
-func (p *Pipeline) Namespaces() ([]component.Namespace, error) {
-	return p.cm.Namespaces(p.app, p.envName)
+func (p *Pipeline) Modules() ([]component.Module, error) {
+	return p.cm.Modules(p.app, p.envName)
 }
 
 // EnvParameters creates parameters for a namespace given an environment.
-func (p *Pipeline) EnvParameters(nsName string) (string, error) {
-	ns, err := p.cm.Namespace(p.app, nsName)
+func (p *Pipeline) EnvParameters(module string) (string, error) {
+	ns, err := p.cm.Module(p.app, module)
 	if err != nil {
-		return "", errors.Wrapf(err, "load namespace %s", nsName)
+		return "", errors.Wrapf(err, "load module %s", module)
 	}
 
 	paramsStr, err := p.cm.NSResolveParams(ns)
 	if err != nil {
-		return "", errors.Wrapf(err, "resolve params for %s", nsName)
+		return "", errors.Wrapf(err, "resolve params for %s", module)
 	}
 
 	data, err := p.app.EnvironmentParams(p.envName)
@@ -93,7 +93,7 @@ func (p *Pipeline) EnvParameters(nsName string) (string, error) {
 
 // Components returns the components that belong to this pipeline.
 func (p *Pipeline) Components(filter []string) ([]component.Component, error) {
-	namespaces, err := p.Namespaces()
+	namespaces, err := p.Modules()
 	if err != nil {
 		return nil, err
 	}
@@ -114,7 +114,7 @@ func (p *Pipeline) Components(filter []string) ([]component.Component, error) {
 
 // Objects converts components into Kubernetes objects.
 func (p *Pipeline) Objects(filter []string) ([]*unstructured.Unstructured, error) {
-	namespaces, err := p.Namespaces()
+	namespaces, err := p.Modules()
 	if err != nil {
 		return nil, errors.Wrap(err, "get namespaces")
 	}
diff --git a/pkg/pipeline/pipeline_test.go b/pkg/pipeline/pipeline_test.go
index d857dd89ce1c7a9aae6ca68938e1fa041ae6a348..83151f16f6b2c966a0f17b0f93450dcb487629b3 100644
--- a/pkg/pipeline/pipeline_test.go
+++ b/pkg/pipeline/pipeline_test.go
@@ -30,10 +30,10 @@ import (
 
 func TestPipeline_Namespaces(t *testing.T) {
 	withPipeline(t, func(p *Pipeline, m *cmocks.Manager, a *appmocks.App) {
-		namespaces := []component.Namespace{}
-		m.On("Namespaces", p.app, "default").Return(namespaces, nil)
+		namespaces := []component.Module{}
+		m.On("Modules", p.app, "default").Return(namespaces, nil)
 
-		got, err := p.Namespaces()
+		got, err := p.Modules()
 		require.NoError(t, err)
 
 		require.Equal(t, namespaces, got)
@@ -42,10 +42,10 @@ func TestPipeline_Namespaces(t *testing.T) {
 
 func TestPipeline_EnvParameters(t *testing.T) {
 	withPipeline(t, func(p *Pipeline, m *cmocks.Manager, a *appmocks.App) {
-		ns := component.NewNamespace(p.app, "/")
-		namespaces := []component.Namespace{ns}
-		m.On("Namespaces", p.app, "default").Return(namespaces, nil)
-		m.On("Namespace", p.app, "/").Return(ns, nil)
+		ns := component.NewModule(p.app, "/")
+		namespaces := []component.Module{ns}
+		m.On("Modules", p.app, "default").Return(namespaces, nil)
+		m.On("Module", p.app, "/").Return(ns, nil)
 		m.On("NSResolveParams", ns).Return("", nil)
 		a.On("EnvironmentParams", "default").Return("{}", nil)
 
@@ -61,10 +61,10 @@ func TestPipeline_Components(t *testing.T) {
 		cpnt := &cmocks.Component{}
 		components := []component.Component{cpnt}
 
-		ns := component.NewNamespace(p.app, "/")
-		namespaces := []component.Namespace{ns}
-		m.On("Namespaces", p.app, "default").Return(namespaces, nil)
-		m.On("Namespace", p.app, "/").Return(ns, nil)
+		ns := component.NewModule(p.app, "/")
+		namespaces := []component.Module{ns}
+		m.On("Modules", p.app, "default").Return(namespaces, nil)
+		m.On("Module", p.app, "/").Return(ns, nil)
 		m.On("NSResolveParams", ns).Return("", nil)
 		a.On("EnvironmentParams", "default").Return("{}", nil)
 		m.On("Components", ns).Return(components, nil)
@@ -89,10 +89,10 @@ func TestPipeline_Components_filtered(t *testing.T) {
 		cpnt2 := mockComponent("cpnt2")
 		components := []component.Component{cpnt1, cpnt2}
 
-		ns := component.NewNamespace(p.app, "/")
-		namespaces := []component.Namespace{ns}
-		m.On("Namespaces", p.app, "default").Return(namespaces, nil)
-		m.On("Namespace", p.app, "/").Return(ns, nil)
+		ns := component.NewModule(p.app, "/")
+		namespaces := []component.Module{ns}
+		m.On("Modules", p.app, "default").Return(namespaces, nil)
+		m.On("Module", p.app, "/").Return(ns, nil)
 		m.On("NSResolveParams", ns).Return("", nil)
 		a.On("EnvironmentParams", "default").Return("{}", nil)
 		m.On("Components", ns).Return(components, nil)
@@ -117,10 +117,10 @@ func TestPipeline_Objects(t *testing.T) {
 		cpnt.On("Name", true).Return("name")
 		components := []component.Component{cpnt}
 
-		ns := component.NewNamespace(p.app, "/")
-		namespaces := []component.Namespace{ns}
-		m.On("Namespaces", p.app, "default").Return(namespaces, nil)
-		m.On("Namespace", p.app, "/").Return(ns, nil)
+		ns := component.NewModule(p.app, "/")
+		namespaces := []component.Module{ns}
+		m.On("Modules", p.app, "default").Return(namespaces, nil)
+		m.On("Module", p.app, "/").Return(ns, nil)
 		m.On("NSResolveParams", ns).Return("", nil)
 		a.On("EnvironmentParams", "default").Return("{}", nil)
 		m.On("Components", ns).Return(components, nil)
@@ -143,10 +143,10 @@ func TestPipeline_YAML(t *testing.T) {
 		cpnt.On("Name", true).Return("name")
 		components := []component.Component{cpnt}
 
-		ns := component.NewNamespace(p.app, "/")
-		namespaces := []component.Namespace{ns}
-		m.On("Namespaces", p.app, "default").Return(namespaces, nil)
-		m.On("Namespace", p.app, "/").Return(ns, nil)
+		ns := component.NewModule(p.app, "/")
+		namespaces := []component.Module{ns}
+		m.On("Modules", p.app, "default").Return(namespaces, nil)
+		m.On("Module", p.app, "/").Return(ns, nil)
 		m.On("NSResolveParams", ns).Return("", nil)
 		a.On("EnvironmentParams", "default").Return("{}", nil)
 		m.On("Components", ns).Return(components, nil)
diff --git a/testdata/schema-v1.json b/testdata/schema-v1.json
index 0cbeb306ce4a414a2d6f52ecdfcbadaa3011b360..b263c0356b28c9d193b8ba9138bb36a348c48995 100644
--- a/testdata/schema-v1.json
+++ b/testdata/schema-v1.json
@@ -9976,7 +9976,7 @@
       "type": "string",
       "method": "OPTIONS",
       "summary": "connect OPTIONS requests to proxy of Pod",
-      "nickname": "connectOptionsNamespacedPodProxy",
+      "nickname": "connectOptiomodulespacedPodProxy",
       "parameters": [
        {
         "type": "string",
@@ -10296,7 +10296,7 @@
       "type": "string",
       "method": "OPTIONS",
       "summary": "connect OPTIONS requests to proxy of Pod",
-      "nickname": "connectOptionsNamespacedPodProxyWithPath",
+      "nickname": "connectOptiomodulespacedPodProxyWithPath",
       "parameters": [
        {
         "type": "string",
@@ -16771,7 +16771,7 @@
       "type": "string",
       "method": "OPTIONS",
       "summary": "connect OPTIONS requests to proxy of Service",
-      "nickname": "connectOptionsNamespacedServiceProxy",
+      "nickname": "connectOptiomodulespacedServiceProxy",
       "parameters": [
        {
         "type": "string",
@@ -17091,7 +17091,7 @@
       "type": "string",
       "method": "OPTIONS",
       "summary": "connect OPTIONS requests to proxy of Service",
-      "nickname": "connectOptionsNamespacedServiceProxyWithPath",
+      "nickname": "connectOptiomodulespacedServiceProxyWithPath",
       "parameters": [
        {
         "type": "string",