show how filtering is used
diff --git a/README.md b/README.md
index 19545cd..61bc984 100644
--- a/README.md
+++ b/README.md
@@ -31,6 +31,8 @@
* A set of interfaces to encourage and enforce interoperability between backends
* An atomic cross platform memory backed file system
* Support for compositional file systems by joining various different file systems (see httpFs)
+* Filtering of calls to intercept opening / modifying files, several filters
+may be stacked.
* A set of utility functions ported from io, ioutil & hugo to be afero aware
@@ -273,6 +275,28 @@
* Mem buffering to disk/network
* BasePath (where all paths are relative to a fixed basepath)
+# Filters
+
+You can add "filtering" to an Fs by adding a FilterFs to an existing Afero Fs
+like
+```go
+ ROFs := afero.NewFilter(AppFs)
+ ROFs.AddFilter(afero.NewReadonlyFilter())
+```
+The ROFs behaves like a normal afero.Fs now, with the only exception, that it
+provides a readonly view of the underlying Fs.
+
+The FilterFs is run before the source Fs, any non nil error is returned
+to the caller without going to the source Fs. If every filter in the
+chain returns a nil error, the call is sent to the source Fs.
+
+The `AddFilter` adds a new filter before any existing filters.
+
+## Available filters
+
+* NewReadonlyFilter() - provide a read only view of the source Fs
+
+
# About the project
## What's in the name