diff --git a/indra/newview/llcapabilityprovider.h b/indra/newview/llcapabilityprovider.h
index b692d03848358e6d75fb76c6eb3f08692f232a00..47467d342c8e49873b6176587a78d4ac4dd9b999 100644
--- a/indra/newview/llcapabilityprovider.h
+++ b/indra/newview/llcapabilityprovider.h
@@ -36,7 +36,7 @@
 class LLCapabilityProvider
 {
 public:
-    virtual ~LLCapabilityProvider() {}
+	virtual ~LLCapabilityProvider() = default;
     /**
      * Get a capability URL, given a capability name. Returns empty string if
      * no such capability is defined on this provider.
diff --git a/indra/newview/llpanelmaininventory.h b/indra/newview/llpanelmaininventory.h
index 205528b27b52a3283c390580b6bebaf9730030eb..7aa0498e91c5e10c723280b79ec52ddf7b79923c 100644
--- a/indra/newview/llpanelmaininventory.h
+++ b/indra/newview/llpanelmaininventory.h
@@ -53,7 +53,7 @@ class LLFloater;
 // including all the fixin's (e.g. AllItems/RecentItems tabs, filter floaters).
 //
 //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-class LLPanelMainInventory : public LLPanel, LLInventoryObserver
+class LLPanelMainInventory final : public LLPanel, LLInventoryObserver
 {
 public:
 	friend class LLFloaterInventoryFinder;
diff --git a/indra/newview/llpanelmarketplaceinbox.h b/indra/newview/llpanelmarketplaceinbox.h
index e5c15fbd579358fbc69a595e71bc677fcce178c2..b365a0b5cbade16330e79dd4d45dc4fd7eee1e6e 100644
--- a/indra/newview/llpanelmarketplaceinbox.h
+++ b/indra/newview/llpanelmarketplaceinbox.h
@@ -33,7 +33,7 @@ class LLButton;
 class LLInventoryPanel;
 class LLUICtrl;
 
-class LLPanelMarketplaceInbox : public LLPanel
+class LLPanelMarketplaceInbox final : public LLPanel
 {
 public:
 
diff --git a/indra/newview/llpanelmarketplaceinboxinventory.h b/indra/newview/llpanelmarketplaceinboxinventory.h
index c8a1d7b9fec68cf9a3bc3988762780b18439daba..98ed112d097e3854a518c35a5027472e622022e5 100644
--- a/indra/newview/llpanelmarketplaceinboxinventory.h
+++ b/indra/newview/llpanelmarketplaceinboxinventory.h
@@ -52,7 +52,7 @@ public:
 };
 
 
-class LLInboxFolderViewFolder : public LLFolderViewFolder, public LLBadgeOwner
+class LLInboxFolderViewFolder final : public LLFolderViewFolder, public LLBadgeOwner
 {
 public:
 	struct Params : public LLInitParam::Block<Params, LLFolderViewFolder::Params>
@@ -83,7 +83,7 @@ protected:
 };
 
 
-class LLInboxFolderViewItem : public LLFolderViewItem, public LLBadgeOwner
+class LLInboxFolderViewItem final : public LLFolderViewItem, public LLBadgeOwner
 {
 public:
 	struct Params : public LLInitParam::Block<Params, LLFolderViewItem::Params>
diff --git a/indra/newview/llpanelme.h b/indra/newview/llpanelme.h
index e08dfa8d97fb2def05862e4f71c6cc84f9102d2d..d0870f4d4184a85ebcea44c275b54e57e54142ea 100644
--- a/indra/newview/llpanelme.h
+++ b/indra/newview/llpanelme.h
@@ -34,7 +34,7 @@
 * Panel for displaying Agent's Picks and Classifieds panel.
 * LLPanelMe allows user to edit his picks and classifieds.
 */
-class LLPanelMe : public LLPanelProfile
+class LLPanelMe final : public LLPanelProfile
 {
 	LOG_CLASS(LLPanelMe);
 
diff --git a/indra/newview/llpanelmediasettingsgeneral.h b/indra/newview/llpanelmediasettingsgeneral.h
index d001396858ba38aa6f437862f5b27d3ceef76119..d50bd74221dfbfea31463682d3102474cd730085 100644
--- a/indra/newview/llpanelmediasettingsgeneral.h
+++ b/indra/newview/llpanelmediasettingsgeneral.h
@@ -38,7 +38,7 @@ class LLMediaCtrl;
 class LLTextBox;
 class LLFloaterMediaSettings;
 
-class LLPanelMediaSettingsGeneral : public LLPanel
+class LLPanelMediaSettingsGeneral final : public LLPanel
 {
 public:
 	LLPanelMediaSettingsGeneral();
diff --git a/indra/newview/llpanelmediasettingspermissions.h b/indra/newview/llpanelmediasettingspermissions.h
index de6ab884535b10febf62079c4b1bacb945afc0eb..2706f86720afd5f1426cce581a2135e62f225641 100644
--- a/indra/newview/llpanelmediasettingspermissions.h
+++ b/indra/newview/llpanelmediasettingspermissions.h
@@ -38,7 +38,7 @@ class LLComboBox;
 class LLCheckBoxCtrl;
 class LLNameBox;
 
-class LLPanelMediaSettingsPermissions : public LLPanel
+class LLPanelMediaSettingsPermissions final : public LLPanel
 {
 public:
 	LLPanelMediaSettingsPermissions();
diff --git a/indra/newview/llpanelmediasettingssecurity.h b/indra/newview/llpanelmediasettingssecurity.h
index d15bb5efc3821b77c77ff0f5630ef2a9026ffdb6..d3c3ff3851ff31f0dda39452e25ce6ec3bedae61 100644
--- a/indra/newview/llpanelmediasettingssecurity.h
+++ b/indra/newview/llpanelmediasettingssecurity.h
@@ -34,7 +34,7 @@ class LLScrollListCtrl;
 class LLTextBox;
 class LLFloaterMediaSettings;
 
-class LLPanelMediaSettingsSecurity : public LLPanel
+class LLPanelMediaSettingsSecurity final : public LLPanel
 {
 public:
 	LLPanelMediaSettingsSecurity();
diff --git a/indra/newview/llpanelnearbymedia.h b/indra/newview/llpanelnearbymedia.h
index 4fe9dc966574835b6706ada7b519bcde1722dd38..e85def8c6f86d2fb9d9cd42a39ffd59ecb440173 100644
--- a/indra/newview/llpanelnearbymedia.h
+++ b/indra/newview/llpanelnearbymedia.h
@@ -39,7 +39,7 @@ class LLTextBox;
 class LLComboBox;
 class LLViewerMediaImpl;
 
-class LLPanelNearByMedia : public LLPanel
+class LLPanelNearByMedia final : public LLPanel
 {
 public:
 	
diff --git a/indra/newview/llpanelobjectinventory.cpp b/indra/newview/llpanelobjectinventory.cpp
index 1457d2e30bdd8d81b033b52b2fbab998e99b1890..88b0fcdc7b1a81a38b22145e4d341a6f25d5a7c1 100644
--- a/indra/newview/llpanelobjectinventory.cpp
+++ b/indra/newview/llpanelobjectinventory.cpp
@@ -94,7 +94,7 @@ public:
 					  const LLUUID& uuid,
 					  const std::string& name,
 					  U32 flags=0);
-	virtual ~LLTaskInvFVBridge() {}
+	virtual ~LLTaskInvFVBridge() = default;
 
 	LLFontGL::StyleFlags getLabelStyle() const override { return LLFontGL::NORMAL; }
 	std::string getLabelSuffix() const override { return LLStringUtil::null; }
@@ -572,7 +572,7 @@ void LLTaskInvFVBridge::buildContextMenu(LLMenuGL& menu, U32 flags)
 /// Class LLTaskFolderBridge
 ///----------------------------------------------------------------------------
 
-class LLTaskCategoryBridge : public LLTaskInvFVBridge
+class LLTaskCategoryBridge final : public LLTaskInvFVBridge
 {
 public:
 	LLTaskCategoryBridge(
@@ -747,7 +747,7 @@ BOOL LLTaskCategoryBridge::dragOrDrop(MASK mask, BOOL drop,
 /// Class LLTaskTextureBridge
 ///----------------------------------------------------------------------------
 
-class LLTaskTextureBridge : public LLTaskInvFVBridge
+class LLTaskTextureBridge final : public LLTaskInvFVBridge
 {
 public:
 	LLTaskTextureBridge(LLPanelObjectInventory* panel,
@@ -779,7 +779,7 @@ void LLTaskTextureBridge::openItem()
 /// Class LLTaskSoundBridge
 ///----------------------------------------------------------------------------
 
-class LLTaskSoundBridge : public LLTaskInvFVBridge
+class LLTaskSoundBridge final : public LLTaskInvFVBridge
 {
 public:
 	LLTaskSoundBridge(LLPanelObjectInventory* panel,
@@ -868,7 +868,7 @@ void LLTaskSoundBridge::buildContextMenu(LLMenuGL& menu, U32 flags)
 /// Class LLTaskLandmarkBridge
 ///----------------------------------------------------------------------------
 
-class LLTaskLandmarkBridge : public LLTaskInvFVBridge
+class LLTaskLandmarkBridge final : public LLTaskInvFVBridge
 {
 public:
 	LLTaskLandmarkBridge(LLPanelObjectInventory* panel,
@@ -881,7 +881,7 @@ public:
 /// Class LLTaskCallingCardBridge
 ///----------------------------------------------------------------------------
 
-class LLTaskCallingCardBridge : public LLTaskInvFVBridge
+class LLTaskCallingCardBridge final : public LLTaskInvFVBridge
 {
 public:
 	LLTaskCallingCardBridge(LLPanelObjectInventory* panel,
@@ -908,7 +908,7 @@ BOOL LLTaskCallingCardBridge::renameItem(const std::string& new_name)
 /// Class LLTaskScriptBridge
 ///----------------------------------------------------------------------------
 
-class LLTaskScriptBridge : public LLTaskInvFVBridge
+class LLTaskScriptBridge  : public LLTaskInvFVBridge
 {
 public:
 	LLTaskScriptBridge(LLPanelObjectInventory* panel,
@@ -919,7 +919,7 @@ public:
 	//static BOOL enableIfCopyable( void* userdata );
 };
 
-class LLTaskLSLBridge : public LLTaskScriptBridge
+class LLTaskLSLBridge final : public LLTaskScriptBridge
 {
 public:
 	LLTaskLSLBridge(LLPanelObjectInventory* panel,
@@ -970,7 +970,7 @@ BOOL LLTaskLSLBridge::removeItem()
 /// Class LLTaskObjectBridge
 ///----------------------------------------------------------------------------
 
-class LLTaskObjectBridge : public LLTaskInvFVBridge
+class LLTaskObjectBridge final : public LLTaskInvFVBridge
 {
 public:
 	LLTaskObjectBridge(LLPanelObjectInventory* panel,
@@ -984,7 +984,7 @@ public:
 /// Class LLTaskNotecardBridge
 ///----------------------------------------------------------------------------
 
-class LLTaskNotecardBridge : public LLTaskInvFVBridge
+class LLTaskNotecardBridge final : public LLTaskInvFVBridge
 {
 public:
 	LLTaskNotecardBridge(LLPanelObjectInventory* panel,
@@ -1033,7 +1033,7 @@ BOOL LLTaskNotecardBridge::removeItem()
 /// Class LLTaskGestureBridge
 ///----------------------------------------------------------------------------
 
-class LLTaskGestureBridge : public LLTaskInvFVBridge
+class LLTaskGestureBridge final : public LLTaskInvFVBridge
 {
 public:
 	LLTaskGestureBridge(LLPanelObjectInventory* panel,
@@ -1067,7 +1067,7 @@ BOOL LLTaskGestureBridge::removeItem()
 /// Class LLTaskAnimationBridge
 ///----------------------------------------------------------------------------
 
-class LLTaskAnimationBridge : public LLTaskInvFVBridge
+class LLTaskAnimationBridge final : public LLTaskInvFVBridge
 {
 public:
 	LLTaskAnimationBridge(LLPanelObjectInventory* panel,
@@ -1105,7 +1105,7 @@ BOOL LLTaskAnimationBridge::removeItem()
 /// Class LLTaskWearableBridge
 ///----------------------------------------------------------------------------
 
-class LLTaskWearableBridge : public LLTaskInvFVBridge
+class LLTaskWearableBridge final : public LLTaskInvFVBridge
 {
 public:
 	LLTaskWearableBridge(LLPanelObjectInventory* panel,
@@ -1126,7 +1126,7 @@ LLUIImagePtr LLTaskWearableBridge::getIcon() const
 /// Class LLTaskMeshBridge
 ///----------------------------------------------------------------------------
 
-class LLTaskMeshBridge : public LLTaskInvFVBridge
+class LLTaskMeshBridge final : public LLTaskInvFVBridge
 {
 public:
 	LLTaskMeshBridge(
diff --git a/indra/newview/llpaneloutfitedit.cpp b/indra/newview/llpaneloutfitedit.cpp
index c3d1850eeca9a16781b00f7e997d9125e21b6c3f..32e84a0bddf6d40c6bb3148647211f88b07d4642 100644
--- a/indra/newview/llpaneloutfitedit.cpp
+++ b/indra/newview/llpaneloutfitedit.cpp
@@ -209,7 +209,7 @@ private:
 // LLAddWearablesGearMenu
 ///////////////////////////////////////////////////////////////////////////////
 
-class LLAddWearablesGearMenu : public LLInitClass<LLAddWearablesGearMenu>
+class LLAddWearablesGearMenu final : public LLInitClass<LLAddWearablesGearMenu>
 {
 public:
 	static LLToggleableMenu* create(LLWearableItemsList* flat_list, LLInventoryPanel* inventory_panel)
@@ -347,7 +347,7 @@ private:
 // LLCOFDragAndDropObserver
 ///////////////////////////////////////////////////////////////////////////////
 
-class LLCOFDragAndDropObserver : public LLInventoryAddItemByAssetObserver
+class LLCOFDragAndDropObserver final : public LLInventoryAddItemByAssetObserver
 {
 public:
 	LLCOFDragAndDropObserver(LLInventoryModel* model);
diff --git a/indra/newview/llpanelpicks.cpp b/indra/newview/llpanelpicks.cpp
index 4bb6ee6a17a936ae7ddcbbf5f853a43bf0f232e8..58de5bc84865f60ad5789d6510de44cab855ffb6 100644
--- a/indra/newview/llpanelpicks.cpp
+++ b/indra/newview/llpanelpicks.cpp
@@ -60,7 +60,7 @@ static const std::string XML_BTN_SHOW_ON_MAP = "show_on_map_btn";
 static LLPanelInjector<LLPanelPicks> t_panel_picks("panel_picks");
 
 
-class LLPickHandler : public LLCommandHandler,
+class LLPickHandler final : public LLCommandHandler,
 					  public LLAvatarPropertiesObserver
 {
 public:
@@ -172,7 +172,7 @@ public:
 
 LLPickHandler gPickHandler;
 
-class LLClassifiedHandler :
+class LLClassifiedHandler final :
 	public LLCommandHandler,
 	public LLAvatarPropertiesObserver
 {
diff --git a/indra/newview/llpanelplaces.cpp b/indra/newview/llpanelplaces.cpp
index 72b999e2907e48bd63b374c0244cb3db54bbf5a3..834aff8255972701026184b96678d9b176c081f5 100644
--- a/indra/newview/llpanelplaces.cpp
+++ b/indra/newview/llpanelplaces.cpp
@@ -80,7 +80,7 @@ static const std::string TELEPORT_HISTORY_INFO_TYPE	= "teleport_history";
 static const std::string LANDMARK_TAB_INFO_TYPE     = "open_landmark_tab";
 
 // Support for secondlife:///app/parcel/{UUID}/about SLapps
-class LLParcelHandler : public LLCommandHandler
+class LLParcelHandler final : public LLCommandHandler
 {
 public:
 	// requires trusted browser to trigger
@@ -125,7 +125,7 @@ static bool is_agent_in_selected_parcel(LLParcel* parcel);
 static void onSLURLBuilt(std::string& slurl);
 
 //Observer classes
-class LLPlacesParcelObserver : public LLParcelObserver
+class LLPlacesParcelObserver final : public LLParcelObserver
 {
 public:
 	LLPlacesParcelObserver(LLPanelPlaces* places_panel) :
@@ -143,7 +143,7 @@ private:
 	LLPanelPlaces*		mPlaces;
 };
 
-class LLPlacesInventoryObserver : public LLInventoryAddedObserver
+class LLPlacesInventoryObserver final : public LLInventoryAddedObserver
 {
 public:
 	LLPlacesInventoryObserver(LLPanelPlaces* places_panel) :
@@ -170,7 +170,7 @@ private:
 	LLPanelPlaces*		mPlaces;
 };
 
-class LLPlacesRemoteParcelInfoObserver : public LLRemoteParcelInfoObserver
+class LLPlacesRemoteParcelInfoObserver final : public LLRemoteParcelInfoObserver
 {
 public:
 	LLPlacesRemoteParcelInfoObserver(LLPanelPlaces* places_panel) :
@@ -716,7 +716,7 @@ void LLPanelPlaces::onEditButtonClicked()
 	updateVerbs();
 }
 
-class LLUpdateLandmarkParent : public LLInventoryCallback
+class LLUpdateLandmarkParent final : public LLInventoryCallback
 {
 public:
     LLUpdateLandmarkParent(LLPointer<LLViewerInventoryItem> item, LLUUID new_parent) :
diff --git a/indra/newview/llpanelplaces.h b/indra/newview/llpanelplaces.h
index 07fdc3530647b0e6f7cc604890e493b44fa2d16a..4c61ace3a531cddb11a7dc2a529401fed6f7590b 100644
--- a/indra/newview/llpanelplaces.h
+++ b/indra/newview/llpanelplaces.h
@@ -51,7 +51,7 @@ class LLMenuButton;
 
 typedef std::pair<LLUUID, std::string>	folder_pair_t;
 
-class LLPanelPlaces : public LLPanel
+class LLPanelPlaces final : public LLPanel
 {
 public:
 	LLPanelPlaces();
diff --git a/indra/newview/llpanelprofile.cpp b/indra/newview/llpanelprofile.cpp
index 2430b68c9b82749e59c90a2a9db8a553396c83eb..2bf4e87b3d0aad9259fd37affd439edca959b487 100644
--- a/indra/newview/llpanelprofile.cpp
+++ b/indra/newview/llpanelprofile.cpp
@@ -54,7 +54,7 @@ std::string getProfileURL(const std::string& agent_name)
 	return url;
 }
 
-class LLProfileHandler : public LLCommandHandler
+class LLProfileHandler final : public LLCommandHandler
 {
 public:
 	// requires trusted browser to trigger
@@ -74,7 +74,7 @@ public:
 };
 LLProfileHandler gProfileHandler;
 
-class LLAgentHandler : public LLCommandHandler
+class LLAgentHandler final : public LLCommandHandler
 {
 public:
 	// requires trusted browser to trigger
diff --git a/indra/newview/llpanelvolume.cpp b/indra/newview/llpanelvolume.cpp
index 792184696097f890936e7500f8d47f11f0ab97a4..32ca60ba2869a5d4b93d7ef181507cd47c087e5b 100644
--- a/indra/newview/llpanelvolume.cpp
+++ b/indra/newview/llpanelvolume.cpp
@@ -477,7 +477,7 @@ void LLPanelVolume::getState( )
 	// Update material part
 	// slightly inefficient - materials are unique per object, not per TE
 	U8 material_code = 0;
-	struct f : public LLSelectedTEGetFunctor<U8>
+	struct f final : public LLSelectedTEGetFunctor<U8>
 	{
 		U8 get(LLViewerObject* object, S32 te) override
 		{
diff --git a/indra/newview/llpanelwearing.cpp b/indra/newview/llpanelwearing.cpp
index 2c0736d5a9ec9d82787300c2857e6f60444fbd9d..8791f7b0bcf752f56bf743fc167c5980beb5140b 100644
--- a/indra/newview/llpanelwearing.cpp
+++ b/indra/newview/llpanelwearing.cpp
@@ -85,7 +85,7 @@ private:
 
 //////////////////////////////////////////////////////////////////////////
 
-class LLWearingContextMenu : public LLListContextMenu
+class LLWearingContextMenu final : public LLListContextMenu
 {
 protected:
 	/* virtual */ LLContextMenu* createMenu() override
@@ -151,7 +151,7 @@ protected:
 
 //////////////////////////////////////////////////////////////////////////
 
-class LLTempAttachmentsContextMenu : public LLListContextMenu
+class LLTempAttachmentsContextMenu final : public LLListContextMenu
 {
 public:
 	LLTempAttachmentsContextMenu(LLPanelWearing* panel_wearing)
diff --git a/indra/newview/llparcelselection.cpp b/indra/newview/llparcelselection.cpp
index befecf493e755ebaa44a933a4645dd40b083e86a..df9ffd920768cec5927b978e766813f0da91d2b0 100644
--- a/indra/newview/llparcelselection.cpp
+++ b/indra/newview/llparcelselection.cpp
@@ -54,10 +54,6 @@ LLParcelSelection::LLParcelSelection(LLParcel* parcel)  :
 {
 }
 
-LLParcelSelection::~LLParcelSelection()
-{
-}
-
 BOOL LLParcelSelection::getMultipleOwners() const
 {
 	return mSelectedMultipleOwners;
diff --git a/indra/newview/llparcelselection.h b/indra/newview/llparcelselection.h
index 99efc55a5a3971f5f390587df2a2a526b00ce419..a0fd4b557c95e7c59f693c7ce1215933483bbd41 100644
--- a/indra/newview/llparcelselection.h
+++ b/indra/newview/llparcelselection.h
@@ -32,13 +32,13 @@
 
 class LLParcel;
 
-class LLParcelSelection : public LLRefCount
+class LLParcelSelection final : public LLRefCount
 {
 	friend class LLViewerParcelMgr;
 	friend class LLSafeHandle<LLParcelSelection>;
 
 protected:
-	~LLParcelSelection();
+	~LLParcelSelection() = default;
 
 public:
 	LLParcelSelection(LLParcel* parcel);
diff --git a/indra/newview/llpathfindinglinkset.h b/indra/newview/llpathfindinglinkset.h
index c3adfc213652ed345c52ebe58e873e41cb1bfde5..dd1c73bbf57a6ae678165c809c92673c93e68fc7 100644
--- a/indra/newview/llpathfindinglinkset.h
+++ b/indra/newview/llpathfindinglinkset.h
@@ -31,7 +31,7 @@
 
 class LLSD;
 
-class LLPathfindingLinkset : public LLPathfindingObject
+class LLPathfindingLinkset final : public LLPathfindingObject
 {
 public:
 	typedef enum
diff --git a/indra/newview/llpathfindinglinksetlist.h b/indra/newview/llpathfindinglinksetlist.h
index 1d38e4c11a1c41b6488bf51dbbb1ca9bc1773608..7f7b001fd6203d6102f5b05e1b16a51ebf5e3d48 100644
--- a/indra/newview/llpathfindinglinksetlist.h
+++ b/indra/newview/llpathfindinglinksetlist.h
@@ -32,7 +32,7 @@
 
 class LLSD;
 
-class LLPathfindingLinksetList : public LLPathfindingObjectList
+class LLPathfindingLinksetList final : public LLPathfindingObjectList
 {
 public:
 	LLPathfindingLinksetList();
diff --git a/indra/newview/llpathfindingmanager.cpp b/indra/newview/llpathfindingmanager.cpp
index 7566cce9f34471b67179c2b8cdfc1447e20e0287..5a53a12e7a6b988de4594cef86c6b81d3385250a 100644
--- a/indra/newview/llpathfindingmanager.cpp
+++ b/indra/newview/llpathfindingmanager.cpp
@@ -70,7 +70,7 @@
 // LLNavMeshSimStateChangeNode
 //---------------------------------------------------------------------------
 
-class LLNavMeshSimStateChangeNode : public LLHTTPNode
+class LLNavMeshSimStateChangeNode final : public LLHTTPNode
 {
 public:
 	void post(ResponsePtr pResponse, const LLSD &pContext, const LLSD &pInput) const override;
@@ -82,7 +82,7 @@ LLHTTPRegistration<LLNavMeshSimStateChangeNode> gHTTPRegistrationNavMeshSimState
 //---------------------------------------------------------------------------
 // LLAgentStateChangeNode
 //---------------------------------------------------------------------------
-class LLAgentStateChangeNode : public LLHTTPNode
+class LLAgentStateChangeNode final : public LLHTTPNode
 {
 public:
 	void post(ResponsePtr pResponse, const LLSD &pContext, const LLSD &pInput) const override;
diff --git a/indra/newview/llpersistentnotificationstorage.h b/indra/newview/llpersistentnotificationstorage.h
index b676e31be9a48c0a2edd0b8080ddc54c15b13bec..48ef937de940a464b051d28a060e0a3147d5ff1e 100644
--- a/indra/newview/llpersistentnotificationstorage.h
+++ b/indra/newview/llpersistentnotificationstorage.h
@@ -42,7 +42,7 @@ class LLSD;
 // be a) serializable(implement LLNotificationResponderInterface),
 // b) registered with LLResponderRegistry (found in llpersistentnotificationstorage.cpp).
 
-class LLPersistentNotificationStorage : public LLSingleton<LLPersistentNotificationStorage>, public LLNotificationStorage
+class LLPersistentNotificationStorage final : public LLSingleton<LLPersistentNotificationStorage>, public LLNotificationStorage
 {
 	LLSINGLETON(LLPersistentNotificationStorage);
 	~LLPersistentNotificationStorage();
diff --git a/indra/newview/llphysicsshapebuilderutil.h b/indra/newview/llphysicsshapebuilderutil.h
index bd5b7d799cc7994855649f12bb469bd1536782d9..1077f7c9138ac29ada7677e5b09dbaefa5cb5ac9 100644
--- a/indra/newview/llphysicsshapebuilderutil.h
+++ b/indra/newview/llphysicsshapebuilderutil.h
@@ -48,7 +48,7 @@ const F32 SHAPE_BUILDER_ENTRY_SNAP_PARAMETER_BIN_SIZE = 0.010f;
 const F32 SHAPE_BUILDER_CONVEXIFICATION_SIZE = 2.f * COLLISION_TOLERANCE;
 const F32 SHAPE_BUILDER_MIN_GEOMETRY_SIZE = 0.5f * COLLISION_TOLERANCE;
 
-class LLPhysicsVolumeParams : public LLVolumeParams
+class LLPhysicsVolumeParams final : public LLVolumeParams
 {
 public:
 
diff --git a/indra/newview/llpickitem.h b/indra/newview/llpickitem.h
index 4eac43e2175bf4aa5c420172543c039251d762ba..d5156e7e5d8e0aa0efb59af435f272ff662e5fd6 100644
--- a/indra/newview/llpickitem.h
+++ b/indra/newview/llpickitem.h
@@ -36,7 +36,7 @@ static const std::string PICK_ID("pick_id");
 static const std::string PICK_CREATOR_ID("pick_creator_id");
 static const std::string PICK_NAME("pick_name");
 
-class LLPickItem : public LLPanel, public LLAvatarPropertiesObserver
+class LLPickItem final : public LLPanel, public LLAvatarPropertiesObserver
 {
 public:
 	LLPickItem();
diff --git a/indra/newview/llpipelinelistener.h b/indra/newview/llpipelinelistener.h
index da1898e57b62caed56c36d3268c19ce7fbd38fcd..92ce7c248fe6560a0762dfb59f9261eb9390a4db 100644
--- a/indra/newview/llpipelinelistener.h
+++ b/indra/newview/llpipelinelistener.h
@@ -32,7 +32,7 @@
 #include "lleventapi.h"
 
 /// Listen on an LLEventPump with specified name for LLPipeline request events.
-class LLPipelineListener: public LLEventAPI
+class LLPipelineListener final : public LLEventAPI
 {
 public:
 	LLPipelineListener();
diff --git a/indra/newview/llplacesfolderview.h b/indra/newview/llplacesfolderview.h
index 9989af2b93cf780b8ae54a3ea5dbb788cf88b194..dac130d0fa678173f4dd7358f363fdc6e9f171b1 100644
--- a/indra/newview/llplacesfolderview.h
+++ b/indra/newview/llplacesfolderview.h
@@ -32,7 +32,7 @@
 
 class LLLandmarksPanel;
 
-class LLPlacesFolderView : public LLFolderView
+class LLPlacesFolderView final : public LLFolderView
 {
 public:
 
diff --git a/indra/newview/llplacesinventorybridge.h b/indra/newview/llplacesinventorybridge.h
index 30be230d17144b62d584139c24099230be6c8c53..143e53142d2123aed3239d9fd92f066bcc1e92a0 100644
--- a/indra/newview/llplacesinventorybridge.h
+++ b/indra/newview/llplacesinventorybridge.h
@@ -34,7 +34,7 @@ class LLFolderViewFolder;
 /**
  * Overridden version of the Inventory-Folder-View-Bridge for Places Panel (Landmarks Tab)
  */
-class LLPlacesLandmarkBridge : public LLLandmarkBridge
+class LLPlacesLandmarkBridge final : public LLLandmarkBridge
 {
 	friend class LLPlacesInventoryBridgeBuilder;
 
@@ -56,7 +56,7 @@ protected:
 /**
  * Overridden version of the Inventory-Folder-View-Bridge for Folders
  */
-class LLPlacesFolderBridge : public LLFolderBridge
+class LLPlacesFolderBridge final : public LLFolderBridge
 {
 	friend class LLPlacesInventoryBridgeBuilder;
 
@@ -82,10 +82,10 @@ protected:
  *
  * It builds Bridges for Landmarks and Folders in Places Landmarks Panel
  */
-class LLPlacesInventoryBridgeBuilder : public LLInventoryFolderViewModelBuilder
+class LLPlacesInventoryBridgeBuilder final : public LLInventoryFolderViewModelBuilder
 {
 public:
-	LLPlacesInventoryBridgeBuilder() {}
+	LLPlacesInventoryBridgeBuilder() = default;
 
 	/*virtual*/ LLInvFVBridge* createBridge(LLAssetType::EType asset_type,
 											LLAssetType::EType actual_asset_type,
diff --git a/indra/newview/llpostcard.h b/indra/newview/llpostcard.h
index 34aeda4d422abcd5a604a907ddab43fe5eee50c7..1b6a70c4f2994909367edac63506ec8c45bdd040 100644
--- a/indra/newview/llpostcard.h
+++ b/indra/newview/llpostcard.h
@@ -50,7 +50,7 @@ private:
 };
 
 
-class LLPostcardUploadInfo : public LLBufferedAssetUploadInfo
+class LLPostcardUploadInfo final : public LLBufferedAssetUploadInfo
 {
 public:
     LLPostcardUploadInfo(std::string nameFrom, std::string emailTo,
diff --git a/indra/newview/llpreviewgesture.cpp b/indra/newview/llpreviewgesture.cpp
index 73599a0ab7973a1bbe567cb5df1465255bfc2ca7..ee7ea5edded057fcce5ac4c81b7e2d034728ccd7 100644
--- a/indra/newview/llpreviewgesture.cpp
+++ b/indra/newview/llpreviewgesture.cpp
@@ -61,10 +61,10 @@ void dialog_refresh_all();
 
 // used for getting
 
-class LLInventoryGestureAvailable : public LLInventoryCompletionObserver
+class LLInventoryGestureAvailable final : public LLInventoryCompletionObserver
 {
 public:
-	LLInventoryGestureAvailable() {}
+	LLInventoryGestureAvailable() = default;
 
 protected:
     void done() override;
diff --git a/indra/newview/llpreviewscript.cpp b/indra/newview/llpreviewscript.cpp
index 85ea2f32bd4a797463964fd477b47acbf7f95440..fcab0bbb1a3f158ae83ee284ac0881b21b995acd 100644
--- a/indra/newview/llpreviewscript.cpp
+++ b/indra/newview/llpreviewscript.cpp
@@ -119,7 +119,7 @@ static bool have_script_upload_cap(LLUUID& object_id)
 /// ---------------------------------------------------------------------------
 /// LLLiveLSLFile
 /// ---------------------------------------------------------------------------
-class LLLiveLSLFile : public LLLiveFile
+class LLLiveLSLFile final : public LLLiveFile
 {
 public:
 	typedef std::function<bool (const std::string& filename)> change_callback_t;
diff --git a/indra/newview/llrootview.h b/indra/newview/llrootview.h
index 3883e3794f78bb44083254318d97d068e803b074..5877d3e173c81d78cf9bea1d7393f74589014eef 100644
--- a/indra/newview/llrootview.h
+++ b/indra/newview/llrootview.h
@@ -30,12 +30,12 @@
 #include "llview.h"
 #include "lltooltip.h"
 
-class LLRootViewRegistry : public LLChildRegistry<LLRootViewRegistry>
+class LLRootViewRegistry final : public LLChildRegistry<LLRootViewRegistry>
 {
 	LLSINGLETON(LLRootViewRegistry);
 };
 
-class LLRootView : public LLView
+class LLRootView final : public LLView
 {
 public:
 	typedef LLRootViewRegistry child_registry_t;
diff --git a/indra/newview/llscriptfloater.h b/indra/newview/llscriptfloater.h
index c9c0325686d2e3502becb9e6daa6506a7d002dcc..279c04930571ae5ab520df19e535f13b75885a2e 100644
--- a/indra/newview/llscriptfloater.h
+++ b/indra/newview/llscriptfloater.h
@@ -36,7 +36,7 @@ class LLToastPanel;
  * Handles script notifications ("ScriptDialog" and "ScriptDialogGroup")
  * and manages Script Floaters.
  */
-class LLScriptFloaterManager : public LLSingleton<LLScriptFloaterManager>
+class LLScriptFloaterManager final : public LLSingleton<LLScriptFloaterManager>
 {
 	// *TODO
 	// LLScriptFloaterManager and LLScriptFloater will need some refactoring after we 
diff --git a/indra/newview/llsearchhistory.h b/indra/newview/llsearchhistory.h
index 4ae6122396eb51b7a82864081939854cc9158910..1c881add64344af1e0592aeaae45d1a1cb4a84b1 100644
--- a/indra/newview/llsearchhistory.h
+++ b/indra/newview/llsearchhistory.h
@@ -35,7 +35,7 @@
  * Search history container able to save and load history from file.
  * History is stored in chronological order, most recent at the beginning.
  */
-class LLSearchHistory : public LLSingleton<LLSearchHistory>, private LLDestroyClass<LLSearchHistory>
+class LLSearchHistory final : public LLSingleton<LLSearchHistory>, private LLDestroyClass<LLSearchHistory>
 {
 	LLSINGLETON(LLSearchHistory);
 	friend class LLDestroyClass<LLSearchHistory>;
diff --git a/indra/newview/llselectmgr.h b/indra/newview/llselectmgr.h
index b42dbd2213bd3ee0ed9f7ab33b803c39a0aa0ce8..438020114ac3e6d19d30f6fb6bb1e00c4ac03975 100644
--- a/indra/newview/llselectmgr.h
+++ b/indra/newview/llselectmgr.h
@@ -391,7 +391,7 @@ extern template class LLSelectMgr* LLSingleton<class LLSelectMgr>::getInstance()
 // For use with getFirstTest()
 struct LLSelectGetFirstTest;
 
-class LLSelectMgr : public LLEditMenuHandler, public LLSingleton<LLSelectMgr>
+class LLSelectMgr final : public LLEditMenuHandler, public LLSingleton<LLSelectMgr>
 {
 	LLSINGLETON(LLSelectMgr);
 	~LLSelectMgr();
diff --git a/indra/newview/llsidepanelappearance.cpp b/indra/newview/llsidepanelappearance.cpp
index 4f5c5d960271f4ec12b881510263d007ca5eeac9..8e83187606a7f37724f91999d5c271d84bc22765 100644
--- a/indra/newview/llsidepanelappearance.cpp
+++ b/indra/newview/llsidepanelappearance.cpp
@@ -51,7 +51,7 @@
 
 static LLPanelInjector<LLSidepanelAppearance> t_appearance("sidepanel_appearance");
 
-class LLCurrentlyWornFetchObserver : public LLInventoryFetchItemsObserver
+class LLCurrentlyWornFetchObserver final : public LLInventoryFetchItemsObserver
 {
 public:
 	LLCurrentlyWornFetchObserver(const uuid_vec_t &ids,
@@ -59,7 +59,7 @@ public:
 		LLInventoryFetchItemsObserver(ids),
 		mPanel(panel)
 	{}
-	~LLCurrentlyWornFetchObserver() {}
+	~LLCurrentlyWornFetchObserver() = default;
 
 	void done() override
 	{
@@ -90,10 +90,6 @@ LLSidepanelAppearance::LLSidepanelAppearance() :
 	gAgentWearables.addLoadedCallback(boost::bind(&LLSidepanelAppearance::setWearablesLoading, this, false));
 }
 
-LLSidepanelAppearance::~LLSidepanelAppearance()
-{
-}
-
 // virtual
 BOOL LLSidepanelAppearance::postBuild()
 {
diff --git a/indra/newview/llsidepanelinventory.cpp b/indra/newview/llsidepanelinventory.cpp
index e188d76f8da3e2cb9b20a4a3b86ab44155b951e7..51c3d7cb5be0eb5ea38edd485117f1aa642f8c37 100644
--- a/indra/newview/llsidepanelinventory.cpp
+++ b/indra/newview/llsidepanelinventory.cpp
@@ -70,7 +70,7 @@ static const char * const MARKETPLACE_INBOX_PANEL = "marketplace_inbox";
 //
 // Helpers
 //
-class LLInboxAddedObserver : public LLInventoryCategoryAddedObserver
+class LLInboxAddedObserver final : public LLInventoryCategoryAddedObserver
 {
 public:
 	LLInboxAddedObserver(LLSidepanelInventory * sidepanelInventory)
diff --git a/indra/newview/llsidepanelinventorysubpanel.h b/indra/newview/llsidepanelinventorysubpanel.h
index e936a9ddabc2b573d588323bfcfa77fa444692f2..5a2f6d32d8c2584dcf5e6de0011a43c3de279338 100644
--- a/indra/newview/llsidepanelinventorysubpanel.h
+++ b/indra/newview/llsidepanelinventorysubpanel.h
@@ -41,7 +41,7 @@ class LLSidepanelInventorySubpanel : public LLPanel
 {
 public:
 	LLSidepanelInventorySubpanel(const LLPanel::Params& p = getDefaultParams());
-	virtual ~LLSidepanelInventorySubpanel();
+	virtual ~LLSidepanelInventorySubpanel() = default;
 
 	void setVisible(BOOL visible) override;
 	BOOL postBuild() override;
diff --git a/indra/newview/llsidepaneliteminfo.cpp b/indra/newview/llsidepaneliteminfo.cpp
index 15fbd5c223b98b0afac8ed367f4d3fce89973ed4..81a6990b1032397d54e4226177e67a38d4fd3320 100644
--- a/indra/newview/llsidepaneliteminfo.cpp
+++ b/indra/newview/llsidepaneliteminfo.cpp
@@ -102,7 +102,7 @@ static const std::array<std::string, 5> debug_items{{
 //
 // Helper class to watch for changes to the item.
 //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-class LLItemPropertiesObserver : public LLInventoryObserver
+class LLItemPropertiesObserver final : public LLInventoryObserver
 {
 public:
 	LLItemPropertiesObserver(LLSidepanelItemInfo* floater)
@@ -146,7 +146,7 @@ void LLItemPropertiesObserver::changed(U32 mask)
 // Helper class to watch for changes in an object inventory.
 // Used to update item properties in LLSidepanelItemInfo.
 //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-class LLObjectInventoryObserver : public LLVOInventoryListener
+class LLObjectInventoryObserver final : public LLVOInventoryListener
 {
 public:
 	LLObjectInventoryObserver(LLSidepanelItemInfo* floater, LLViewerObject* object)
diff --git a/indra/newview/llsidepaneliteminfo.h b/indra/newview/llsidepaneliteminfo.h
index f18ad96b05d041bc05473b910b27c29985f80355..dfbdc7be807fc643e2e5925693b25ea39b20c419 100644
--- a/indra/newview/llsidepaneliteminfo.h
+++ b/indra/newview/llsidepaneliteminfo.h
@@ -41,7 +41,7 @@ class LLObjectInventoryObserver;
 class LLViewerObject;
 class LLPermissions;
 
-class LLSidepanelItemInfo : public LLSidepanelInventorySubpanel
+class LLSidepanelItemInfo final : public LLSidepanelInventorySubpanel
 {
 public:
 	LLSidepanelItemInfo(const LLPanel::Params& p = getDefaultParams());
diff --git a/indra/newview/llsidepaneltaskinfo.cpp b/indra/newview/llsidepaneltaskinfo.cpp
index bbf1b58cf7cfd22a54f9246b5d400f94974388ff..3e12285f7b7d0dc23e0451e1b5ffc0ee1f7734e8 100644
--- a/indra/newview/llsidepaneltaskinfo.cpp
+++ b/indra/newview/llsidepaneltaskinfo.cpp
@@ -1125,7 +1125,7 @@ void LLSidepanelTaskInfo::setAllSaleInfo()
 	}
 }
 
-struct LLSelectionPayable : public LLSelectedObjectFunctor
+struct LLSelectionPayable final : public LLSelectedObjectFunctor
 {
 	bool apply(LLViewerObject* obj) override
 	{
diff --git a/indra/newview/llsidetraypanelcontainer.h b/indra/newview/llsidetraypanelcontainer.h
index 4f3b9933d9103438dad36c52464716f4b8fa6c09..08e4e4b6af8d9852c43dd679edf34fe33de17c88 100644
--- a/indra/newview/llsidetraypanelcontainer.h
+++ b/indra/newview/llsidetraypanelcontainer.h
@@ -39,7 +39,7 @@
 * open previous or next panel if navigation history is available(after user 
 * has opened two or more panels). *NOTE - only back navigation is implemented so far.
 */
-class LLSideTrayPanelContainer : public LLTabContainer
+class LLSideTrayPanelContainer final : public LLTabContainer
 {
 public:
 
diff --git a/indra/newview/llsnapshotlivepreview.h b/indra/newview/llsnapshotlivepreview.h
index d02570269104d698ce3d548c1c0cf7b581d19d18..483f7a564d5dbbc6c97fa6867d1dc4dae370c40d 100644
--- a/indra/newview/llsnapshotlivepreview.h
+++ b/indra/newview/llsnapshotlivepreview.h
@@ -36,7 +36,7 @@ class LLImageJPEG;
 ///----------------------------------------------------------------------------
 /// Class LLSnapshotLivePreview 
 ///----------------------------------------------------------------------------
-class LLSnapshotLivePreview : public LLView
+class LLSnapshotLivePreview final : public LLView
 {
 	LOG_CLASS(LLSnapshotLivePreview);
 public:
diff --git a/indra/newview/llvieweroctree.h b/indra/newview/llvieweroctree.h
index 651063d89e612ba3ccea7d29fed54728ed8c43ed..23775110c2b9d404dd2a26184746f3b60c446e2c 100644
--- a/indra/newview/llvieweroctree.h
+++ b/indra/newview/llvieweroctree.h
@@ -68,7 +68,7 @@ S32 AABBSphereIntersectR2(const LLVector3& min, const LLVector3& max, const LLVe
 
 //defines data needed for octree of an entry
 //LL_ALIGN_PREFIX(16)
-class LLViewerOctreeEntry : public LLRefCount, public LLTrace::MemTrackable<LLViewerOctreeEntry, 16>
+class LLViewerOctreeEntry final : public LLRefCount, public LLTrace::MemTrackable<LLViewerOctreeEntry, 16>
 {
 	friend class LLViewerOctreeEntryData;
 
diff --git a/indra/newview/llviewerparcelmedia.h b/indra/newview/llviewerparcelmedia.h
index 962c7c3f9dd122a65c14a4e37eff24fe8d5b3268..edaedec22431a11acd77885983b02eb79baef074 100644
--- a/indra/newview/llviewerparcelmedia.h
+++ b/indra/newview/llviewerparcelmedia.h
@@ -37,7 +37,7 @@ class LLViewerParcelMediaNavigationObserver;
 // This class understands land parcels, network traffic, LSL media
 // transport commands, and talks to the LLViewerMedia class to actually
 // do playback.  It allows us to remove code from LLViewerParcelMgr.
-class LLViewerParcelMedia : public LLViewerMediaObserver
+class LLViewerParcelMedia final : public LLViewerMediaObserver
 {
 	LOG_CLASS(LLViewerParcelMedia);
 	public:
diff --git a/indra/newview/llviewerparceloverlay.h b/indra/newview/llviewerparceloverlay.h
index 02675cd27be70768787936c68e68c3ecb94c4eba..5f33b6e9090d4317a23506f6a308a2c080c4211b 100644
--- a/indra/newview/llviewerparceloverlay.h
+++ b/indra/newview/llviewerparceloverlay.h
@@ -41,7 +41,7 @@ class LLVector3;
 class LLColor4U;
 class LLVector2;
 
-class LLViewerParcelOverlay : public LLGLUpdate
+class LLViewerParcelOverlay final : public LLGLUpdate
 {
 public:
 	LLViewerParcelOverlay(LLViewerRegion* region, F32 region_width_meters);
diff --git a/indra/newview/llviewerpartsim.h b/indra/newview/llviewerpartsim.h
index 93275599f32bf6a6a21f3372a3d67840cb0d8e01..969c3b616a21af26cc802698deef2abc55854f81 100644
--- a/indra/newview/llviewerpartsim.h
+++ b/indra/newview/llviewerpartsim.h
@@ -45,7 +45,7 @@ class LLVOPartGroup;
 //
 
 
-class LLViewerPart : public LLPartData
+class LLViewerPart final : public LLPartData
 {
 public:
 	typedef std::function<void(LLViewerPart&, const F32)>	vp_callback_t;
diff --git a/indra/newview/llviewerpartsource.h b/indra/newview/llviewerpartsource.h
index 78bcd4ba0a05e6ac07816c01d660475d489379d5..53ed26931b5e3e0c38a737a903d2ebf55b819b59 100644
--- a/indra/newview/llviewerpartsource.h
+++ b/indra/newview/llviewerpartsource.h
@@ -104,7 +104,7 @@ protected:
 //
 
 
-class LLViewerPartSourceScript : public LLViewerPartSource
+class LLViewerPartSourceScript final : public LLViewerPartSource
 {
 public:
 	LLViewerPartSourceScript(LLViewerObject *source_objp);
@@ -134,7 +134,7 @@ protected:
 // Particle source for spiral effect (customize avatar, mostly)
 //
 
-class LLViewerPartSourceSpiral : public LLViewerPartSource
+class LLViewerPartSourceSpiral final : public LLViewerPartSource
 {
 public:
 	LLViewerPartSourceSpiral(const LLVector3 &pos);
@@ -158,7 +158,7 @@ protected:
 // Particle source for tractor(editing) beam
 //
 
-class LLViewerPartSourceBeam : public LLViewerPartSource
+class LLViewerPartSourceBeam final : public LLViewerPartSource
 {
 public:
 	LLViewerPartSourceBeam();
@@ -188,7 +188,7 @@ protected:
 // Particle source for chat effect
 //
 
-class LLViewerPartSourceChat : public LLViewerPartSource
+class LLViewerPartSourceChat final : public LLViewerPartSource
 {
 public:
 	LLViewerPartSourceChat(const LLVector3 &pos);
diff --git a/indra/newview/llviewerregion.cpp b/indra/newview/llviewerregion.cpp
index b1177900b07f18dc8b8bb03b8b21076b7e0937a9..b0e0fdaf2ddfcde7397539cd452bb14aab3d4520 100644
--- a/indra/newview/llviewerregion.cpp
+++ b/indra/newview/llviewerregion.cpp
@@ -122,7 +122,7 @@ void newRegionEntry(LLViewerRegion& region)
 // spaces (and %20 chars) are illegal in the hostname of an http URL. Some
 // browsers let you get away with this, but some do not (such as Qt's Webkit).
 // Hence we introduced the newer secondlife:///app/region alternative.
-class LLRegionHandler : public LLCommandHandler
+class LLRegionHandler final : public LLCommandHandler
 {
 public:
     // requests will be throttled from a non-trusted browser
@@ -2025,7 +2025,7 @@ BOOL LLViewerRegion::isOwnedGroup(const LLVector3& pos)
 }
 
 // the new TCP coarse location handler node
-class CoarseLocationUpdate : public LLHTTPNode
+class CoarseLocationUpdate final : public LLHTTPNode
 {
 public:
 	void post(
diff --git a/indra/newview/llviewerregion.h b/indra/newview/llviewerregion.h
index 1b72ac2cbab22c99a900e89025f8a7660890b430..2f64370fe060077035c09c53922022cf8915b253 100644
--- a/indra/newview/llviewerregion.h
+++ b/indra/newview/llviewerregion.h
@@ -69,7 +69,7 @@ class LLViewerRegionImpl;
 class LLViewerOctreeGroup;
 class LLVOCachePartition;
 
-class LLViewerRegion: public LLCapabilityProvider // implements this interface
+class LLViewerRegion final : public LLCapabilityProvider // implements this interface
 {
 public:
 	//MUST MATCH THE ORDER OF DECLARATION IN CONSTRUCTOR
diff --git a/indra/newview/llviewershadermgr.h b/indra/newview/llviewershadermgr.h
index f06ffa905c791e98dee220bdad5924806a0107b9..6a6cd924a1c4c96c30c6741e2e433ecad30b03e5 100644
--- a/indra/newview/llviewershadermgr.h
+++ b/indra/newview/llviewershadermgr.h
@@ -32,7 +32,7 @@
 
 #define LL_DEFERRED_MULTI_LIGHT_COUNT 16
 
-class LLViewerShaderMgr: public LLShaderMgr
+class LLViewerShaderMgr final : public LLShaderMgr
 {
 public:
 	static BOOL sInitialized;
diff --git a/indra/newview/llviewertexlayer.cpp b/indra/newview/llviewertexlayer.cpp
index f18efcf375130994e71b4c802e18a7650e4ec7a8..93fbf039b86749f2766e7c9b995808243e636556 100644
--- a/indra/newview/llviewertexlayer.cpp
+++ b/indra/newview/llviewertexlayer.cpp
@@ -366,7 +366,7 @@ BOOL LLViewerTexLayerSetBuffer::requestUpdateImmediate()
 //-----------------------------------------------------------------------------
 // Support classes
 //-----------------------------------------------------------------------------
-class ALTexLayerUploader : public LLBufferedAssetUploadInfo
+class ALTexLayerUploader final : public LLBufferedAssetUploadInfo
 {
 public:
 	ALTexLayerUploader(LLUUID assetId, std::string texture, LLBakedUploadData* baked_upload_data);
diff --git a/indra/newview/llviewertexture.h b/indra/newview/llviewertexture.h
index 6d41db7faa30b7cebc808f4dcced4a5844c4ca6e..6076cd9bb8b292f94aea7a4893101af102f11e26 100644
--- a/indra/newview/llviewertexture.h
+++ b/indra/newview/llviewertexture.h
@@ -698,7 +698,7 @@ public:
 //it tracks the activities of the texture pipeline
 //records them, and outputs them to log files
 //
-class LLTexturePipelineTester : public LLMetricPerformanceTesterWithSession
+class LLTexturePipelineTester final : public LLMetricPerformanceTesterWithSession
 {
 	enum
 	{
@@ -754,7 +754,7 @@ private:
 	//
 	//The following members are used for performance analyzing
 	//
-	class LLTextureTestSession : public LLTestSession
+	class LLTextureTestSession final : public LLTestSession
 	{
 	public:
 		LLTextureTestSession() ;
diff --git a/indra/newview/llviewerwearable.cpp b/indra/newview/llviewerwearable.cpp
index 84bf500f7b4dc85a21deb15ed27c0c01b1a457cd..9d5150a8c294d3e8989f4f97f2a7a652363fa109 100644
--- a/indra/newview/llviewerwearable.cpp
+++ b/indra/newview/llviewerwearable.cpp
@@ -88,11 +88,6 @@ LLViewerWearable::LLViewerWearable(const LLAssetID& asset_id) :
 	mTransactionID.setNull();
 }
 
-// virtual
-LLViewerWearable::~LLViewerWearable()
-{
-}
-
 // virtual
 LLWearable::EImportResult LLViewerWearable::importStream( std::istream& input_stream, LLAvatarAppearance* avatarp )
 {
diff --git a/indra/newview/llviewerwearable.h b/indra/newview/llviewerwearable.h
index f9fe7dd9cfc631d0b17eaedc424f9a98b34ebcf8..0c70254355607538eb858ce9304f6394b8c742f2 100644
--- a/indra/newview/llviewerwearable.h
+++ b/indra/newview/llviewerwearable.h
@@ -33,7 +33,7 @@
 
 class LLVOAvatar;
 
-class LLViewerWearable : public LLWearable
+class LLViewerWearable final : public LLWearable
 {
 	friend class LLWearableList;
 
@@ -45,7 +45,7 @@ private:
 	LLViewerWearable(const LLTransactionID& transactionID);
 	LLViewerWearable(const LLAssetID& assetID);
 public:
-	virtual ~LLViewerWearable();
+	virtual ~LLViewerWearable() = default;;
 
 	//--------------------------------------------------------------------
 	// Accessors
diff --git a/indra/newview/llviewerwindow.cpp b/indra/newview/llviewerwindow.cpp
index ade68f810cf1c5dad913c91693362fd923d8ef35..ab7da273c2d27d78ca9fe8f7db24df72296aa27f 100644
--- a/indra/newview/llviewerwindow.cpp
+++ b/indra/newview/llviewerwindow.cpp
@@ -1841,7 +1841,7 @@ void LLViewerWindow::initGLDefaults()
 	gBox.prerender();
 }
 
-struct MainPanel : public LLPanel
+class MainPanel final : public LLPanel
 {
 };
 
@@ -3669,7 +3669,7 @@ void LLViewerWindow::renderSelections( BOOL for_gl_pick, BOOL pick_parcel_walls,
 				gGL.scalef(zoom, zoom, zoom);
 			}
 
-			struct f : public LLSelectedObjectFunctor
+			struct f final : public LLSelectedObjectFunctor
 			{
 				bool apply(LLViewerObject* object) override
 				{
diff --git a/indra/newview/llviewerwindow.h b/indra/newview/llviewerwindow.h
index 4884c2d3750d7e3da0f8ff05096783f0e05b2e09..0bc21674eb5ebef9ee7c2443393146781f8f411d 100644
--- a/indra/newview/llviewerwindow.h
+++ b/indra/newview/llviewerwindow.h
@@ -137,7 +137,7 @@ private:
 
 static const U32 MAX_SNAPSHOT_IMAGE_SIZE = 6 * 1024; // max snapshot image size 6144 * 6144
 
-class LLViewerWindow : public LLWindowCallbacks
+class LLViewerWindow final : public LLWindowCallbacks
 {
 public:
 	//
diff --git a/indra/newview/llviewerwindowlistener.h b/indra/newview/llviewerwindowlistener.h
index d627aad266cf20e0a46a627e03da9ce19cfb0190..7954185741814dfc75f624557eff3084c75b540f 100644
--- a/indra/newview/llviewerwindowlistener.h
+++ b/indra/newview/llviewerwindowlistener.h
@@ -35,7 +35,7 @@ class LLViewerWindow;
 class LLSD;
 
 /// Listen on an LLEventPump with specified name for LLViewerWindow request events.
-class LLViewerWindowListener: public LLEventAPI
+class LLViewerWindowListener final : public LLEventAPI
 {
 public:
     /// Bind the LLViewerWindow instance to use (e.g. gViewerWindow).
diff --git a/indra/newview/llvlcomposition.cpp b/indra/newview/llvlcomposition.cpp
index 4108c142290f65218df7d80d052ada6acf96281d..eb3623524a5a9011ab067a237f6a706a4136120c 100644
--- a/indra/newview/llvlcomposition.cpp
+++ b/indra/newview/llvlcomposition.cpp
@@ -82,11 +82,6 @@ LLVLComposition::LLVLComposition(LLSurface *surfacep, const U32 width, const F32
 }
 
 
-LLVLComposition::~LLVLComposition()
-{
-}
-
-
 void LLVLComposition::setSurface(LLSurface *surfacep)
 {
 	mSurfacep = surfacep;
diff --git a/indra/newview/llvlcomposition.h b/indra/newview/llvlcomposition.h
index 2dd04ac5a5cb74544213930ac31cb396df5cf378..63bdbb31060fffa9c936b1020918f8bc0b50d73d 100644
--- a/indra/newview/llvlcomposition.h
+++ b/indra/newview/llvlcomposition.h
@@ -32,11 +32,11 @@
 
 class LLSurface;
 
-class LLVLComposition : public LLViewerLayer
+class LLVLComposition final : public LLViewerLayer
 {
 public:
 	LLVLComposition(LLSurface *surfacep, const U32 width, const F32 scale);
-	/*virtual*/ ~LLVLComposition();
+	/*virtual*/ ~LLVLComposition() = default;
 
 	void setSurface(LLSurface *surfacep);
 
diff --git a/indra/newview/llvosurfacepatch.cpp b/indra/newview/llvosurfacepatch.cpp
index e22066cdeacabdbbb1e991e16ad374916fafa689..f0b19b6601b17704e2ab4e2977cc488d67d2192b 100644
--- a/indra/newview/llvosurfacepatch.cpp
+++ b/indra/newview/llvosurfacepatch.cpp
@@ -47,7 +47,7 @@ F32 LLVOSurfacePatch::sLODFactor = 1.f;
 
 //============================================================================
 
-class LLVertexBufferTerrain : public LLVertexBuffer
+class LLVertexBufferTerrain final : public LLVertexBuffer
 {
 public:
 	LLVertexBufferTerrain() :
diff --git a/indra/newview/llvovolume.cpp b/indra/newview/llvovolume.cpp
index 6054675643a4cd6f0b621790d8bd4a86861f28c9..3d5e685ba55edc67e9e6b21d7abf1da185885395 100644
--- a/indra/newview/llvovolume.cpp
+++ b/indra/newview/llvovolume.cpp
@@ -111,7 +111,7 @@ static LLTrace::BlockTimerStatHandle FTM_VOLUME_TEXTURES("Volume Textures");
 extern BOOL gGLDebugLoggingEnabled;
 
 // Implementation class of LLMediaDataClientObject.  See llmediadataclient.h
-class LLMediaDataClientObjectImpl : public LLMediaDataClientObject
+class LLMediaDataClientObjectImpl final : public LLMediaDataClientObject
 {
 public:
 	LLMediaDataClientObjectImpl(LLVOVolume *obj, bool isNew) : mObject(obj), mNew(isNew) 
diff --git a/indra/newview/llwatchdog.cpp b/indra/newview/llwatchdog.cpp
index c3727000a778688d3b42f0583e06c7d89e04405e..caedf6572ec59a05261a689f0322b089cceb8ff9 100644
--- a/indra/newview/llwatchdog.cpp
+++ b/indra/newview/llwatchdog.cpp
@@ -42,7 +42,7 @@ void default_killer_callback()
 }
 
 // This class runs the watchdog timing thread.
-class LLWatchdogTimerThread : public LLThread
+class LLWatchdogTimerThread final : public LLThread
 {
 public:
 	LLWatchdogTimerThread() : 
@@ -52,7 +52,7 @@ public:
 	{
 	}
             
-	~LLWatchdogTimerThread() {}
+	~LLWatchdogTimerThread() = default;
     
 	void setSleepTime(long ms) { mSleepMsecs = ms; }
 	void stop() 
diff --git a/indra/newview/llwearableitemslist.cpp b/indra/newview/llwearableitemslist.cpp
index 80392eeacc6272631203d5fdc6e67e6983713185..834d95d778293ca4bfe3a1f2fc9a50086af0762e 100644
--- a/indra/newview/llwearableitemslist.cpp
+++ b/indra/newview/llwearableitemslist.cpp
@@ -44,11 +44,11 @@
 #include "llviewerattachmenu.h"
 #include "llvoavatarself.h"
 
-class LLFindOutfitItems : public LLInventoryCollectFunctor
+class LLFindOutfitItems final : public LLInventoryCollectFunctor
 {
 public:
 	LLFindOutfitItems() {}
-	virtual ~LLFindOutfitItems() {}
+	virtual ~LLFindOutfitItems() = default;
 	bool operator()(LLInventoryCategory* cat,
 							LLInventoryItem* item) override;
 };