diff --git a/cmd/helm/completion.go b/cmd/helm/completion.go
old mode 100755
new mode 100644
index 6034a08d44a7aaee90a02cfb2a8535292c11ac1a..ddb8f06c7d1452ebd9d22f1f102242b88331b94d
--- a/cmd/helm/completion.go
+++ b/cmd/helm/completion.go
@@ -33,29 +33,15 @@ Can be sourced as such
 	$ source <(helm completion)
 `
 
-type completionCmd struct {
-	out    io.Writer
-	topCmd *cobra.Command
-}
-
-func newCompletionCmd(out io.Writer, topCmd *cobra.Command) *cobra.Command {
-	cc := &completionCmd{out: out, topCmd: topCmd}
-
+func newCompletionCmd(out io.Writer) *cobra.Command {
 	cmd := &cobra.Command{
 		Use:    "completion",
 		Short:  "Generate bash autocompletions script",
 		Long:   completionDesc,
 		Hidden: false,
-		RunE: func(cmd *cobra.Command, args []string) error {
-			cc.run()
-			return nil
+		RunE: func(cmd *cobra.Command, _ []string) error {
+			return cmd.Root().GenBashCompletion(out)
 		},
 	}
-
 	return cmd
 }
-
-func (c *completionCmd) run() error {
-
-	return c.topCmd.GenBashCompletion(c.out)
-}
diff --git a/cmd/helm/docs.go b/cmd/helm/docs.go
index 3b1d22005725bc1ca1899de2d8b35acf08f0da4a..e5b9f75210759786358f8e0d231d6fcd93922355 100644
--- a/cmd/helm/docs.go
+++ b/cmd/helm/docs.go
@@ -44,8 +44,8 @@ type docsCmd struct {
 	topCmd        *cobra.Command
 }
 
-func newDocsCmd(out io.Writer, topCmd *cobra.Command) *cobra.Command {
-	dc := &docsCmd{out: out, topCmd: topCmd}
+func newDocsCmd(out io.Writer) *cobra.Command {
+	dc := &docsCmd{out: out}
 
 	cmd := &cobra.Command{
 		Use:    "docs",
@@ -53,8 +53,8 @@ func newDocsCmd(out io.Writer, topCmd *cobra.Command) *cobra.Command {
 		Long:   docsDesc,
 		Hidden: true,
 		RunE: func(cmd *cobra.Command, args []string) error {
-			dc.run()
-			return nil
+			dc.topCmd = cmd.Root()
+			return dc.run()
 		},
 	}
 
diff --git a/cmd/helm/helm.go b/cmd/helm/helm.go
index 912d5f7215b6b69ee2d96f4cc599082c0a110115..352a8340a7cf024c45a38f4276d9bd71188d4d81 100644
--- a/cmd/helm/helm.go
+++ b/cmd/helm/helm.go
@@ -94,41 +94,39 @@ func newRootCmd(out io.Writer) *cobra.Command {
 	p.BoolVar(&flagDebug, "debug", false, "enable verbose output")
 	p.StringVar(&tillerNamespace, "tiller-namespace", defaultTillerNamespace(), "namespace of tiller")
 
-	// Tell gRPC not to log to console.
-	grpclog.SetLogger(log.New(ioutil.Discard, "", log.LstdFlags))
-
-	rup := newRepoUpdateCmd(out)
-	rup.Deprecated = "use 'helm repo update'\n"
-
 	cmd.AddCommand(
+		// chart commands
 		newCreateCmd(out),
-		newDeleteCmd(nil, out),
 		newDependencyCmd(out),
 		newFetchCmd(out),
+		newInspectCmd(out),
+		newLintCmd(out),
+		newPackageCmd(out),
+		newRepoCmd(out),
+		newSearchCmd(out),
+		newServeCmd(out),
+		newVerifyCmd(out),
+
+		// release commands
+		newDeleteCmd(nil, out),
 		newGetCmd(nil, out),
-		newHomeCmd(out),
 		newHistoryCmd(nil, out),
-		newInitCmd(out),
-		newInspectCmd(nil, out),
 		newInstallCmd(nil, out),
-		newLintCmd(out),
 		newListCmd(nil, out),
-		newPackageCmd(nil, out),
-		newRepoCmd(out),
 		newRollbackCmd(nil, out),
-		newSearchCmd(out),
-		newServeCmd(out),
 		newStatusCmd(nil, out),
 		newUpgradeCmd(nil, out),
-		newVerifyCmd(out),
+
+		newCompletionCmd(out),
+		newHomeCmd(out),
+		newInitCmd(out),
 		newVersionCmd(nil, out),
-		newCompletionCmd(out, cmd),
 
 		// Hidden documentation generator command: 'helm docs'
-		newDocsCmd(out, cmd),
+		newDocsCmd(out),
 
 		// Deprecated
-		rup,
+		markDeprecated(newRepoUpdateCmd(out), "use 'helm repo update'\n"),
 	)
 
 	// Find and add plugins
@@ -137,6 +135,11 @@ func newRootCmd(out io.Writer) *cobra.Command {
 	return cmd
 }
 
+func init() {
+	// Tell gRPC not to log to console.
+	grpclog.SetLogger(log.New(ioutil.Discard, "", log.LstdFlags))
+}
+
 func main() {
 	cmd := newRootCmd(os.Stdout)
 	if err := cmd.Execute(); err != nil {
@@ -144,6 +147,11 @@ func main() {
 	}
 }
 
+func markDeprecated(cmd *cobra.Command, notice string) *cobra.Command {
+	cmd.Deprecated = notice
+	return cmd
+}
+
 func setupConnection(c *cobra.Command, args []string) error {
 	if tillerHost == "" {
 		tunnel, err := newTillerPortForwarder(tillerNamespace, kubeContext)
diff --git a/cmd/helm/inspect.go b/cmd/helm/inspect.go
index 46e47d808ccfe167fbcbd9ba531d09c10502d62e..c3d539b3ab8a02dfdb75d54e9b87e1e4d9fabb7e 100644
--- a/cmd/helm/inspect.go
+++ b/cmd/helm/inspect.go
@@ -24,7 +24,6 @@ import (
 	"github.com/spf13/cobra"
 
 	"k8s.io/helm/pkg/chartutil"
-	"k8s.io/helm/pkg/helm"
 )
 
 const inspectDesc = `
