diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp
index a8d69a38cd9c203597b83576920aaea246506b31..8eab4bf508fe5157cb05b8b2b37221e6ae545487 100644
--- a/indra/newview/llappviewer.cpp
+++ b/indra/newview/llappviewer.cpp
@@ -4085,6 +4085,7 @@ void LLAppViewer::disconnectViewer()
 	gAgentCamera.cleanup();
 	// Also writes cached agent settings to gSavedSettings
 	gAgent.cleanup();
+	delete gAgentAvatarp;
 
 	// This is where we used to call gObjectList.destroy() and then delete gWorldp.
 	// Now we just ask the LLWorld singleton to cleanly shut down.
diff --git a/indra/newview/llviewerobjectlist.cpp b/indra/newview/llviewerobjectlist.cpp
index 5e0bd5b811b757b626ca33a93eeb2a9c36c55571..752aeaaab01a157c7d58c6e3f40751d1fa3ca96a 100644
--- a/indra/newview/llviewerobjectlist.cpp
+++ b/indra/newview/llviewerobjectlist.cpp
@@ -949,7 +949,8 @@ void LLViewerObjectList::killAllObjects()
 	{
 		objectp = *iter;
 		killObject(objectp);
-		llassert(objectp->isDead());
+		// Object must be dead, or it's the LLVOAvatarSelf which never dies.
+		llassert((objectp == gAgentAvatarp) || objectp->isDead());
 	}
 
 	cleanDeadObjects(FALSE);
diff --git a/indra/newview/llvoavatarself.cpp b/indra/newview/llvoavatarself.cpp
index d58be219107ba2f2f5ebb79d7d51b78b5532e5b1..06c9af6c2ff2701e75509290f9947b53fed27e75 100644
--- a/indra/newview/llvoavatarself.cpp
+++ b/indra/newview/llvoavatarself.cpp
@@ -518,10 +518,17 @@ BOOL LLVOAvatarSelf::buildMenus()
 	return TRUE;
 }
 
+LLVOAvatarSelf::cleanup()
+{
+	markDead();
+ 	delete mScreenp;
+ 	mScreenp = NULL;
+	mRegionp = NULL;
+}
+
 LLVOAvatarSelf::~LLVOAvatarSelf()
 {
-	delete mScreenp;
-	mScreenp = NULL;
+	cleanup();
 }
 
 /**
diff --git a/indra/newview/llvoavatarself.h b/indra/newview/llvoavatarself.h
index 3c7ec04fabb3f87666deb28bc9080360f08e3229..4960d4d10347be5548037f5e5ab997202a05d138 100644
--- a/indra/newview/llvoavatarself.h
+++ b/indra/newview/llvoavatarself.h
@@ -56,6 +56,7 @@ class LLVOAvatarSelf :
 	virtual 				~LLVOAvatarSelf();
 	virtual void			markDead();
 	virtual void 			initInstance(); // Called after construction to initialize the class.
+	void					cleanup();
 protected:
 	/*virtual*/ BOOL		loadAvatar();
 	BOOL					loadAvatarSelf();