diff --git a/lib/node-http-proxy/http-proxy.js b/lib/node-http-proxy/http-proxy.js
index 704eec903127d8712784557e7804ca79e0f53677..9a4f3087a7ceda16914a49252e6e95c433c40641 100644
--- a/lib/node-http-proxy/http-proxy.js
+++ b/lib/node-http-proxy/http-proxy.js
@@ -437,6 +437,8 @@ HttpProxy.prototype.proxyWebSocketRequest = function (req, socket, head, buffer)
     }
   }
 
+  self.emit('websocket:start', req, socket, head, this.target);
+
   //
   // Helper function for setting appropriate socket values:
   // 1. Turn of all bufferings
diff --git a/lib/node-http-proxy/routing-proxy.js b/lib/node-http-proxy/routing-proxy.js
index 187cb42203bcfb9e039b6432aa5210ef4367cf91..e8bc0cfb73de0361d881c2a88b7f59df07e5c84f 100644
--- a/lib/node-http-proxy/routing-proxy.js
+++ b/lib/node-http-proxy/routing-proxy.js
@@ -111,9 +111,17 @@ RoutingProxy.prototype.add = function (options) {
     this.proxies[key].on('webSocketProxyError', this.emit.bind(this, 'webSocketProxyError'));
   }
 
-  this.proxies[key].on('start', this.emit.bind(this, 'start'));
-  this.proxies[key].on('forward', this.emit.bind(this, 'forward'));
-  this.proxies[key].on('end', this.emit.bind(this, 'end'));
+  [
+    'start',
+    'forward',
+    'end',
+    'websocket:start',
+    'websocket:end',
+    'websocket:incoming',
+    'websocket:outgoing'
+  ].forEach(function(event) {
+    this.proxies[key].on(event, this.emit.bind(this, event));
+  }, this);
 };
 
 //