diff --git a/filter_readonly.go b/filter_readonly.go
deleted file mode 100644
index c24c09b..0000000
--- a/filter_readonly.go
+++ /dev/null
@@ -1,80 +0,0 @@
-package afero
-
-import (
-	"os"
-	"syscall"
-	"time"
-)
-
-type ReadOnlyFilter struct {
-	source Fs
-}
-
-func NewReadonlyFilter() FilterFs {
-	return &ReadOnlyFilter{}
-}
-
-func (r *ReadOnlyFilter) SetSource(fs Fs) {
-	r.source = fs
-}
-
-// prepend a filter in the filter chain
-func (r *ReadOnlyFilter) AddFilter(fs FilterFs) {
-	fs.SetSource(r.source)
-	r.source = fs
-}
-
-func (r *ReadOnlyFilter) ReadDir(name string) ([]os.FileInfo, error) {
-	return ReadDir(r.source, name)
-}
-
-func (r *ReadOnlyFilter) Chtimes(n string, a, m time.Time) error {
-	return syscall.EPERM
-}
-
-func (r *ReadOnlyFilter) Chmod(n string, m os.FileMode) error {
-	return syscall.EPERM
-}
-
-func (r *ReadOnlyFilter) Name() string {
-	return "ReadOnlyFilter"
-}
-
-func (r *ReadOnlyFilter) Stat(name string) (os.FileInfo, error) {
-	return r.source.Stat(name)
-}
-
-func (r *ReadOnlyFilter) Rename(o, n string) error {
-	return syscall.EPERM
-}
-
-func (r *ReadOnlyFilter) RemoveAll(p string) error {
-	return syscall.EPERM
-}
-
-func (r *ReadOnlyFilter) Remove(n string) error {
-	return syscall.EPERM
-}
-
-func (r *ReadOnlyFilter) OpenFile(name string, flag int, perm os.FileMode) (File, error) {
-	if flag&(os.O_WRONLY|syscall.O_RDWR|os.O_APPEND|os.O_CREATE|os.O_TRUNC) != 0 {
-		return nil, syscall.EPERM
-	}
-	return r.source.OpenFile(name, flag, perm)
-}
-
-func (r *ReadOnlyFilter) Open(n string) (File, error) {
-	return r.source.Open(n)
-}
-
-func (r *ReadOnlyFilter) Mkdir(n string, p os.FileMode) error {
-	return syscall.EPERM
-}
-
-func (r *ReadOnlyFilter) MkdirAll(n string, p os.FileMode) error {
-	return syscall.EPERM
-}
-
-func (r *ReadOnlyFilter) Create(n string) (File, error) {
-	return nil, syscall.EPERM
-}
diff --git a/readonlyfs.go b/readonlyfs.go
new file mode 100644
index 0000000..fa23703
--- /dev/null
+++ b/readonlyfs.go
@@ -0,0 +1,66 @@
+package afero
+
+import (
+	"os"
+	"syscall"
+	"time"
+)
+
+type ReadOnlyFs struct {
+	source Fs
+}
+
+func (r *ReadOnlyFs) ReadDir(name string) ([]os.FileInfo, error) {
+	return ReadDir(r.source, name)
+}
+
+func (r *ReadOnlyFs) Chtimes(n string, a, m time.Time) error {
+	return syscall.EPERM
+}
+
+func (r *ReadOnlyFs) Chmod(n string, m os.FileMode) error {
+	return syscall.EPERM
+}
+
+func (r *ReadOnlyFs) Name() string {
+	return "ReadOnlyFilter"
+}
+
+func (r *ReadOnlyFs) Stat(name string) (os.FileInfo, error) {
+	return r.source.Stat(name)
+}
+
+func (r *ReadOnlyFs) Rename(o, n string) error {
+	return syscall.EPERM
+}
+
+func (r *ReadOnlyFs) RemoveAll(p string) error {
+	return syscall.EPERM
+}
+
+func (r *ReadOnlyFs) Remove(n string) error {
+	return syscall.EPERM
+}
+
+func (r *ReadOnlyFs) OpenFile(name string, flag int, perm os.FileMode) (File, error) {
+	if flag&(os.O_WRONLY|syscall.O_RDWR|os.O_APPEND|os.O_CREATE|os.O_TRUNC) != 0 {
+		return nil, syscall.EPERM
+	}
+	return r.source.OpenFile(name, flag, perm)
+}
+
+func (r *ReadOnlyFs) Open(n string) (File, error) {
+	return r.source.Open(n)
+}
+
+func (r *ReadOnlyFs) Mkdir(n string, p os.FileMode) error {
+	return syscall.EPERM
+}
+
+func (r *ReadOnlyFs) MkdirAll(n string, p os.FileMode) error {
+	return syscall.EPERM
+}
+
+func (r *ReadOnlyFs) Create(n string) (File, error) {
+	return nil, syscall.EPERM
+}
diff --git a/filter_regexp.go b/regexpfs.go
similarity index 71%
rename from filter_regexp.go
rename to regexpfs.go
index 36e97e6..071b1bd 100644
--- a/filter_regexp.go
+++ b/regexpfs.go
@@ -7,11 +7,11 @@
 	"time"
 )
 
