diff --git a/indra/newview/llviewerobject.cpp b/indra/newview/llviewerobject.cpp
index 340c0373893fb5546813f81372eb96fbb6179b30..51af760ae14e74eeabbaa758cc4ba5e0bc15660c 100644
--- a/indra/newview/llviewerobject.cpp
+++ b/indra/newview/llviewerobject.cpp
@@ -484,6 +484,12 @@ void LLViewerObject::markDead()
 			LLFollowCamMgr::removeFollowCamParams(mID);
 		}
 
+		// And finally mark the region as null to prevent invalid calls while object is dead but not cleaned up 
+		if (mRegionp)
+		{
+			mRegionp = nullptr;
+		}
+
 		sNumZombieObjects++;
 	}
 }
@@ -4082,7 +4088,7 @@ LLNameValue *LLViewerObject::getNVPair(const std::string& name) const
 void LLViewerObject::updatePositionCaches() const
 {
 	// If region is removed from the list it is also deleted.
-	if(mRegionp && LLWorld::instance().isRegionListed(mRegionp))
+	if(mRegionp)
 	{
 		if (!isRoot())
 		{
@@ -4100,7 +4106,7 @@ void LLViewerObject::updatePositionCaches() const
 const LLVector3d LLViewerObject::getPositionGlobal() const
 {	
 	// If region is removed from the list it is also deleted.
-	if(mRegionp && LLWorld::instance().isRegionListed(mRegionp))
+	if(mRegionp)
 	{
 		LLVector3d position_global = mRegionp->getPosGlobalFromRegion(getPositionRegion());
 
@@ -4120,7 +4126,7 @@ const LLVector3d LLViewerObject::getPositionGlobal() const
 const LLVector3 &LLViewerObject::getPositionAgent() const
 {
 	// If region is removed from the list it is also deleted.
-	if(mRegionp && LLWorld::instance().isRegionListed(mRegionp))
+	if(mRegionp)
 	{
 		if (mDrawable.notNull() && (!mDrawable->isRoot() && getParent()))
 		{
diff --git a/indra/newview/llviewerobjectlist.cpp b/indra/newview/llviewerobjectlist.cpp
index 244b18e1a9b7fa233471f5fb11c9339e277844b6..90b78d2af4504800ac53b457dc8c9b3d957ce3b2 100644
--- a/indra/newview/llviewerobjectlist.cpp
+++ b/indra/newview/llviewerobjectlist.cpp
@@ -1399,13 +1399,9 @@ BOOL LLViewerObjectList::killObject(LLViewerObject *objectp)
 
 void LLViewerObjectList::killObjects(LLViewerRegion *regionp)
 {
-	LLViewerObject *objectp;
-
 	
-	for (auto& object : mObjects)
+	for (LLViewerObject* objectp : mObjects)
     {
-		objectp = object;
-		
 		if (objectp->mRegionp == regionp)
 		{
 			killObject(objectp);
@@ -1419,11 +1415,8 @@ void LLViewerObjectList::killObjects(LLViewerRegion *regionp)
 void LLViewerObjectList::killAllObjects()
 {
 	// Used only on global destruction.
-	LLViewerObject *objectp;
-
-	for (auto& object : mObjects)
+	for (LLViewerObject* objectp : mObjects)
     {
-		objectp = object;
 		killObject(objectp);
 		// Object must be dead, or it's the LLVOAvatarSelf which never dies.
 		llassert((objectp == gAgentAvatarp) || objectp->isDead());