diff --git a/indra/newview/alaoengine.h b/indra/newview/alaoengine.h
index 5f1bea9d8d44df6261bc8c3d422e14707ca2a89e..0c8f95b2cde3dae6489c37e562c7c2fc3189917d 100644
--- a/indra/newview/alaoengine.h
+++ b/indra/newview/alaoengine.h
@@ -36,7 +36,7 @@
 #include "llextendedstatus.h"
 #include "llsingleton.h"
 
-class ALAOTimerCollection : public LLEventTimer
+class ALAOTimerCollection final : public LLEventTimer
 {
 public:
 	ALAOTimerCollection();
@@ -60,7 +60,7 @@ class ALAOTimerCollection : public LLEventTimer
 
 // ----------------------------------------------------
 
-class ALAOSitCancelTimer : public LLEventTimer
+class ALAOSitCancelTimer final : public LLEventTimer
 {
 public:
 	ALAOSitCancelTimer();
diff --git a/indra/newview/alaoset.h b/indra/newview/alaoset.h
index db84ee88e707088a7b1e900960ed218cc9c0a3a1..c88b2385f5457650326ca77b1574f95cfa2fc221 100644
--- a/indra/newview/alaoset.h
+++ b/indra/newview/alaoset.h
@@ -30,7 +30,7 @@
 #include <utility>
 #include "lleventtimer.h"
 
-class ALAOSet : public LLEventTimer
+class ALAOSet final : public LLEventTimer
 {
 public:
 	ALAOSet(const LLUUID& inventoryID);
diff --git a/indra/newview/alfloaterparticleeditor.h b/indra/newview/alfloaterparticleeditor.h
index 8c856959f5511f80436c7547c9108266ee5b4184..05c4e3be266d5a0c355cce7b13fd3375f80a6181 100644
--- a/indra/newview/alfloaterparticleeditor.h
+++ b/indra/newview/alfloaterparticleeditor.h
@@ -134,7 +134,7 @@ class ALFloaterParticleEditor final : public LLFloater
 	
     static void finishUpload(LLUUID itemId, LLUUID taskId, LLUUID newAssetId, LLSD response, bool isRunning, LLUUID objectId);
     
-	class LLParticleScriptCreationCallback : public LLInventoryCallback
+	class LLParticleScriptCreationCallback final : public LLInventoryCallback
 	{
 	public:
 		LLParticleScriptCreationCallback(ALFloaterParticleEditor* editor);
diff --git a/indra/newview/llcontrolavatar.h b/indra/newview/llcontrolavatar.h
index 288d07cd48aed31bbd261558ff66da4b6db9eb15..18b9ba4794d705abcf3719201197ef132edff060 100644
--- a/indra/newview/llcontrolavatar.h
+++ b/indra/newview/llcontrolavatar.h
@@ -30,7 +30,7 @@
 #include "llvoavatar.h"
 #include "llvovolume.h"
 
-class LLControlAvatar:
+class LLControlAvatar final :
     public LLVOAvatar
 {
     LOG_CLASS(LLControlAvatar);
diff --git a/indra/newview/lldrawpoolalpha.h b/indra/newview/lldrawpoolalpha.h
index a069f805e827c4d5b175a8a2224b8fa821da6c9d..9f110ea68f88635f591f88946d459976b269a844 100644
--- a/indra/newview/lldrawpoolalpha.h
+++ b/indra/newview/lldrawpoolalpha.h
@@ -35,7 +35,7 @@ class LLFace;
 class LLColor4;
 class LLGLSLShader;
 
-class LLDrawPoolAlpha: public LLRenderPass
+class LLDrawPoolAlpha final : public LLRenderPass
 {
 public:
 	enum
@@ -93,11 +93,4 @@ class LLDrawPoolAlpha: public LLRenderPass
 	LLRender::eBlendFactor mAlphaDFactor;
 };
 
-class LLDrawPoolAlphaPostWater : public LLDrawPoolAlpha
-{
-public:
-	LLDrawPoolAlphaPostWater();
-	virtual void render(S32 pass = 0);
-};
-
 #endif // LL_LLDRAWPOOLALPHA_H
diff --git a/indra/newview/lldrawpoolavatar.h b/indra/newview/lldrawpoolavatar.h
index cb09eb18e2152bc3ef35b8aee6aa55d1dd21be68..136435016189200cc58ebfc2f72e410e20e038bb 100644
--- a/indra/newview/lldrawpoolavatar.h
+++ b/indra/newview/lldrawpoolavatar.h
@@ -37,7 +37,7 @@ class LLVolume;
 class LLVolumeFace;
 
 
-class LLDrawPoolAvatar : public LLFacePool
+class LLDrawPoolAvatar final : public LLFacePool
 {
 public:
 	enum
diff --git a/indra/newview/lldrawpoolbump.h b/indra/newview/lldrawpoolbump.h
index 476b1d41b7d40d85ac08d6fb353cabe18d4773b3..dd458ed4047707a94ee75352b013440076921514 100644
--- a/indra/newview/lldrawpoolbump.h
+++ b/indra/newview/lldrawpoolbump.h
@@ -168,7 +168,7 @@ class LLBumpImageList
 
 extern LLBumpImageList gBumpImageList;
 
-class LLDrawPoolInvisible : public LLDrawPoolBump
+class LLDrawPoolInvisible final : public LLDrawPoolBump
 {
 public:
 	LLDrawPoolInvisible() : LLDrawPoolBump(LLDrawPool::POOL_INVISIBLE) { }
diff --git a/indra/newview/lldrawpoolground.h b/indra/newview/lldrawpoolground.h
index a4f8a3fcf50e343bba2dff7b85a0fc3c806cc243..105aeee6d39a67e4fc8a00c04e2277f41bc48ff5 100644
--- a/indra/newview/lldrawpoolground.h
+++ b/indra/newview/lldrawpoolground.h
@@ -30,7 +30,7 @@
 #include "lldrawpool.h"
 
 
-class LLDrawPoolGround : public LLFacePool
+class LLDrawPoolGround final : public LLFacePool
 {
 public:
 	enum
diff --git a/indra/newview/lldrawpoolmaterials.h b/indra/newview/lldrawpoolmaterials.h
index eae1aba87cd8ed375b7f278711ddbb5a56b53d78..b25919c434fe712696ac989e4d4e3d90bd797911 100644
--- a/indra/newview/lldrawpoolmaterials.h
+++ b/indra/newview/lldrawpoolmaterials.h
@@ -38,7 +38,7 @@ class LLViewerTexture;
 class LLDrawInfo;
 class LLGLSLShader;
 
-class LLDrawPoolMaterials : public LLRenderPass
+class LLDrawPoolMaterials final : public LLRenderPass
 {
 	LLGLSLShader *mShader;
 public:
diff --git a/indra/newview/lldrawpoolsimple.h b/indra/newview/lldrawpoolsimple.h
index 608ad9e1eb0856a2095769b117f99fe070ee5cf9..f7b6bdb7a5f33ce08840c0eac9c8895fe8680ff1 100644
--- a/indra/newview/lldrawpoolsimple.h
+++ b/indra/newview/lldrawpoolsimple.h
@@ -29,7 +29,7 @@
 
 #include "lldrawpool.h"
 
-class LLDrawPoolSimple : public LLRenderPass
+class LLDrawPoolSimple final : public LLRenderPass
 {
 public:
 	enum
@@ -57,7 +57,7 @@ class LLDrawPoolSimple : public LLRenderPass
 
 };
 
-class LLDrawPoolGrass : public LLRenderPass
+class LLDrawPoolGrass final : public LLRenderPass
 {
 public:
 	enum
@@ -84,7 +84,7 @@ class LLDrawPoolGrass : public LLRenderPass
 	/*virtual*/ void prerender();
 };
 
-class LLDrawPoolAlphaMask : public LLRenderPass
+class LLDrawPoolAlphaMask final : public LLRenderPass
 {
 public:
 	enum
@@ -111,7 +111,7 @@ class LLDrawPoolAlphaMask : public LLRenderPass
 
 };
 
-class LLDrawPoolFullbrightAlphaMask : public LLRenderPass
+class LLDrawPoolFullbrightAlphaMask final : public LLRenderPass
 {
 public:
 	enum
@@ -137,7 +137,7 @@ class LLDrawPoolFullbrightAlphaMask : public LLRenderPass
 };
 
 
-class LLDrawPoolFullbright : public LLRenderPass
+class LLDrawPoolFullbright final : public LLRenderPass
 {
 public:
 	enum
@@ -163,7 +163,7 @@ class LLDrawPoolFullbright : public LLRenderPass
 
 };
 
-class LLDrawPoolGlow : public LLRenderPass
+class LLDrawPoolGlow final : public LLRenderPass
 {
 public:
 	LLDrawPoolGlow(): LLRenderPass(LLDrawPool::POOL_GLOW) { }
diff --git a/indra/newview/lldrawpoolsky.h b/indra/newview/lldrawpoolsky.h
index 916d8c1cbe7243892900a4db5dcf6b59cf058537..34a52c604969070f6f9ce521b885cbbb410326da 100644
--- a/indra/newview/lldrawpoolsky.h
+++ b/indra/newview/lldrawpoolsky.h
@@ -32,7 +32,7 @@
 class LLSkyTex;
 class LLGLSLShader;
 
-class LLDrawPoolSky : public LLFacePool
+class LLDrawPoolSky final : public LLFacePool
 {
 private:
 	LLSkyTex			*mSkyTex;
diff --git a/indra/newview/lldrawpoolterrain.h b/indra/newview/lldrawpoolterrain.h
index 04e27d9370ed4dd05309450a0e8a5eceebb441f0..c0506e4644961c58e4b32eba1a208f948504d815 100644
--- a/indra/newview/lldrawpoolterrain.h
+++ b/indra/newview/lldrawpoolterrain.h
@@ -29,7 +29,7 @@
 
 #include "lldrawpool.h"
 
-class LLDrawPoolTerrain : public LLFacePool
+class LLDrawPoolTerrain final : public LLFacePool
 {
 	LLPointer<LLViewerTexture> mTexturep;
 public:
diff --git a/indra/newview/lldrawpooltree.h b/indra/newview/lldrawpooltree.h
index 9c1e60f5ebb990a8fc8310cf0569e1230c6a997d..f1b5f59f32d1af139ab14d643e4f0eae84451f12 100644
--- a/indra/newview/lldrawpooltree.h
+++ b/indra/newview/lldrawpooltree.h
@@ -29,7 +29,7 @@
 
 #include "lldrawpool.h"
 
-class LLDrawPoolTree : public LLFacePool
+class LLDrawPoolTree final : public LLFacePool
 {
 	LLPointer<LLViewerTexture> mTexturep;
 public:
diff --git a/indra/newview/lldrawpoolwater.h b/indra/newview/lldrawpoolwater.h
index d436557e1cb070f43ceb23598c23b874864a7add..44ed579b8b3e8563b7f44a67858a60ec2f12bbb6 100644
--- a/indra/newview/lldrawpoolwater.h
+++ b/indra/newview/lldrawpoolwater.h
@@ -35,7 +35,7 @@ class LLHeavenBody;
 class LLWaterSurface;
 class LLGLSLShader;
 
-class LLDrawPoolWater: public LLFacePool
+class LLDrawPoolWater final : public LLFacePool
 {
 protected:
 	LLPointer<LLViewerTexture> mWaterImagep[2];	
diff --git a/indra/newview/lldrawpoolwlsky.h b/indra/newview/lldrawpoolwlsky.h
index 3acfda4eee55508f3779a5aa65e96a6300ffd3bf..905c7eebdce72a03e15ccd90eb7b71e6d351c684 100644
--- a/indra/newview/lldrawpoolwlsky.h
+++ b/indra/newview/lldrawpoolwlsky.h
@@ -31,7 +31,7 @@
 
 class LLGLSLShader;
 
-class LLDrawPoolWLSky : public LLDrawPool {
+class LLDrawPoolWLSky final : public LLDrawPool {
 public:
 
 	static const U32 SKY_VERTEX_DATA_MASK =	LLVertexBuffer::MAP_VERTEX |
diff --git a/indra/newview/llenvironment.h b/indra/newview/llenvironment.h
index 91c4b851352d9928c5a1d9e899f137e8307af967..feb2dc7fad2b59162acd796063a388c703f43af6 100644
--- a/indra/newview/llenvironment.h
+++ b/indra/newview/llenvironment.h
@@ -46,7 +46,7 @@ class LLGLSLShader;
 class LLParcel;
 
 //-------------------------------------------------------------------------
-class LLEnvironment : public LLSingleton<LLEnvironment>
+class LLEnvironment final : public LLSingleton<LLEnvironment>
 {
     LLSINGLETON_C11(LLEnvironment);
     LOG_CLASS(LLEnvironment);
diff --git a/indra/newview/llflexibleobject.h b/indra/newview/llflexibleobject.h
index 9383ab03ae78d215f724188fec7181d4cec74800..787c65ea48a0dd16fe709c6443aacb645d174bee 100644
--- a/indra/newview/llflexibleobject.h
+++ b/indra/newview/llflexibleobject.h
@@ -68,7 +68,7 @@ struct LLFlexibleObjectSection
 //---------------------------------------------------------
 // The LLVolumeImplFlexible class 
 //---------------------------------------------------------
-class LLVolumeImplFlexible : public LLVolumeInterface
+class LLVolumeImplFlexible final : public LLVolumeInterface
 {
 private:
 	static std::vector<LLVolumeImplFlexible*> sInstanceList;
diff --git a/indra/newview/llhudeffectbeam.h b/indra/newview/llhudeffectbeam.h
index fdee5178af266059a04c808d8bddfab8c78bbb81..4d8d6e1d863a9759f6148514fe6fd710c001ddc6 100644
--- a/indra/newview/llhudeffectbeam.h
+++ b/indra/newview/llhudeffectbeam.h
@@ -37,7 +37,7 @@ class LLViewerObject;
 
 const S32 NUM_POINTS = 5;
 
-class LLHUDEffectBeam : public LLHUDEffect
+class LLHUDEffectBeam final : public LLHUDEffect
 {
 public:
 	/*virtual*/ void setSourceObject(LLViewerObject *objp);
diff --git a/indra/newview/llhudeffectblob.h b/indra/newview/llhudeffectblob.h
index ce3e8500fc180d6b98d12c33769e0fdd95a3be91..b906d07bb5c696d2533bc4b93bc34ac57ac972ec 100644
--- a/indra/newview/llhudeffectblob.h
+++ b/indra/newview/llhudeffectblob.h
@@ -30,7 +30,7 @@
 #include "llhudeffect.h"
 #include "lluiimage.h"
 
-class LLHUDEffectBlob : public LLHUDEffect
+class LLHUDEffectBlob final : public LLHUDEffect
 {
 public:
 	friend class LLHUDObject;
diff --git a/indra/newview/llhudeffectpointat.h b/indra/newview/llhudeffectpointat.h
index 6200b68cbc410361849908f16de03457fa4c08bc..a2c85d7a14a8ee316da375e79b1330ac7751dbbf 100644
--- a/indra/newview/llhudeffectpointat.h
+++ b/indra/newview/llhudeffectpointat.h
@@ -42,7 +42,7 @@ typedef enum e_pointat_type
 	POINTAT_NUM_TARGETS
 } EPointAtType;
 
-class LLHUDEffectPointAt : public LLHUDEffect
+class LLHUDEffectPointAt final : public LLHUDEffect
 {
 public:
 	friend class LLHUDObject;
diff --git a/indra/newview/llhudeffecttrail.h b/indra/newview/llhudeffecttrail.h
index 6f5a328c6364e4305698518a62215dec4a1960d9..0879cdb5796b01c1dbd71d6628d4c5248adb8421 100644
--- a/indra/newview/llhudeffecttrail.h
+++ b/indra/newview/llhudeffecttrail.h
@@ -39,7 +39,7 @@ class LLViewerObject;
 const U32 NUM_TRAIL_POINTS = 40;
 
 
-class LLHUDEffectSpiral : public LLHUDEffect
+class LLHUDEffectSpiral final : public LLHUDEffect
 {
 public:
 	/*virtual*/ void markDead();
diff --git a/indra/newview/llspatialpartition.h b/indra/newview/llspatialpartition.h
index 7e65da42f7e471d9760d6920529d254b8834d676..3dec14270ca94709dfc22bea9d8cec3749fa21ba 100644
--- a/indra/newview/llspatialpartition.h
+++ b/indra/newview/llspatialpartition.h
@@ -664,7 +664,7 @@ class LLVolumeGeometryManager: public LLGeometryManager
 };
 
 //spatial partition that uses volume geometry manager (implemented in LLVOVolume.cpp)
-class LLVolumePartition : public LLSpatialPartition, public LLVolumeGeometryManager
+class LLVolumePartition final : public LLSpatialPartition, public LLVolumeGeometryManager
 {
 public:
 	LLVolumePartition(LLViewerRegion* regionp);
@@ -685,7 +685,7 @@ class LLVolumeBridge : public LLSpatialBridge, public LLVolumeGeometryManager
 	virtual void addGeometryCount(LLSpatialGroup* group, U32 &vertex_count, U32& index_count) { LLVolumeGeometryManager::addGeometryCount(group, vertex_count, index_count); }
 };
 
-class LLHUDBridge : public LLVolumeBridge
+class LLHUDBridge final : public LLVolumeBridge
 {
 public:
 	LLHUDBridge(LLDrawable* drawablep, LLViewerRegion* regionp);
diff --git a/indra/newview/lluiavatar.h b/indra/newview/lluiavatar.h
index bcdffedef2a5ae833e86f961f5824af9fd7120c7..3389aee0bf862e0c66fd0b97f959dddd5cea3fd5 100644
--- a/indra/newview/lluiavatar.h
+++ b/indra/newview/lluiavatar.h
@@ -30,7 +30,7 @@
 #include "llvoavatar.h"
 #include "llvovolume.h"
 
-class LLUIAvatar:
+class LLUIAvatar final :
     public LLVOAvatar
 {
     LOG_CLASS(LLUIAvatar);
diff --git a/indra/newview/llvieweraudio.h b/indra/newview/llvieweraudio.h
index 16f9b63113d88699a0ffb8d74fe459decc9e8366..b379e281b1824c1c6e70c4069649502e8a398100 100644
--- a/indra/newview/llvieweraudio.h
+++ b/indra/newview/llvieweraudio.h
@@ -41,7 +41,7 @@ void audio_update_volume(bool force_update = true);
 void audio_update_listener();
 void audio_update_wind(bool force_update = true);
 
-class LLViewerAudio : public LLSingleton<LLViewerAudio>
+class LLViewerAudio final : public LLSingleton<LLViewerAudio>
 {
 	LLSINGLETON(LLViewerAudio);
 	virtual ~LLViewerAudio();
diff --git a/indra/newview/llviewercamera.h b/indra/newview/llviewercamera.h
index fb07a3fb2df41a8482de8e447d3b02cad2fb0a70..103fa0c02b8ae9655a991f54deac086ae65ae627 100644
--- a/indra/newview/llviewercamera.h
+++ b/indra/newview/llviewercamera.h
@@ -44,7 +44,7 @@ extern template class LLViewerCamera* LLSingleton<class LLViewerCamera>::getInst
 #endif
 
 LL_ALIGN_PREFIX(16)
-class LLViewerCamera : public LLCamera, public LLSingleton<LLViewerCamera>
+class LLViewerCamera final : public LLCamera, public LLSingleton<LLViewerCamera>
 {
 	LLSINGLETON(LLViewerCamera);
 public:
diff --git a/indra/newview/llviewerpartsim.h b/indra/newview/llviewerpartsim.h
index ab1cd715ab225552ce52b213f0f0028a13dcf021..072ed9ab54dfc40e4dc7edb09c5df6ab871899a4 100644
--- a/indra/newview/llviewerpartsim.h
+++ b/indra/newview/llviewerpartsim.h
@@ -47,7 +47,7 @@ typedef void (*LLVPCallback)(LLViewerPart &part, const F32 dt);
 //
 
 
-class LLViewerPart : public LLPartData
+class LLViewerPart final : public LLPartData
 {
 public:
 	~LLViewerPart();
@@ -133,7 +133,7 @@ class LLViewerPartGroup
 	LLViewerRegion *mRegionp;
 };
 
-class LLViewerPartSim : public LLSingleton<LLViewerPartSim>
+class LLViewerPartSim final : public LLSingleton<LLViewerPartSim>
 {
 	LLSINGLETON(LLViewerPartSim);
 public:
diff --git a/indra/newview/llviewerpartsource.h b/indra/newview/llviewerpartsource.h
index 504229e81f121d647f2d682305e90b57ae1bcac1..475cc7feb2cd51ef7fcf465871d9ea570063a3b7 100644
--- a/indra/newview/llviewerpartsource.h
+++ b/indra/newview/llviewerpartsource.h
@@ -104,7 +104,7 @@ class LLViewerPartSource : public LLRefCount
 //
 
 
-class LLViewerPartSourceScript : public LLViewerPartSource
+class LLViewerPartSourceScript final : public LLViewerPartSource
 {
 public:
 	LLViewerPartSourceScript(LLViewerObject *source_objp);
@@ -136,7 +136,7 @@ class LLViewerPartSourceScript : public LLViewerPartSource
 // Particle source for spiral effect (customize avatar, mostly)
 //
 
-class LLViewerPartSourceSpiral : public LLViewerPartSource
+class LLViewerPartSourceSpiral final : public LLViewerPartSource
 {
 public:
 	LLViewerPartSourceSpiral(const LLVector3 &pos);
@@ -160,7 +160,7 @@ class LLViewerPartSourceSpiral : public LLViewerPartSource
 // Particle source for tractor(editing) beam
 //
 
-class LLViewerPartSourceBeam : public LLViewerPartSource
+class LLViewerPartSourceBeam final : public LLViewerPartSource
 {
 public:
 	LLViewerPartSourceBeam();
@@ -190,7 +190,7 @@ class LLViewerPartSourceBeam : public LLViewerPartSource
 // Particle source for chat effect
 //
 
-class LLViewerPartSourceChat : public LLViewerPartSource
+class LLViewerPartSourceChat final : public LLViewerPartSource
 {
 public:
 	LLViewerPartSourceChat(const LLVector3 &pos);
diff --git a/indra/newview/llvoavatarself.h b/indra/newview/llvoavatarself.h
index 8da24cbcfa8bdf70ad0f2d7a49008bf079beffa5..4d01a685dcc934787b6db5f99e3e4a7e6c0ee63c 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/llvocache.h b/indra/newview/llvocache.h
index 6c95541c1169469c092587cb76344539d1e54fe9..8fb72df2a1e052164f5f9ef90116a1ec45dde873 100644
--- a/indra/newview/llvocache.h
+++ b/indra/newview/llvocache.h
@@ -37,7 +37,7 @@
 // Cache entries
 class LLCamera;
 
-class LLVOCacheEntry 
+class LLVOCacheEntry final
 :	public LLViewerOctreeEntryData,
 	public LLTrace::MemTrackable<LLVOCacheEntry, 16>
 {
@@ -173,7 +173,7 @@ class LLVOCacheEntry
 	static F32					sRearPixelThreshold;
 };
 
-class LLVOCacheGroup : public LLOcclusionCullingGroup
+class LLVOCacheGroup final : public LLOcclusionCullingGroup
 {
 public:
 	LLVOCacheGroup(OctreeNode* node, LLViewerOctreePartition* part) : LLOcclusionCullingGroup(node, part){}	
@@ -185,7 +185,7 @@ class LLVOCacheGroup : public LLOcclusionCullingGroup
 	virtual ~LLVOCacheGroup();
 };
 
-class LLVOCachePartition : public LLViewerOctreePartition, public LLTrace::MemTrackable<LLVOCachePartition>
+class LLVOCachePartition final : public LLViewerOctreePartition, public LLTrace::MemTrackable<LLVOCachePartition>
 {
 public:
 	LLVOCachePartition(LLViewerRegion* regionp);
@@ -221,7 +221,7 @@ class LLVOCachePartition : public LLViewerOctreePartition, public LLTrace::MemTr
 //
 //Note: LLVOCache is not thread-safe
 //
-class LLVOCache : public LLParamSingleton<LLVOCache>
+class LLVOCache final : public LLParamSingleton<LLVOCache>
 {
 	LLSINGLETON(LLVOCache, bool read_only);
 	~LLVOCache() ;
diff --git a/indra/newview/llvograss.h b/indra/newview/llvograss.h
index 5634e048eb387c6159210b39f30cf8599f50bb02..66b70d936b765bd0a3f3d827f282e049722bd6bb 100644
--- a/indra/newview/llvograss.h
+++ b/indra/newview/llvograss.h
@@ -34,7 +34,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 a53f309e468eefcdaf546a7f569273aa8c4eba97..21edc261c9f3c46247263f2a8615a9a2bc18dde9 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();
diff --git a/indra/newview/llvoicevisualizer.h b/indra/newview/llvoicevisualizer.h
index 36c78252d13556c5fc72a0904ee1d996b0bc271f..87ba1dbc3ea4666932e9676d1674895f00896959 100644
--- a/indra/newview/llvoicevisualizer.h
+++ b/indra/newview/llvoicevisualizer.h
@@ -65,7 +65,7 @@ const static int NUM_VOICE_SYMBOL_WAVES = 7;
 //----------------------------------------------------
 // LLVoiceVisualizer class 
 //----------------------------------------------------
-class LLVoiceVisualizer : public LLHUDEffect
+class LLVoiceVisualizer final : public LLHUDEffect
 {
 	//---------------------------------------------------
 	// public methods 
diff --git a/indra/newview/llvopartgroup.h b/indra/newview/llvopartgroup.h
index 4e4d6e609dbc486c9b6e657fc9399f72ce7615d0..9e1b9c0bee2b41ce0d85f3eb3fd56db7c02dd833 100644
--- a/indra/newview/llvopartgroup.h
+++ b/indra/newview/llvopartgroup.h
@@ -115,7 +115,7 @@ class LLVOPartGroup : public LLAlphaObject
 };
 
 
-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 39e42bbb2420c9d185bb398ff1ba9d8ef8d0d898..93212075930c4f4b72360a8d9a827829e932efac 100644
--- a/indra/newview/llvosky.h
+++ b/indra/newview/llvosky.h
@@ -191,7 +191,7 @@ class LLHeavenBody
 
 class LLCubeMap;
 
-class LLVOSky : public LLStaticViewerObject
+class LLVOSky final : public LLStaticViewerObject
 {
 public:	
 	enum
diff --git a/indra/newview/llvosurfacepatch.h b/indra/newview/llvosurfacepatch.h
index 884dbb3be393425f3e758e11b88d1edce618774a..1b78c4e6553be72eb13221bf1a7723559899dd57 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 93c22d2da3127d03411b65ab596704af74a4468d..22f014ce8d6a21d3336f28662b0dfce82d227ce9 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 4c412605b1f91ddef173fbb306ba6d9eac5b7f27..9d6095261919f05d8a452443476b8fa6881ca4ec 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 @@ class LLVolumeInterface
 };
 
 // Class which embodies all Volume objects (with pcode LL_PCODE_VOLUME)
-class LLVOVolume : public LLViewerObject
+class LLVOVolume final : public LLViewerObject
 {
 	LOG_CLASS(LLVOVolume);
 protected:
diff --git a/indra/newview/llvowater.h b/indra/newview/llvowater.h
index 7a8d8192153571a6ca8958a26374e037fd5cc40f..3a6550e5d715badac874f78d634ad5c096f4d6e6 100644
--- a/indra/newview/llvowater.h
+++ b/indra/newview/llvowater.h
@@ -52,23 +52,23 @@ class LLVOWater : public LLStaticViewerObject
 
 	LLVOWater(const LLUUID &id, const LLPCode pcode, LLViewerRegion *regionp);
 
-	/*virtual*/ void markDead();
+	/*virtual*/ void markDead() final;
 
 	// Initialize data that's only inited once per class.
 	static void initClass();
 	static void cleanupClass();
 
-	/*virtual*/ void idleUpdate(LLAgent &agent, const F64 &time);
-	/*virtual*/ LLDrawable* createDrawable(LLPipeline *pipeline);
-	/*virtual*/ BOOL        updateGeometry(LLDrawable *drawable);
-	/*virtual*/ void		updateSpatialExtents(LLVector4a& newMin, LLVector4a& newMax);
+	/*virtual*/ void idleUpdate(LLAgent &agent, const F64 &time) final;
+	/*virtual*/ LLDrawable* createDrawable(LLPipeline *pipeline) final;
+	/*virtual*/ BOOL        updateGeometry(LLDrawable *drawable) final;
+	/*virtual*/ void		updateSpatialExtents(LLVector4a& newMin, LLVector4a& newMax) final;
 
-	/*virtual*/ void updateTextures();
-	/*virtual*/ void setPixelAreaAndAngle(LLAgent &agent); // generate accurate apparent angle and area
+	/*virtual*/ void updateTextures() final;
+	/*virtual*/ void setPixelAreaAndAngle(LLAgent &agent) final; // generate accurate apparent angle and area
 
-	virtual U32 getPartitionType() const;
+	/*virtual*/ U32 getPartitionType() const override;
 
-	/*virtual*/ BOOL isActive() const; // Whether this object needs to do an idleUpdate.
+	/*virtual*/ BOOL isActive() const final; // Whether this object needs to do an idleUpdate.
 
 	void setUseTexture(const BOOL use_texture);
 	void setIsEdgePatch(const BOOL edge_patch);
@@ -81,7 +81,7 @@ class LLVOWater : public LLStaticViewerObject
 	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 2b7ebe75dd7ef05fcb957d67cd895098db359bc6..d4ac32dacc03287b6dd41e3c4491b354356c3b3b 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:
 	inline static U32 getNumStacks(void);
 	inline static U32 getNumSlices(void);
diff --git a/indra/newview/llworld.h b/indra/newview/llworld.h
index 6fee03dc724b3951d3c7fed60cd052202f603ed2..d9c35a58492b4a5083690317dfbfde4eb754b330 100644
--- a/indra/newview/llworld.h
+++ b/indra/newview/llworld.h
@@ -59,7 +59,7 @@ class LLVOAvatar;
 // as simulators are connected to, viewer_regions are popped off the stack and connected as required
 // as simulators are removed, they are pushed back onto the stack
 
-class LLWorld : public LLSingleton<LLWorld>
+class LLWorld final : public LLSingleton<LLWorld>
 {
 	LLSINGLETON(LLWorld);
 public: