Index: libcfa/src/concurrency/actor.hfa
===================================================================
--- libcfa/src/concurrency/actor.hfa	(revision 1e538fbff26e7d643c0b2a4853be8d6d7d5f8781)
+++ libcfa/src/concurrency/actor.hfa	(revision b065dbb21c03c0917fb344b3cead90c52cf9d41b)
@@ -46,9 +46,7 @@
 enum allocation { Nodelete, Delete, Destroy, Finished }; // allocation status
 
-typedef allocation (*__receive_fn)(actor &, message &);
+typedef allocation (*__receive_fn)(actor &, message &, actor **, message **);
 struct request {
-    actor * base_receiver;
     actor * receiver;
-    message * base_msg;
     message * msg;
     __receive_fn fn;
@@ -59,8 +57,6 @@
 };
 static inline void ?{}( request & this ) {}
-static inline void ?{}( request & this, actor * base_receiver, actor * receiver, message * base_msg, message * msg, __receive_fn fn ) {
-    this.base_receiver = base_receiver;
+static inline void ?{}( request & this, actor * receiver, message * msg, __receive_fn fn ) {
     this.receiver = receiver;
-    this.base_msg = base_msg;
     this.msg = msg;
     this.fn = fn;
@@ -460,7 +456,10 @@
 static inline void deliver_request( request & this ) {
     DEBUG_ABORT( this.receiver->ticket == (unsigned long int)MAX, "Attempted to send message to deleted/dead actor\n" );
-    this.base_receiver->allocation_ = this.fn( *this.receiver, *this.msg );
-    check_message( *this.base_msg );
-    check_actor( *this.base_receiver );
+    actor * base_actor;
+    message * base_msg;
+    allocation temp = this.fn( *this.receiver, *this.msg, &base_actor, &base_msg );
+    base_actor->allocation_ = temp;
+    check_message( *base_msg );
+    check_actor( *base_actor );
 }
 
