diff --git a/CGDWebServer/GCDWebServer.m b/CGDWebServer/GCDWebServer.m
index db45a48..f63fe62 100644
--- a/CGDWebServer/GCDWebServer.m
+++ b/CGDWebServer/GCDWebServer.m
@@ -50,9 +50,9 @@
   if (extension.length) {
     mimeType = [_overrides objectForKey:extension];
     if (mimeType == nil) {
-      CFStringRef uti = UTTypeCreatePreferredIdentifierForTag(kUTTagClassFilenameExtension, (CFStringRef)extension, NULL);
+      CFStringRef uti = UTTypeCreatePreferredIdentifierForTag(kUTTagClassFilenameExtension, (ARC_BRIDGE CFStringRef)extension, NULL);
       if (uti) {
-        mimeType = [(id)UTTypeCopyPreferredTagWithClass(uti, kUTTagClassMIMEType) autorelease];
+        mimeType = ARC_BRIDGE_RELEASE(UTTypeCopyPreferredTagWithClass(uti, kUTTagClassMIMEType));
         CFRelease(uti);
       }
     }
@@ -61,8 +61,8 @@
 }
 
 NSString* GCDWebServerUnescapeURLString(NSString* string) {
-  return [(id)CFURLCreateStringByReplacingPercentEscapesUsingEncoding(kCFAllocatorDefault, (CFStringRef)string, CFSTR(""),
-                                                                      kCFStringEncodingUTF8) autorelease];
+  return ARC_BRIDGE_RELEASE(CFURLCreateStringByReplacingPercentEscapesUsingEncoding(kCFAllocatorDefault, (CFStringRef)string, CFSTR(""),
+                                                                                   kCFStringEncodingUTF8));
 }
 
 NSDictionary* GCDWebServerParseURLEncodedForm(NSString* form) {
@@ -90,7 +90,7 @@
     }
     [scanner setScanLocation:([scanner scanLocation] + 1)];
   }
-  [scanner release];
+  ARC_RELEASE(scanner);
   return parameters;
 }
 
@@ -105,17 +105,17 @@
 
 - (id)initWithMatchBlock:(GCDWebServerMatchBlock)matchBlock processBlock:(GCDWebServerProcessBlock)processBlock {
   if ((self = [super init])) {
-    _matchBlock = Block_copy(matchBlock);
-    _processBlock = Block_copy(processBlock);
+    _matchBlock = [matchBlock copy];
+    _processBlock = [processBlock copy];
   }
   return self;
 }
 
 - (void)dealloc {
-  Block_release(_matchBlock);
-  Block_release(_processBlock);
+  ARC_RELEASE(_matchBlock);
+  ARC_RELEASE(_processBlock);
   
-  [super dealloc];
+  ARC_DEALLOC(super);
 }
 
 @end
@@ -140,16 +140,16 @@
     [self stop];
   }
   
-  [_handlers release];
+  ARC_RELEASE(_handlers);
   
-  [super dealloc];
+  ARC_DEALLOC(super);
 }
 
 - (void)addHandlerWithMatchBlock:(GCDWebServerMatchBlock)matchBlock processBlock:(GCDWebServerProcessBlock)handlerBlock {
   DCHECK(_source == NULL);
   GCDWebServerHandler* handler = [[GCDWebServerHandler alloc] initWithMatchBlock:matchBlock processBlock:handlerBlock];
   [_handlers insertObject:handler atIndex:0];
-  [handler release];
+  ARC_RELEASE(handler);
 }
 
 - (void)removeAllHandlers {
@@ -212,8 +212,12 @@
               
               NSData* data = [NSData dataWithBytes:&addr length:addrlen];
               Class connectionClass = [[self class] connectionClass];
-              GCDWebServerConnection* connection = [[connectionClass alloc] initWithServer:self address:data socket:socket];
-              [connection release];  // Connection will automatically retain itself while opened
+              GCDWebServerConnection* connection = [[connectionClass alloc] initWithServer:self address:data socket:socket];  // Connection will automatically retain itself while opened
+#if __has_feature(objc_arc)
+              [connection self];  // Prevent compiler from complaining about unused variable / useless statement
+#else
+              [connection release];
+#endif
             } else {
               LOG_ERROR(@"Failed accepting socket (%i): %s", errno, strerror(errno));
             }
