diff --git a/httprl.module b/httprl.module
index c19a278..6dc1ff4 100644
--- a/httprl.module
+++ b/httprl.module
@@ -866,45 +866,48 @@ function httprl_request($urls, $options = array()) {
     $result->chunk_size = 1024;
     $result->data = '';
 
+    // Copy Options.
+    $these_options = $options;
+
     // Setup the default options.
-    httprl_set_default_options($options);
+    httprl_set_default_options($these_options);
 
     // Parse the given URL and skip if an error occurred.
     $uri = httprl_parse_url($url, $result);
     if (isset($result->error)) {
       // Put all variables into an array for easy alterations.
-      $connections[] = array(NULL, NULL, $uri, $url, $options, $result, NULL);
+      $connections[] = array(NULL, NULL, $uri, $url, $these_options, $result, NULL);
       $return[$url] = FALSE;
       // Stop processing this request as we have encountered an error.
       continue;
     }
 
     // Set the proxy server if one is required.
-    $proxy_server = httprl_setup_proxy($uri, $options, $url);
+    $proxy_server = httprl_setup_proxy($uri, $these_options, $url);
     // Create the socket string and skip if an error occurred.
-    $socket = httprl_set_socket($uri, $options, $proxy_server, $result, $return, $url);
+    $socket = httprl_set_socket($uri, $these_options, $proxy_server, $result, $return, $url);
     if (isset($result->error)) {
       // Put all variables into an array for easy alterations.
-      $connections[] = array($socket, NULL, $uri, $url, $options, $result, NULL);
+      $connections[] = array($socket, NULL, $uri, $url, $these_options, $result, NULL);
       $return[$url] = FALSE;
       // Stop processing this request as we have encountered an error.
       continue;
     }
 
     // Use a sync of async connection.
-    $flags = httprl_set_connection_flag($options, $uri);
+    $flags = httprl_set_connection_flag($these_options, $uri);
     // If any data is given, do the right things to this request so it works.
-    httprl_handle_data($options);
+    httprl_handle_data($these_options);
     // Build the request string.
-    $request = httprl_build_request_string($uri, $options);
+    $request = httprl_build_request_string($uri, $these_options);
 
     // If a range header is set, calculate how many bytes need to be downloaded.
-    if (!empty($options['headers']['Range'])) {
-      $options['max_data_size'] = '';
+    if (!empty($these_options['headers']['Range'])) {
+      $these_options['max_data_size'] = '';
     }
 
     // Put all variables into an array for easy alterations.
-    $connections[] = array($socket, $flags, $uri, $url, $options, $result, $request);
+    $connections[] = array($socket, $flags, $uri, $url, $these_options, $result, $request);
     $return[$url] = TRUE;
   }
 
@@ -1018,6 +1021,7 @@ function httprl_send_request($results = NULL) {
     $start_time_this_run = $now;
     $global_time = $global_timeout - ($start_time_this_run - $start_time_global);
 
+    $reset_empty_runs = FALSE;
     // Inspect each stream, checking for timeouts and connection limits.
     foreach ($responses as $id => &$result) {
       // See if function timed out.
@@ -1049,7 +1053,9 @@ function httprl_send_request($results = NULL) {
         // No streams are ready from stream_select, See if end server has
         // dropped the connection, or has failed to make the connection.
         $socket_name = 'Not empty.';
-        if ($empty_runs > 10) {
+        if ($empty_runs > 32) {
+          // If nothing has happened after 32 runs, see if the connection has
+          // been made.
           $socket_name = stream_socket_get_name($result->fp, TRUE);
         }
 
@@ -1070,6 +1076,7 @@ function httprl_send_request($results = NULL) {
 
           // Do post processing on the stream.
           httprl_post_processing($id, $responses, $output, $timeout);
+          $reset_empty_runs = TRUE;
           continue;
         }
       }
@@ -1078,6 +1085,8 @@ function httprl_send_request($results = NULL) {
       if (!isset($result->fp) && $result->status != 'in progress') {
         // Do post processing on the stream.
         httprl_post_processing($id, $responses, $output);
+        $reset_empty_runs = TRUE;
+        continue;
       }
 
       // Set the connection limits for this run.
@@ -1134,6 +1143,10 @@ function httprl_send_request($results = NULL) {
     if (empty($this_run)) {
       continue;
     }
+    if ($reset_empty_runs) {
+      $empty_runs = 0;
+      $reset_empty_runs = FALSE;
+    }
 
 
 
@@ -1283,9 +1296,9 @@ function httprl_send_request($results = NULL) {
     else {
       $empty_runs++;
     }
-    if ($empty_runs > 100) {
+    if ($empty_runs > 400) {
       // If stream_select hasn't returned a valid read or write stream after
-      // 2.5+ seconds, error out.
+      // 10+ seconds, error out.
       foreach ($this_run as $id => $fp) {
         // stream_select timed out & the request is not done.
         $responses[$id]->error = $t('stream_select() timed out.');
