diff --git a/lib/celluloid/actor.rb b/lib/celluloid/actor.rb
index <HASH>..<HASH> 100644
--- a/lib/celluloid/actor.rb
+++ b/lib/celluloid/actor.rb
@@ -116,6 +116,9 @@ module Celluloid
       while @running
         begin
           message = @mailbox.receive
+        rescue MailboxShutdown
+          # If the mailbox detects shutdown, exit the actor
+          @running = false
         rescue ExitEvent => exit_event
           fiber = Fiber.new do
             initialize_thread_locals
diff --git a/lib/celluloid/io/mailbox.rb b/lib/celluloid/io/mailbox.rb
index <HASH>..<HASH> 100644
--- a/lib/celluloid/io/mailbox.rb
+++ b/lib/celluloid/io/mailbox.rb
@@ -45,7 +45,7 @@ module Celluloid
         message
       rescue DeadWakerError
         shutdown # force shutdown of the mailbox
-        raise MailboxError, "mailbox shutdown called during receive"
+        raise MailboxShutdown, "mailbox shutdown called during receive"
       end
 
       # Cleanup any IO objects this Mailbox may be using
diff --git a/lib/celluloid/mailbox.rb b/lib/celluloid/mailbox.rb
index <HASH>..<HASH> 100644
--- a/lib/celluloid/mailbox.rb
+++ b/lib/celluloid/mailbox.rb
@@ -2,6 +2,7 @@ require 'thread'
 
 module Celluloid
   class MailboxError < StandardError; end # you can't message the dead
+  class MailboxShutdown < StandardError; end # raised if the mailbox can no longer be used
 
   # Actors communicate with asynchronous messages. Messages are buffered in
   # Mailboxes until Actors can act upon them.
Detect mailbox shutdowns and handle them gracefully