Refactoring. 100% test coverage. Updated README.md
diff --git a/README.md b/README.md
index 88d2134..44da570 100644
--- a/README.md
+++ b/README.md
@@ -1,6 +1,8 @@
 # Alice 
 
+[![GoDoc](https://godoc.org/github.com/golang/gddo?status.svg)](http://godoc.org/github.com/justinas/alice)
 [![Build Status](https://travis-ci.org/justinas/alice.svg?branch=master)](https://travis-ci.org/justinas/alice)
+[![Coverage](http://gocover.io/_badge/github.com/justinas/alice)](http://gocover.io/github.com/justinas/alice)
 
 Alice provides a convenient way to chain 
 your HTTP middleware functions and the app handler.
diff --git a/chain.go b/chain.go
index 8adf0c0..7bb0e6f 100644
--- a/chain.go
+++ b/chain.go
@@ -43,18 +43,15 @@
 //
 // Then() treats nil as http.DefaultServeMux.
 func (c Chain) Then(h http.Handler) http.Handler {
-	var final http.Handler
-	if h != nil {
-		final = h
-	} else {
-		final = http.DefaultServeMux
+	if h == nil {
+		h = http.DefaultServeMux
 	}
 
 	for i := len(c.constructors) - 1; i >= 0; i-- {
-		final = c.constructors[i](final)
+		h = c.constructors[i](h)
 	}
 
-	return final
+	return h
 }
 
 // ThenFunc works identically to Then, but takes
@@ -86,8 +83,7 @@
 	copy(newCons, c.constructors)
 	copy(newCons[len(c.constructors):], constructors)
 
-	newChain := New(newCons...)
-	return newChain
+	return New(newCons...)
 }
 
 // Extend extends a chain by adding the specified chain
diff --git a/chain_test.go b/chain_test.go
index 49c0470..97e0ff1 100644
--- a/chain_test.go
+++ b/chain_test.go
@@ -69,6 +69,16 @@
 	assert.Equal(t, chained, http.DefaultServeMux)
 }
 
+func TestThenFuncConstructsHandlerFunc(t *testing.T) {
+	fn := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
+		w.WriteHeader(200)
+	})
+	chained := New().ThenFunc(fn)
+	rec := httptest.NewRecorder()
+	chained.ServeHTTP(rec, (*http.Request)(nil))
+	assert.Equal(t, 200, rec.Code)
+}
+
 func TestThenOrdersHandlersRight(t *testing.T) {
 	t1 := tagMiddleware("t1\n")
 	t2 := tagMiddleware("t2\n")