diff --git a/README.md b/README.md
index 3c07b0d..b02f51a 100644
--- a/README.md
+++ b/README.md
@@ -9,9 +9,9 @@
 
 To start the file system:
 
-    go install github.com/google/slothfs/cmd/slothfs-multifs
+    go install github.com/google/slothfs/cmd/slothfs-repofs
     mkdir /tmp/mnt
-    slothfs-multifs /tmp/mnt &
+    slothfs-repofs /tmp/mnt &
 
 To create a workspace "ws" corresponding to the latest manifest version
 
diff --git a/all.bash b/all.bash
index 842095f..c17f4e3 100644
--- a/all.bash
+++ b/all.bash
@@ -21,7 +21,7 @@
   fs \
   populate \
 cmd/slothfs-deref-manifest \
-cmd/slothfs-multifs \
+cmd/slothfs-repofs \
 cmd/slothfs-manifestfs \
 cmd/slothfs-populate \
 cmd/slothfs-gitilesfs \
diff --git a/cmd/slothfs-populate/main.go b/cmd/slothfs-populate/main.go
index ce50744..476a1be 100644
--- a/cmd/slothfs-populate/main.go
+++ b/cmd/slothfs-populate/main.go
@@ -92,7 +92,7 @@
 
 func main() {
 	gitilesOptions := gitiles.DefineFlags()
-	newROWorkspace := flag.String("ro", "", "Set path to slothfs-multifs mount.")
+	newROWorkspace := flag.String("ro", "", "Set path to slothfs-repofs mount.")
 	mount := flag.String("mount", "", "Set slothfs mountpoint for -sync option. Autodetected if empty.")
 	sync := flag.Bool("sync", false, "Sync checkout to latest manifest version.")
 	syncBranch := flag.String("sync_branch", "master", "Use this branch for -sync.")
diff --git a/cmd/slothfs-multifs/main.go b/cmd/slothfs-repofs/main.go
similarity index 96%
rename from cmd/slothfs-multifs/main.go
rename to cmd/slothfs-repofs/main.go
index 8701ba9..dcb8e45 100644
--- a/cmd/slothfs-multifs/main.go
+++ b/cmd/slothfs-repofs/main.go
@@ -58,7 +58,7 @@
 		log.Printf("NewService: %v", err)
 	}
 
-	opts := fs.MultiFSOptions{}
+	opts := fs.MultiManifestFSOptions{}
 	if *config != "" {
 		cloneJS := filepath.Join(*config, "clone.json")
 		configContents, err := ioutil.ReadFile(cloneJS)
@@ -76,7 +76,7 @@
 		}
 	}
 
-	root := fs.NewMultiFS(service, cache, opts)
+	root := fs.NewMultiManifestFS(service, cache, opts)
 	nodeFSOpts := &nodefs.Options{
 		EntryTimeout:    time.Hour,
 		NegativeTimeout: time.Hour,
diff --git a/docs/manual.md b/docs/manual.md
index 4c1f17e..de587af 100644
--- a/docs/manual.md
+++ b/docs/manual.md
@@ -22,7 +22,7 @@
 
 Get the source code,
 
-    go get github.com/google/slothfs/cmd/slothfs-multifs
+    go get github.com/google/slothfs/cmd/slothfs-repofs
 
 SlothFS depends git2go, which depends on libgit2.  For git2go, we recommend
 compiling libgit2 in statically, as documented
@@ -60,7 +60,7 @@
 
 Then, to mount the file system, run
 
-    slothfs-multifs /slothfs
+    slothfs-repofs /slothfs
 
 
 Dereferencing a manifest
diff --git a/fs/api.go b/fs/api.go
index fd860ba..c1ba8e8 100644
--- a/fs/api.go
+++ b/fs/api.go
@@ -47,11 +47,16 @@
 	FileCloneOption []CloneOption
 }
 
