diff --git a/CHANGES.txt b/CHANGES.txt
index b410256..4d88302 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -841,6 +841,9 @@
     MAPREDUCE-2515. MapReduce code references some deprecated options
     (Ari Rabkin via todd)
 
+    MAPREDUCE-2487. ChainReducer uses MAPPER_BY_VALUE instead of
+    REDUCER_BY_VALUE. (Devaraj K via todd)
+
 Release 0.21.1 - Unreleased
 
   NEW FEATURES
diff --git a/src/java/org/apache/hadoop/mapred/lib/Chain.java b/src/java/org/apache/hadoop/mapred/lib/Chain.java
index c14e9ad..d999812 100644
--- a/src/java/org/apache/hadoop/mapred/lib/Chain.java
+++ b/src/java/org/apache/hadoop/mapred/lib/Chain.java
@@ -160,7 +160,7 @@
 
     // store in the private reducer conf the input/output classes of the reducer
     // and if it works by value or by reference
-    reducerConf.setBoolean(MAPPER_BY_VALUE, byValue);
+    reducerConf.setBoolean(REDUCER_BY_VALUE, byValue);
 
     setReducerConf(jobConf, inputKeyClass, inputValueClass, outputKeyClass,
       outputValueClass, reducerConf, prefix);
diff --git a/src/test/mapred/org/apache/hadoop/mapred/lib/TestChain.java b/src/test/mapred/org/apache/hadoop/mapred/lib/TestChain.java
new file mode 100644
index 0000000..3eefa19
--- /dev/null
+++ b/src/test/mapred/org/apache/hadoop/mapred/lib/TestChain.java
@@ -0,0 +1,56 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.hadoop.mapred.lib;
+
+import junit.framework.Assert;
+
+import org.apache.hadoop.mapred.JobConf;
+import org.apache.hadoop.mapred.Reducer;
+import org.junit.Test;
+
+public class TestChain {
+  @Test
+  public void testSetReducerWithReducerByValueAsTrue() throws Exception {
+
+    JobConf jobConf = new JobConf();
+    JobConf reducerConf = new JobConf();
+    Chain.setReducer(jobConf, MyReducer.class, Object.class, Object.class,
+        Object.class, Object.class, true, reducerConf);
+    boolean reduceByValue = reducerConf.getBoolean("chain.reducer.byValue",
+        false);
+    Assert.assertEquals("It should set chain.reducer.byValue as true "
+        + "in reducerConf when we give value as true", true, reduceByValue);
+  }
+
+  @Test
+  public void testSetReducerWithReducerByValueAsFalse() throws Exception {
+
+    JobConf jobConf = new JobConf();
+    JobConf reducerConf = new JobConf();
+    Chain.setReducer(jobConf, MyReducer.class, Object.class, Object.class,
+        Object.class, Object.class, false, reducerConf);
+    boolean reduceByValue = reducerConf.getBoolean("chain.reducer.byValue",
+        true);
+    Assert.assertEquals("It should set chain.reducer.byValue as false "
+        + "in reducerConf when we give value as false", false, reduceByValue);
+  }
+
+  interface MyReducer extends Reducer<Object, Object, Object, Object> {
+
+  }
+}
