diff --git a/libraries/physics/src/EntityMotionState.cpp b/libraries/physics/src/EntityMotionState.cpp
index c2bacd4949..68f21eea87 100644
--- a/libraries/physics/src/EntityMotionState.cpp
+++ b/libraries/physics/src/EntityMotionState.cpp
@@ -447,7 +447,12 @@ bool EntityMotionState::shouldSendUpdate(uint32_t simulationStep) {
     // this case is prevented by setting _ownershipState to UNOWNABLE in EntityMotionState::ctor
     assert(!(_entity->getClientOnly() && _entity->getOwningAvatarID() != Physics::getSessionUUID()));
 
-    if (_entity->dynamicDataNeedsTransmit() || _entity->queryAACubeNeedsUpdate()) {
+    // shouldSendUpdate() sould NOT be triggering updates to maintain the queryAACube of dynamic entities.
+    // The server is supposed to predict the transform of such moving things.  The client performs a "double prediction"
+    // where it predicts what the the server is doing, and only sends updates whent the entity's true transform
+    // differs significantly.  That is what the remoteSimulationOutOfSync() logic is all about.
+    if (_entity->dynamicDataNeedsTransmit() ||
+            (!_entity->getDynamic() && _entity->queryAACubeNeedsUpdate())) {
         return true;
     }