@@ -235,9 +239,9 @@
         }
         
         if (name) {
-          _service = CFNetServiceCreate(kCFAllocatorDefault, CFSTR("local."), CFSTR("_http._tcp"), (CFStringRef)name, _port);
+          _service = CFNetServiceCreate(kCFAllocatorDefault, CFSTR("local."), CFSTR("_http._tcp"), (ARC_BRIDGE CFStringRef)name, _port);
           if (_service) {
-            CFNetServiceClientContext context = {0, self, NULL, NULL, NULL};
+            CFNetServiceClientContext context = {0, (ARC_BRIDGE void*)self, NULL, NULL, NULL};
             CFNetServiceSetClient(_service, _NetServiceClientCallBack, &context);
             CFNetServiceScheduleWithRunLoop(_service, CFRunLoopGetMain(), kCFRunLoopCommonModes);
             CFStreamError error = {0};
@@ -326,7 +330,7 @@
 - (void)addDefaultHandlerForMethod:(NSString*)method requestClass:(Class)class processBlock:(GCDWebServerProcessBlock)block {
   [self addHandlerWithMatchBlock:^GCDWebServerRequest *(NSString* requestMethod, NSURL* requestURL, NSDictionary* requestHeaders, NSString* urlPath, NSDictionary* urlQuery) {
     
-    return [[[class alloc] initWithMethod:requestMethod url:requestURL headers:requestHeaders path:urlPath query:urlQuery] autorelease];
+    return ARC_AUTORELEASE([[class alloc] initWithMethod:requestMethod url:requestURL headers:requestHeaders path:urlPath query:urlQuery]);
     
   } processBlock:block];
 }
@@ -363,6 +367,11 @@
 
 - (void)addHandlerForBasePath:(NSString*)basePath localPath:(NSString*)localPath indexFilename:(NSString*)indexFilename cacheAge:(NSUInteger)cacheAge {
   if ([basePath hasPrefix:@"/"] && [basePath hasSuffix:@"/"]) {
+#if __has_feature(objc_arc)
+    __unsafe_unretained GCDWebServer* server = self;
+#else
+    GCDWebServer* server = self;
+#endif
     [self addHandlerWithMatchBlock:^GCDWebServerRequest *(NSString* requestMethod, NSURL* requestURL, NSDictionary* requestHeaders, NSString* urlPath, NSDictionary* urlQuery) {
       
       if (![requestMethod isEqualToString:@"GET"]) {
@@ -371,7 +380,7 @@
       if (![urlPath hasPrefix:basePath]) {
         return nil;
       }
-      return [[[GCDWebServerRequest alloc] initWithMethod:requestMethod url:requestURL headers:requestHeaders path:urlPath query:urlQuery] autorelease];
+      return ARC_AUTORELEASE([[GCDWebServerRequest alloc] initWithMethod:requestMethod url:requestURL headers:requestHeaders path:urlPath query:urlQuery]);
       
     } processBlock:^GCDWebServerResponse *(GCDWebServerRequest* request) {
       
@@ -383,12 +392,12 @@
           if (indexFilename) {
             NSString* indexPath = [filePath stringByAppendingPathComponent:indexFilename];
             if ([[NSFileManager defaultManager] fileExistsAtPath:indexPath isDirectory:&isDirectory] && !isDirectory) {
-              return [self _responseWithContentsOfFile:indexPath];
+              return [server _responseWithContentsOfFile:indexPath];
             }
           }
-          response = [self _responseWithContentsOfDirectory:filePath];
+          response = [server _responseWithContentsOfDirectory:filePath];
         } else {
-          response = [self _responseWithContentsOfFile:filePath];
+          response = [server _responseWithContentsOfFile:filePath];
         }
       }
       if (response) {
@@ -414,7 +423,7 @@
       if ([urlPath caseInsensitiveCompare:path] != NSOrderedSame) {
         return nil;
       }
-      return [[[class alloc] initWithMethod:requestMethod url:requestURL headers:requestHeaders path:urlPath query:urlQuery] autorelease];
+      return ARC_AUTORELEASE([[class alloc] initWithMethod:requestMethod url:requestURL headers:requestHeaders path:urlPath query:urlQuery]);
       
     } processBlock:block];
   } else {
@@ -433,7 +442,7 @@
       if ([expression firstMatchInString:urlPath options:0 range:NSMakeRange(0, urlPath.length)] == nil) {
         return nil;
       }
-      return [[[class alloc] initWithMethod:requestMethod url:requestURL headers:requestHeaders path:urlPath query:urlQuery] autorelease];
+      return ARC_AUTORELEASE([[class alloc] initWithMethod:requestMethod url:requestURL headers:requestHeaders path:urlPath query:urlQuery]);
       
     } processBlock:block];
   } else {
diff --git a/CGDWebServer/GCDWebServerConnection.m b/CGDWebServer/GCDWebServerConnection.m
index 5d71d17..e93e9c5 100644
--- a/CGDWebServer/GCDWebServerConnection.m
+++ b/CGDWebServer/GCDWebServerConnection.m
@@ -84,7 +84,7 @@
         return true;
       });
       block(data);
-      [data release];
+      ARC_RELEASE(data);
     } else {
       block(nil);
     }
@@ -190,9 +190,15 @@
 }
 
 - (void)_writeData:(NSData*)data withCompletionBlock:(WriteDataCompletionBlock)block {
+#if !__has_feature(objc_arc)
   [data retain];
+#endif
   dispatch_data_t buffer = dispatch_data_create(data.bytes, data.length, dispatch_get_current_queue(), ^{
+#if __has_feature(objc_arc)
+    [data self];  // Keeps ARC from releasing data too early
+#else
     [data release];
+#endif
   });
   [self _writeBuffer:buffer withCompletionBlock:block];
   dispatch_release(buffer);
@@ -201,7 +207,7 @@
 - (void)_writeHeadersWithCompletionBlock:(WriteHeadersCompletionBlock)block {
   DCHECK(_responseMessage);
   CFDataRef message = CFHTTPMessageCopySerializedMessage(_responseMessage);
-  [self _writeData:(NSData*)message withCompletionBlock:block];
+  [self _writeData:(ARC_BRIDGE NSData*)message withCompletionBlock:block];
   CFRelease(message);
 }
 
@@ -245,7 +251,11 @@
   }
   if (_continueData == nil) {
     CFHTTPMessageRef message = CFHTTPMessageCreateResponse(kCFAllocatorDefault, 100, NULL, kCFHTTPVersion1_1);
+#if __has_feature(objc_arc)
+    _continueData = CFBridgingRelease(CFHTTPMessageCopySerializedMessage(message));
+#else
     _continueData = (NSData*)CFHTTPMessageCopySerializedMessage(message);
+#endif
     CFRelease(message);
     DCHECK(_continueData);
   }
@@ -253,7 +263,7 @@
     _dateFormatter = [[NSDateFormatter alloc] init];
     _dateFormatter.timeZone = [NSTimeZone timeZoneWithAbbreviation:@"GMT"];
     _dateFormatter.dateFormat = @"EEE',' dd MMM yyyy HH':'mm':'ss 'GMT'";
