diff --git a/fuse/pathfs/loopback.go b/fuse/pathfs/loopback.go
index 8042e80cbf384ba3f3c2ba2f378d55f2ade46fe8..7d3edaab944ec1de4a178b11ee90dd643334b8fe 100644
--- a/fuse/pathfs/loopback.go
+++ b/fuse/pathfs/loopback.go
@@ -15,26 +15,26 @@ import (
 var _ = fmt.Println
 var _ = log.Println
 
-// A FUSE filesystem that shunts all request to an underlying file
-// system.  Its main purpose is to provide test coverage without
-// having to build an actual synthetic filesystem.
-type LoopbackFileSystem struct {
+type loopbackFileSystem struct {
 	Root string
 	DefaultFileSystem
 }
 
-func NewLoopbackFileSystem(root string) (out *LoopbackFileSystem) {
-	out = new(LoopbackFileSystem)
+// A FUSE filesystem that shunts all request to an underlying file
+// system.  Its main purpose is to provide test coverage without
+// having to build a synthetic filesystem.
+func NewLoopbackFileSystem(root string) (out *loopbackFileSystem) {
+	out = new(loopbackFileSystem)
 	out.Root = root
 
 	return out
 }
 
-func (fs *LoopbackFileSystem) GetPath(relPath string) string {
+func (fs *loopbackFileSystem) GetPath(relPath string) string {
 	return filepath.Join(fs.Root, relPath)
 }
 
-func (fs *LoopbackFileSystem) GetAttr(name string, context *fuse.Context) (a *fuse.Attr, code fuse.Status) {
+func (fs *loopbackFileSystem) GetAttr(name string, context *fuse.Context) (a *fuse.Attr, code fuse.Status) {
 	fullPath := fs.GetPath(name)
 	var err error = nil
 	st := syscall.Stat_t{}
@@ -54,9 +54,9 @@ func (fs *LoopbackFileSystem) GetAttr(name string, context *fuse.Context) (a *fu
 	return a, fuse.OK
 }
 
-var _ = (FileSystem)((*LoopbackFileSystem)(nil))
+var _ = (FileSystem)((*loopbackFileSystem)(nil))
 
-func (fs *LoopbackFileSystem) OpenDir(name string, context *fuse.Context) (stream []fuse.DirEntry, status fuse.Status) {
+func (fs *loopbackFileSystem) OpenDir(name string, context *fuse.Context) (stream []fuse.DirEntry, status fuse.Status) {
 	// What other ways beyond O_RDONLY are there to open
 	// directories?
 	f, err := os.Open(fs.GetPath(name))
@@ -92,7 +92,7 @@ func (fs *LoopbackFileSystem) OpenDir(name string, context *fuse.Context) (strea
 	return output, fuse.OK
 }
 
-func (fs *LoopbackFileSystem) Open(name string, flags uint32, context *fuse.Context) (fuseFile fuse.File, status fuse.Status) {
+func (fs *loopbackFileSystem) Open(name string, flags uint32, context *fuse.Context) (fuseFile fuse.File, status fuse.Status) {
 	f, err := os.OpenFile(fs.GetPath(name), int(flags), 0)
 	if err != nil {
 		return nil, fuse.ToStatus(err)
@@ -100,20 +100,20 @@ func (fs *LoopbackFileSystem) Open(name string, flags uint32, context *fuse.Cont
 	return &fuse.LoopbackFile{File: f}, fuse.OK
 }
 
-func (fs *LoopbackFileSystem) Chmod(path string, mode uint32, context *fuse.Context) (code fuse.Status) {
+func (fs *loopbackFileSystem) Chmod(path string, mode uint32, context *fuse.Context) (code fuse.Status) {
 	err := os.Chmod(fs.GetPath(path), os.FileMode(mode))
 	return fuse.ToStatus(err)
 }
 
-func (fs *LoopbackFileSystem) Chown(path string, uid uint32, gid uint32, context *fuse.Context) (code fuse.Status) {
+func (fs *loopbackFileSystem) Chown(path string, uid uint32, gid uint32, context *fuse.Context) (code fuse.Status) {
 	return fuse.ToStatus(os.Chown(fs.GetPath(path), int(uid), int(gid)))
 }
 
-func (fs *LoopbackFileSystem) Truncate(path string, offset uint64, context *fuse.Context) (code fuse.Status) {
+func (fs *loopbackFileSystem) Truncate(path string, offset uint64, context *fuse.Context) (code fuse.Status) {
 	return fuse.ToStatus(os.Truncate(fs.GetPath(path), int64(offset)))
 }
 
-func (fs *LoopbackFileSystem) Utimens(path string, Atime *time.Time, Mtime *time.Time, context *fuse.Context) (code fuse.Status) {
+func (fs *loopbackFileSystem) Utimens(path string, Atime *time.Time, Mtime *time.Time, context *fuse.Context) (code fuse.Status) {
 	var a time.Time
 	if Atime != nil {
 		a = *Atime
@@ -125,46 +125,46 @@ func (fs *LoopbackFileSystem) Utimens(path string, Atime *time.Time, Mtime *time
 	return fuse.ToStatus(os.Chtimes(fs.GetPath(path), a, m))
 }
 
-func (fs *LoopbackFileSystem) Readlink(name string, context *fuse.Context) (out string, code fuse.Status) {
+func (fs *loopbackFileSystem) Readlink(name string, context *fuse.Context) (out string, code fuse.Status) {
 	f, err := os.Readlink(fs.GetPath(name))
 	return f, fuse.ToStatus(err)
 }
 
-func (fs *LoopbackFileSystem) Mknod(name string, mode uint32, dev uint32, context *fuse.Context) (code fuse.Status) {
+func (fs *loopbackFileSystem) Mknod(name string, mode uint32, dev uint32, context *fuse.Context) (code fuse.Status) {
 	return fuse.ToStatus(syscall.Mknod(fs.GetPath(name), mode, int(dev)))
 }
 
-func (fs *LoopbackFileSystem) Mkdir(path string, mode uint32, context *fuse.Context) (code fuse.Status) {
+func (fs *loopbackFileSystem) Mkdir(path string, mode uint32, context *fuse.Context) (code fuse.Status) {
 	return fuse.ToStatus(os.Mkdir(fs.GetPath(path), os.FileMode(mode)))
 }
 
 // Don't use os.Remove, it removes twice (unlink followed by rmdir).
-func (fs *LoopbackFileSystem) Unlink(name string, context *fuse.Context) (code fuse.Status) {
+func (fs *loopbackFileSystem) Unlink(name string, context *fuse.Context) (code fuse.Status) {
 	return fuse.ToStatus(syscall.Unlink(fs.GetPath(name)))
 }
 
-func (fs *LoopbackFileSystem) Rmdir(name string, context *fuse.Context) (code fuse.Status) {
+func (fs *loopbackFileSystem) Rmdir(name string, context *fuse.Context) (code fuse.Status) {
 	return fuse.ToStatus(syscall.Rmdir(fs.GetPath(name)))
 }
 
-func (fs *LoopbackFileSystem) Symlink(pointedTo string, linkName string, context *fuse.Context) (code fuse.Status) {
+func (fs *loopbackFileSystem) Symlink(pointedTo string, linkName string, context *fuse.Context) (code fuse.Status) {
 	return fuse.ToStatus(os.Symlink(pointedTo, fs.GetPath(linkName)))
 }
 
-func (fs *LoopbackFileSystem) Rename(oldPath string, newPath string, context *fuse.Context) (codee fuse.Status) {
+func (fs *loopbackFileSystem) Rename(oldPath string, newPath string, context *fuse.Context) (codee fuse.Status) {
 	err := os.Rename(fs.GetPath(oldPath), fs.GetPath(newPath))
 	return fuse.ToStatus(err)
 }
 
-func (fs *LoopbackFileSystem) Link(orig string, newName string, context *fuse.Context) (code fuse.Status) {
+func (fs *loopbackFileSystem) Link(orig string, newName string, context *fuse.Context) (code fuse.Status) {
 	return fuse.ToStatus(os.Link(fs.GetPath(orig), fs.GetPath(newName)))
 }
 
-func (fs *LoopbackFileSystem) Access(name string, mode uint32, context *fuse.Context) (code fuse.Status) {
+func (fs *loopbackFileSystem) Access(name string, mode uint32, context *fuse.Context) (code fuse.Status) {
 	return fuse.ToStatus(syscall.Access(fs.GetPath(name), mode))
 }
 
-func (fs *LoopbackFileSystem) Create(path string, flags uint32, mode uint32, context *fuse.Context) (fuseFile fuse.File, code fuse.Status) {
+func (fs *loopbackFileSystem) Create(path string, flags uint32, mode uint32, context *fuse.Context) (fuseFile fuse.File, code fuse.Status) {
 	f, err := os.OpenFile(fs.GetPath(path), int(flags)|os.O_CREATE, os.FileMode(mode))
 	return &fuse.LoopbackFile{File: f}, fuse.ToStatus(err)
 }
diff --git a/fuse/pathfs/loopback_linux.go b/fuse/pathfs/loopback_linux.go
index 98619fc12b8dd52c1b8c3a847ae260422af65e59..ff97370d2c6980f50870974d9a66fdb3c551a799 100644
--- a/fuse/pathfs/loopback_linux.go
+++ b/fuse/pathfs/loopback_linux.go
@@ -7,7 +7,7 @@ import (
 	"github.com/hanwen/go-fuse/fuse"
 )
 
-func (fs *LoopbackFileSystem) StatFs(name string) *fuse.StatfsOut {
+func (fs *loopbackFileSystem) StatFs(name string) *fuse.StatfsOut {
 	s := syscall.Statfs_t{}
 	err := syscall.Statfs(fs.GetPath(name), &s)
 	if err == nil {
@@ -25,21 +25,21 @@ func (fs *LoopbackFileSystem) StatFs(name string) *fuse.StatfsOut {
 	return nil
 }
 
-func (fs *LoopbackFileSystem) ListXAttr(name string, context *fuse.Context) ([]string, fuse.Status) {
+func (fs *loopbackFileSystem) ListXAttr(name string, context *fuse.Context) ([]string, fuse.Status) {
 	data, errNo := ListXAttr(fs.GetPath(name))
 
 	return data, fuse.Status(errNo)
 }
 
-func (fs *LoopbackFileSystem) RemoveXAttr(name string, attr string, context *fuse.Context) fuse.Status {
+func (fs *loopbackFileSystem) RemoveXAttr(name string, attr string, context *fuse.Context) fuse.Status {
 	return fuse.Status(Removexattr(fs.GetPath(name), attr))
 }
 
-func (fs *LoopbackFileSystem) String() string {
+func (fs *loopbackFileSystem) String() string {
 	return fmt.Sprintf("LoopbackFs(%s)", fs.Root)
 }
 
-func (fs *LoopbackFileSystem) GetXAttr(name string, attr string, context *fuse.Context) ([]byte, fuse.Status) {
+func (fs *loopbackFileSystem) GetXAttr(name string, attr string, context *fuse.Context) ([]byte, fuse.Status) {
 	data := make([]byte, 1024)
 	data, errNo := GetXAttr(fs.GetPath(name), attr, data)
 
diff --git a/fuse/test/cache_test.go b/fuse/test/cache_test.go
index 405b4c62ca490879d113101fb76716cacee398ec..9f4076ef9f5a0bef9ca7b4e545bea939edeb5117 100644
--- a/fuse/test/cache_test.go
+++ b/fuse/test/cache_test.go
@@ -16,11 +16,11 @@ import (
 var _ = log.Println
 
 type cacheFs struct {
-	*pathfs.LoopbackFileSystem
+	pathfs.FileSystem
 }
 
 func (fs *cacheFs) Open(name string, flags uint32, context *fuse.Context) (fuseFile fuse.File, status fuse.Status) {
-	f, c := fs.LoopbackFileSystem.Open(name, flags, context)
+	f, c := fs.FileSystem.Open(name, flags, context)
 	if !c.Ok() {
 		return f, c
 	}
@@ -40,7 +40,7 @@ func setupCacheTest(t *testing.T) (string, *pathfs.PathNodeFs, func()) {
 	os.Mkdir(dir+"/orig", 0755)
 
 	fs := &cacheFs{
-		LoopbackFileSystem: pathfs.NewLoopbackFileSystem(dir + "/orig"),
+		pathfs.NewLoopbackFileSystem(dir + "/orig"),
 	}
 	pfs := pathfs.NewPathNodeFs(fs, nil)
 	state, conn, err := fuse.MountNodeFileSystem(dir+"/mnt", pfs, nil)