diff --git a/union_cache.go b/union_cache.go
index aa227f0..aadcca9 100644
--- a/union_cache.go
+++ b/union_cache.go
@@ -19,7 +19,7 @@
 // system first. To prevent writing to the base Fs, wrap it in a read-only
 // filter - Note: this will also make the overlay read-only, for writing files
 // in the overlay, use the overlay Fs directly, not via the union Fs.
-type CacheUnionFs struct {
+type CacheOnReadFs struct {
 	base      Fs
 	layer     Fs
 	cacheTime time.Duration
@@ -42,7 +42,7 @@
 	cacheLocal
 )
 
-func (u *CacheUnionFs) cacheStatus(name string) (state cacheState, fi os.FileInfo, err error) {
+func (u *CacheOnReadFs) cacheStatus(name string) (state cacheState, fi os.FileInfo, err error) {
 	var lfi, bfi os.FileInfo
 	lfi, err = u.layer.Stat(name)
 	if err == nil {
@@ -73,11 +73,11 @@
 	return cacheMiss, nil, err
 }
 
-func (u *CacheUnionFs) copyToLayer(name string) error {
+func (u *CacheOnReadFs) copyToLayer(name string) error {
 	return copyToLayer(u.base, u.layer, name)
 }
 
-func (u *CacheUnionFs) Chtimes(name string, atime, mtime time.Time) error {
+func (u *CacheOnReadFs) Chtimes(name string, atime, mtime time.Time) error {
 	st, _, err := u.cacheStatus(name)
 	if err != nil {
 		return err
@@ -98,7 +98,7 @@
 	return u.layer.Chtimes(name, atime, mtime)
 }
 
-func (u *CacheUnionFs) Chmod(name string, mode os.FileMode) error {
+func (u *CacheOnReadFs) Chmod(name string, mode os.FileMode) error {
 	st, _, err := u.cacheStatus(name)
 	if err != nil {
 		return err
@@ -119,7 +119,7 @@
 	return u.layer.Chmod(name, mode)
 }
 
-func (u *CacheUnionFs) Stat(name string) (os.FileInfo, error) {
+func (u *CacheOnReadFs) Stat(name string) (os.FileInfo, error) {
 	st, fi, err := u.cacheStatus(name)
 	if err != nil {
 		return nil, err
@@ -132,7 +132,7 @@
 	}
 }
 
-func (u *CacheUnionFs) Rename(oldname, newname string) error {
+func (u *CacheOnReadFs) Rename(oldname, newname string) error {
 	st, _, err := u.cacheStatus(oldname)
 	if err != nil {
 		return err
@@ -153,7 +153,7 @@
 	return u.layer.Rename(oldname, newname)
 }
 
-func (u *CacheUnionFs) Remove(name string) error {
+func (u *CacheOnReadFs) Remove(name string) error {
 	st, _, err := u.cacheStatus(name)
 	if err != nil {
 		return err
@@ -169,7 +169,7 @@
 	return u.layer.Remove(name)
 }
 
-func (u *CacheUnionFs) RemoveAll(name string) error {
+func (u *CacheOnReadFs) RemoveAll(name string) error {
 	st, _, err := u.cacheStatus(name)
 	if err != nil {
 		return err
@@ -185,7 +185,7 @@
 	return u.layer.RemoveAll(name)
 }
 
-func (u *CacheUnionFs) OpenFile(name string, flag int, perm os.FileMode) (File, error) {
+func (u *CacheOnReadFs) OpenFile(name string, flag int, perm os.FileMode) (File, error) {
 	st, _, err := u.cacheStatus(name)
 	if err != nil {
 		return nil, err
@@ -212,7 +212,7 @@
 	return u.layer.OpenFile(name, flag, perm)
 }
 
-func (u *CacheUnionFs) Open(name string) (File, error) {
+func (u *CacheOnReadFs) Open(name string) (File, error) {
 	st, fi, err := u.cacheStatus(name)
 	if err != nil {
 		return nil, err
@@ -256,7 +256,7 @@
 	return &UnionFile{base: bfile, layer: lfile}, nil
 }
 
-func (u *CacheUnionFs) Mkdir(name string, perm os.FileMode) error {
+func (u *CacheOnReadFs) Mkdir(name string, perm os.FileMode) error {
 	err := u.base.Mkdir(name, perm)
 	if err != nil {
 		return err
@@ -264,11 +264,11 @@
 	return u.layer.MkdirAll(name, perm) // yes, MkdirAll... we cannot assume it exists in the cache
 }
 
-func (u *CacheUnionFs) Name() string {
-	return "CacheUnionFs"
+func (u *CacheOnReadFs) Name() string {
+	return "CacheOnReadFs"
 }
 
-func (u *CacheUnionFs) MkdirAll(name string, perm os.FileMode) error {
+func (u *CacheOnReadFs) MkdirAll(name string, perm os.FileMode) error {
 	err := u.base.MkdirAll(name, perm)
 	if err != nil {
 		return err
@@ -276,7 +276,7 @@
 	return u.layer.MkdirAll(name, perm)
 }
 
-func (u *CacheUnionFs) Create(name string) (File, error) {
+func (u *CacheOnReadFs) Create(name string) (File, error) {
 	bfh, err := u.base.Create(name)
 	if err != nil {
 		return nil, err
diff --git a/union_test.go b/union_test.go
index 9c3fb0d..0e6105d 100644
--- a/union_test.go
+++ b/union_test.go
@@ -86,7 +86,7 @@
 	base := &MemMapFs{}
 	layer := &MemMapFs{}
 
-	ufs := &CacheUnionFs{base: base, layer: layer, cacheTime: 0}
+	ufs := &CacheOnReadFs{base: base, layer: layer, cacheTime: 0}
 
 	base.Mkdir("/data", 0777)
 
@@ -115,7 +115,7 @@
 func TestUnionCacheExpire(t *testing.T) {
 	base := &MemMapFs{}
 	layer := &MemMapFs{}
-	ufs := &CacheUnionFs{base: base, layer: layer, cacheTime: 1 * time.Second}
+	ufs := &CacheOnReadFs{base: base, layer: layer, cacheTime: 1 * time.Second}
 
 	base.Mkdir("/data", 0777)
 