@@ -50,7 +49,6 @@ type inspectCmd struct {
 	verify    bool
 	keyring   string
 	out       io.Writer
-	client    helm.Interface
 	version   string
 }
 
@@ -60,9 +58,8 @@ const (
 	both       = "both"
 )
 
-func newInspectCmd(c helm.Interface, out io.Writer) *cobra.Command {
+func newInspectCmd(out io.Writer) *cobra.Command {
 	insp := &inspectCmd{
-		client: c,
 		out:    out,
 		output: both,
 	}
diff --git a/cmd/helm/package.go b/cmd/helm/package.go
index 92e21720299fbfd24f9e56a0669301991d478386..3d29b6e5491a9293b6681448407fa177c62fcf7e 100644
--- a/cmd/helm/package.go
+++ b/cmd/helm/package.go
@@ -30,7 +30,6 @@ import (
 
 	"k8s.io/helm/cmd/helm/helmpath"
 	"k8s.io/helm/pkg/chartutil"
-	"k8s.io/helm/pkg/helm"
 	"k8s.io/helm/pkg/provenance"
 	"k8s.io/helm/pkg/repo"
 )
@@ -56,7 +55,7 @@ type packageCmd struct {
 	home    helmpath.Home
 }
 
-func newPackageCmd(client helm.Interface, out io.Writer) *cobra.Command {
+func newPackageCmd(out io.Writer) *cobra.Command {
 	pkg := &packageCmd{
 		out: out,
 	}
diff --git a/cmd/helm/package_test.go b/cmd/helm/package_test.go
index fc2060c164a976dc38246f36482d8afa26f98eef..c21cdb22c03cb342c080ce5fde2a42579861d0eb 100644
--- a/cmd/helm/package_test.go
+++ b/cmd/helm/package_test.go
@@ -107,7 +107,7 @@ func TestPackage(t *testing.T) {
 
 	for _, tt := range tests {
 		buf := bytes.NewBuffer(nil)
-		c := newPackageCmd(nil, buf)
+		c := newPackageCmd(buf)
 
 		// This is an unfortunate byproduct of the tmpdir
 		if v, ok := tt.flags["keyring"]; ok && len(v) > 0 {