diff --git a/indra/newview/llviewerobjectlist.cpp b/indra/newview/llviewerobjectlist.cpp
index c676949b9882a02fbde6b9dcf2b7438a16a22a68..1a39a1b98a487ea52576d050cdb352740246b727 100644
--- a/indra/newview/llviewerobjectlist.cpp
+++ b/indra/newview/llviewerobjectlist.cpp
@@ -580,7 +580,7 @@ void LLViewerObjectList::processObjectUpdate(LLMessageSystem *mesgsys,
         
 		if(update_cache)
 		{
-			objectp = regionp->updateCacheEntry(local_id, objectp);
+			objectp = regionp->updateCacheEntry(local_id, objectp, update_type);
 		}
 
 		// This looks like it will break if the local_id of the object doesn't change
diff --git a/indra/newview/llviewerregion.cpp b/indra/newview/llviewerregion.cpp
index f593809c5c209bc5a6a8e943e32e3f47e6c932b0..c6a10737a0ec0665afc34a7f3059b42bfa837d7d 100644
--- a/indra/newview/llviewerregion.cpp
+++ b/indra/newview/llviewerregion.cpp
@@ -1816,8 +1816,13 @@ LLViewerObject* LLViewerRegion::addNewObject(LLVOCacheEntry* entry)
 
 //update object cache if the object receives a full-update or terse update
 //update_type == EObjectUpdateType::OUT_TERSE_IMPROVED or EObjectUpdateType::OUT_FULL
-LLViewerObject* LLViewerRegion::updateCacheEntry(U32 local_id, LLViewerObject* objectp)
+LLViewerObject* LLViewerRegion::updateCacheEntry(U32 local_id, LLViewerObject* objectp, U32 update_type)
 {
+	if(objectp && update_type != (U32)OUT_TERSE_IMPROVED)
+	{
+		return objectp; //no need to access cache
+	}
+
 	LLVOCacheEntry* entry = getCacheEntry(local_id);
 	if (!entry)
 	{
@@ -1829,8 +1834,11 @@ LLViewerObject* LLViewerRegion::updateCacheEntry(U32 local_id, LLViewerObject* o
 		objectp = addNewObject(entry);
 	}
 
-	//remove from cache.
-	killCacheEntry(entry, true);
+	//remove from cache if terse update
+	if(update_type == (U32)OUT_TERSE_IMPROVED)
+	{
+		killCacheEntry(entry, true);
+	}
 
 	return objectp;
 }
diff --git a/indra/newview/llviewerregion.h b/indra/newview/llviewerregion.h
index 151071a478e7c052f2f248275abc2772a7079f63..da947a9fc1af9f18b9c72f3fdc3f9bcd2a2ddefb 100644
--- a/indra/newview/llviewerregion.h
+++ b/indra/newview/llviewerregion.h
@@ -362,7 +362,7 @@ class LLViewerRegion final : public LLCapabilityProvider // implements this inte
 	void requestCacheMisses();
 	void addCacheMissFull(const U32 local_id);
 	//update object cache if the object receives a full-update or terse update
-	LLViewerObject* updateCacheEntry(U32 local_id, LLViewerObject* objectp);
+	LLViewerObject* updateCacheEntry(U32 local_id, LLViewerObject* objectp, U32 update_type);
 	void findOrphans(U32 parent_id);
 	void clearCachedVisibleObjects();
 	void dumpCache();