diff --git a/src/components/super-networked-interactable.js b/src/components/super-networked-interactable.js
index 86a49e71b2cea0639f3ef8de81120356177893fd..4c96f2452f9945c0b9bf29be259c487b8d665c3d 100644
--- a/src/components/super-networked-interactable.js
+++ b/src/components/super-networked-interactable.js
@@ -1,5 +1,17 @@
 import { paths } from "../systems/userinput/paths";
 
+const pathsMap = {
+  "player-right-controller": {
+    scaleGrabbedGrabbable: paths.actions.rightHand.scaleGrabbedGrabbable
+  },
+  "player-left-controller": {
+    scaleGrabbedGrabbable: paths.actions.leftHand.scaleGrabbedGrabbable
+  },
+  cursor: {
+    scaleGrabbedGrabbable: paths.actions.cursor.scaleGrabbedGrabbable
+  }
+};
+
 /**
  * Manages ownership and haptics on an interatable
  * @namespace network
@@ -30,14 +42,12 @@ AFRAME.registerComponent("super-networked-interactable", {
       }
     });
 
-    this._stateAdded = this._stateAdded.bind(this);
     this._onGrabStart = this._onGrabStart.bind(this);
     this._onGrabEnd = this._onGrabEnd.bind(this);
     this._onOwnershipLost = this._onOwnershipLost.bind(this);
     this.el.addEventListener("grab-start", this._onGrabStart);
     this.el.addEventListener("grab-end", this._onGrabEnd);
     this.el.addEventListener("ownership-lost", this._onOwnershipLost);
-    this.el.addEventListener("stateadded", this._stateAdded);
     this.system.addComponent(this);
   },
 
@@ -46,7 +56,6 @@ AFRAME.registerComponent("super-networked-interactable", {
     this.el.removeEventListener("grab-start", this._onGrabStart);
     this.el.removeEventListener("grab-end", this._onGrabEnd);
     this.el.removeEventListener("ownership-lost", this._onOwnershipLost);
-    this.el.removeEventListener("stateadded", this._stateAdded);
     this.system.removeComponent(this);
   },
 
@@ -77,7 +86,7 @@ AFRAME.registerComponent("super-networked-interactable", {
   },
 
   _changeScale: function(delta) {
-    if (this.el.is("grabbed") && this.el.components.hasOwnProperty("stretchable")) {
+    if (delta && this.el.is("grabbed") && this.el.components.hasOwnProperty("stretchable")) {
       this.currentScale.addScalar(delta).clampScalar(this.data.minScale, this.data.maxScale);
       this.el.setAttribute("scale", this.currentScale);
       this.el.components["stretchable"].stretchBody(this.el, this.currentScale);
@@ -85,38 +94,10 @@ AFRAME.registerComponent("super-networked-interactable", {
   },
 
   tick: function() {
-    const userinput = AFRAME.scenes[0].systems.userinput;
-    const grabbable = this.el.components.grabbable;
-    let delta = 0;
-    if (this.el.is("grabbed") && this.el.components.hasOwnProperty("stretchable")) {
-      const isLeftHand = grabbable.grabbers[0] === document.querySelector("[super-hands], #player-left-controller");
-      if (isLeftHand) {
-        delta = userinput.readFrameValueAtPath(paths.actions.leftHand.scaleGrabbedGrabbable);
-      }
-      const isRightHand = grabbable.grabbers[0] === document.querySelector("[super-hands], #player-right-controller");
-      if (isRightHand) {
-        delta = userinput.readFrameValueAtPath(paths.actions.rightHand.scaleGrabbedGrabbable);
-      }
-      const isCursor = document.querySelector("[cursor-controller]").components["cursor-controller"].data.cursor;
-      if (isCursor) {
-        delta = userinput.readFrameValueAtPath(paths.actions.cursor.scaleGrabbedGrabbable);
-      }
-    }
-    if (delta) {
-      this._changeScale(delta);
-    }
-  },
+    const grabber = this.el.components.grabbable.grabbers[0];
+    if (!(grabber && pathsMap[grabber.id])) return;
 
-  _stateAdded(evt) {
-    switch (evt.detail) {
-      case "scaleUp":
-        this._changeScale(-this.data.scrollScaleDelta);
-        break;
-      case "scaleDown":
-        this._changeScale(this.data.scrollScaleDelta);
-        break;
-      default:
-        break;
-    }
+    const userinput = AFRAME.scenes[0].systems.userinput;
+    this._changeScale(userinput.readFrameValueAtPath(pathsMap[grabber.id].scaleGrabbedGrabbable));
   }
 });