diff --git a/src/components/cursor-controller.js b/src/components/cursor-controller.js
index 5b42642a212e4724ddcf71c5104bc1e0c423e2e4..eff928a76f10f2fa9b1ab6333af01764ecc4864f 100644
--- a/src/components/cursor-controller.js
+++ b/src/components/cursor-controller.js
@@ -48,8 +48,6 @@ AFRAME.registerComponent("cursor-controller", {
     this._handleWheel = this._handleWheel.bind(this);
     this._handleEnterVR = this._handleEnterVR.bind(this);
     this._handleExitVR = this._handleExitVR.bind(this);
-    this._handleRaycasterIntersection = this._handleRaycasterIntersection.bind(this);
-    this._handleRaycasterIntersectionCleared = this._handleRaycasterIntersectionCleared.bind(this);
     this._handlePrimaryDown = this._handlePrimaryDown.bind(this);
     this._handlePrimaryUp = this._handlePrimaryUp.bind(this);
     this._handleModelLoaded = this._handleModelLoaded.bind(this);
@@ -84,9 +82,6 @@ AFRAME.registerComponent("cursor-controller", {
     window.addEventListener("enter-vr", this._handleEnterVR);
     window.addEventListener("exit-vr", this._handleExitVR);
 
-    this.el.addEventListener("raycaster-intersection", this._handleRaycasterIntersection);
-    this.el.addEventListener("raycaster-intersection-cleared", this._handleRaycasterIntersectionCleared);
-
     this.data.playerRig.addEventListener(this.data.primaryDown, this._handlePrimaryDown);
     this.data.playerRig.addEventListener(this.data.primaryUp, this._handlePrimaryUp);
     this.data.playerRig.addEventListener(this.data.grabEvent, this._handlePrimaryDown);
@@ -107,9 +102,6 @@ AFRAME.registerComponent("cursor-controller", {
     window.removeEventListener("enter-vr", this._handleEnterVR);
     window.removeEventListener("exit-vr", this._handleExitVR);
 
-    this.el.removeEventListener("raycaster-intersection", this._handleRaycasterIntersection);
-    this.el.removeEventListener("raycaster-intersection-cleared", this._handleRaycasterIntersectionCleared);
-
     this.data.playerRig.removeEventListener(this.data.primaryDown, this._handlePrimaryDown);
     this.data.playerRig.removeEventListener(this.data.primaryUp, this._handlePrimaryUp);
     this.data.playerRig.removeEventListener(this.data.grabEvent, this._handlePrimaryDown);
@@ -290,14 +282,6 @@ AFRAME.registerComponent("cursor-controller", {
     this._updateController();
   },
 
-  _handleRaycasterIntersection: function(e) {
-    this.data.cursor.emit("raycaster-intersection", e.detail);
-  },
-
-  _handleRaycasterIntersectionCleared: function(e) {
-    this.data.cursor.emit("raycaster-intersection-cleared", e.detail);
-  },
-
   _handlePrimaryDown: function(e) {
     if (e.target === this.controller) {
       const isInteractable = this._isTargetOfType(TARGET_TYPE_INTERACTABLE) && !this.grabStarting;
diff --git a/src/hub.html b/src/hub.html
index 8d26db2f7cc189a20263eb8b0cfefbf66cfb0d5f..c681d4bcd9559a94756c903a9ceaffd67dcfc5a6 100644
--- a/src/hub.html
+++ b/src/hub.html
@@ -139,6 +139,7 @@
         ></a-entity>
 
         <a-entity
+            id="cursor-controller"
             cursor-controller="
                 cursor: #cursor; 
                 camera: #player-camera; 
@@ -163,6 +164,7 @@
                 dragDropStartButtons: cursor-grab; dragDropEndButtons: cursor-release;"
             segments-height="9"
             segments-width="9"
+            event-repeater="events: raycaster-intersection, raycaster-intersection-cleared; eventSource: #cursor-controller"
         ></a-sphere> 
 
         <!-- Player Rig -->