diff --git a/lib/Teepee.js b/lib/Teepee.js
index <HASH>..<HASH> 100644
--- a/lib/Teepee.js
+++ b/lib/Teepee.js
@@ -485,12 +485,11 @@ Teepee.prototype.request = function (options, cb) {
             currentRequest.end(body);
         }
 
-        var requestTimeoutId;
         if (typeof timeout === 'number') {
             currentRequest.setTimeout(timeout);
-            requestTimeoutId = setTimeout(function () {
+            currentRequest.on('timeout', function () {
                 handleRequestError(new socketErrors.ETIMEDOUT());
-            }, timeout);
+            });
         }
 
         function retryUponError(err) {
@@ -502,9 +501,6 @@ Teepee.prototype.request = function (options, cb) {
         }
 
         function handleRequestError(err) {
-            if (requestTimeoutId) {
-                clearTimeout(requestTimeoutId);
-            }
             currentRequest = null;
             if (eventEmitter.done) {
                 return;
@@ -520,10 +516,6 @@ Teepee.prototype.request = function (options, cb) {
         }
 
         currentRequest.on('error', handleRequestError).on('response', function (response) {
-            if (requestTimeoutId) {
-                clearTimeout(requestTimeoutId);
-            }
-
             currentResponse = response;
             var hasEnded = false,
                 responseError;
Timeout handling: Rely exclusively on the request object emitting a 'timeout' event, and don't use window.setTimeout.