diff --git a/opentrafficshaper/plugins/webserver/webserver.pm b/opentrafficshaper/plugins/webserver/webserver.pm
index 0f399b948bb7504cdb9a3bcb744a3f9c3bf67c54..c5f697ed8045b2244e3559b8d1f00464034f3881 100644
--- a/opentrafficshaper/plugins/webserver/webserver.pm
+++ b/opentrafficshaper/plugins/webserver/webserver.pm
@@ -614,17 +614,23 @@ sub _server_request_http
 
 	# Its a websocket upgrade request
 	} elsif ($protocol eq "HTTP=>WebSocket") {
+		# Make sure we have an upgrade path to WebSocket
+		my ($newHandler) = _parse_http_resource($request,"WebSocket");
+		if (!defined($newHandler)) {
+			return httpDisplayFault(HTTP_INTERNAL_SERVER_ERROR,"Internal server error","Cannot upgrade to websocket");
+		}
+
 		# Do the function call now
 		my ($res,$ret1,$ret2) = $function->($kernel,$globals,$client_session_id,$request,$conn->{'socket'});
-
 		# If we have a response defined, we rejected the upgrade
 		if (defined($res)) {
 			$response = httpDisplayFault($res,$ret1,$ret2);
 		} else {
 			# Return our upgrade response
 			$response = _server_request_http_wsupgrade($request,$module,$action);
-			# Upgrade the protocol
+			# Upgrade the protocol & handler
 			$connections->{$client_session_id}->{'protocol'} = 'WebSocket';
+			$connections->{$client_session_id}->{'resource'}->{'handler'} = $newHandler;
 		}
 	}