diff --git a/profiles/commandline/.api b/profiles/commandline/.api
deleted file mode 100644
index 5782e39..0000000
--- a/profiles/commandline/.api
+++ /dev/null
@@ -1,17 +0,0 @@
-pkg commandline, const DefaultProfiles ideal-string
-pkg commandline, func IsFlagSet(*flag.FlagSet, string) bool
-pkg commandline, func RegisterDBFilenameFlag(*flag.FlagSet, *string, string)
-pkg commandline, func RegisterManagementCommands(*cmdline.Command, string)
-pkg commandline, func RegisterMergePoliciesFlag(*flag.FlagSet, *reader.MergePolicies)
-pkg commandline, func RegisterProfilesFlag(*flag.FlagSet, *string)
-pkg commandline, func RegisterReaderCommands(*cmdline.Command, string)
-pkg commandline, func RegisterReaderCommandsUsingParent(*cmdline.Command, *ReaderFlagValues, string)
-pkg commandline, func RegisterReaderFlags(*flag.FlagSet, *ReaderFlagValues, string)
-pkg commandline, type ReaderFlagValues struct
-pkg commandline, type ReaderFlagValues struct, DBFilename string
-pkg commandline, type ReaderFlagValues struct, MergePolicies reader.MergePolicies
-pkg commandline, type ReaderFlagValues struct, Profiles string
-pkg commandline, type ReaderFlagValues struct, ProfilesMode reader.ProfilesMode
-pkg commandline, type ReaderFlagValues struct, Target profiles.Target
-pkg commandline, type ReaderFlagValues struct, Verbose bool
-pkg commandline, var HelpMsg string
diff --git a/profiles/manager/.api b/profiles/manager/.api
deleted file mode 100644
index f183504..0000000
--- a/profiles/manager/.api
+++ /dev/null
@@ -1,5 +0,0 @@
-pkg manager, func EnsureProfileTargetIsInstalled(*jiri.X, *profiles.DB, string, jiri.RelPath, profiles.Target) error
-pkg manager, func EnsureProfileTargetIsUninstalled(*jiri.X, *profiles.DB, string, jiri.RelPath, profiles.Target) error
-pkg manager, func LookupManager(string) profiles.Manager
-pkg manager, func Managers() []string
-pkg manager, func Register(string, profiles.Manager)
diff --git a/profiles/manager/commandline/.api b/profiles/manager/commandline/.api
deleted file mode 100644
index 50d42b1..0000000
--- a/profiles/manager/commandline/.api
+++ /dev/null
@@ -1,3 +0,0 @@
-pkg commandline, func Init(string)
-pkg commandline, func Main(string)
-pkg commandline, var CommandLineDriver *cmdline.Command
diff --git a/profiles/profilescmdline/.api b/profiles/profilescmdline/.api
new file mode 100644
index 0000000..17a05cc
--- /dev/null
+++ b/profiles/profilescmdline/.api
@@ -0,0 +1,17 @@
+pkg profilescmdline, const DefaultProfiles ideal-string
+pkg profilescmdline, func HelpMsg() string
+pkg profilescmdline, func IsFlagSet(*flag.FlagSet, string) bool
+pkg profilescmdline, func RegisterDBFilenameFlag(*flag.FlagSet, *string, string)
+pkg profilescmdline, func RegisterManagementCommands(*cmdline.Command, string)
+pkg profilescmdline, func RegisterMergePoliciesFlag(*flag.FlagSet, *profilesreader.MergePolicies)
+pkg profilescmdline, func RegisterProfilesFlag(*flag.FlagSet, *string)
+pkg profilescmdline, func RegisterReaderCommands(*cmdline.Command, string)
+pkg profilescmdline, func RegisterReaderCommandsUsingParent(*cmdline.Command, *ReaderFlagValues, string)
+pkg profilescmdline, func RegisterReaderFlags(*flag.FlagSet, *ReaderFlagValues, string)
+pkg profilescmdline, type ReaderFlagValues struct
+pkg profilescmdline, type ReaderFlagValues struct, DBFilename string
+pkg profilescmdline, type ReaderFlagValues struct, MergePolicies profilesreader.MergePolicies
+pkg profilescmdline, type ReaderFlagValues struct, Profiles string
+pkg profilescmdline, type ReaderFlagValues struct, ProfilesMode profilesreader.ProfilesMode
+pkg profilescmdline, type ReaderFlagValues struct, Target profiles.Target
+pkg profilescmdline, type ReaderFlagValues struct, Verbose bool
diff --git a/profiles/commandline/cmd_test.go b/profiles/profilescmdline/cmd_test.go
similarity index 93%
rename from profiles/commandline/cmd_test.go
rename to profiles/profilescmdline/cmd_test.go
index 6a02359..8937d2f 100644
--- a/profiles/commandline/cmd_test.go
+++ b/profiles/profilescmdline/cmd_test.go
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-package commandline
+package profilescmdline
 
 import (
 	"v.io/jiri/jiri"
diff --git a/profiles/commandline/commandline_test.go b/profiles/profilescmdline/commandline_test.go
similarity index 77%
rename from profiles/commandline/commandline_test.go
rename to profiles/profilescmdline/commandline_test.go
index af8bd37..272273e 100644
--- a/profiles/commandline/commandline_test.go
+++ b/profiles/profilescmdline/commandline_test.go
@@ -2,14 +2,14 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-package commandline_test
+package profilescmdline_test
 
 import (
 	"fmt"
 	"testing"
 
-	"v.io/jiri/profiles/commandline"
-	"v.io/jiri/profiles/reader"
+	"v.io/jiri/profiles/profilescmdline"
+	"v.io/jiri/profiles/profilesreader"
 	"v.io/x/lib/cmdline"
 )
 
@@ -22,13 +22,13 @@
 }
 
 func TestReaderParent(t *testing.T) {
-	commandline.Reset()
+	profilescmdline.Reset()
 	p := parent
 	args := []string{"--profiles-db=foo", "--skip-profiles"}
-	var rf commandline.ReaderFlagValues
+	var rf profilescmdline.ReaderFlagValues
 	// If RegisterReaderCommandsUsingParent is called, the common reader
 	// flags are hosted by the parent command.
-	commandline.RegisterReaderCommandsUsingParent(&p, &rf, "")
+	profilescmdline.RegisterReaderCommandsUsingParent(&p, &rf, "")
 	if got, want := len(p.Children), 2; got != want {
 		t.Errorf("got %v, want %v", got, want)
 	}
@@ -41,13 +41,13 @@
 	if got, want := rf.DBFilename, "foo"; got != want {
 		t.Errorf("got %v, want %v", got, want)
 	}
-	if got, want := rf.ProfilesMode, reader.SkipProfiles; got != want {
+	if got, want := rf.ProfilesMode, profilesreader.SkipProfiles; got != want {
 		t.Errorf("got %v, want %v", got, want)
 	}
 
-	commandline.Reset()
+	profilescmdline.Reset()
 	p = parent
-	commandline.RegisterReaderFlags(&p.Flags, &rf, "")
+	profilescmdline.RegisterReaderFlags(&p.Flags, &rf, "")
 	if got, want := len(p.Children), 0; got != want {
 		t.Errorf("got %v, want %v", got, want)
 	}
@@ -58,11 +58,11 @@
 		t.Errorf("got %v, want %v", got, want)
 	}
 
-	commandline.Reset()
+	profilescmdline.Reset()
 	p = parent
 	// If RegisterReaderCommands is not called, the common reader
 	// flags are hosted by the subcommands.
-	commandline.RegisterReaderCommands(&p, "")
+	profilescmdline.RegisterReaderCommands(&p, "")
 	if err := p.Flags.Parse(args); err == nil {
 		t.Fatal(fmt.Errorf("this should have failed"))
 	}
@@ -74,10 +74,10 @@
 }
 
 func TestSubcommandFlags(t *testing.T) {
-	commandline.Reset()
+	profilescmdline.Reset()
 	p := parent
-	var rf commandline.ReaderFlagValues
-	commandline.RegisterReaderCommandsUsingParent(&p, &rf, "")
+	var rf profilescmdline.ReaderFlagValues
+	profilescmdline.RegisterReaderCommandsUsingParent(&p, &rf, "")
 	if got, want := len(p.Children), 2; got != want {
 		t.Errorf("got %v, want %v", got, want)
 	}
@@ -89,9 +89,9 @@
 		t.Error(err)
 	}
 
