diff --git a/CHANGES.txt b/CHANGES.txt
index 2bf1242..742b012 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -283,6 +283,8 @@
     MAPREDUCE-2573. Fix new findbugs warning introduced by MAPREDUCE-2494.
     (Robert Joseph Evans via todd)
 
+    MAPREDUCE-2581. Spelling errors in log messages. (Tim Sell via eli)
+
 Release 0.22.0 - Unreleased
 
   INCOMPATIBLE CHANGES
diff --git a/src/contrib/mumak/src/java/org/apache/hadoop/mapred/SimulatorTaskTracker.java b/src/contrib/mumak/src/java/org/apache/hadoop/mapred/SimulatorTaskTracker.java
index 5e47763..00f7a42 100644
--- a/src/contrib/mumak/src/java/org/apache/hadoop/mapred/SimulatorTaskTracker.java
+++ b/src/contrib/mumak/src/java/org/apache/hadoop/mapred/SimulatorTaskTracker.java
@@ -102,7 +102,7 @@
    */
   private boolean firstHeartbeat = true;
 
-  // last heartbeat response recieved
+  // last heartbeat response received
   private short heartbeatResponseId = -1;
 
   /**
diff --git a/src/java/org/apache/hadoop/mapred/InterTrackerProtocol.java b/src/java/org/apache/hadoop/mapred/InterTrackerProtocol.java
index d5f9977..9887768 100644
--- a/src/java/org/apache/hadoop/mapred/InterTrackerProtocol.java
+++ b/src/java/org/apache/hadoop/mapred/InterTrackerProtocol.java
@@ -92,7 +92,7 @@
    * 
    * {@link TaskTracker} must also indicate whether this is the first 
    * interaction (since state refresh) and acknowledge the last response
-   * it recieved from the {@link JobTracker} 
+   * it received from the {@link JobTracker} 
    * 
    * @param status the status update
    * @param restarted <code>true</code> if the process has just started or 
diff --git a/src/java/org/apache/hadoop/mapred/MapTask.java b/src/java/org/apache/hadoop/mapred/MapTask.java
index 0310fc4..21599c2 100644
--- a/src/java/org/apache/hadoop/mapred/MapTask.java
+++ b/src/java/org/apache/hadoop/mapred/MapTask.java
@@ -894,12 +894,12 @@
       reporter.progress();
       if (key.getClass() != keyClass) {
         throw new IOException("Type mismatch in key from map: expected "
-                              + keyClass.getName() + ", recieved "
+                              + keyClass.getName() + ", received "
                               + key.getClass().getName());
       }
       if (value.getClass() != valClass) {
         throw new IOException("Type mismatch in value from map: expected "
-                              + valClass.getName() + ", recieved "
+                              + valClass.getName() + ", received "
                               + value.getClass().getName());
       }
       if (partition < 0 || partition >= partitions) {
diff --git a/src/java/org/apache/hadoop/mapred/TaskInProgress.java b/src/java/org/apache/hadoop/mapred/TaskInProgress.java
index 2895c2c..0a703c9 100644
--- a/src/java/org/apache/hadoop/mapred/TaskInProgress.java
+++ b/src/java/org/apache/hadoop/mapred/TaskInProgress.java
@@ -600,7 +600,7 @@
       TaskStatus.State oldState = oldStatus.getRunState();
       TaskStatus.State newState = status.getRunState();
           
-      // We should never recieve a duplicate success/failure/killed
+      // We should never receive a duplicate success/failure/killed
       // status update for the same taskid! This is a safety check, 
       // and is addressed better at the TaskTracker to ensure this.
       // @see {@link TaskTracker.transmitHeartbeat()}
diff --git a/src/java/org/apache/hadoop/mapred/TaskTracker.java b/src/java/org/apache/hadoop/mapred/TaskTracker.java
index a07e626..65f2a00 100644
--- a/src/java/org/apache/hadoop/mapred/TaskTracker.java
+++ b/src/java/org/apache/hadoop/mapred/TaskTracker.java
@@ -185,7 +185,7 @@
 
   private TrackerDistributedCacheManager distributedCacheManager;
     
-  // last heartbeat response recieved
+  // last heartbeat response received
   short heartbeatResponseId = -1;
   
   static final String TASK_CLEANUP_SUFFIX = ".cleanup";
@@ -1859,7 +1859,7 @@
       for (TaskTrackerAction action : actions) {
         if (action.getActionId() == 
             TaskTrackerAction.ActionType.REINIT_TRACKER) {
-          LOG.info("Recieved ReinitTrackerAction from JobTracker");
+          LOG.info("Received ReinitTrackerAction from JobTracker");
           return true;
         }
       }
diff --git a/src/test/mapred/org/apache/hadoop/fs/slive/DataVerifier.java b/src/test/mapred/org/apache/hadoop/fs/slive/DataVerifier.java
index c8897f3..a09281c 100644
--- a/src/test/mapred/org/apache/hadoop/fs/slive/DataVerifier.java
+++ b/src/test/mapred/org/apache/hadoop/fs/slive/DataVerifier.java
@@ -182,11 +182,11 @@
       cmpBuf.put(buf.get());
       if (!cmpBuf.hasRemaining()) {
         cmpBuf.rewind();
-        long recievedData = cmpBuf.getLong();
+        long receivedData = cmpBuf.getLong();
         cmpBuf.rewind();
         long expected = hasher.generate(hashOffset);
         hashOffset += BYTES_PER_LONG;
-        if (recievedData == expected) {
+        if (receivedData == expected) {
           ++chunksSame;
         } else {
           ++chunksDifferent;
diff --git a/src/test/mapred/org/apache/hadoop/mapred/SortValidator.java b/src/test/mapred/org/apache/hadoop/mapred/SortValidator.java
index 180b5e4..381d42e 100644
--- a/src/test/mapred/org/apache/hadoop/mapred/SortValidator.java
+++ b/src/test/mapred/org/apache/hadoop/mapred/SortValidator.java
@@ -247,7 +247,7 @@
             // Sanity check
             if (keyClass != key.getClass()) {
               throw new IOException("Type mismatch in key: expected " +
-                                    keyClass.getName() + ", recieved " +
+                                    keyClass.getName() + ", received " +
                                     key.getClass().getName());
             }
             
diff --git a/src/test/mapred/org/apache/hadoop/mapred/TestKillSubProcesses.java b/src/test/mapred/org/apache/hadoop/mapred/TestKillSubProcesses.java
index 3f128e5..00cf61c 100644
--- a/src/test/mapred/org/apache/hadoop/mapred/TestKillSubProcesses.java
+++ b/src/test/mapred/org/apache/hadoop/mapred/TestKillSubProcesses.java
@@ -472,7 +472,7 @@
   }
   
   /**
-   * Mapper that fails when recieves a signal. Signal is existence of a file.
+   * Mapper that fails when receives a signal. Signal is existence of a file.
    */
   static class FailingMapperWithChildren extends MapperWithChildren {
     public void configure(JobConf conf) {
