diff --git a/cmd/helm/init.go b/cmd/helm/init.go
index 282d2aaaca96d8dbe36759e1f60e2a63b26427e9..dbd84c9d07484bda8dba6835187a7bb07618d016 100644
--- a/cmd/helm/init.go
+++ b/cmd/helm/init.go
@@ -20,7 +20,7 @@ Kubernetes Cluster and sets up local configuration in $HELM_HOME (default: ~/.he
 const repositoriesPath = ".repositories"
 const cachePath = "cache"
 const localPath = "local"
-const localCacheFilePath = localPath + "/cache.txt"
+const localCacheFilePath = localPath + "/cache.yaml"
 
 var defaultRepo = map[string]string{"default-name": "default-url"}
 var tillerImg string
diff --git a/cmd/helm/package.go b/cmd/helm/package.go
index 7f7037de1672176ce338e3b72e67a2929bba2fba..5e49041aa9c7f9fb23b253a5448e0ed648ac73de 100644
--- a/cmd/helm/package.go
+++ b/cmd/helm/package.go
@@ -6,6 +6,7 @@ import (
 	"path/filepath"
 
 	"github.com/deis/tiller/pkg/chart"
+	"github.com/deis/tiller/pkg/repo"
 	"github.com/spf13/cobra"
 )
 
@@ -55,11 +56,7 @@ func runPackage(cmd *cobra.Command, args []string) error {
 
 	// Save to $HELM_HOME/local directory.
 	if save {
-		dir := LocalDirectory(os.ExpandEnv(helmHome))
-		name, err := chart.Save(ch, dir)
-		if err == nil {
-			cmd.Printf("Saved %s to $HELM_HOME/local/\n", name)
-		} else {
+		if err := repo.AddChartToLocalRepo(ch, LocalDirectory(os.ExpandEnv(helmHome))); err != nil {
 			return err
 		}
 	}
diff --git a/pkg/repo/local.go b/pkg/repo/local.go
new file mode 100644
index 0000000000000000000000000000000000000000..124c8e75d14ffdd448343f207d6dd65893d94df5
--- /dev/null
+++ b/pkg/repo/local.go
@@ -0,0 +1,128 @@
+package repo
+
+import (
+	"fmt"
+	"io/ioutil"
+	"net/http"
+	"path/filepath"
+	"strings"
+
+	"github.com/deis/tiller/pkg/chart"
+	"gopkg.in/yaml.v2"
+)
+
+var localRepoPath string
+
+type CacheFile struct {
+	Entries map[string]*ChartRef
+}
+
+type ChartRef struct {
+	Name string `yaml:name`
+	Url  string `yaml:url`
+}
+
+func StartLocalRepo(path string) {
+	fmt.Println("Now serving you on localhost:8879...")
+	localRepoPath = path
+	http.HandleFunc("/", homeHandler)
+	http.HandleFunc("/charts/", indexHandler)
+	http.ListenAndServe(":8879", nil)
+}
+func homeHandler(w http.ResponseWriter, r *http.Request) {
+	fmt.Fprintf(w, "Welcome to the Kubernetes Package manager!\nBrowse charts on localhost:8879/charts!")
+}
+func indexHandler(w http.ResponseWriter, r *http.Request) {
+	file := r.URL.Path[len("/charts/"):]
+	if len(strings.Split(file, ".")) > 1 {
+		serveFile(w, r, file)
+	} else if file == "" {
+		fmt.Fprintf(w, "list of charts should be here at some point")
+	} else if file == "cache" {
+		fmt.Fprintf(w, "cache file data should be here at some point")
+	} else {
+		fmt.Fprintf(w, "Ummm... Nothing to see here folks")
+	}
+}
+
+func serveFile(w http.ResponseWriter, r *http.Request, file string) {
+	http.ServeFile(w, r, filepath.Join(localRepoPath, file))
+}
+
+func AddChartToLocalRepo(ch *chart.Chart, path string) error {
+	name, err := chart.Save(ch, path)
+	if err != nil {
+		return err
+	}
+	err = ReindexCacheFile(ch, path+"/cache.yaml")
+	if err != nil {
+		return nil
+	}
+	fmt.Printf("Saved %s to $HELM_HOME/local", name)
+	return nil
+}
+
+func ReindexCacheFile(ch *chart.Chart, path string) error {
+	name := ch.Chartfile().Name + "-" + ch.Chartfile().Version
+	fmt.Println("\nname: " + name)
+	b, err := ioutil.ReadFile(path)
+
+	if err != nil {
+		fmt.Println("read file err")
+		fmt.Printf("err, %s", err)
+		return err
+	}
+
+	var y CacheFile
+	err = yaml.Unmarshal(b, &y)
+	if err != nil {
+		fmt.Println("error unmarshaling")
+		fmt.Println("err, %s", err)
+		return err
+	}
+	fmt.Println("%v\n", y)
+	found := false
+	for k, v := range y.Entries {
+		fmt.Printf("in here: %v", v)
+		fmt.Printf("in here: %v", k)
+		if k == name {
+			found = true
+			break
+		}
+	}
+	if !found {
+		url := "localhost:8879/charts/" + name + ".tgz"
+
+		out, err := y.InsertChartEntry(name, url)
+		if err != nil {
+			return err
+		}
+
+		ioutil.WriteFile(path, out, 0644)
+	}
+	return nil
+}
+func (c *CacheFile) UnmarshalYAML(unmarshal func(interface{}) error) error {
+	var refs map[string]*ChartRef
+	if err := unmarshal(&refs); err != nil {
+		if _, ok := err.(*yaml.TypeError); !ok {
+			return err
+		}
+	}
+	c.Entries = refs
+	return nil
+}
+
+func (cache *CacheFile) InsertChartEntry(name string, url string) ([]byte, error) {
+	if cache.Entries == nil {
+		cache.Entries = make(map[string]*ChartRef)
+	}
+	entry := ChartRef{Name: name, Url: url}
+	cache.Entries[name] = &entry
+	out, err := yaml.Marshal(&cache.Entries)
+	if err != nil {
+		return nil, err
+	}
+
+	return out, nil
+}
diff --git a/pkg/repo/localRepo.go b/pkg/repo/localRepo.go
deleted file mode 100644
index 813ffb80e0f27927792fd3a5e016181ea4a37557..0000000000000000000000000000000000000000
--- a/pkg/repo/localRepo.go
+++ /dev/null
@@ -1,37 +0,0 @@
-package repo
-
-import (
-	"fmt"
-	"net/http"
-	"path/filepath"
-	"strings"
-)
-
-var localRepoPath string
-
-func StartLocalRepo(path string) {
-	fmt.Println("Now serving you on localhost:8879...")
-	localRepoPath = path
-	http.HandleFunc("/", homeHandler)
-	http.HandleFunc("/charts/", indexHandler)
-	http.ListenAndServe(":8879", nil)
-}
-func homeHandler(w http.ResponseWriter, r *http.Request) {
-	fmt.Fprintf(w, "Welcome to the Kubernetes Package manager!\nBrowse charts on localhost:8879/charts!")
-}
-func indexHandler(w http.ResponseWriter, r *http.Request) {
-	file := r.URL.Path[len("/charts/"):]
-	if len(strings.Split(file, ".")) > 1 {
-		serveFile(w, r, file)
-	} else if file == "" {
-		fmt.Fprintf(w, "list of charts should be here at some point")
-	} else if file == "cache" {
-		fmt.Fprintf(w, "cache file data should be here at some point")
-	} else {
-		fmt.Fprintf(w, "Ummm... Nothing to see here folks")
-	}
-}
-
-func serveFile(w http.ResponseWriter, r *http.Request, file string) {
-	http.ServeFile(w, r, filepath.Join(localRepoPath, file))
-}