diff --git a/reducer.go b/reducer.go
index <HASH>..<HASH> 100644
--- a/reducer.go
+++ b/reducer.go
@@ -104,9 +104,7 @@ type Chain struct {
 }
 
 func NewChain(reducers ...Reducer) *Chain {
-	chain := &Chain{
-		reducers: reducers,
-	}
+	chain := new(Chain)
 	for _, r := range reducers {
 		if f, ok := interface{}(r).(Filter); ok {
 			chain.filters = append(chain.filters, f)
diff --git a/reducer_test.go b/reducer_test.go
index <HASH>..<HASH> 100644
--- a/reducer_test.go
+++ b/reducer_test.go
@@ -105,6 +105,7 @@ func TestReducer(t *testing.T) {
 
 			Convey("Chain reducer", func() {
 				reducer := NewChain(&Avg{[]string{"foo", "bar"}}, &Count{})
+				So(len(reducer.reducers), ShouldEqual, 2)
 				reducer.Reduce(input, output)
 
 				result, ok := <-output
@@ -134,6 +135,7 @@ func TestReducer(t *testing.T) {
 					&Sum{[]string{"foo", "bar"}},
 					new(Count),
 				)
+				So(len(reducer.reducers), ShouldEqual, 2)
 				reducer.Reduce(input, output)
 
 				// Collect result entries from output channel to the map, because reading
fix reducers duplicates, fixes #<I>