diff --git a/pkg/repo/index.go b/pkg/repo/index.go
index a8589aa1981380874d5125cf055e08744e2ec46c..0c8a9436fb7db4b1ca739bfa72f7835d26cd0304 100644
--- a/pkg/repo/index.go
+++ b/pkg/repo/index.go
@@ -96,7 +96,8 @@ func NewIndexFile() *IndexFile {
 func (i IndexFile) Add(md *chart.Metadata, filename, baseURL, digest string) {
 	u := filename
 	if baseURL != "" {
-		u = baseURL + "/" + filename
+		_, file := filepath.Split(filename)
+		u = strings.TrimSuffix(baseURL, "/") + "/" + file
 	}
 	cr := &ChartVersion{
 		URLs:     []string{u},
diff --git a/pkg/repo/index_test.go b/pkg/repo/index_test.go
index e5f5256a2ad86b004cec2b6291e8f12a66694a67..33203c495717bfe312fec9c6d183b3c6d18c21cb 100644
--- a/pkg/repo/index_test.go
+++ b/pkg/repo/index_test.go
@@ -270,3 +270,25 @@ func TestLoadUnversionedIndex(t *testing.T) {
 		t.Fatalf("Expected 3 mysql versions, got %d", l)
 	}
 }
+
+func TestIndexAdd(t *testing.T) {
+
+	i := NewIndexFile()
+	i.Add(&chart.Metadata{Name: "clipper", Version: "0.1.0"}, "clipper-0.1.0.tgz", "http://example.com/charts", "sha256:1234567890")
+
+	if i.Entries["clipper"][0].URLs[0] != "http://example.com/charts/clipper-0.1.0.tgz" {
+		t.Errorf("Expected http://example.com/charts/clipper-0.1.0.tgz, got %s", i.Entries["clipper"][0].URLs[0])
+	}
+
+	i.Add(&chart.Metadata{Name: "alpine", Version: "0.1.0"}, "/home/charts/alpine-0.1.0.tgz", "http://example.com/charts", "sha256:1234567890")
+
+	if i.Entries["alpine"][0].URLs[0] != "http://example.com/charts/alpine-0.1.0.tgz" {
+		t.Errorf("Expected http://example.com/charts/alpine-0.1.0.tgz, got %s", i.Entries["alpine"][0].URLs[0])
+	}
+
+	i.Add(&chart.Metadata{Name: "deis", Version: "0.1.0"}, "/home/charts/deis-0.1.0.tgz", "http://example.com/charts/", "sha256:1234567890")
+
+	if i.Entries["deis"][0].URLs[0] != "http://example.com/charts/deis-0.1.0.tgz" {
+		t.Errorf("Expected http://example.com/charts/deis-0.1.0.tgz, got %s", i.Entries["deis"][0].URLs[0])
+	}
+}