diff --git a/indra/newview/llcontrolavatar.cpp b/indra/newview/llcontrolavatar.cpp
index fc4599dc62370b826628ba2b073b92fc2d5c32a9..2c180f79497d63f2ca2f72073331c780967f77ec 100644
--- a/indra/newview/llcontrolavatar.cpp
+++ b/indra/newview/llcontrolavatar.cpp
@@ -53,7 +53,6 @@ LLControlAvatar::LLControlAvatar(const LLUUID& id, const LLPCode pcode, LLViewer
 	mRegionChanged(false)
 {
     mIsDummy = TRUE;
-    mIsControlAvatar = true;
     mEnableDefaultMotions = false;
 }
 
@@ -172,7 +171,7 @@ void LLControlAvatar::matchVolumeTransform()
                 LLVector3 joint_pos = attach->getWorldPosition();
                 LLQuaternion joint_rot = attach->getWorldRotation();
                 LLVector3 obj_pos = mRootVolp->mDrawable->getPosition();
-                LLQuaternion obj_rot = mRootVolp->mDrawable->getRotation();
+                const LLQuaternion& obj_rot = mRootVolp->mDrawable->getRotation();
                 obj_pos.rotVec(joint_rot);
                 mRoot->setWorldPosition(obj_pos + joint_pos);
                 mRoot->setWorldRotation(obj_rot * joint_rot);
@@ -197,18 +196,8 @@ void LLControlAvatar::matchVolumeTransform()
             // complexity info and such line up better. Should defer
             // this until avatars also get fixed.
 
-            LLQuaternion obj_rot;
-            if (mRootVolp->mDrawable)
-            {
-                obj_rot = mRootVolp->mDrawable->getRotation();
-            }
-            else
-            {
-                obj_rot = mRootVolp->getRotation();
-            }
+            const LLQuaternion& obj_rot = mRootVolp->mDrawable ? mRootVolp->mDrawable->getRotation() : mRootVolp->getRotation();
             
-			LLMatrix3 bind_mat;
-
             LLQuaternion bind_rot;
 #define MATCH_BIND_SHAPE
 #ifdef MATCH_BIND_SHAPE
diff --git a/indra/newview/llcontrolavatar.h b/indra/newview/llcontrolavatar.h
index 288d07cd48aed31bbd261558ff66da4b6db9eb15..f6c599bcaed3e2bb47beb8c15970ee2c4908ddc1 100644
--- a/indra/newview/llcontrolavatar.h
+++ b/indra/newview/llcontrolavatar.h
@@ -30,14 +30,14 @@
 #include "llvoavatar.h"
 #include "llvovolume.h"
 
-class LLControlAvatar:
+class LLControlAvatar final:
     public LLVOAvatar
 {
     LOG_CLASS(LLControlAvatar);
 
 public:
     LLControlAvatar(const LLUUID &id, const LLPCode pcode, LLViewerRegion *regionp);
-	virtual void 			initInstance(); // Called after construction to initialize the class.
+	void initInstance() override; // Called after construction to initialize the class.
 	virtual	~LLControlAvatar();
 
     void getNewConstraintFixups(LLVector3& new_pos_constraint, F32& new_scale_constraint) const;
@@ -52,13 +52,13 @@ public:
     // markDead() inside other graphics pipeline operations.
     void markForDeath();
 
-    virtual void idleUpdate(LLAgent &agent, const F64 &time);
-	virtual BOOL updateCharacter(LLAgent &agent);
+    void idleUpdate(LLAgent &agent, const F64 &time) override;
+	BOOL updateCharacter(LLAgent &agent) override;
 
     void getAnimatedVolumes(std::vector<LLVOVolume*>& volumes);
     void updateAnimations();  
     
-	virtual LLViewerObject*	lineSegmentIntersectRiggedAttachments(
+	LLViewerObject*	lineSegmentIntersectRiggedAttachments(
         const LLVector4a& start, const LLVector4a& end,
         S32 face = -1,                    // which face to check, -1 = ALL_SIDES
         BOOL pick_transparent = FALSE,
@@ -67,15 +67,17 @@ public:
         LLVector4a* intersection = NULL,   // return the intersection point
         LLVector2* tex_coord = NULL,      // return the texture coordinates of the intersection point
         LLVector4a* normal = NULL,         // return the surface normal at the intersection point
-        LLVector4a* tangent = NULL);     // return the surface tangent at the intersection point
+        LLVector4a* tangent = NULL) override;     // return the surface tangent at the intersection point
 
-	virtual void	updateDebugText();
+	void	updateDebugText() override;
 
-    virtual std::string getFullname() const;
+    std::string getFullname() const override;
 
-    virtual bool shouldRenderRigged() const;
+    bool shouldRenderRigged() const override;
 
-	virtual BOOL isImpostor(); 
+	bool isControlAvatar() const override { return true; } // True if this avatar is a control av (no associated user)
+
+	BOOL isImpostor() override;
     
     bool mPlaying;
 
diff --git a/indra/newview/lluiavatar.cpp b/indra/newview/lluiavatar.cpp
index e4e266c92a36f0d14a93f753312bec48db8149b0..068a206d9ebf1bf83a9823e27855cb9f0d3b5ad0 100644
--- a/indra/newview/lluiavatar.cpp
+++ b/indra/newview/lluiavatar.cpp
@@ -38,12 +38,6 @@ LLUIAvatar::LLUIAvatar(const LLUUID& id, const LLPCode pcode, LLViewerRegion* re
     LLVOAvatar(id, pcode, regionp)
 {
     mIsDummy = TRUE;
-    mIsUIAvatar = true;
-}
-
-// virtual
-LLUIAvatar::~LLUIAvatar()
-{
 }
 
 // virtual
diff --git a/indra/newview/lluiavatar.h b/indra/newview/lluiavatar.h
index bcdffedef2a5ae833e86f961f5824af9fd7120c7..28ee819987333d33167e43bc5d74e3c487814fe7 100644
--- a/indra/newview/lluiavatar.h
+++ b/indra/newview/lluiavatar.h
@@ -30,15 +30,17 @@
 #include "llvoavatar.h"
 #include "llvovolume.h"
 
-class LLUIAvatar:
+class LLUIAvatar final:
     public LLVOAvatar
 {
     LOG_CLASS(LLUIAvatar);
 
 public:
     LLUIAvatar(const LLUUID &id, const LLPCode pcode, LLViewerRegion *regionp);
-	virtual void 			initInstance(); // Called after construction to initialize the class.
-	virtual	~LLUIAvatar();
+	void initInstance() override; // Called after construction to initialize the class.
+	virtual	~LLUIAvatar() = default;
+
+	bool isUIAvatar() const override { return true; } // True if this avatar is a supplemental av used in some UI views (no associated user)
 };
 
 #endif //LL_CONTROLAVATAR_H
diff --git a/indra/newview/llviewerobject.h b/indra/newview/llviewerobject.h
index 4c79fcbe362b6a04915a67aa9ba11106de804b24..f71610fc0fbc8c703849c952dc73e228ed528e2e 100644
--- a/indra/newview/llviewerobject.h
+++ b/indra/newview/llviewerobject.h
@@ -958,7 +958,7 @@ public:
 		: LLViewerObject(id,pcode,regionp, is_global)
 	{ }
 
-	void updateDrawable(BOOL force_damped) override;
+	void updateDrawable(BOOL force_damped) final override;
 };
 
 
diff --git a/indra/newview/llvoavatar.cpp b/indra/newview/llvoavatar.cpp
index b360f509d93f8221aefe4ef00353b8f59f67d2e8..5ff25f1ff25cd0b4412b2ed9bc5a616d813d0b2f 100644
--- a/indra/newview/llvoavatar.cpp
+++ b/indra/newview/llvoavatar.cpp
@@ -662,8 +662,6 @@ LLVOAvatar::LLVOAvatar(const LLUUID& id,
 	mCachedInMuteList(false),
 	mCachedMuteListUpdateTime(0),
 	mVisuallyMuteSetting(AV_RENDER_NORMALLY),
-	mIsControlAvatar(false),
-	mIsUIAvatar(false),
 	mEnableDefaultMotions(true),
 	mVisibilityRank(0),
 	mVisible(FALSE),
diff --git a/indra/newview/llvoavatar.h b/indra/newview/llvoavatar.h
index c4e417833e405405f33718d64c3a6083b077396e..d9a1b353f651e5b87398605b9356b5bdff895722 100644
--- a/indra/newview/llvoavatar.h
+++ b/indra/newview/llvoavatar.h
@@ -225,7 +225,7 @@ public:
 	size_t					mLastRiggingInfoKeyHash = 0;
 	
     std::set<LLUUID>		mActiveOverrideMeshes;
-    virtual void			onActiveOverrideMeshesChanged();
+    void					onActiveOverrideMeshesChanged();
     
 	/*virtual*/ const LLUUID&	getID() const override;
 	/*virtual*/ void			addDebugText(const std::string& text) override;
@@ -248,8 +248,8 @@ public:
 public:
 	bool 	isSelf() const override { return false; } // True if this avatar is for this viewer's agent
 
-	virtual bool 	isControlAvatar() const { return mIsControlAvatar; } // True if this avatar is a control av (no associated user)
-	virtual bool 	isUIAvatar() const { return mIsUIAvatar; } // True if this avatar is a supplemental av used in some UI views (no associated user)
+	virtual bool 	isControlAvatar() const { return false; } // True if this avatar is a control av (no associated user)
+	virtual bool 	isUIAvatar() const { return false; } // True if this avatar is a supplemental av used in some UI views (no associated user)
 
 private: //aligned members
 	LL_ALIGN_16(LLVector4a	mImpostorExtents[2]);
@@ -476,8 +476,6 @@ public:
 	// animated object status
 	//--------------------------------------------------------------------
 public:
-    bool mIsControlAvatar;
-    bool mIsUIAvatar;
     bool mEnableDefaultMotions;
 
 	//--------------------------------------------------------------------
diff --git a/indra/newview/llvoavatarself.h b/indra/newview/llvoavatarself.h
index 06764376e55c49da72d338b9e28e92ef5bbd992d..008c90c6a7d6f9e99d72a81bfe42db8f67f30212 100644
--- a/indra/newview/llvoavatarself.h
+++ b/indra/newview/llvoavatarself.h
@@ -42,7 +42,7 @@ class LLInventoryCallback;
 // LLVOAvatarSelf
 //
 //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-class LLVOAvatarSelf :
+class LLVOAvatarSelf final:
 	public LLVOAvatar
 {
 	LOG_CLASS(LLVOAvatarSelf);
diff --git a/indra/newview/llvograss.h b/indra/newview/llvograss.h
index 10c314ace929b6e6ee23b1f2909bb1dba442e0bf..d8f16eafc9bd1b5856767ad2cf83cc1ee67db2bd 100644
--- a/indra/newview/llvograss.h
+++ b/indra/newview/llvograss.h
@@ -33,7 +33,7 @@ class LLSurfacePatch;
 class LLViewerTexture;
 
 
-class LLVOGrass : public LLAlphaObject
+class LLVOGrass final : public LLAlphaObject
 {
 public:
 	LLVOGrass(const LLUUID &id, const LLPCode pcode, LLViewerRegion *regionp);
diff --git a/indra/newview/llvoground.h b/indra/newview/llvoground.h
index 1dd133dcd8d0b72a6392527a1c595ea0438ffd37..846e9afe477914370bf6cd6db5168e7edbc3d92b 100644
--- a/indra/newview/llvoground.h
+++ b/indra/newview/llvoground.h
@@ -33,7 +33,7 @@
 #include "llviewertexture.h"
 #include "llviewerobject.h"
 
-class LLVOGround : public LLStaticViewerObject
+class LLVOGround final : public LLStaticViewerObject
 {
 protected:
 	~LLVOGround() = default;
diff --git a/indra/newview/llvopartgroup.h b/indra/newview/llvopartgroup.h
index a42efa8d6891953463b2a6968ea108a2bff566dc..d356721248118621cbbfb642f01fade744e51682 100644
--- a/indra/newview/llvopartgroup.h
+++ b/indra/newview/llvopartgroup.h
@@ -63,11 +63,11 @@ public:
 
 	LLVOPartGroup(const LLUUID &id, const LLPCode pcode, LLViewerRegion *regionp);
 
-	/*virtual*/ BOOL    isActive() const override; // Whether this object needs to do an idleUpdate.
-	void idleUpdate(LLAgent &agent, const F64 &time) override;
+	/*virtual*/ BOOL    isActive() const final override; // Whether this object needs to do an idleUpdate.
+	void idleUpdate(LLAgent &agent, const F64 &time) final override;
 
-	F32 getBinRadius() override;
-	void updateSpatialExtents(LLVector4a& newMin, LLVector4a& newMax) override;
+	F32 getBinRadius() final override;
+	void updateSpatialExtents(LLVector4a& newMin, LLVector4a& newMax) final override;
 	U32 getPartitionType() const override;
 	
 	/*virtual*/ BOOL lineSegmentIntersect(const LLVector4a& start, const LLVector4a& end,
@@ -78,13 +78,13 @@ public:
 										  LLVector4a* intersection,
 										  LLVector2* tex_coord,
 										  LLVector4a* normal,
-										  LLVector4a* tangent) override;
+										  LLVector4a* tangent) final override;
 
-	/*virtual*/ void setPixelAreaAndAngle(LLAgent &agent) override;
-	/*virtual*/ void updateTextures() override;
+	/*virtual*/ void setPixelAreaAndAngle(LLAgent &agent) final override;
+	/*virtual*/ void updateTextures() final override;
 
 	/*virtual*/ LLDrawable* createDrawable(LLPipeline *pipeline) override;
-	/*virtual*/ BOOL        updateGeometry(LLDrawable *drawable) override;
+	/*virtual*/ BOOL        updateGeometry(LLDrawable *drawable) final override;
 	void		getGeometry(const LLViewerPart& part,							
 								LLStrider<LLVector4a>& verticesp);
 				
@@ -94,11 +94,11 @@ public:
 								LLStrider<LLVector2>& texcoordsp,
 								LLStrider<LLColor4U>& colorsp, 
 								LLStrider<LLColor4U>& emissivep,
-								LLStrider<U16>& indicesp) override;
+								LLStrider<U16>& indicesp) final override;
 
-	void updateFaceSize(S32 idx) override { }
-	F32 getPartSize(S32 idx) override;
-	void getBlendFunc(S32 idx, U32& src, U32& dst) override;
+	void updateFaceSize(S32 idx) final override { }
+	F32 getPartSize(S32 idx) final override;
+	void getBlendFunc(S32 idx, U32& src, U32& dst) final override;
 	LLUUID getPartOwner(S32 idx);
 	LLUUID getPartSource(S32 idx);
 
@@ -115,7 +115,7 @@ protected:
 };
 
 
-class LLVOHUDPartGroup : public LLVOPartGroup
+class LLVOHUDPartGroup final : public LLVOPartGroup
 {
 public:
 	LLVOHUDPartGroup(const LLUUID &id, const LLPCode pcode, LLViewerRegion *regionp) : 
diff --git a/indra/newview/llvosky.h b/indra/newview/llvosky.h
index 3d9de9e1eed6a0456da80f5aec4a4884357b0cd6..7795598e7a1b5f3f3a103de29c4806e81c410ad2 100644
--- a/indra/newview/llvosky.h
+++ b/indra/newview/llvosky.h
@@ -387,7 +387,7 @@ protected:
 
 
 class LLCubeMap;
-class LLVOSky : public LLStaticViewerObject
+class LLVOSky final : public LLStaticViewerObject
 {
 public:
 	/// WL PARAMS
diff --git a/indra/newview/llvosurfacepatch.h b/indra/newview/llvosurfacepatch.h
index 8c30879f87109d6e0dcbd00e65eb4b079332c421..89c731a8eafbe93247e18ce58285de5a537609ce 100644
--- a/indra/newview/llvosurfacepatch.h
+++ b/indra/newview/llvosurfacepatch.h
@@ -36,7 +36,7 @@ class LLVector2;
 class LLFacePool;
 class LLFace;
 
-class LLVOSurfacePatch : public LLStaticViewerObject
+class LLVOSurfacePatch final : public LLStaticViewerObject
 {
 public:
 	static F32 sLODFactor;
diff --git a/indra/newview/llvotree.h b/indra/newview/llvotree.h
index 267abfac3eae14dc0be25465072deeb159127286..781717e298841b0da685c2b618a4b79ecc35a227 100644
--- a/indra/newview/llvotree.h
+++ b/indra/newview/llvotree.h
@@ -34,7 +34,7 @@ class LLFace;
 class LLDrawPool;
 class LLViewerFetchedTexture;
 
-class LLVOTree : public LLViewerObject
+class LLVOTree final : public LLViewerObject
 {
 protected:
 	~LLVOTree();
diff --git a/indra/newview/llvovolume.h b/indra/newview/llvovolume.h
index a4a1d87f84834bb6f12b3be50e22e2909c7d4ec5..55ec6f4324ebf987eb575615eba304319e79e1d2 100644
--- a/indra/newview/llvovolume.h
+++ b/indra/newview/llvovolume.h
@@ -57,7 +57,7 @@ enum LLVolumeInterfaceType
 const F32 MAX_LOD_FACTOR = 4.0f;
 
 
-class LLRiggedVolume : public LLVolume
+class LLRiggedVolume final : public LLVolume
 {
 public:
 	LLRiggedVolume(const LLVolumeParams& params)
@@ -93,7 +93,7 @@ public:
 };
 
 // Class which embodies all Volume objects (with pcode LL_PCODE_VOLUME)
-class LLVOVolume : public LLViewerObject
+class LLVOVolume final : public LLViewerObject
 {
 	LOG_CLASS(LLVOVolume);
 protected:
@@ -221,10 +221,6 @@ public:
 				void	updateSculptTexture();
 				void    setIndexInTex(U32 ch, S32 index) { mIndexInTex[ch] = index ;}
 				void	sculpt();
-	 static     void    rebuildMeshAssetCallback(LLVFS *vfs,
-														  const LLUUID& asset_uuid,
-														  LLAssetType::EType type,
-														  void* user_data, S32 status, LLExtStat ext_status);
 					
 				void	updateRelativeXform(bool force_identity = false);
 	/*virtual*/ BOOL	updateGeometry(LLDrawable *drawable) override;
diff --git a/indra/newview/llvowater.h b/indra/newview/llvowater.h
index 239109801d9eaab7e5d4c3633003b07fa79195cc..1a01c64aa0c5ac89aa5b4e98982374d9ae7172de 100644
--- a/indra/newview/llvowater.h
+++ b/indra/newview/llvowater.h
@@ -52,23 +52,23 @@ public:
 
 	LLVOWater(const LLUUID &id, const LLPCode pcode, LLViewerRegion *regionp);
 
-	/*virtual*/ void markDead() override;
+	/*virtual*/ void markDead() final override;
 
 	// Initialize data that's only inited once per class.
 	static void initClass();
 	static void cleanupClass();
 
-	/*virtual*/ void idleUpdate(LLAgent &agent, const F64 &time) override;
-	/*virtual*/ LLDrawable* createDrawable(LLPipeline *pipeline) override;
-	/*virtual*/ BOOL        updateGeometry(LLDrawable *drawable) override;
-	/*virtual*/ void		updateSpatialExtents(LLVector4a& newMin, LLVector4a& newMax) override;
+	/*virtual*/ void idleUpdate(LLAgent &agent, const F64 &time) final override;
+	/*virtual*/ LLDrawable* createDrawable(LLPipeline *pipeline) final override;
+	/*virtual*/ BOOL        updateGeometry(LLDrawable *drawable) final override;
+	/*virtual*/ void		updateSpatialExtents(LLVector4a& newMin, LLVector4a& newMax) final override;
 
-	/*virtual*/ void updateTextures() override;
-	/*virtual*/ void setPixelAreaAndAngle(LLAgent &agent) override; // generate accurate apparent angle and area
+	/*virtual*/ void updateTextures() final override;
+	/*virtual*/ void setPixelAreaAndAngle(LLAgent &agent) final override; // generate accurate apparent angle and area
 
 	U32 getPartitionType() const override;
 
-	/*virtual*/ BOOL isActive() const override; // Whether this object needs to do an idleUpdate.
+	/*virtual*/ BOOL isActive() const final override; // Whether this object needs to do an idleUpdate.
 
 	void setUseTexture(const BOOL use_texture);
 	void setIsEdgePatch(const BOOL edge_patch);
@@ -81,7 +81,7 @@ protected:
 	S32  mRenderType; 
 };
 
-class LLVOVoidWater : public LLVOWater
+class LLVOVoidWater final : public LLVOWater
 {
 public:
 	LLVOVoidWater(LLUUID const& id, LLPCode pcode, LLViewerRegion* regionp) : LLVOWater(id, pcode, regionp)
diff --git a/indra/newview/llvowlsky.h b/indra/newview/llvowlsky.h
index 90a24fb49abd4826e87817f5ffab28ed22c135de..21aff1b3c9bca82dc509b3096fa3db20986db0cb 100644
--- a/indra/newview/llvowlsky.h
+++ b/indra/newview/llvowlsky.h
@@ -29,7 +29,7 @@
 
 #include "llviewerobject.h"
 
-class LLVOWLSky : public LLStaticViewerObject {
+class LLVOWLSky final : public LLStaticViewerObject {
 private:
 	static const F32 DISTANCE_TO_STARS;