-    _dateFormatter.locale = [[[NSLocale alloc] initWithLocaleIdentifier:@"en_US"] autorelease];
+    _dateFormatter.locale = ARC_AUTORELEASE([[NSLocale alloc] initWithLocaleIdentifier:@"en_US"]);
     DCHECK(_dateFormatter);
   }
   if (_formatterQueue == NULL) {
@@ -265,10 +275,10 @@
 - (void)_initializeResponseHeadersWithStatusCode:(NSInteger)statusCode {
   _responseMessage = CFHTTPMessageCreateResponse(kCFAllocatorDefault, statusCode, NULL, kCFHTTPVersion1_1);
   CFHTTPMessageSetHeaderFieldValue(_responseMessage, CFSTR("Connection"), CFSTR("Close"));
-  CFHTTPMessageSetHeaderFieldValue(_responseMessage, CFSTR("Server"), (CFStringRef)[[_server class] serverName]);
+  CFHTTPMessageSetHeaderFieldValue(_responseMessage, CFSTR("Server"), (ARC_BRIDGE CFStringRef)[[_server class] serverName]);
   dispatch_sync(_formatterQueue, ^{
     NSString* date = [_dateFormatter stringFromDate:[NSDate date]];
-    CFHTTPMessageSetHeaderFieldValue(_responseMessage, CFSTR("Date"), (CFStringRef)date);
+    CFHTTPMessageSetHeaderFieldValue(_responseMessage, CFSTR("Date"), (ARC_BRIDGE CFStringRef)date);
   });
 }
 
@@ -288,23 +298,23 @@
   
   GCDWebServerResponse* response = [self processRequest:_request withBlock:_handler.processBlock];
   if (![response hasBody] || [response open]) {
-    _response = [response retain];
+    _response = ARC_RETAIN(response);
   }
   
   if (_response) {
     [self _initializeResponseHeadersWithStatusCode:_response.statusCode];
     NSUInteger maxAge = _response.cacheControlMaxAge;
     if (maxAge > 0) {
-      CFHTTPMessageSetHeaderFieldValue(_responseMessage, CFSTR("Cache-Control"), (CFStringRef)[NSString stringWithFormat:@"max-age=%i, public", (int)maxAge]);
+      CFHTTPMessageSetHeaderFieldValue(_responseMessage, CFSTR("Cache-Control"), (ARC_BRIDGE CFStringRef)[NSString stringWithFormat:@"max-age=%i, public", (int)maxAge]);
     } else {
       CFHTTPMessageSetHeaderFieldValue(_responseMessage, CFSTR("Cache-Control"), CFSTR("no-cache"));
     }
     [_response.additionalHeaders enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL* stop) {
-      CFHTTPMessageSetHeaderFieldValue(_responseMessage, (CFStringRef)key, (CFStringRef)obj);
+      CFHTTPMessageSetHeaderFieldValue(_responseMessage, (ARC_BRIDGE CFStringRef)key, (ARC_BRIDGE CFStringRef)obj);
     }];
     if ([_response hasBody]) {
-      CFHTTPMessageSetHeaderFieldValue(_responseMessage, CFSTR("Content-Type"), (CFStringRef)_response.contentType);
-      CFHTTPMessageSetHeaderFieldValue(_responseMessage, CFSTR("Content-Length"), (CFStringRef)[NSString stringWithFormat:@"%i", (int)_response.contentLength]);
+      CFHTTPMessageSetHeaderFieldValue(_responseMessage, CFSTR("Content-Type"), (ARC_BRIDGE CFStringRef)_response.contentType);
+      CFHTTPMessageSetHeaderFieldValue(_responseMessage, CFSTR("Content-Length"), (ARC_BRIDGE CFStringRef)[NSString stringWithFormat:@"%i", (int)_response.contentLength]);
     }
     [self _writeHeadersWithCompletionBlock:^(BOOL success) {
       
@@ -373,22 +383,22 @@
   [self _readHeadersWithCompletionBlock:^(NSData* extraData) {
     
     if (extraData) {
-      NSString* requestMethod = [[(id)CFHTTPMessageCopyRequestMethod(_requestMessage) autorelease] uppercaseString];
+      NSString* requestMethod = [ARC_BRIDGE_RELEASE(CFHTTPMessageCopyRequestMethod(_requestMessage)) uppercaseString];
       DCHECK(requestMethod);
-      NSURL* requestURL = [(id)CFHTTPMessageCopyRequestURL(_requestMessage) autorelease];
+      NSURL* requestURL = ARC_BRIDGE_RELEASE(CFHTTPMessageCopyRequestURL(_requestMessage));
       DCHECK(requestURL);
-      NSString* requestPath = GCDWebServerUnescapeURLString([(id)CFURLCopyPath((CFURLRef)requestURL) autorelease]);  // Don't use -[NSURL path] which strips the ending slash
+      NSString* requestPath = GCDWebServerUnescapeURLString(ARC_BRIDGE_RELEASE(CFURLCopyPath((CFURLRef)requestURL)));  // Don't use -[NSURL path] which strips the ending slash
       DCHECK(requestPath);
       NSDictionary* requestQuery = nil;
-      NSString* queryString = [(id)CFURLCopyQueryString((CFURLRef)requestURL, NULL) autorelease];  // Don't use -[NSURL query] to make sure query is not unescaped;
+      NSString* queryString = ARC_BRIDGE_RELEASE(CFURLCopyQueryString((CFURLRef)requestURL, NULL));  // Don't use -[NSURL query] to make sure query is not unescaped;
       if (queryString.length) {
         requestQuery = GCDWebServerParseURLEncodedForm(queryString);
         DCHECK(requestQuery);
       }
-      NSDictionary* requestHeaders = [(id)CFHTTPMessageCopyAllHeaderFields(_requestMessage) autorelease];
+      NSDictionary* requestHeaders = ARC_BRIDGE_RELEASE(CFHTTPMessageCopyAllHeaderFields(_requestMessage));
       DCHECK(requestHeaders);
       for (_handler in _server.handlers) {
-        _request = [_handler.matchBlock(requestMethod, requestURL, requestHeaders, requestPath, requestQuery) retain];
+        _request = ARC_RETAIN(_handler.matchBlock(requestMethod, requestURL, requestHeaders, requestPath, requestQuery));
         if (_request) {
           break;
         }
@@ -396,7 +406,7 @@
       if (_request) {
         if (_request.hasBody) {
           if (extraData.length <= _request.contentLength) {
-            NSString* expectHeader = [(id)CFHTTPMessageCopyHeaderFieldValue(_requestMessage, CFSTR("Expect")) autorelease];
+            NSString* expectHeader = ARC_BRIDGE_RELEASE(CFHTTPMessageCopyHeaderFieldValue(_requestMessage, CFSTR("Expect")));
             if (expectHeader) {
               if ([expectHeader caseInsensitiveCompare:@"100-continue"] == NSOrderedSame) {
                 [self _writeData:_continueData withCompletionBlock:^(BOOL success) {
@@ -432,8 +442,8 @@
 
 - (id)initWithServer:(GCDWebServer*)server address:(NSData*)address socket:(CFSocketNativeHandle)socket {
   if ((self = [super init])) {
-    _server = [server retain];
-    _address = [address retain];
+    _server = ARC_RETAIN(server);
+    _address = ARC_RETAIN(address);
     _socket = socket;
     
     [self open];
@@ -444,20 +454,20 @@
 - (void)dealloc {
   [self close];
   
-  [_server release];
-  [_address release];
+  ARC_RELEASE(_server);
+  ARC_RELEASE(_address);
   
   if (_requestMessage) {
     CFRelease(_requestMessage);
   }
-  [_request release];
+  ARC_RELEASE(_request);
   
   if (_responseMessage) {
     CFRelease(_responseMessage);
   }
-  [_response release];
+  ARC_RELEASE(_response);
   
-  [super dealloc];
+  ARC_DEALLOC(super);
 }
 
 @end
diff --git a/CGDWebServer/GCDWebServerPrivate.h b/CGDWebServer/GCDWebServerPrivate.h
index f20f2d9..8660564 100644
--- a/CGDWebServer/GCDWebServerPrivate.h
+++ b/CGDWebServer/GCDWebServerPrivate.h
@@ -25,6 +25,22 @@
  SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
+#if __has_feature(objc_arc)
+#define ARC_BRIDGE __bridge
+#define ARC_BRIDGE_RELEASE(__OBJECT__) CFBridgingRelease(__OBJECT__)
+#define ARC_RETAIN(__OBJECT__) __OBJECT__
+#define ARC_RELEASE(__OBJECT__)
+#define ARC_AUTORELEASE(__OBJECT__) __OBJECT__
+#define ARC_DEALLOC(__OBJECT__)
+#else
+#define ARC_BRIDGE
+#define ARC_BRIDGE_RELEASE(__OBJECT__) [(id)__OBJECT__ autorelease]
+#define ARC_RETAIN(__OBJECT__) [__OBJECT__ retain]
+#define ARC_RELEASE(__OBJECT__) [__OBJECT__ release]
+#define ARC_AUTORELEASE(__OBJECT__) [__OBJECT__ autorelease]
+#define ARC_DEALLOC(__OBJECT__) [__OBJECT__ dealloc]
+#endif
+
 #import "GCDWebServerConnection.h"
 
 #ifdef __GCDWEBSERVER_LOGGING_HEADER__
@@ -47,7 +63,7 @@
     NSString* message = [[NSString alloc] initWithFormat:format arguments:arguments];
     va_end(arguments);
     printf("[%s] %s\n", levelNames[level], [message UTF8String]);
-    [message release];
+    ARC_RELEASE(message);
   }
 }
 
diff --git a/CGDWebServer/GCDWebServerRequest.m b/CGDWebServer/GCDWebServerRequest.m
index b57f93e..00ce5f9 100644
--- a/CGDWebServer/GCDWebServerRequest.m
+++ b/CGDWebServer/GCDWebServerRequest.m
@@ -54,7 +54,7 @@
         [scanner scanUpToCharactersFromSet:[NSCharacterSet whitespaceCharacterSet] intoString:&value];
       }
     }
-    [scanner release];
+    ARC_RELEASE(scanner);
   }
   return value;
 }
@@ -75,16 +75,16 @@
 - (id)initWithMethod:(NSString*)method url:(NSURL*)url headers:(NSDictionary*)headers path:(NSString*)path query:(NSDictionary*)query {
   if ((self = [super init])) {
     _method = [method copy];
-    _url = [url retain];
-    _headers = [headers retain];
+    _url = ARC_RETAIN(url);
+    _headers = ARC_RETAIN(headers);
     _path = [path copy];
-    _query = [query retain];
+    _query = ARC_RETAIN(query);
     
-    _type = [[_headers objectForKey:@"Content-Type"] retain];
+    _type = ARC_RETAIN([_headers objectForKey:@"Content-Type"]);
     NSInteger length = [[_headers objectForKey:@"Content-Length"] integerValue];
     if (length < 0) {
       DNOT_REACHED();
-      [self release];
+      ARC_RELEASE(self);
       return nil;
     }
     _length = length;
@@ -97,14 +97,14 @@
 }
 
 - (void)dealloc {
-  [_method release];
-  [_url release];
-  [_headers release];
-  [_path release];
-  [_query release];
-  [_type release];
+  ARC_RELEASE(_method);
+  ARC_RELEASE(_url);
+  ARC_RELEASE(_headers);
+  ARC_RELEASE(_path);
+  ARC_RELEASE(_query);
+  ARC_RELEASE(_type);
   
-  [super dealloc];
+  ARC_DEALLOC(super);
 }
 
 - (BOOL)hasBody {
@@ -138,9 +138,9 @@
 
 - (void)dealloc {
   DCHECK(_data != nil);
-  [_data release];
+  ARC_RELEASE(_data);
   
-  [super dealloc];
+  ARC_DEALLOC(super);
 }
 
 - (BOOL)open {
@@ -168,7 +168,7 @@
 
 - (id)initWithMethod:(NSString*)method url:(NSURL*)url headers:(NSDictionary*)headers path:(NSString*)path query:(NSDictionary*)query {
   if ((self = [super initWithMethod:method url:url headers:headers path:path query:query])) {
-    _filePath = [[NSTemporaryDirectory() stringByAppendingPathComponent:[[NSProcessInfo processInfo] globallyUniqueString]] retain];
+    _filePath = ARC_RETAIN([NSTemporaryDirectory() stringByAppendingPathComponent:[[NSProcessInfo processInfo] globallyUniqueString]]);
   }
   return self;
 }
@@ -176,9 +176,9 @@
 - (void)dealloc {
   DCHECK(_file < 0);
   unlink([_filePath fileSystemRepresentation]);
-  [_filePath release];
+  ARC_RELEASE(_filePath);
   
-  [super dealloc];
+  ARC_DEALLOC(super);
 }
 
 - (BOOL)open {
@@ -210,9 +210,9 @@
 }
 
 - (void)dealloc {
-  [_arguments release];
+  ARC_RELEASE(_arguments);
   
-  [super dealloc];
+  ARC_DEALLOC(super);
 }
 
 - (BOOL)close {
@@ -222,8 +222,8 @@
   
   NSString* charset = _ExtractHeaderParameter(self.contentType, @"charset");
   NSString* string = [[NSString alloc] initWithData:self.data encoding:_StringEncodingFromCharset(charset)];
-  _arguments = [GCDWebServerParseURLEncodedForm(string) retain];
-  [string release];
+  _arguments = ARC_RETAIN(GCDWebServerParseURLEncodedForm(string));
+  ARC_RELEASE(string);
   
   return (_arguments ? YES : NO);
 }
@@ -239,7 +239,7 @@
     _contentType = [contentType copy];
     NSArray* components = [_contentType componentsSeparatedByString:@";"];
     if (components.count) {
-      _mimeType = [[[components objectAtIndex:0] lowercaseString] retain];
+      _mimeType = ARC_RETAIN([[components objectAtIndex:0] lowercaseString]);
     }
     if (_mimeType == nil) {
       _mimeType = @"text/plain";
@@ -249,10 +249,10 @@
 }
 
 - (void)dealloc {
-  [_contentType release];
-  [_mimeType release];
+  ARC_RELEASE(_contentType);
+  ARC_RELEASE(_mimeType);
   
-  [super dealloc];
+  ARC_DEALLOC(super);
 }
 
 @end
@@ -263,7 +263,7 @@
 
 - (id)initWithContentType:(NSString*)contentType data:(NSData*)data {
   if ((self = [super initWithContentType:contentType])) {
-    _data = [data retain];
+    _data = ARC_RETAIN(data);
     
     if ([self.mimeType hasPrefix:@"text/"]) {
       NSString* charset = _ExtractHeaderParameter(self.contentType, @"charset");
@@ -274,10 +274,10 @@
 }
 
 - (void)dealloc {
-  [_data release];
-  [_string release];
+  ARC_RELEASE(_data);
+  ARC_RELEASE(_string);
   
-  [super dealloc];
+  ARC_DEALLOC(super);
 }
 
 - (NSString*)description {
@@ -301,10 +301,10 @@
 - (void)dealloc {
   unlink([_temporaryPath fileSystemRepresentation]);
   
-  [_fileName release];
-  [_temporaryPath release];
+  ARC_RELEASE(_fileName);
+  ARC_RELEASE(_temporaryPath);
   
-  [super dealloc];
+  ARC_DEALLOC(super);
 }
 
 - (NSString*)description {
@@ -340,11 +340,12 @@
   if ((self = [super initWithMethod:method url:url headers:headers path:path query:query])) {
     NSString* boundary = _ExtractHeaderParameter(self.contentType, @"boundary");
     if (boundary) {
-      _boundary = [[[NSString stringWithFormat:@"--%@", boundary] dataUsingEncoding:NSASCIIStringEncoding] retain];
+      NSData* data = [[NSString stringWithFormat:@"--%@", boundary] dataUsingEncoding:NSASCIIStringEncoding];
+      _boundary = ARC_RETAIN(data);
     }
     if (_boundary == nil) {
       DNOT_REACHED();
-      [self release];
+      ARC_RELEASE(self);
       return nil;
     }
     
@@ -369,13 +370,13 @@
     NSRange range = [_parserData rangeOfData:_newlinesData options:0 range:NSMakeRange(0, _parserData.length)];
     if (range.location != NSNotFound) {
       
-      [_controlName release];
+      ARC_RELEASE(_controlName);
       _controlName = nil;
-      [_fileName release];
+      ARC_RELEASE(_fileName);
       _fileName = nil;
-      [_contentType release];
+      ARC_RELEASE(_contentType);
       _contentType = nil;
-      [_tmpPath release];
+      ARC_RELEASE(_tmpPath);
       _tmpPath = nil;
       CFHTTPMessageRef message = CFHTTPMessageCreateEmpty(kCFAllocatorDefault, true);
       const char* temp = "GET / HTTP/1.0\r\n";
@@ -384,7 +385,7 @@
       if (CFHTTPMessageIsHeaderComplete(message)) {
         NSString* controlName = nil;
         NSString* fileName = nil;
-        NSDictionary* headers = [(id)CFHTTPMessageCopyAllHeaderFields(message) autorelease];
+        NSDictionary* headers = ARC_BRIDGE_RELEASE(CFHTTPMessageCopyAllHeaderFields(message));
         NSString* contentDisposition = [headers objectForKey:@"Content-Disposition"];
         if ([[contentDisposition lowercaseString] hasPrefix:@"form-data;"]) {
           controlName = _ExtractHeaderParameter(contentDisposition, @"name");
@@ -392,7 +393,7 @@
         }
         _controlName = [controlName copy];
         _fileName = [fileName copy];
-        _contentType = [[headers objectForKey:@"Content-Type"] retain];
+        _contentType = ARC_RETAIN([headers objectForKey:@"Content-Type"]);
       }
       CFRelease(message);
       if (_controlName) {
@@ -434,7 +435,7 @@
                 _tmpFile = 0;
                 GCDWebServerMultiPartFile* file = [[GCDWebServerMultiPartFile alloc] initWithContentType:_contentType fileName:_fileName temporaryPath:_tmpPath];
                 [_files setObject:file forKey:_controlName];
-                [file release];
+                ARC_RELEASE(file);
               } else {
                 DNOT_REACHED();
                 success = NO;
@@ -443,14 +444,14 @@
               DNOT_REACHED();
               success = NO;
             }
-            [_tmpPath release];
+            ARC_RELEASE(_tmpPath);
             _tmpPath = nil;
           } else {
             NSData* data = [[NSData alloc] initWithBytesNoCopy:(void*)dataBytes length:dataLength freeWhenDone:NO];
             GCDWebServerMultiPartArgument* argument = [[GCDWebServerMultiPartArgument alloc] initWithContentType:_contentType data:data];
             [_arguments setObject:argument forKey:_controlName];
-            [argument release];
-            [data release];
+            ARC_RELEASE(argument);
+            ARC_RELEASE(data);
           }
         }
         
@@ -487,26 +488,31 @@
 
 - (BOOL)close {
   DCHECK(_parserData != nil);
-  [_parserData release];
+  ARC_RELEASE(_parserData);
   _parserData = nil;
-  [_controlName release];
-  [_fileName release];
-  [_contentType release];
+  ARC_RELEASE(_controlName);
+  _controlName = nil;
+  ARC_RELEASE(_fileName);
+  _fileName = nil;
+  ARC_RELEASE(_contentType);
+  _contentType = nil;
   if (_tmpFile > 0) {
     close(_tmpFile);
     unlink([_tmpPath fileSystemRepresentation]);
+    _tmpFile = 0;
   }
-  [_tmpPath release];
+  ARC_RELEASE(_tmpPath);
+  _tmpPath = nil;
   return (_parserState == kParserState_End ? YES : NO);
 }
 
 - (void)dealloc {
   DCHECK(_parserData == nil);
-  [_arguments release];
-  [_files release];
-  [_boundary release];
+  ARC_RELEASE(_arguments);
+  ARC_RELEASE(_files);
+  ARC_RELEASE(_boundary);
   
-  [super dealloc];
+  ARC_DEALLOC(super);
 }
 
 @end
diff --git a/CGDWebServer/GCDWebServerResponse.m b/CGDWebServer/GCDWebServerResponse.m
index 069fd30..a820ad3 100644
--- a/CGDWebServer/GCDWebServerResponse.m
+++ b/CGDWebServer/GCDWebServerResponse.m
@@ -33,8 +33,8 @@
 
 @synthesize contentType=_type, contentLength=_length, statusCode=_status, cacheControlMaxAge=_maxAge, additionalHeaders=_headers;
 
-+(GCDWebServerResponse*) response {
-  return [[[[self class] alloc] init] autorelease];
++ (GCDWebServerResponse*)response {
+  return ARC_AUTORELEASE([[[self class] alloc] init]);
 }
 
 - (id)init {
@@ -57,10 +57,10 @@
 }
 
 - (void)dealloc {
-  [_type release];
-  [_headers release];
+  ARC_RELEASE(_type);
+  ARC_RELEASE(_headers);
   
-  [super dealloc];
+  ARC_DEALLOC(super);
 }
 
 - (void)setValue:(NSString*)value forAdditionalHeader:(NSString*)header {
@@ -95,11 +95,11 @@
 @implementation GCDWebServerResponse (Extensions)
 
 + (GCDWebServerResponse*)responseWithStatusCode:(NSInteger)statusCode {
-  return [[[self alloc] initWithStatusCode:statusCode] autorelease];
+  return ARC_AUTORELEASE([[self alloc] initWithStatusCode:statusCode]);
 }
 
 + (GCDWebServerResponse*)responseWithRedirect:(NSURL*)location permanent:(BOOL)permanent {
-  return [[[self alloc] initWithRedirect:location permanent:permanent] autorelease];
+  return ARC_AUTORELEASE([[self alloc] initWithRedirect:location permanent:permanent]);
 }
 
 - (id)initWithStatusCode:(NSInteger)statusCode {
@@ -122,18 +122,18 @@
 @implementation GCDWebServerDataResponse
 
 + (GCDWebServerDataResponse*)responseWithData:(NSData*)data contentType:(NSString*)type {
-  return [[[[self class] alloc] initWithData:data contentType:type] autorelease];
+  return ARC_AUTORELEASE([[[self class] alloc] initWithData:data contentType:type]);
 }
 
 - (id)initWithData:(NSData*)data contentType:(NSString*)type {
   if (data == nil) {
     DNOT_REACHED();
-    [self release];
+    ARC_RELEASE(self);
     return nil;
   }
   
   if ((self = [super initWithContentType:type contentLength:data.length])) {
-    _data = [data retain];
+    _data = ARC_RETAIN(data);
     _offset = -1;
   }
   return self;
@@ -141,9 +141,9 @@
 
 - (void)dealloc {
   DCHECK(_offset < 0);
-  [_data release];
+  ARC_RELEASE(_data);
   
-  [super dealloc];
+  ARC_DEALLOC(super);
 }
 
 - (BOOL)open {
@@ -174,22 +174,22 @@
 @implementation GCDWebServerDataResponse (Extensions)
 
 + (GCDWebServerDataResponse*)responseWithText:(NSString*)text {
-  return [[[self alloc] initWithText:text] autorelease];
+  return ARC_AUTORELEASE([[self alloc] initWithText:text]);
 }
 
 + (GCDWebServerDataResponse*)responseWithHTML:(NSString*)html {
-  return [[[self alloc] initWithHTML:html] autorelease];
+  return ARC_AUTORELEASE([[self alloc] initWithHTML:html]);
 }
 
 + (GCDWebServerDataResponse*)responseWithHTMLTemplate:(NSString*)path variables:(NSDictionary*)variables {
-  return [[[self alloc] initWithHTMLTemplate:path variables:variables] autorelease];
+  return ARC_AUTORELEASE([[self alloc] initWithHTMLTemplate:path variables:variables]);
 }
 
 - (id)initWithText:(NSString*)text {
   NSData* data = [text dataUsingEncoding:NSUTF8StringEncoding];
   if (data == nil) {
     DNOT_REACHED();
-    [self release];
+    ARC_RELEASE(self);
     return nil;
   }
   return [self initWithData:data contentType:@"text/plain; charset=utf-8"];
@@ -199,7 +199,7 @@
   NSData* data = [html dataUsingEncoding:NSUTF8StringEncoding];
   if (data == nil) {
     DNOT_REACHED();
-    [self release];
+    ARC_RELEASE(self);
     return nil;
   }
   return [self initWithData:data contentType:@"text/html; charset=utf-8"];
@@ -211,7 +211,7 @@
     [html replaceOccurrencesOfString:[NSString stringWithFormat:@"%%%@%%", key] withString:value options:0 range:NSMakeRange(0, html.length)];
   }];
   id response = [self initWithHTML:html];
-  [html release];
+  ARC_RELEASE(html);
   return response;
 }
 
@@ -220,11 +220,11 @@
 @implementation GCDWebServerFileResponse
 
 + (GCDWebServerFileResponse*)responseWithFile:(NSString*)path {
-  return [[[[self class] alloc] initWithFile:path] autorelease];
+  return ARC_AUTORELEASE([[[self class] alloc] initWithFile:path]);
 }
 
 + (GCDWebServerFileResponse*)responseWithFile:(NSString*)path isAttachment:(BOOL)attachment {
-  return [[[[self class] alloc] initWithFile:path isAttachment:attachment] autorelease];
+  return ARC_AUTORELEASE([[[self class] alloc] initWithFile:path isAttachment:attachment]);
 }
 
 - (id)initWithFile:(NSString*)path {
@@ -235,7 +235,7 @@
   struct stat info;
   if (lstat([path fileSystemRepresentation], &info) || !(info.st_mode & S_IFREG)) {
     DNOT_REACHED();
-    [self release];
+    ARC_RELEASE(self);
     return nil;
   }
   NSString* type = GCDWebServerGetMimeTypeForExtension([path pathExtension]);
@@ -250,7 +250,7 @@
       NSString* fileName = data ? [[NSString alloc] initWithData:data encoding:NSISOLatin1StringEncoding] : nil;
       if (fileName) {
         [self setValue:[NSString stringWithFormat:@"attachment; filename=\"%@\"", fileName] forAdditionalHeader:@"Content-Disposition"];
-        [fileName release];
+        ARC_RELEASE(fileName);
       } else {
         DNOT_REACHED();
       }
@@ -261,9 +261,9 @@
 
 - (void)dealloc {
   DCHECK(_file <= 0);
-  [_path release];
+  ARC_RELEASE(_path);
   
-  [super dealloc];
+  ARC_DEALLOC(super);
 }
 
 - (BOOL)open {
diff --git a/GCDWebServer.xcodeproj/project.pbxproj b/GCDWebServer.xcodeproj/project.pbxproj
index 21032ed..aa68235 100644
--- a/GCDWebServer.xcodeproj/project.pbxproj
+++ b/GCDWebServer.xcodeproj/project.pbxproj
@@ -6,6 +6,21 @@
 	objectVersion = 46;
 	objects = {
 
+/* Begin PBXAggregateTarget section */
+		E274F876187E77D8009E0582 /* Build All */ = {
+			isa = PBXAggregateTarget;
+			buildConfigurationList = E274F879187E77D8009E0582 /* Build configuration list for PBXAggregateTarget "Build All" */;
+			buildPhases = (
+			);
+			dependencies = (
+				E274F87D187E77E5009E0582 /* PBXTargetDependency */,
+				E274F87B187E77E3009E0582 /* PBXTargetDependency */,
+			);
+			name = "Build All";
+			productName = "Build All";
+		};
+/* End PBXAggregateTarget section */
+
 /* Begin PBXBuildFile section */
 		E208D149167B76B700500836 /* CFNetwork.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E208D148167B76B700500836 /* CFNetwork.framework */; };
 		E208D1B3167BB17E00500836 /* CoreServices.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E208D1B2167BB17E00500836 /* CoreServices.framework */; };
@@ -25,6 +40,23 @@
 		E221129D1690B7BA0048D2B2 /* MobileCoreServices.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E221129C1690B7BA0048D2B2 /* MobileCoreServices.framework */; };
 /* End PBXBuildFile section */
 
+/* Begin PBXContainerItemProxy section */
+		E274F87A187E77E3009E0582 /* PBXContainerItemProxy */ = {
+			isa = PBXContainerItemProxy;
+			containerPortal = 08FB7793FE84155DC02AAC07 /* Project object */;
+			proxyType = 1;
+			remoteGlobalIDString = 8DD76FA90486AB0100D96B5E;
+			remoteInfo = "GCDWebServer (Mac)";
+		};
+		E274F87C187E77E5009E0582 /* PBXContainerItemProxy */ = {
+			isa = PBXContainerItemProxy;
+			containerPortal = 08FB7793FE84155DC02AAC07 /* Project object */;
+			proxyType = 1;
+			remoteGlobalIDString = E22112591690B4DE0048D2B2;
+			remoteInfo = "GCDWebServer (iOS)";
+		};
+/* End PBXContainerItemProxy section */
+
 /* Begin PBXFileReference section */
 		8DD76FB20486AB0100D96B5E /* GCDWebServer */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = GCDWebServer; sourceTree = BUILT_PRODUCTS_DIR; };
 		E208D148167B76B700500836 /* CFNetwork.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CFNetwork.framework; path = System/Library/Frameworks/CFNetwork.framework; sourceTree = SDKROOT; };
@@ -207,6 +239,7 @@
 			projectDirPath = "";
 			projectRoot = "";
 			targets = (
+				E274F876187E77D8009E0582 /* Build All */,
 				8DD76FA90486AB0100D96B5E /* GCDWebServer (Mac) */,
 				E22112591690B4DE0048D2B2 /* GCDWebServer (iOS) */,
 			);
@@ -241,11 +274,23 @@
 		};
 /* End PBXSourcesBuildPhase section */
 
+/* Begin PBXTargetDependency section */
+		E274F87B187E77E3009E0582 /* PBXTargetDependency */ = {
+			isa = PBXTargetDependency;
+			target = 8DD76FA90486AB0100D96B5E /* GCDWebServer (Mac) */;
+			targetProxy = E274F87A187E77E3009E0582 /* PBXContainerItemProxy */;
+		};
+		E274F87D187E77E5009E0582 /* PBXTargetDependency */ = {
+			isa = PBXTargetDependency;
+			target = E22112591690B4DE0048D2B2 /* GCDWebServer (iOS) */;
+			targetProxy = E274F87C187E77E5009E0582 /* PBXContainerItemProxy */;
+		};
+/* End PBXTargetDependency section */
+
 /* Begin XCBuildConfiguration section */
 		1DEB928608733DD80010E9CD /* Debug */ = {
 			isa = XCBuildConfiguration;
 			buildSettings = {
-				ARCHS = "$(ARCHS_STANDARD_32_64_BIT)";
 				MACOSX_DEPLOYMENT_TARGET = 10.7;
 				PRODUCT_NAME = GCDWebServer;
 				SDKROOT = macosx;
@@ -255,7 +300,6 @@
 		1DEB928708733DD80010E9CD /* Release */ = {
 			isa = XCBuildConfiguration;
 			buildSettings = {
-				ARCHS = "$(ARCHS_STANDARD_32_64_BIT)";
 				MACOSX_DEPLOYMENT_TARGET = 10.7;
 				PRODUCT_NAME = GCDWebServer;
 				SDKROOT = macosx;
@@ -265,6 +309,7 @@
 		1DEB928A08733DD80010E9CD /* Debug */ = {
 			isa = XCBuildConfiguration;
 			buildSettings = {
+				CLANG_ENABLE_OBJC_ARC = YES;
 				GCC_OPTIMIZATION_LEVEL = 0;
 				ONLY_ACTIVE_ARCH = YES;
 				WARNING_CFLAGS = "-Wall";
@@ -274,10 +319,8 @@
 		1DEB928B08733DD80010E9CD /* Release */ = {
 			isa = XCBuildConfiguration;
 			buildSettings = {
-				GCC_PREPROCESSOR_DEFINITIONS = (
-					NDEBUG,
-					NS_BLOCK_ASSERTIONS,
-				);
+				CLANG_ENABLE_OBJC_ARC = YES;
+				GCC_PREPROCESSOR_DEFINITIONS = NDEBUG;
 				WARNING_CFLAGS = "-Wall";
 			};
 			name = Release;
@@ -308,6 +351,20 @@
 			};
 			name = Release;
 		};
+		E274F877187E77D8009E0582 /* Debug */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				PRODUCT_NAME = "$(TARGET_NAME)";
+			};
+			name = Debug;
+		};
+		E274F878187E77D8009E0582 /* Release */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				PRODUCT_NAME = "$(TARGET_NAME)";
+			};
+			name = Release;
+		};
 /* End XCBuildConfiguration section */
 
 /* Begin XCConfigurationList section */
@@ -338,6 +395,15 @@
 			defaultConfigurationIsVisible = 0;
 			defaultConfigurationName = Release;
 		};
+		E274F879187E77D8009E0582 /* Build configuration list for PBXAggregateTarget "Build All" */ = {
+			isa = XCConfigurationList;
+			buildConfigurations = (
+				E274F877187E77D8009E0582 /* Debug */,
+				E274F878187E77D8009E0582 /* Release */,
+			);
+			defaultConfigurationIsVisible = 0;
+			defaultConfigurationName = Release;
+		};
 /* End XCConfigurationList section */
 	};
 	rootObject = 08FB7793FE84155DC02AAC07 /* Project object */;
diff --git a/Mac/main.m b/Mac/main.m
index 49e7f58..a84ad33 100644
--- a/Mac/main.m
+++ b/Mac/main.m
@@ -81,7 +81,9 @@
       
     }
     success = [webServer runWithPort:8080];
+#if !__has_feature(objc_arc)
     [webServer release];
+#endif
   }
   return success ? 0 : -1;
 }
diff --git a/iOS/AppDelegate.m b/iOS/AppDelegate.m
index 651e429..c05822c 100644
--- a/iOS/AppDelegate.m
+++ b/iOS/AppDelegate.m
@@ -29,12 +29,16 @@
 
 @implementation AppDelegate
 
+#if !__has_feature(objc_arc)
+
 - (void)dealloc {
   [_window release];
   
   [super dealloc];
 }
 
+#endif
+
 - (BOOL)application:(UIApplication*)application didFinishLaunchingWithOptions:(NSDictionary*)launchOptions {
   _window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
   _window.backgroundColor = [UIColor whiteColor];