-	commandline.Reset()
+	profilescmdline.Reset()
 	p = parent
-	commandline.RegisterReaderCommands(&p, "")
+	profilescmdline.RegisterReaderCommands(&p, "")
 	if got, want := len(p.Children), 2; got != want {
 		t.Errorf("got %v, want %v", got, want)
 	}
diff --git a/profiles/commandline/help.go b/profiles/profilescmdline/help.go
similarity index 96%
rename from profiles/commandline/help.go
rename to profiles/profilescmdline/help.go
index e4023ea..0dd1c99 100644
--- a/profiles/commandline/help.go
+++ b/profiles/profilescmdline/help.go
@@ -2,9 +2,11 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-package commandline
+package profilescmdline
 
-var HelpMsg = `
+// HelpMsg returns a detailed help message for the profiles packages.
+func HelpMsg() string {
+	return `
 Profiles are used to manage external sofware dependencies and offer a balance
 between providing no support at all and a full blown package manager.
 Profiles can be built natively as well as being cross compiled.
@@ -71,3 +73,4 @@
 They must implement the interfaces defined by that package and be imported
 (e.g. import _ "myprofile") by the command line tools that are to use them.
 `
+}
diff --git a/profiles/commandline/manager_cmdline.go b/profiles/profilescmdline/manager_cmdline.go
similarity index 96%
rename from profiles/commandline/manager_cmdline.go
rename to profiles/profilescmdline/manager_cmdline.go
index bdc7f4a..44bdafb 100644
--- a/profiles/commandline/manager_cmdline.go
+++ b/profiles/profilescmdline/manager_cmdline.go
@@ -2,11 +2,11 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-// Package commandline provides a command line driver (for v.io/x/lib/cmdline)
+// Package profilescmdline provides a command line driver (for v.io/x/lib/cmdline)
 // for implementing jiri 'profile' subcommands. The intent is to support
 // project specific instances of such profiles for managing software
 // dependencies.
-package commandline
+package profilescmdline
 
 import (
 	"flag"
@@ -15,7 +15,7 @@
 
 	"v.io/jiri/jiri"
 	"v.io/jiri/profiles"
-	"v.io/jiri/profiles/manager"
+	"v.io/jiri/profiles/profilesmanager"
 	"v.io/x/lib/cmdline"
 )
 
@@ -174,11 +174,11 @@
 // init a command that takes a list of profile managers as its arguments.
 func initProfileManagersCommand(jirix *jiri.X, dbfile string, args []string) ([]string, *profiles.DB, error) {
 	if len(args) == 0 {
-		args = manager.Managers()
+		args = profilesmanager.Managers()
 	} else {
 		for _, n := range args {
-			if mgr := manager.LookupManager(n); mgr == nil {
-				avail := manager.Managers()
+			if mgr := profilesmanager.LookupManager(n); mgr == nil {
+				avail := profilesmanager.Managers()
 				return nil, nil, fmt.Errorf("profile %v is not one of the available ones: %s", n, strings.Join(avail, ", "))
 			}
 		}
@@ -219,7 +219,7 @@
 		return err
 	}
 	for _, n := range args {
-		mgr := manager.LookupManager(n)
+		mgr := profilesmanager.LookupManager(n)
 		profile := db.LookupProfile(n)
 		if profile == nil {
 			continue
@@ -248,7 +248,7 @@
 
 func cleanupGC(jirix *jiri.X, db *profiles.DB, root jiri.RelPath, verbose bool, args []string) error {
 	for _, name := range args {
-		mgr := manager.LookupManager(name)
+		mgr := profilesmanager.LookupManager(name)
 		if mgr == nil {
 			fmt.Fprintf(jirix.Stderr(), "%s is not linked into this binary", name)
 			continue
@@ -270,7 +270,7 @@
 
 func cleanupEnsureVersionsAreSet(jirix *jiri.X, db *profiles.DB, root jiri.RelPath, verbose bool, args []string) error {
 	for _, name := range args {
-		mgr := manager.LookupManager(name)
+		mgr := profilesmanager.LookupManager(name)
 		if mgr == nil {
 			fmt.Fprintf(jirix.Stderr(), "%s is not linked into this binary", name)
 			continue
@@ -393,7 +393,7 @@
 		}
 	}
 	for _, name := range names {
-		mgr := manager.LookupManager(name)
+		mgr := profilesmanager.LookupManager(name)
 		def, err := targetAtDefaultVersion(mgr, cl.target)
 		if err != nil {
 			return err
@@ -421,7 +421,7 @@
 		if profile == nil {
 			continue
 		}
-		mgr := manager.LookupManager(name)
+		mgr := profilesmanager.LookupManager(name)
 		var targets []*profiles.Target
 		if cl.allTargets {
 			targets = profile.Targets()
diff --git a/profiles/commandline/reader_cmdline.go b/profiles/profilescmdline/reader_cmdline.go
similarity index 92%
rename from profiles/commandline/reader_cmdline.go
rename to profiles/profilescmdline/reader_cmdline.go
index 6c482bb..1573684 100644
--- a/profiles/commandline/reader_cmdline.go
+++ b/profiles/profilescmdline/reader_cmdline.go
@@ -2,11 +2,11 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-// Package commandline provides a command line driver (for v.io/x/lib/cmdline)
+// Package profilescmdline provides a command line driver (for v.io/x/lib/cmdline)
 // for implementing jiri 'profile' subcommands. The intent is to support
 // project specific instances of such profiles for managing software
 // dependencies.
-package commandline
+package profilescmdline
 
 import (
 	"bytes"
@@ -18,8 +18,8 @@
 
 	"v.io/jiri/jiri"
 	"v.io/jiri/profiles"
-	"v.io/jiri/profiles/manager"
-	"v.io/jiri/profiles/reader"
+	"v.io/jiri/profiles/profilesmanager"
+	"v.io/jiri/profiles/profilesreader"
 	"v.io/x/lib/cmdline"
 	"v.io/x/lib/textutil"
 )
@@ -90,7 +90,7 @@
 // required to configure and use the profiles/Reader package.
 type ReaderFlagValues struct {
 	// The value of --skip-profiles
-	ProfilesMode reader.ProfilesMode
+	ProfilesMode profilesreader.ProfilesMode
 	// The value of --profiles-db
 	DBFilename string
 	// The value of --profiles
@@ -98,7 +98,7 @@
 	// The value of --target and --env
 	Target profiles.Target
 	// The value of --merge-policies
-	MergePolicies reader.MergePolicies
+	MergePolicies profilesreader.MergePolicies
 	// The value of -v
 	Verbose bool
 }
@@ -138,7 +138,7 @@
 }
 
 // RegisterMergePoliciesFlag registers the --merge-policies flag
-func RegisterMergePoliciesFlag(flags *flag.FlagSet, policies *reader.MergePolicies) {
+func RegisterMergePoliciesFlag(flags *flag.FlagSet, policies *profilesreader.MergePolicies) {
 	flags.Var(policies, "merge-policies", "specify policies for merging environment variables")
 }
 
@@ -155,7 +155,7 @@
 	flags.Var(&fv.ProfilesMode, "skip-profiles", "if set, no profiles will be used")
 	RegisterDBFilenameFlag(flags, &fv.DBFilename, defaultDBFilename)
 	RegisterProfilesFlag(flags, &fv.Profiles)
-	fv.MergePolicies = reader.JiriMergePolicies()
+	fv.MergePolicies = profilesreader.JiriMergePolicies()
 	RegisterMergePoliciesFlag(flags, &fv.MergePolicies)
 	profiles.RegisterTargetAndEnvFlags(flags, &fv.Target)
 }
@@ -187,7 +187,7 @@
 }
 
 func newReaderFlags() *ReaderFlagValues {
-	return &ReaderFlagValues{MergePolicies: reader.JiriMergePolicies()}
+	return &ReaderFlagValues{MergePolicies: profilesreader.JiriMergePolicies()}
 }
 
 // registerListCommand the profiles list subcommand and returns it
@@ -230,16 +230,16 @@
 	if listFlags.available {
 		if listFlags.Verbose {
 			fmt.Fprintf(jirix.Stdout(), "Available Profiles:\n")
-			for _, name := range manager.Managers() {
-				mgr := manager.LookupManager(name)
+			for _, name := range profilesmanager.Managers() {
+				mgr := profilesmanager.LookupManager(name)
 				vi := mgr.VersionInfo()
 				fmt.Fprintf(jirix.Stdout(), "%s: versions: %s\n", name, vi)
 			}
 		} else {
-			fmt.Fprintf(jirix.Stdout(), "%s\n", strings.Join(manager.Managers(), ", "))
+			fmt.Fprintf(jirix.Stdout(), "%s\n", strings.Join(profilesmanager.Managers(), ", "))
 		}
 	}
-	rd, err := reader.NewReader(jirix, listFlags.ProfilesMode, listFlags.DBFilename)
+	rd, err := profilesreader.NewReader(jirix, listFlags.ProfilesMode, listFlags.DBFilename)
 	if err != nil {
 		return err
 	}
@@ -270,7 +270,7 @@
 	} else {
 		for _, name := range availableNames {
 			profile := rd.LookupProfile(name)
-			mgr := manager.LookupManager(name)
+			mgr := profilesmanager.LookupManager(name)
 			out := &bytes.Buffer{}
 			var targets profiles.Targets
 			if listFlags.Target.IsSet() {
@@ -354,7 +354,7 @@
 	return out.String()
 }
 
-func fmtInfo(jirix *jiri.X, infoFmt string, rd *reader.Reader, mgr profiles.Manager, profile *profiles.Profile, target *profiles.Target) (string, error) {
+func fmtInfo(jirix *jiri.X, infoFmt string, rd *profilesreader.Reader, mgr profiles.Manager, profile *profiles.Profile, target *profiles.Target) (string, error) {
 	if len(infoFmt) > 0 {
 		// Populate an instance listInfo
 		info := &listInfo{}
@@ -405,7 +405,7 @@
 	if len(envFlags.Profiles) == 0 {
 		return fmt.Errorf("no profiles were specified using --profiles")
 	}
-	rd, err := reader.NewReader(jirix, envFlags.ProfilesMode, envFlags.DBFilename)
+	rd, err := profilesreader.NewReader(jirix, envFlags.ProfilesMode, envFlags.DBFilename)
 	if err != nil {
 		return err
 	}
diff --git a/profiles/profilesmanager/.api b/profiles/profilesmanager/.api
new file mode 100644
index 0000000..4b8a6db
--- /dev/null
+++ b/profiles/profilesmanager/.api
@@ -0,0 +1,5 @@
+pkg profilesmanager, func EnsureProfileTargetIsInstalled(*jiri.X, *profiles.DB, string, jiri.RelPath, profiles.Target) error
+pkg profilesmanager, func EnsureProfileTargetIsUninstalled(*jiri.X, *profiles.DB, string, jiri.RelPath, profiles.Target) error
+pkg profilesmanager, func LookupManager(string) profiles.Manager
+pkg profilesmanager, func Managers() []string
+pkg profilesmanager, func Register(string, profiles.Manager)
diff --git a/profiles/manager/manager.go b/profiles/profilesmanager/manager.go
similarity index 94%
rename from profiles/manager/manager.go
rename to profiles/profilesmanager/manager.go
index 1c407ff..98bbf2b 100644
--- a/profiles/manager/manager.go
+++ b/profiles/profilesmanager/manager.go
@@ -2,12 +2,12 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-// Package manager provides support for managing jiri profiles.
+// Package profilesmanager provides support for managing jiri profiles.
 // In particular for installing and uninstalling them. It provides a
 // registration mechanism for profile implementations to call from an init
 // function to add themselves to the suite profiles available within this
 // application.
-package manager
+package profilesmanager
 
 import (
 	"sort"
diff --git a/profiles/manager/manager_test.go b/profiles/profilesmanager/manager_test.go
similarity index 93%
rename from profiles/manager/manager_test.go
rename to profiles/profilesmanager/manager_test.go
index 7b382e3..7a10c41 100644
--- a/profiles/manager/manager_test.go
+++ b/profiles/profilesmanager/manager_test.go
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-package manager_test
+package profilesmanager_test
 
 import (
 	"flag"
@@ -13,7 +13,7 @@
 
 	"v.io/jiri/jiri"
 	"v.io/jiri/profiles"
-	"v.io/jiri/profiles/manager"
+	"v.io/jiri/profiles/profilesmanager"
 	"v.io/jiri/tool"
 )
 
@@ -83,7 +83,7 @@
 
 	init := func() {
 		mgr := newProfileMgr(myProfile)
-		manager.Register(myProfile, mgr)
+		profilesmanager.Register(myProfile, mgr)
 		flags := flag.NewFlagSet("example", flag.ContinueOnError)
 		profiles.RegisterTargetAndEnvFlags(flags, &target)
 		flags.Parse([]string{"--target=arm-linux@1", "--env=A=B,C=D", "--env=E=F"})
@@ -91,7 +91,7 @@
 	init()
 
 	profileRoot := jiri.NewRelPath("profiles")
-	mgr := manager.LookupManager(myProfile)
+	mgr := profilesmanager.LookupManager(myProfile)
 	if mgr == nil {
 		panic("manager not found for: " + myProfile)
 	}
@@ -116,7 +116,7 @@
 	// Read the profile database.
 	pdb.Read(jirix, filename)
 
-	mgr = manager.LookupManager(myProfile)
+	mgr = profilesmanager.LookupManager(myProfile)
 	if mgr == nil {
 		panic("manager not found for: " + myProfile)
 	}
diff --git a/profiles/manager/util.go b/profiles/profilesmanager/util.go
similarity index 98%
rename from profiles/manager/util.go
rename to profiles/profilesmanager/util.go
index eba260c..b1eaaa9 100644
--- a/profiles/manager/util.go
+++ b/profiles/profilesmanager/util.go
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-package manager
+package profilesmanager
 
 import (
 	"fmt"
diff --git a/profiles/profilesreader/.api b/profiles/profilesreader/.api
new file mode 100644
index 0000000..b7c4f84
--- /dev/null
+++ b/profiles/profilesreader/.api
@@ -0,0 +1,72 @@
+pkg profilesreader, const Append MergeAction
+pkg profilesreader, const AppendJiriProfile AppendJiriProfileMode
+pkg profilesreader, const DoNotAppendJiriProfile bool
+pkg profilesreader, const First MergeAction
+pkg profilesreader, const Ignore MergeAction
+pkg profilesreader, const IgnoreBaseAndAppend MergeAction
+pkg profilesreader, const IgnoreBaseAndPrepend MergeAction
+pkg profilesreader, const IgnoreBaseAndUseFirst MergeAction
+pkg profilesreader, const IgnoreBaseAndUseLast MergeAction
+pkg profilesreader, const IgnoreProfiles MergeAction
+pkg profilesreader, const Last MergeAction
+pkg profilesreader, const Prepend MergeAction
+pkg profilesreader, const SkipProfiles ProfilesMode
+pkg profilesreader, const UseProfiles ProfilesMode
+pkg profilesreader, func GoEnvironmentFromOS() []string
+pkg profilesreader, func InitProfilesFromFlag(string, AppendJiriProfileMode) []string
+pkg profilesreader, func JiriMergePolicies() MergePolicies
+pkg profilesreader, func MergeEnv(map[string]MergePolicy, *envvar.Vars, ...[]string)
+pkg profilesreader, func NewReader(*jiri.X, ProfilesMode, string) (*Reader, error)
+pkg profilesreader, func ProfileMergePolicies() MergePolicies
+pkg profilesreader, func RegisterReaderFlags(*flag.FlagSet, *ProfilesMode, *string, *string, string, *MergePolicies)
+pkg profilesreader, func UnsetGoEnvMap(map[string]string)
+pkg profilesreader, func UnsetGoEnvVars(*envvar.Vars)
+pkg profilesreader, func WithDefaultVersion(profiles.Target) profiles.Target
+pkg profilesreader, method (*MergePolicy) String() string
+pkg profilesreader, method (*ProfilesMode) Get() interface{}
+pkg profilesreader, method (*ProfilesMode) IsBoolFlag() bool
+pkg profilesreader, method (*ProfilesMode) Set(string) error
+pkg profilesreader, method (*ProfilesMode) String() string
+pkg profilesreader, method (*Reader) EnvFromProfile(string, profiles.Target) []string
+pkg profilesreader, method (*Reader) GoPath() string
+pkg profilesreader, method (*Reader) JiriProfile() []string
+pkg profilesreader, method (*Reader) LookupProfile(string) *profiles.Profile
+pkg profilesreader, method (*Reader) LookupProfileTarget(string, profiles.Target) *profiles.Target
+pkg profilesreader, method (*Reader) MergeEnv(map[string]MergePolicy, ...[]string)
+pkg profilesreader, method (*Reader) MergeEnvFromProfiles(map[string]MergePolicy, profiles.Target, ...string)
+pkg profilesreader, method (*Reader) PrependToPATH(string)
+pkg profilesreader, method (*Reader) ProfileNames() []string
+pkg profilesreader, method (*Reader) Profiles() []*profiles.Profile
+pkg profilesreader, method (*Reader) SchemaVersion() profiles.Version
+pkg profilesreader, method (*Reader) SkippingProfiles() bool
+pkg profilesreader, method (*Reader) VDLPath() string
+pkg profilesreader, method (*Reader) ValidateRequestedProfilesAndTarget([]string, profiles.Target) error
+pkg profilesreader, method (MergePolicies) DebugString() string
+pkg profilesreader, method (MergePolicies) Get() interface{}
+pkg profilesreader, method (MergePolicies) Set(string) error
+pkg profilesreader, method (MergePolicies) String() string
+pkg profilesreader, method (MergePolicies) Usage() string
+pkg profilesreader, type AppendJiriProfileMode bool
+pkg profilesreader, type MergeAction int
+pkg profilesreader, type MergePolicies map[string]MergePolicy
+pkg profilesreader, type MergePolicy struct
+pkg profilesreader, type MergePolicy struct, Action MergeAction
+pkg profilesreader, type MergePolicy struct, Separator string
+pkg profilesreader, type ProfilesMode bool
+pkg profilesreader, type Reader struct
+pkg profilesreader, type Reader struct, embedded *envvar.Vars
+pkg profilesreader, var AppendFlag MergePolicy
+pkg profilesreader, var AppendPath MergePolicy
+pkg profilesreader, var GoFlags []string
+pkg profilesreader, var IgnoreBaseAppendFlag MergePolicy
+pkg profilesreader, var IgnoreBaseAppendPath MergePolicy
+pkg profilesreader, var IgnoreBasePrependFlag MergePolicy
+pkg profilesreader, var IgnoreBasePrependPath MergePolicy
+pkg profilesreader, var IgnoreBaseUseFirst MergePolicy
+pkg profilesreader, var IgnoreBaseUseLast MergePolicy
+pkg profilesreader, var IgnoreVariable MergePolicy
+pkg profilesreader, var PrependFlag MergePolicy
+pkg profilesreader, var PrependPath MergePolicy
+pkg profilesreader, var UseBaseIgnoreProfiles MergePolicy
+pkg profilesreader, var UseFirst MergePolicy
+pkg profilesreader, var UseLast MergePolicy
diff --git a/profiles/reader/flags.go b/profiles/profilesreader/flags.go
similarity index 98%
rename from profiles/reader/flags.go
rename to profiles/profilesreader/flags.go
index d7fa0f4..d984151 100644
--- a/profiles/reader/flags.go
+++ b/profiles/profilesreader/flags.go
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-package reader
+package profilesreader
 
 import (
 	"flag"
diff --git a/profiles/reader/flags_test.go b/profiles/profilesreader/flags_test.go
similarity index 95%
rename from profiles/reader/flags_test.go
rename to profiles/profilesreader/flags_test.go
index 40130a7..946bf34 100644
--- a/profiles/reader/flags_test.go
+++ b/profiles/profilesreader/flags_test.go
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-package reader
+package profilesreader
 
 import "testing"
 
diff --git a/profiles/reader/reader.go b/profiles/profilesreader/reader.go
similarity index 99%
rename from profiles/reader/reader.go
rename to profiles/profilesreader/reader.go
index 605f33f..a2355e7 100644
--- a/profiles/reader/reader.go
+++ b/profiles/profilesreader/reader.go
@@ -2,8 +2,8 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-// Package reader provides support for reading and processing jiri profiles.
-package reader
+// Package profilesreader provides support for reading and processing jiri profiles.
+package profilesreader
 
 import (
 	"bytes"
diff --git a/profiles/reader/reader_test.go b/profiles/profilesreader/reader_test.go
similarity index 72%
rename from profiles/reader/reader_test.go
rename to profiles/profilesreader/reader_test.go
index f56a55e..c7e4e2e 100644
--- a/profiles/reader/reader_test.go
+++ b/profiles/profilesreader/reader_test.go
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-package reader_test
+package profilesreader_test
 
 import (
 	"flag"
@@ -13,7 +13,7 @@
 
 	"v.io/jiri/jiritest"
 	"v.io/jiri/profiles"
-	"v.io/jiri/profiles/reader"
+	"v.io/jiri/profiles/profilesreader"
 	"v.io/jiri/project"
 	"v.io/jiri/util"
 	"v.io/x/lib/envvar"
@@ -22,7 +22,7 @@
 func TestReader(t *testing.T) {
 	fake, cleanup := jiritest.NewFakeJiriRoot(t)
 	defer cleanup()
-	rd, err := reader.NewReader(fake.X, reader.UseProfiles, filepath.Join("testdata", "m2.xml"))
+	rd, err := profilesreader.NewReader(fake.X, profilesreader.UseProfiles, filepath.Join("testdata", "m2.xml"))
 	if err != nil {
 		t.Fatal(err)
 	}
@@ -32,7 +32,7 @@
 	if err != nil {
 		t.Fatal(err)
 	}
-	rd.MergeEnvFromProfiles(reader.JiriMergePolicies(), native, "go", "syncbase")
+	rd.MergeEnvFromProfiles(profilesreader.JiriMergePolicies(), native, "go", "syncbase")
 	if got, want := rd.Get("CGO_CFLAGS"), "-IX -IY -IA -IB"; got != want {
 		t.Errorf("got %v, want %v", got, want)
 	}
@@ -57,7 +57,7 @@
 	if err := pdb.Write(fake.X, filename); err != nil {
 		t.Fatal(err)
 	}
-	rd, err := reader.NewReader(fake.X, reader.UseProfiles, filename)
+	rd, err := profilesreader.NewReader(fake.X, profilesreader.UseProfiles, filename)
 	if err != nil {
 		t.Fatal(err)
 	}
@@ -66,10 +66,10 @@
 	if err != nil {
 		t.Fatal(err)
 	}
-	rd.MergeEnvFromProfiles(map[string]reader.MergePolicy{
-		"A": reader.AppendFlag,
-		"B": reader.UseLast,
-		"Z": reader.IgnoreBaseUseLast},
+	rd.MergeEnvFromProfiles(map[string]profilesreader.MergePolicy{
+		"A": profilesreader.AppendFlag,
+		"B": profilesreader.UseLast,
+		"Z": profilesreader.IgnoreBaseUseLast},
 		t1Target, "a", "b")
 	vars := rd.ToMap()
 	if got, want := len(vars), 3; got != want {
@@ -89,27 +89,27 @@
 	c := []string{"FS1=C", "FS2=C", "FS3=C", "A=BL", "B=C", "C=DL", "P=C", "V=C", "P1=C", "V1=C", "Y=ZL", "GP=XL", "IA=C", "IB=C", "IC=C", "ID=C", "IE=C", "IG3=B"}
 	env := envvar.VarsFromSlice(base)
 
-	policies := map[string]reader.MergePolicy{
-		"GP":  reader.UseLast,
-		"P":   reader.PrependPath,
-		"V":   reader.PrependFlag,
-		"P1":  reader.AppendPath,
-		"V1":  reader.AppendFlag,
-		"A":   reader.IgnoreBaseUseLast,
-		"B":   reader.UseBaseIgnoreProfiles,
-		"IA":  reader.IgnoreBaseAppendPath,
-		"IB":  reader.IgnoreBaseAppendFlag,
-		"IC":  reader.IgnoreBasePrependPath,
-		"ID":  reader.IgnoreBasePrependFlag,
-		"IE":  reader.IgnoreBaseUseLast,
-		"IF":  reader.IgnoreBaseUseFirst,
-		"IG1": reader.IgnoreVariable,
-		"IG2": reader.IgnoreVariable,
-		"IG3": reader.IgnoreVariable,
-		"C":   reader.UseLast,
-		"Y":   reader.UseLast,
+	policies := map[string]profilesreader.MergePolicy{
+		"GP":  profilesreader.UseLast,
+		"P":   profilesreader.PrependPath,
+		"V":   profilesreader.PrependFlag,
+		"P1":  profilesreader.AppendPath,
+		"V1":  profilesreader.AppendFlag,
+		"A":   profilesreader.IgnoreBaseUseLast,
+		"B":   profilesreader.UseBaseIgnoreProfiles,
+		"IA":  profilesreader.IgnoreBaseAppendPath,
+		"IB":  profilesreader.IgnoreBaseAppendFlag,
+		"IC":  profilesreader.IgnoreBasePrependPath,
+		"ID":  profilesreader.IgnoreBasePrependFlag,
+		"IE":  profilesreader.IgnoreBaseUseLast,
+		"IF":  profilesreader.IgnoreBaseUseFirst,
+		"IG1": profilesreader.IgnoreVariable,
+		"IG2": profilesreader.IgnoreVariable,
+		"IG3": profilesreader.IgnoreVariable,
+		"C":   profilesreader.UseLast,
+		"Y":   profilesreader.UseLast,
 	}
-	reader.MergeEnv(policies, env, b, c)
+	profilesreader.MergeEnv(policies, env, b, c)
 
 	expected := []string{"B=A", "A=BL", "C=DL", "GP=XL", "P1=A:B:C", "P=C:B:A",
 		"V1=A B C", "V=C B A", "W=X", "Y=ZL",
@@ -171,7 +171,7 @@
 		t.Fatalf("%v", err)
 	}
 
-	rd, err := reader.NewReader(fake.X, reader.UseProfiles, filepath.Join(fake.X.Root, "profiles-manifest"))
+	rd, err := profilesreader.NewReader(fake.X, profilesreader.UseProfiles, filepath.Join(fake.X.Root, "profiles-manifest"))
 	if err != nil {
 		t.Fatal(err)
 	}
@@ -204,7 +204,7 @@
 }
 
 func TestMergePolicyFlags(t *testing.T) {
-	mp := reader.MergePolicies{}
+	mp := profilesreader.MergePolicies{}
 	fs := flag.NewFlagSet("test", flag.ContinueOnError)
 	fs.Var(mp, "p", mp.Usage())
 	all := []string{"-p=:a", "-p=+b", "-p=^c", "-p=^:d", "-p=^e:", "-p=^+f", "-p=^g+", "-p=last*", "-p=xx:", "-p=yy+", "-p=zz^"}
@@ -213,26 +213,26 @@
 	}
 	for _, c := range []struct {
 		k string
-		p reader.MergePolicy
+		p profilesreader.MergePolicy
 	}{
-		{"a", reader.AppendPath},
-		{"b", reader.AppendFlag},
-		{"c", reader.IgnoreBaseUseFirst},
-		{"d", reader.IgnoreBaseAppendPath},
-		{"e", reader.IgnoreBasePrependPath},
-		{"f", reader.IgnoreBaseAppendFlag},
-		{"g", reader.IgnoreBasePrependFlag},
-		{"last", reader.UseLast},
-		{"xx", reader.PrependPath},
-		{"yy", reader.PrependFlag},
-		{"zz", reader.UseBaseIgnoreProfiles},
+		{"a", profilesreader.AppendPath},
+		{"b", profilesreader.AppendFlag},
+		{"c", profilesreader.IgnoreBaseUseFirst},
+		{"d", profilesreader.IgnoreBaseAppendPath},
+		{"e", profilesreader.IgnoreBasePrependPath},
+		{"f", profilesreader.IgnoreBaseAppendFlag},
+		{"g", profilesreader.IgnoreBasePrependFlag},
+		{"last", profilesreader.UseLast},
+		{"xx", profilesreader.PrependPath},
+		{"yy", profilesreader.PrependFlag},
+		{"zz", profilesreader.UseBaseIgnoreProfiles},
 	} {
 		if got, want := mp[c.k], c.p; got != want {
 			t.Errorf("(%s) got %v, want %v", c.k, got, want)
 		}
 	}
 
-	mp = reader.MergePolicies{}
+	mp = profilesreader.MergePolicies{}
 	fs1 := flag.NewFlagSet("test1", flag.ContinueOnError)
 	fs1.Var(mp, "p", mp.Usage())
 	if err := fs1.Parse([]string{"-p=yy+,zz^"}); err != nil {
@@ -243,7 +243,7 @@
 	}
 
 	for i, cl := range append(all, "-p=+b,^c,zz^") {
-		mp := reader.MergePolicies{}
+		mp := profilesreader.MergePolicies{}
 		fs := flag.NewFlagSet(fmt.Sprintf("t%d", i), flag.ContinueOnError)
 		fs.Var(mp, "p", mp.Usage())
 		err := fs.Parse([]string{cl})
diff --git a/profiles/reader/testdata/m2.xml b/profiles/profilesreader/testdata/m2.xml
similarity index 100%
rename from profiles/reader/testdata/m2.xml
rename to profiles/profilesreader/testdata/m2.xml
diff --git a/profiles/reader/.api b/profiles/reader/.api
deleted file mode 100644
index 25db26c..0000000
--- a/profiles/reader/.api
+++ /dev/null
@@ -1,72 +0,0 @@
-pkg reader, const Append MergeAction
-pkg reader, const AppendJiriProfile AppendJiriProfileMode
-pkg reader, const DoNotAppendJiriProfile bool
-pkg reader, const First MergeAction
-pkg reader, const Ignore MergeAction
-pkg reader, const IgnoreBaseAndAppend MergeAction
-pkg reader, const IgnoreBaseAndPrepend MergeAction
-pkg reader, const IgnoreBaseAndUseFirst MergeAction
-pkg reader, const IgnoreBaseAndUseLast MergeAction
-pkg reader, const IgnoreProfiles MergeAction
-pkg reader, const Last MergeAction
-pkg reader, const Prepend MergeAction
-pkg reader, const SkipProfiles ProfilesMode
-pkg reader, const UseProfiles ProfilesMode
-pkg reader, func GoEnvironmentFromOS() []string
-pkg reader, func InitProfilesFromFlag(string, AppendJiriProfileMode) []string
-pkg reader, func JiriMergePolicies() MergePolicies
-pkg reader, func MergeEnv(map[string]MergePolicy, *envvar.Vars, ...[]string)
-pkg reader, func NewReader(*jiri.X, ProfilesMode, string) (*Reader, error)
-pkg reader, func ProfileMergePolicies() MergePolicies
-pkg reader, func RegisterReaderFlags(*flag.FlagSet, *ProfilesMode, *string, *string, string, *MergePolicies)
-pkg reader, func UnsetGoEnvMap(map[string]string)
-pkg reader, func UnsetGoEnvVars(*envvar.Vars)
-pkg reader, func WithDefaultVersion(profiles.Target) profiles.Target
-pkg reader, method (*MergePolicy) String() string
-pkg reader, method (*ProfilesMode) Get() interface{}
-pkg reader, method (*ProfilesMode) IsBoolFlag() bool
-pkg reader, method (*ProfilesMode) Set(string) error
-pkg reader, method (*ProfilesMode) String() string
-pkg reader, method (*Reader) EnvFromProfile(string, profiles.Target) []string
-pkg reader, method (*Reader) GoPath() string
-pkg reader, method (*Reader) JiriProfile() []string
-pkg reader, method (*Reader) LookupProfile(string) *profiles.Profile
-pkg reader, method (*Reader) LookupProfileTarget(string, profiles.Target) *profiles.Target
-pkg reader, method (*Reader) MergeEnv(map[string]MergePolicy, ...[]string)
-pkg reader, method (*Reader) MergeEnvFromProfiles(map[string]MergePolicy, profiles.Target, ...string)
-pkg reader, method (*Reader) PrependToPATH(string)
-pkg reader, method (*Reader) ProfileNames() []string
-pkg reader, method (*Reader) Profiles() []*profiles.Profile
-pkg reader, method (*Reader) SchemaVersion() profiles.Version
-pkg reader, method (*Reader) SkippingProfiles() bool
-pkg reader, method (*Reader) VDLPath() string
-pkg reader, method (*Reader) ValidateRequestedProfilesAndTarget([]string, profiles.Target) error
-pkg reader, method (MergePolicies) DebugString() string
-pkg reader, method (MergePolicies) Get() interface{}
-pkg reader, method (MergePolicies) Set(string) error
-pkg reader, method (MergePolicies) String() string
-pkg reader, method (MergePolicies) Usage() string
-pkg reader, type AppendJiriProfileMode bool
-pkg reader, type MergeAction int
-pkg reader, type MergePolicies map[string]MergePolicy
-pkg reader, type MergePolicy struct
-pkg reader, type MergePolicy struct, Action MergeAction
-pkg reader, type MergePolicy struct, Separator string
-pkg reader, type ProfilesMode bool
-pkg reader, type Reader struct
-pkg reader, type Reader struct, embedded *envvar.Vars
-pkg reader, var AppendFlag MergePolicy
-pkg reader, var AppendPath MergePolicy
-pkg reader, var GoFlags []string
-pkg reader, var IgnoreBaseAppendFlag MergePolicy
-pkg reader, var IgnoreBaseAppendPath MergePolicy
-pkg reader, var IgnoreBasePrependFlag MergePolicy
-pkg reader, var IgnoreBasePrependPath MergePolicy
-pkg reader, var IgnoreBaseUseFirst MergePolicy
-pkg reader, var IgnoreBaseUseLast MergePolicy
-pkg reader, var IgnoreVariable MergePolicy
-pkg reader, var PrependFlag MergePolicy
-pkg reader, var PrependPath MergePolicy
-pkg reader, var UseBaseIgnoreProfiles MergePolicy
-pkg reader, var UseFirst MergePolicy
-pkg reader, var UseLast MergePolicy
