Makes the runtime serialize alright.
diff --git a/src/objective-c/ProtoRPC/ProtoRPC.m b/src/objective-c/ProtoRPC/ProtoRPC.m
index 1b04684..4a2372e 100644
--- a/src/objective-c/ProtoRPC/ProtoRPC.m
+++ b/src/objective-c/ProtoRPC/ProtoRPC.m
@@ -33,7 +33,10 @@
 
 #import "ProtoRPC.h"
 
+#import <ProtocolBuffers/ProtocolBuffers.h>
 #import <RxLibrary/GRXWriteable.h>
+#import <RxLibrary/GRXWriter.h>
+#import <RxLibrary/GRXWriter+Transformations.h>
 
 @implementation ProtoRPC {
   id<GRXWriteable> _responseWriteable;
@@ -60,7 +63,13 @@
     [NSException raise:NSInvalidArgumentException
                 format:@"A protobuf class to parse the responses must be provided."];
   }
-  if ((self = [super initWithHost:host method:method requestsWriter:requestsWriter])) {
+  // A writer that serializes the proto messages to send.
+  id<GRXWriter> bytesWriter =
+      [[[GRXWriter alloc] initWithWriter:requestsWriter] map:^id(PBGeneratedMessage *proto) {
+        return [proto data];
+      }];
+  if ((self = [super initWithHost:host method:method requestsWriter:bytesWriter])) {
+    // A writeable that parses the proto messages received.
     _responseWriteable = [[GRXWriteable alloc] initWithValueHandler:^(NSData *value) {
       [responsesWriteable didReceiveValue:[responseClass parseFromData:value]];
     } completionHandler:^(NSError *errorOrNil) {
@@ -76,6 +85,7 @@
 
 - (void)startWithWriteable:(id<GRXWriteable>)writeable {
   [super startWithWriteable:writeable];
+  // Break retain cycles.
   _responseWriteable = nil;
 }
 @end