-// The RegexpFilter filters files (not directories) by regular expression. Only
+// The RegexpFs filters files (not directories) by regular expression. Only
 // files matching the given regexp will be allowed, all others get a ENOENT error (
 // "No such file or directory").
 //
-type RegexpFilter struct {
+type RegexpFs struct {
 	re     *regexp.Regexp
 	source Fs
 }
@@ -21,21 +21,7 @@
 	re *regexp.Regexp
 }
 
-func NewRegexpFilter(re *regexp.Regexp) FilterFs {
-	return &RegexpFilter{re: re}
-}
-
-// prepend a filter in the filter chain
-func (r *RegexpFilter) AddFilter(fs FilterFs) {
-	fs.SetSource(r.source)
-	r.source = fs
-}
-
-func (r *RegexpFilter) SetSource(fs Fs) {
-	r.source = fs
-}
-
-func (r *RegexpFilter) matchesName(name string) error {
+func (r *RegexpFs) matchesName(name string) error {
 	if r.re == nil {
 		return nil
 	}
@@ -45,7 +31,7 @@
 	return syscall.ENOENT
 }
 
-func (r *RegexpFilter) dirOrMatches(name string) error {
+func (r *RegexpFs) dirOrMatches(name string) error {
 	dir, err := IsDir(r.source, name)
 	if err != nil {
 		return err
@@ -56,32 +42,32 @@
 	return r.matchesName(name)
 }
 
-func (r *RegexpFilter) Chtimes(name string, a, m time.Time) error {
+func (r *RegexpFs) Chtimes(name string, a, m time.Time) error {
 	if err := r.dirOrMatches(name); err != nil {
 		return err
 	}
 	return r.source.Chtimes(name, a, m)
 }
 
-func (r *RegexpFilter) Chmod(name string, mode os.FileMode) error {
+func (r *RegexpFs) Chmod(name string, mode os.FileMode) error {
 	if err := r.dirOrMatches(name); err != nil {
 		return err
 	}
 	return r.source.Chmod(name, mode)
 }
 
-func (r *RegexpFilter) Name() string {
-	return "RegexpFilter"
+func (r *RegexpFs) Name() string {
+	return "RegexpFs"
 }
 
-func (r *RegexpFilter) Stat(name string) (os.FileInfo, error) {
+func (r *RegexpFs) Stat(name string) (os.FileInfo, error) {
 	if err := r.dirOrMatches(name); err != nil {
 		return nil, err
 	}
 	return r.source.Stat(name)
 }
 
-func (r *RegexpFilter) Rename(oldname, newname string) error {
+func (r *RegexpFs) Rename(oldname, newname string) error {
 	dir, err := IsDir(r.source, oldname)
 	if err != nil {
 		return err
@@ -98,7 +84,7 @@
 	return r.source.Rename(oldname, newname)
 }
 
-func (r *RegexpFilter) RemoveAll(p string) error {
+func (r *RegexpFs) RemoveAll(p string) error {
 	dir, err := IsDir(r.source, p)
 	if err != nil {
 		return err
@@ -111,21 +97,21 @@
 	return r.source.RemoveAll(p)
 }
 
-func (r *RegexpFilter) Remove(name string) error {
+func (r *RegexpFs) Remove(name string) error {
 	if err := r.dirOrMatches(name); err != nil {
 		return err
 	}
 	return r.source.Remove(name)
 }
 
-func (r *RegexpFilter) OpenFile(name string, flag int, perm os.FileMode) (File, error) {
+func (r *RegexpFs) OpenFile(name string, flag int, perm os.FileMode) (File, error) {
 	if err := r.dirOrMatches(name); err != nil {
 		return nil, err
 	}
 	return r.source.OpenFile(name, flag, perm)
 }
 
-func (r *RegexpFilter) Open(name string) (File, error) {
+func (r *RegexpFs) Open(name string) (File, error) {
 	dir, err := IsDir(r.source, name)
 	if err != nil {
 		return nil, err
@@ -139,15 +125,15 @@
 	return &RegexpFile{f: f, re: r.re}, nil
 }
 
-func (r *RegexpFilter) Mkdir(n string, p os.FileMode) error {
+func (r *RegexpFs) Mkdir(n string, p os.FileMode) error {
 	return r.source.Mkdir(n, p)
 }
 
-func (r *RegexpFilter) MkdirAll(n string, p os.FileMode) error {
+func (r *RegexpFs) MkdirAll(n string, p os.FileMode) error {
 	return r.source.MkdirAll(n, p)
 }
 
-func (r *RegexpFilter) Create(name string) (File, error) {
+func (r *RegexpFs) Create(name string) (File, error) {
 	if err := r.matchesName(name); err != nil {
 		return nil, err
 	}
diff --git a/filter_test.go b/ro_regexp_test.go
similarity index 77%
rename from filter_test.go
rename to ro_regexp_test.go
index 679cf92..d408fab 100644
--- a/filter_test.go
+++ b/ro_regexp_test.go
@@ -6,9 +6,7 @@
 )
 
 func TestFilterReadOnly(t *testing.T) {
-	mfs := &MemMapFs{}
-	fs := NewFilter(mfs)
-	fs.AddFilter(NewReadonlyFilter())
+	fs := &ReadOnlyFs{source: &MemMapFs{}}
 	_, err := fs.Create("/file.txt")
 	if err == nil {
 		t.Errorf("Did not fail to create file")
@@ -22,8 +20,7 @@
 	fh.Write([]byte("content here"))
 	fh.Close()
 
-	fs := NewFilter(mfs)
-	fs.AddFilter(NewReadonlyFilter())
+	fs := &ReadOnlyFs{source: mfs}
 	err = fs.Remove("/file.txt")
 	if err == nil {
 		t.Errorf("Did not fail to remove file")
@@ -54,9 +51,7 @@
 }
 
 func TestFilterRegexp(t *testing.T) {
-	mfs := &MemMapFs{}
-	fs := NewFilter(mfs)
-	fs.AddFilter(NewRegexpFilter(regexp.MustCompile(`\.txt$`)))
+	fs := &RegexpFs{re: regexp.MustCompile(`\.txt$`), source: &MemMapFs{}}
 	_, err := fs.Create("/file.html")
 	if err == nil {
 
@@ -66,10 +61,8 @@
 }
 
 func TestFilterRORegexpChain(t *testing.T) {
-	mfs := &MemMapFs{}
-	fs := NewFilter(mfs)
-	fs.AddFilter(NewReadonlyFilter())
-	fs.AddFilter(NewRegexpFilter(regexp.MustCompile(`\.txt$`)))
+	rofs := &ReadOnlyFs{source: &MemMapFs{}}
+	fs := &RegexpFs{re: regexp.MustCompile(`\.txt$`), source: rofs}
 	_, err := fs.Create("/file.txt")
 	if err == nil {
 		t.Errorf("Did not fail to create file")
@@ -79,9 +72,8 @@
 
 func TestFilterRegexReadDir(t *testing.T) {
 	mfs := &MemMapFs{}
-	fs := NewFilter(mfs)
-	fs.AddFilter(NewRegexpFilter(regexp.MustCompile(`\.txt$`)))
-	fs.AddFilter(NewRegexpFilter(regexp.MustCompile(`^a`)))
+	fs1 := &RegexpFs{re: regexp.MustCompile(`\.txt$`), source: mfs}
+	fs := &RegexpFs{re: regexp.MustCompile(`^a`), source: fs1}
 
 	mfs.MkdirAll("/dir/sub", 0777)
 	for _, name := range []string{"afile.txt", "afile.html", "bfile.txt"} {
diff --git a/union_test.go b/union_test.go
index 14736ff..24f93cd 100644
--- a/union_test.go
+++ b/union_test.go
@@ -9,8 +9,7 @@
 
 func TestUnionCreateExisting(t *testing.T) {
 	base := &MemMapFs{}
-	roBase := NewFilter(base)
-	roBase.AddFilter(NewReadonlyFilter())
+	roBase := &ReadOnlyFs{source: base}
 
 	ufs := NewUnionFs(roBase, &MemMapFs{}, NewCoWUnionFs())
 
@@ -60,8 +59,7 @@
 
 func TestUnionMergeReaddir(t *testing.T) {
 	base := &MemMapFs{}
-	roBase := NewFilter(base)
-	roBase.AddFilter(NewReadonlyFilter())
+	roBase := &ReadOnlyFs{source: base}
 
 	ufs := NewUnionFs(roBase, &MemMapFs{}, NewCoWUnionFs())
 