-// MultiFSOptions holds options for a file system with multiple manifests.
-type MultiFSOptions struct {
+// MultiManifestFSOptions holds options for a file system with multiple manifests.
+type MultiManifestFSOptions struct {
 	// ManifestDir stores configured manifest files.
 	ManifestDir string
 
+	MultiFSOptions
+}
+
+// MultiFSOptions holds cloning options for a set of Git repos.
+type MultiFSOptions struct {
 	// RepoCloneOption matches against the Path field of the
 	// repository within a manifest.
 	RepoCloneOption []CloneOption
diff --git a/fs/manifestfs_test.go b/fs/manifestfs_test.go
index 6a2f41d..4f0822b 100644
--- a/fs/manifestfs_test.go
+++ b/fs/manifestfs_test.go
@@ -273,7 +273,7 @@
 }
 
 func newTestFixture() (*testFixture, error) {
-	d, err := ioutil.TempDir("", "multifstest")
+	d, err := ioutil.TempDir("", "slothfs")
 	if err != nil {
 		return nil, err
 	}
@@ -327,7 +327,7 @@
 	return nil
 }
 
-func TestMultiFSBrokenXML(t *testing.T) {
+func TestMultiManifestFSBrokenXML(t *testing.T) {
 	fix, err := newTestFixture()
 	if err != nil {
 		t.Fatalf("newTestFixture: %v", err)
@@ -339,8 +339,8 @@
 		t.Errorf("WriteFile(%s): %v", brokenXMLFile, err)
 	}
 
-	opts := MultiFSOptions{}
-	fs := NewMultiFS(fix.service, fix.cache, opts)
+	opts := MultiManifestFSOptions{}
+	fs := NewMultiManifestFS(fix.service, fix.cache, opts)
 
 	if err := fix.mount(fs); err != nil {
 		t.Fatalf("mount: %v", err)
@@ -351,7 +351,7 @@
 	}
 }
 
-func TestMultiFSBasic(t *testing.T) {
+func TestMultiManifestFSBasic(t *testing.T) {
 	fix, err := newTestFixture()
 	if err != nil {
 		t.Fatalf("newTestFixture: %v", err)
@@ -363,8 +363,8 @@
 		t.Errorf("WriteFile(%s): %v", xmlFile, err)
 	}
 
-	opts := MultiFSOptions{}
-	fs := NewMultiFS(fix.service, fix.cache, opts)
+	opts := MultiManifestFSOptions{}
+	fs := NewMultiManifestFS(fix.service, fix.cache, opts)
 
 	if err := fix.mount(fs); err != nil {
 		t.Fatalf("mount: %v", err)
@@ -410,7 +410,7 @@
 	}
 }
 
-func TestMultiFSManifestDir(t *testing.T) {
+func TestMultiManifestFSManifestDir(t *testing.T) {
 	fix, err := newTestFixture()
 	if err != nil {
 		t.Fatalf("newTestFixture: %v", err)
@@ -427,10 +427,10 @@
 		t.Errorf("WriteFile(%s): %v", xmlFile, err)
 	}
 
-	opts := MultiFSOptions{
+	opts := MultiManifestFSOptions{
 		ManifestDir: mfDir,
 	}
-	fs := NewMultiFS(fix.service, fix.cache, opts)
+	fs := NewMultiManifestFS(fix.service, fix.cache, opts)
 
 	if err := fix.mount(fs); err != nil {
 		t.Fatalf("mount: %v", err)
diff --git a/fs/multifs.go b/fs/multimanifestfs.go
similarity index 96%
rename from fs/multifs.go
rename to fs/multimanifestfs.go
index 9978390..f9fa084 100644
--- a/fs/multifs.go
+++ b/fs/multimanifestfs.go
@@ -34,7 +34,7 @@
 	nodeCache *nodeCache
 	cache     *cache.Cache
 	fsConn    *nodefs.FileSystemConnector
-	options   MultiFSOptions
+	options   MultiManifestFSOptions
 	gitiles   *gitiles.Service
 }
 
@@ -89,7 +89,7 @@
 
 func (c *configNode) Deletable() bool { return false }
 
-func NewMultiFS(service *gitiles.Service, c *cache.Cache, options MultiFSOptions) *multiManifestFSRoot {
+func NewMultiManifestFS(service *gitiles.Service, c *cache.Cache, options MultiManifestFSOptions) *multiManifestFSRoot {
 	r := &multiManifestFSRoot{
 		Node:      nodefs.NewDefaultNode(),
 		nodeCache: newNodeCache(),
diff --git a/populate/e2e_test.go b/populate/e2e_test.go
index 5ced2a3..505c3fb 100644
--- a/populate/e2e_test.go
+++ b/populate/e2e_test.go
@@ -1,3 +1,17 @@
+// Copyright 2016 Google Inc. All rights reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//    http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
 package populate
 
 import (
@@ -122,9 +136,9 @@
 		log.Printf("NewService: %v", err)
 	}
 
-	opts := fs.MultiFSOptions{}
+	opts := fs.MultiManifestFSOptions{}
 
-	root := fs.NewMultiFS(service, fix.cache, opts)
+	root := fs.NewMultiManifestFS(service, fix.cache, opts)
 	fuseOpts := nodefs.NewOptions()
 	fix.fsServer, _, err = nodefs.MountRoot(filepath.Join(dir, "mnt"), root, fuseOpts)
 	if err != nil {
