diff --git a/lib/instrumentation/http-shared.js b/lib/instrumentation/http-shared.js
index <HASH>..<HASH> 100644
--- a/lib/instrumentation/http-shared.js
+++ b/lib/instrumentation/http-shared.js
@@ -4,6 +4,7 @@ var url = require('url')
 var semver = require('semver')
 var eos = require('end-of-stream')
 var debug = require('debug')('opbeat')
+var shimmer = require('./shimmer')
 
 var SUPPORT_PREFINISH = semver.satisfies(process.version, '>=0.12')
 
@@ -106,9 +107,14 @@ exports.traceOutgoingRequest = function (agent, moduleName) {
 
       function onresponse (res) {
         debug('intercepted http.ClientRequest response event %o', { uuid: uuid })
-        res.on('end', function () {
-          debug('intercepted http.IncomingMessage end event %o', { uuid: uuid })
-          trace.end()
+        shimmer.wrap(res, 'emit', function wrapEmit (original) {
+          return function wrappedEmit (event) {
+            if (event === 'end') {
+              debug('intercepted http.IncomingMessage end event %o', { uuid: uuid })
+              trace.end()
+            }
+            return original.apply(this, arguments)
+          }
         })
       }
     }
http/https: end trace before response end event callback is called