diff --git a/README.md b/README.md
index bcc4bb4..c1d08cc 100644
--- a/README.md
+++ b/README.md
@@ -51,20 +51,20 @@
     $ go get github.com/spf13/afero
 
 Next include Afero in your application.
-
-    import "github.com/spf13/afero"
-
+```go
+import "github.com/spf13/afero"
+```
 
 ## Step 2: Declare a backend
 
 First define a package variable and set it to a pointer to a filesystem.
+```go
+var AppFs afero.Fs = &afero.MemMapFs{}
 
-    var AppFs afero.Fs = &afero.MemMapFs{}
+or
 
-    or
-
-    var AppFs afero.Fs = &afero.OsFs{}
-
+var AppFs afero.Fs = &afero.OsFs{}
+```
 It is important to note that if you repeat the composite literal you
 will be using a completely new and isolated filesystem. In the case of
 OsFs it will still use the same underlying filesystem but will reduce
@@ -76,9 +76,9 @@
 would.
 
 So if my application before had:
-
-    os.Open('/tmp/foo')
-
+```go
+os.Open('/tmp/foo')
+```
 We would replace it with a call to `AppFs.Open('/tmp/foo')`.
 
 `AppFs` being the variable we defined above.
@@ -87,37 +87,37 @@
 ## List of all available functions
 
 File System Methods Available:
-
-	Chmod(name string, mode os.FileMode) : error
-	Chtimes(name string, atime time.Time, mtime time.Time) : error
-	Create(name string) : File, error
-	Mkdir(name string, perm os.FileMode) : error
-	MkdirAll(path string, perm os.FileMode) : error
-	Name() : string
-	Open(name string) : File, error
-	OpenFile(name string, flag int, perm os.FileMode) : File, error
-	Remove(name string) : error
-	RemoveAll(path string) : error
-	Rename(oldname, newname string) : error
-	Stat(name string) : os.FileInfo, error
-
+```go
+Chmod(name string, mode os.FileMode) : error
+Chtimes(name string, atime time.Time, mtime time.Time) : error
+Create(name string) : File, error
+Mkdir(name string, perm os.FileMode) : error
+MkdirAll(path string, perm os.FileMode) : error
+Name() : string
+Open(name string) : File, error
+OpenFile(name string, flag int, perm os.FileMode) : File, error
+Remove(name string) : error
+RemoveAll(path string) : error
+Rename(oldname, newname string) : error
+Stat(name string) : os.FileInfo, error
+```
 File Interfaces and Methods Available:
+```go
+io.Closer
+io.Reader
+io.ReaderAt
+io.Seeker
+io.Writer
+io.WriterAt
 
-	io.Closer
-	io.Reader
-	io.ReaderAt
-	io.Seeker
-	io.Writer
-	io.WriterAt
-	
-	Name() : string
-	Readdir(count int) : []os.FileInfo, error
-	Readdirnames(n int) : []string, error
-	Stat() : os.FileInfo, error
-	Sync() : error
-	Truncate(size int64) : error
-	WriteString(s string) : ret int, err error
-
+Name() : string
+Readdir(count int) : []os.FileInfo, error
+Readdirnames(n int) : []string, error
+Stat() : os.FileInfo, error
+Sync() : error
+Truncate(size int64) : error
+WriteString(s string) : ret int, err error
+```
 In some applications it may make sense to define a new package that
 simply exports the file system variable for easy access from anywhere.
 
@@ -146,31 +146,31 @@
 independent, with no test relying on the state left by an earlier test.
 
 Then in my tests I would initialize a new MemMapFs for each test:
+```go
+func TestExist(t *testing.T) {
+	appFS = &afero.MemMapFs{}
+	// create test files and directories
+	appFS.MkdirAll("src/a", 0755))
+	appFS.WriteFile("src/a/b", []byte("file b"), 0644)
+	appFS.WriteFile("src/c", []byte("file c"), 0644)
+	testExistence("src/c", true, t)
+}
 
-    func TestExist(t *testing.T) {
-        appFS = &afero.MemMapFs{}
-        // create test files and directories
-        appFS.MkdirAll("src/a", 0755))
-        appFS.WriteFile("src/a/b", []byte("file b"), 0644)
-        appFS.WriteFile("src/c", []byte("file c"), 0644)
-        testExistence("src/c", true, t)
-    }
-
-    func testExistence(name string, e bool, t *testing.T) {
-        _, err := appFS.Stat(name)
-        if os.IsNotExist(err) {
-            if e {
-                t.Errorf("file \"%s\" does not exist.\n", name)
-            }
-        } else if err != nil {
-            panic(err)
-        } else {
-            if !e {
-                t.Errorf("file \"%s\" exists.\n", name)
-            }
-        }
-    }
-
+func testExistence(name string, e bool, t *testing.T) {
+	_, err := appFS.Stat(name)
+	if os.IsNotExist(err) {
+	    if e {
+	        t.Errorf("file \"%s\" does not exist.\n", name)
+    	}
+	} else if err != nil {
+    	panic(err)
+	} else {
+    	if !e {
+    	    t.Errorf("file \"%s\" exists.\n", name)
+    	}
+	}
+}
+```
 
 ## Using Afero with Http
 
@@ -182,11 +182,11 @@
 
 Afero provides an httpFs file system which satisfies this requirement.
 Any Afero FileSystem can be used as an httpFs.
-
-	httpFs := &afero.HttpFs{SourceFs: <ExistingFS>}
-	fileserver := http.FileServer(httpFs.Dir(<PATH>)))
-    http.Handle("/", fileserver)
-
+```go
+httpFs := &afero.HttpFs{SourceFs: <ExistingFS>}
+fileserver := http.FileServer(httpFs.Dir(<PATH>)))
+http.Handle("/", fileserver)
+```
 # Available Backends
 
 ## OsFs
