diff --git a/cmd/helm/init.go b/cmd/helm/init.go
index bf7d38f16e20d3fcf871711460ced30955720bbf..6acf2b96ca29b82b048d1e57377a29bb657b65b3 100644
--- a/cmd/helm/init.go
+++ b/cmd/helm/init.go
@@ -62,16 +62,17 @@ const (
 )
 
 type initCmd struct {
-	image      string
-	clientOnly bool
-	canary     bool
-	upgrade    bool
-	namespace  string
-	dryRun     bool
-	out        io.Writer
-	home       helmpath.Home
-	opts       installer.Options
-	kubeClient internalclientset.Interface
+	image       string
+	clientOnly  bool
+	canary      bool
+	upgrade     bool
+	namespace   string
+	dryRun      bool
+	skipRefresh bool
+	out         io.Writer
+	home        helmpath.Home
+	opts        installer.Options
+	kubeClient  internalclientset.Interface
 }
 
 func newInitCmd(out io.Writer) *cobra.Command {
@@ -99,6 +100,7 @@ func newInitCmd(out io.Writer) *cobra.Command {
 	f.BoolVar(&i.upgrade, "upgrade", false, "upgrade if tiller is already installed")
 	f.BoolVarP(&i.clientOnly, "client-only", "c", false, "if set does not install tiller")
 	f.BoolVar(&i.dryRun, "dry-run", false, "do not install local or remote")
+	f.BoolVar(&i.skipRefresh, "skip-refresh", false, "do not refresh (download) the local repository cache")
 
 	// f.BoolVar(&tlsEnable, "tiller-tls", false, "install tiller with TLS enabled")
 	// f.BoolVar(&tlsVerify, "tiller-tls-verify", false, "install tiller with TLS enabled and to verify remote certificates")
@@ -176,7 +178,7 @@ func (i *initCmd) run() error {
 	if err := ensureDirectories(i.home, i.out); err != nil {
 		return err
 	}
-	if err := ensureDefaultRepos(i.home, i.out); err != nil {
+	if err := ensureDefaultRepos(i.home, i.out, i.skipRefresh); err != nil {
 		return err
 	}
 	if err := ensureRepoFileFormat(i.home.RepositoryFile(), i.out); err != nil {
@@ -242,12 +244,12 @@ func ensureDirectories(home helmpath.Home, out io.Writer) error {
 	return nil
 }
 
-func ensureDefaultRepos(home helmpath.Home, out io.Writer) error {
+func ensureDefaultRepos(home helmpath.Home, out io.Writer, skipRefresh bool) error {
 	repoFile := home.RepositoryFile()
 	if fi, err := os.Stat(repoFile); err != nil {
 		fmt.Fprintf(out, "Creating %s \n", repoFile)
 		f := repo.NewRepoFile()
-		sr, err := initStableRepo(home.CacheIndex(stableRepository))
+		sr, err := initStableRepo(home.CacheIndex(stableRepository), skipRefresh)
 		if err != nil {
 			return err
 		}
@@ -266,7 +268,7 @@ func ensureDefaultRepos(home helmpath.Home, out io.Writer) error {
 	return nil
 }
 
-func initStableRepo(cacheFile string) (*repo.Entry, error) {
+func initStableRepo(cacheFile string, skipRefresh bool) (*repo.Entry, error) {
 	c := repo.Entry{
 		Name:  stableRepository,
 		URL:   stableRepositoryURL,
@@ -277,6 +279,10 @@ func initStableRepo(cacheFile string) (*repo.Entry, error) {
 		return nil, err
 	}
 
+	if skipRefresh {
+		return &c, nil
+	}
+
 	// In this case, the cacheFile is always absolute. So passing empty string
 	// is safe.
 	if err := r.DownloadIndexFile(""); err != nil {
diff --git a/cmd/helm/init_test.go b/cmd/helm/init_test.go
index 00c754cfaedb4c120799c62a6c190c622a1c7c96..c7e351f67a058645c45292cf12e07aed93d52f39 100644
--- a/cmd/helm/init_test.go
+++ b/cmd/helm/init_test.go
@@ -179,7 +179,10 @@ func TestEnsureHome(t *testing.T) {
 	if err := ensureDirectories(hh, b); err != nil {
 		t.Error(err)
 	}
-	if err := ensureDefaultRepos(hh, b); err != nil {
+	if err := ensureDefaultRepos(hh, b, false); err != nil {
+		t.Error(err)
+	}
+	if err := ensureDefaultRepos(hh, b, true); err != nil {
 		t.Error(err)
 	}
 	if err := ensureRepoFileFormat(hh.RepositoryFile(), b); err != nil {
diff --git a/pkg/repo/chartrepo.go b/pkg/repo/chartrepo.go
index 4a0751f579984ae909177cb070bf8d7d8b40fafb..601d36eadcf6bb026eef30915d2534bdcb32f108 100644
--- a/pkg/repo/chartrepo.go
+++ b/pkg/repo/chartrepo.go
@@ -161,7 +161,6 @@ func (r *ChartRepository) DownloadIndexFile(cachePath string) error {
 	if !filepath.IsAbs(cp) {
 		cp = filepath.Join(cachePath, cp)
 	}
-	println("Writing to", cp)
 
 	return ioutil.WriteFile(cp, index, 0644)
 }