diff --git a/src/main/java/com/xtremelabs/robolectric/Robolectric.java b/src/main/java/com/xtremelabs/robolectric/Robolectric.java
index b8bc079..e7c12a0 100644
--- a/src/main/java/com/xtremelabs/robolectric/Robolectric.java
+++ b/src/main/java/com/xtremelabs/robolectric/Robolectric.java
@@ -695,6 +695,10 @@
         return (ShadowMenuInflater) shadowOf_(instance);
     }
 
+    public static ShadowMessage shadowOf(Message instance) {
+        return (ShadowMessage) shadowOf_(instance);
+    }
+
     public static ShadowMimeTypeMap shadowOf(MimeTypeMap instance) {
         return (ShadowMimeTypeMap) shadowOf_(instance);
     }
diff --git a/src/main/java/com/xtremelabs/robolectric/shadows/ShadowHandler.java b/src/main/java/com/xtremelabs/robolectric/shadows/ShadowHandler.java
index 74af258..20f8c8a 100644
--- a/src/main/java/com/xtremelabs/robolectric/shadows/ShadowHandler.java
+++ b/src/main/java/com/xtremelabs/robolectric/shadows/ShadowHandler.java
@@ -3,6 +3,8 @@
 import android.os.Handler;
 import android.os.Looper;
 import android.os.Message;
+
+import com.xtremelabs.robolectric.Robolectric;
 import com.xtremelabs.robolectric.internal.Implementation;
 import com.xtremelabs.robolectric.internal.Implements;
 import com.xtremelabs.robolectric.internal.RealObject;
@@ -95,6 +97,7 @@
 
     @Implementation
     public final boolean sendMessageDelayed(final Message msg, long delayMillis) {
+        Robolectric.shadowOf(msg).setWhen(Robolectric.shadowOf(looper).getScheduler().getCurrentTime()+delayMillis);
         messages.add(msg);
         postDelayed(new Runnable() {
             @Override
@@ -108,20 +111,6 @@
         return true;
     }
 
-    private final boolean sendMessageToFrontDelayed(final Message msg, long delayMillis) {
-        messages.add(0, msg);
-        postAtFrontOfQueue(new Runnable() {
-            @Override
-            public void run() {
-                if (messages.contains(msg)) {
-                    routeMessage(msg);
-                    messages.remove(msg);
-                }
-            }
-        });
-        return true;
-    }
-
     private void routeMessage(Message msg) {
         if(callback != null) {
             callback.handleMessage(msg);
@@ -143,8 +132,19 @@
     }
 
     @Implementation
-    public final boolean sendMessageAtFrontOfQueue(Message msg) {
-        return sendMessageToFrontDelayed(msg, 0L);
+    public final boolean sendMessageAtFrontOfQueue(final Message msg) {
+        Robolectric.shadowOf(msg).setWhen(Robolectric.shadowOf(looper).getScheduler().getCurrentTime());
+        messages.add(0, msg);
+        postAtFrontOfQueue(new Runnable() {
+            @Override
+            public void run() {
+                if (messages.contains(msg)) {
+                    routeMessage(msg);
+                    messages.remove(msg);
+                }
+            }
+        });
+        return true;
     }
 
     @Implementation
diff --git a/src/main/java/com/xtremelabs/robolectric/shadows/ShadowMessage.java b/src/main/java/com/xtremelabs/robolectric/shadows/ShadowMessage.java
index 4c0b82d..d1588c0 100644
--- a/src/main/java/com/xtremelabs/robolectric/shadows/ShadowMessage.java
+++ b/src/main/java/com/xtremelabs/robolectric/shadows/ShadowMessage.java
@@ -1,6 +1,7 @@
 package com.xtremelabs.robolectric.shadows;
 
 
+import com.xtremelabs.robolectric.Robolectric;
 import com.xtremelabs.robolectric.internal.Implementation;
 import com.xtremelabs.robolectric.internal.Implements;
 import com.xtremelabs.robolectric.internal.RealObject;
@@ -13,6 +14,7 @@
 public class ShadowMessage {
     private Bundle data;
     private Handler target;
+    private long when;
 
     @RealObject
     private Message message;
@@ -107,4 +109,13 @@
     public void sendToTarget() {
         target.sendMessage(message);
     }
+
+    @Implementation
+    public long getWhen() {
+        return when;
+    }
+
+    public void setWhen(long when) {
+        this.when = when;
+    }
 }
diff --git a/src/test/java/com/xtremelabs/robolectric/shadows/HandlerTest.java b/src/test/java/com/xtremelabs/robolectric/shadows/HandlerTest.java
index 0109af8..8212be7 100644
--- a/src/test/java/com/xtremelabs/robolectric/shadows/HandlerTest.java
+++ b/src/test/java/com/xtremelabs/robolectric/shadows/HandlerTest.java
@@ -19,6 +19,9 @@
 import static org.junit.Assert.assertTrue;
 import static org.junit.Assert.assertFalse;
 
+import java.util.ArrayList;
+import java.util.List;
+
 @RunWith(WithTestDefaultsRunner.class)
 public class HandlerTest {
     private Transcript transcript;
@@ -340,6 +343,33 @@
         assertThat(m4.obj, equalTo((Object)"foo"));
     }
 
+    @Test
+    public void shouldSetWhenOnMessage() throws Exception {
+        final List<Message>  msgs = new ArrayList<Message>();
+        Handler h = new Handler(new Handler.Callback() {
+            @Override
+            public boolean handleMessage(Message msg) {
+                msgs.add(msg);
+                return false;
+            }
+        });
+
+        h.sendEmptyMessage(0);
+        h.sendEmptyMessageDelayed(0, 4000l);
+        Robolectric.getUiThreadScheduler().advanceToLastPostedRunnable();
+        h.sendEmptyMessageDelayed(0, 12000l);
+        Robolectric.getUiThreadScheduler().advanceToLastPostedRunnable();
+        assertThat(msgs.size(), equalTo(3));
+
+        Message m0 = msgs.get(0);
+        Message m1 = msgs.get(1);
+        Message m2 = msgs.get(2);
+
+        assertThat(m0.getWhen(), equalTo(0l));
+        assertThat(m1.getWhen(), equalTo(4000l));
+        assertThat(m2.getWhen(), equalTo(16000l));
+    }
+
     private class Say implements Runnable {
         private String event;
 
