diff --git a/src/components/animated-robot-hands.js b/src/components/animated-robot-hands.js
index 134ef1cf9e63749bee75499ba89f710566cbc9a7..a7cde19520127d65c79440f9f1cbf5d898d060b4 100644
--- a/src/components/animated-robot-hands.js
+++ b/src/components/animated-robot-hands.js
@@ -25,12 +25,13 @@ AFRAME.registerComponent("animated-robot-hands", {
     // Get the three.js object in the scene graph that has the animation data
     const root = this.el.querySelector("a-gltf-entity .RootScene").object3D.children[0];
     this.mixer = new THREE.AnimationMixer(root);
+    this.root = root;
 
     // Set hands to open pose because the bind pose is funky due
     // to the workaround for FBX2glTF animations.
 
-    this.openL = this.mixer.clipAction(POSES.open + "_L");
-    this.openR = this.mixer.clipAction(POSES.open + "_R");
+    this.openL = this.mixer.clipAction(POSES.open + "_L", root.parent);
+    this.openR = this.mixer.clipAction(POSES.open + "_R", root.parent);
     this.openL.play();
     this.openR.play();
   },
@@ -81,8 +82,8 @@ AFRAME.registerComponent("animated-robot-hands", {
     //    console.log(
     //      `Animating ${isLeft ? "left" : "right"} hand from ${prevPose} to ${currPose} over ${duration} seconds.`
     //    );
-    var from = mixer.clipAction(prevPose);
-    var to = mixer.clipAction(currPose);
+    var from = mixer.clipAction(prevPose, this.root.parent);
+    var to = mixer.clipAction(currPose, this.root.parent);
     from.fadeOut(duration);
     to.fadeIn(duration);
     to.play();
diff --git a/src/elements/a-gltf-entity.js b/src/elements/a-gltf-entity.js
index afc9522ad3c47eb29e6f4ef6b40b09e88505fd54..66ad29803db16a8ca9166e0df149087b22542d42 100644
--- a/src/elements/a-gltf-entity.js
+++ b/src/elements/a-gltf-entity.js
@@ -83,6 +83,19 @@ const inflateEntities = function(classPrefix, parentEl, node) {
 
   el.setObject3D(node.type.toLowerCase(), node);
 
+  // Set the name of the `THREE.Group` to match the name of the node,
+  // so that `THREE.PropertyBinding` will find (and later animate)
+  // the group. See `PropertyBinding.findNode`:
+  // https://github.com/mrdoob/three.js/blob/dev/src/animation/PropertyBinding.js#L211
+  el.object3D.name = node.name;
+  if (node.animations) {
+    // Pass animations up to the group object so that when we can pass the group as
+    // the optional root in `THREE.AnimationMixer.clipAction` and use the hierarchy
+    // preserved under the group (but not the node). Otherwise `clipArray` will be
+    // `null` in `THREE.AnimationClip.findByName`.
+    node.parent.animations = node.animations;
+  }
+
   children.forEach(childNode => {
     inflateEntities(classPrefix, el, childNode);
   });