diff --git a/chain.go b/chain.go
index 04a17f7..d675546 100644
--- a/chain.go
+++ b/chain.go
@@ -59,3 +59,21 @@
 
 	return final
 }
+
+// Append extends a chain, adding the specified constructors
+// as the last ones in the request flow.
+//
+// Append returns a new chain, leaving the original one untouched.
+//
+//     stdChain := alice.New(m1, m2)
+//     extChain := stdChain.Append(m3, m4)
+//     // requests in stdChain go m1 -> m2
+//     // requests in extChain go m1 -> m2 -> m3 -> m4
+func (c Chain) Append(constructors ...Constructor) Chain {
+	newCons := make([]Constructor, len(c.constructors))
+	copy(newCons, c.constructors)
+	newCons = append(newCons, constructors...)
+
+	newChain := New(newCons...)
+	return newChain
+}
diff --git a/chain_test.go b/chain_test.go
index 8c57896..d78b1d9 100644
--- a/chain_test.go
+++ b/chain_test.go
@@ -21,6 +21,10 @@
 	}
 }
 
+var testApp = http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
+	w.Write([]byte("app\n"))
+})
+
 // Tests creating a new chain
 func TestNew(t *testing.T) {
 	c1 := func(h http.Handler) http.Handler {
@@ -40,10 +44,9 @@
 func TestThenWorksWithNoMiddleware(t *testing.T) {
 	assert.NotPanics(t, func() {
 		chain := New()
-		app := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {})
-		final := chain.Then(app)
+		final := chain.Then(testApp)
 
-		assert.Equal(t, final, app)
+		assert.Equal(t, final, testApp)
 	})
 }
 
@@ -56,11 +59,8 @@
 	t1 := tagMiddleware("t1\n")
 	t2 := tagMiddleware("t2\n")
 	t3 := tagMiddleware("t3\n")
-	app := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
-		w.Write([]byte("app\n"))
-	})
 
-	chained := New(t1, t2, t3).Then(app)
+	chained := New(t1, t2, t3).Then(testApp)
 
 	w := httptest.NewRecorder()
 	r, err := http.NewRequest("GET", "/", nil)
@@ -72,3 +72,30 @@
 
 	assert.Equal(t, w.Body.String(), "t1\nt2\nt3\napp\n")
 }
+
+func TestAppendAddsHandlersCorrectly(t *testing.T) {
+	chain := New(tagMiddleware("t1\n"), tagMiddleware("t2\n"))
+	newChain := chain.Append(tagMiddleware("t3\n"), tagMiddleware("t4\n"))
+
+	assert.Equal(t, len(chain.constructors), 2)
+	assert.Equal(t, len(newChain.constructors), 4)
+
+	chained := newChain.Then(testApp)
+
+	w := httptest.NewRecorder()
+	r, err := http.NewRequest("GET", "/", nil)
+	if err != nil {
+		t.Fatal(err)
+	}
+
+	chained.ServeHTTP(w, r)
+
+	assert.Equal(t, w.Body.String(), "t1\nt2\nt3\nt4\napp\n")
+}
+
+func TestAppendRespectsImmutability(t *testing.T) {
+	chain := New(tagMiddleware(""))
+	newChain := chain.Append(tagMiddleware(""))
+
+	assert.NotEqual(t, &chain.constructors[0], &newChain.constructors[0])
+}
