diff --git a/cmd/helm/repository.go b/cmd/helm/repository.go
index 549a39f463454b723e8d1f2c53318598899ee950..f17c2fae2a9158dd42d5c05661d08fd21f6d56f3 100644
--- a/cmd/helm/repository.go
+++ b/cmd/helm/repository.go
@@ -43,6 +43,14 @@ const repoDesc = `Helm repositories store Helm charts.
    For more details, use 'helm repo CMD -h'.
 `
 
+const addRepoDesc = `The add repository command is used to add a name a repository url to your
+   chart repository list. The repository url must begin with a valid protocoal. At the moment,
+   we only support google cloud storage for chart repositories.
+
+   A valid command might look like:
+   $ helm repo add charts gs://kubernetes-charts
+`
+
 func repoCommands() cli.Command {
 	return cli.Command{
 		Name:        "repository",
@@ -51,10 +59,11 @@ func repoCommands() cli.Command {
 		Description: repoDesc,
 		Subcommands: []cli.Command{
 			{
-				Name:      "add",
-				Usage:     "Add a chart repository to the remote manager.",
-				ArgsUsage: "[NAME] [REPOSITORY_URL]",
-				Action:    func(c *cli.Context) { run(c, addRepo) },
+				Name:        "add",
+				Usage:       "Add a chart repository to the remote manager.",
+				Description: addRepoDesc,
+				ArgsUsage:   "[NAME] [REPOSITORY_URL]",
+				Action:      func(c *cli.Context) { run(c, addRepo) },
 			},
 			{
 				Name:      "list",
@@ -66,7 +75,7 @@ func repoCommands() cli.Command {
 				Name:      "remove",
 				Aliases:   []string{"rm"},
 				Usage:     "Remove a chart repository from the remote manager.",
-				ArgsUsage: "REPOSITORY_URL",
+				ArgsUsage: "REPOSITORY_NAME",
 				Action:    func(c *cli.Context) { run(c, removeRepo) },
 			},
 		},
diff --git a/pkg/repo/inmem_repo_service.go b/pkg/repo/inmem_repo_service.go
index 7e048e373c0de54d96989c2b34c2843f6e4627f5..3865f8947558215637cac136d1d8d49e26441e88 100644
--- a/pkg/repo/inmem_repo_service.go
+++ b/pkg/repo/inmem_repo_service.go
@@ -17,6 +17,7 @@ limitations under the License.
 package repo
 
 import (
+	"errors"
 	"fmt"
 	"strings"
 	"sync"
@@ -62,6 +63,11 @@ func (rs *inmemRepoService) CreateRepo(repository IRepo) error {
 	URL := repository.GetURL()
 	name := repository.GetName()
 
+	valid := GCSRepoURLMatcher.MatchString(URL)
+	if !valid {
+		return errors.New(URL + " is an invalid Repo URL")
+	}
+
 	for u, r := range rs.repositories {
 		if u == URL {
 			return fmt.Errorf("Repository with URL %s already exists", URL)
diff --git a/pkg/repo/inmem_repo_service_test.go b/pkg/repo/inmem_repo_service_test.go
index 4c214188b18e0a9c5a024fcdbfd0e2e98000812b..119c8535fbb2ef275e5a184f2653c37f2b825103 100644
--- a/pkg/repo/inmem_repo_service_test.go
+++ b/pkg/repo/inmem_repo_service_test.go
@@ -85,6 +85,19 @@ func TestCreateRepoWithDuplicateURL(t *testing.T) {
 	}
 }
 
+func TestCreateRepoWithInvalidURL(t *testing.T) {
+	rs := NewInmemRepoService()
+	invalidURL := "fake://sfds"
+	r, err := newRepo(invalidURL, "", TestName, GCSRepoFormat, GCSRepoType)
+	if err != nil {
+		t.Fatalf("cannot create test repo: %v", err)
+	}
+
+	if err = rs.CreateRepo(r); err == nil {
+		t.Fatalf("created repo with invalid URL: %s", invalidURL)
+	}
+}
+
 func TestGetRepoWithInvalidURL(t *testing.T) {
 	invalidURL := "https://not.a.valid/url"
 	rs := NewInmemRepoService()
@@ -96,7 +109,7 @@ func TestGetRepoWithInvalidURL(t *testing.T) {
 
 func TestGetRepoURLByName(t *testing.T) {
 	rs := NewInmemRepoService()
-	testURL := "gcs://helm-test-charts"
+	testURL := "gs://helm-test-charts"
 	r, err := newRepo(testURL, "", TestName, GCSRepoFormat, GCSRepoType)
 	err = rs.CreateRepo(r)
 	if err != nil {