diff --git a/libraries/avatars-renderer/src/avatars-renderer/Avatar.cpp b/libraries/avatars-renderer/src/avatars-renderer/Avatar.cpp
index 8ceafbf5a1..ce559a7729 100644
--- a/libraries/avatars-renderer/src/avatars-renderer/Avatar.cpp
+++ b/libraries/avatars-renderer/src/avatars-renderer/Avatar.cpp
@@ -2121,6 +2121,7 @@ void Avatar::updateAttachmentRenderIDs() {
 
 void Avatar::updateDescendantRenderIDs() {
     _subItemLock.withWriteLock([&] {
+        auto oldDescendantRenderIDs = _descendantRenderIDs;
         _descendantRenderIDs.clear();
         auto entityTreeRenderer = DependencyManager::get<EntityTreeRenderer>();
         EntityTreePointer entityTree = entityTreeRenderer ? entityTreeRenderer->getTree() : nullptr;
@@ -2135,13 +2136,29 @@ void Avatar::updateDescendantRenderIDs() {
                                 render::ItemIDs renderableSubItems;
                                 uint32_t numRenderableSubItems = renderer->metaFetchMetaSubItems(renderableSubItems);
                                 if (numRenderableSubItems > 0) {
-                                    _descendantRenderIDs.insert(_descendantRenderIDs.end(), renderableSubItems.begin(), renderableSubItems.end());
+                                    for (auto& renderID : renderableSubItems) {
+                                        _descendantRenderIDs.insert(renderID);
+                                        oldDescendantRenderIDs.erase(renderID);
+                                    }
                                 }
                             }
                         }
                     }
                 });
             });
+
+            render::Transaction transaction;
+            for (auto& oldDescendantRenderID : oldDescendantRenderIDs) {
+                transaction.updateItem<render::PayloadProxyInterface>(oldDescendantRenderID, [](render::PayloadProxyInterface& self) {
+                    self.setOverrideSubMetaCulled(false);
+                });
+            }
+            for (auto& descendantRenderIDs : _descendantRenderIDs) {
+                transaction.updateItem<render::PayloadProxyInterface>(descendantRenderIDs, [](render::PayloadProxyInterface& self) {
+                    self.setOverrideSubMetaCulled(true);
+                });
+            }
+            AbstractViewStateInterface::instance()->getMain3DScene()->enqueueTransaction(transaction);
         }
     });
 }
diff --git a/libraries/avatars-renderer/src/avatars-renderer/Avatar.h b/libraries/avatars-renderer/src/avatars-renderer/Avatar.h
index 031b2f1309..235a04f109 100644
--- a/libraries/avatars-renderer/src/avatars-renderer/Avatar.h
+++ b/libraries/avatars-renderer/src/avatars-renderer/Avatar.h
@@ -781,7 +781,7 @@ protected:
     void updateAttachmentRenderIDs();
     render::ItemIDs _attachmentRenderIDs;
     void updateDescendantRenderIDs();
-    render::ItemIDs _descendantRenderIDs;
+    render::ItemIDSet _descendantRenderIDs;
     uint32_t _lastAncestorChainRenderableVersion { 0 };
 };
 
diff --git a/libraries/render/src/render/Item.cpp b/libraries/render/src/render/Item.cpp
index 532964777f..d5dde7f86b 100644
--- a/libraries/render/src/render/Item.cpp
+++ b/libraries/render/src/render/Item.cpp
@@ -123,7 +123,11 @@ namespace render {
         if (!payload) {
             return ItemKey::Builder::opaqueShape().withTypeMeta();
         }
-        return payload->getKey();
+        if (payload->overrideSubMetaCulled()) {
+            return ItemKey::Builder(payload->getKey()).withSubMetaCulled();
+        } else {
+            return payload->getKey();
+        }
     }
 
     template <> const ShapeKey shapeGetShapeKey(const PayloadProxyInterface::Pointer& payload) {
diff --git a/libraries/render/src/render/Item.h b/libraries/render/src/render/Item.h
index 6b66e844c0..e28a88f6dd 100644
--- a/libraries/render/src/render/Item.h
+++ b/libraries/render/src/render/Item.h
@@ -614,7 +614,13 @@ public:
     virtual ShapeKey getShapeKey() = 0;
     virtual Item::Bound getBound() = 0;
     virtual void render(RenderArgs* args) = 0;
-    virtual uint32_t metaFetchMetaSubItems(ItemIDs& subItems) const = 0;
+    virtual uint32_t metaFetchMetaSubItems(ItemIDs& subItems) = 0;
+
+    bool overrideSubMetaCulled() const { return _overrideSubMetaCulled; }
+    void setOverrideSubMetaCulled(bool overrideSubMetaCulled) { _overrideSubMetaCulled = overrideSubMetaCulled; }
+
+protected:
+    bool _overrideSubMetaCulled { false };
 };
 
 template <> const ItemKey payloadGetKey(const PayloadProxyInterface::Pointer& payload);