diff --git a/src/ble/BLEEndPoint.h b/src/ble/BLEEndPoint.h
index 4894ef5..382b41c 100644
--- a/src/ble/BLEEndPoint.h
+++ b/src/ble/BLEEndPoint.h
@@ -223,8 +223,8 @@
     inline void QueueTxLock() { mTxQueueMutex.Lock(); };
     inline void QueueTxUnlock() { mTxQueueMutex.Unlock(); };
 #else
-    inline void QueueTxLock() { };
-    inline void QueueTxUnlock() { };
+    inline void QueueTxLock() { }
+    inline void QueueTxUnlock() { }
 #endif
     void QueueTx(PacketBuffer * data, PacketType_t type);
 };
diff --git a/src/ble/WoBle.h b/src/ble/WoBle.h
index c8a7d04..e76d920 100644
--- a/src/ble/WoBle.h
+++ b/src/ble/WoBle.h
@@ -91,36 +91,36 @@
 
 public:
     // Public functions:
-    WoBle(void) { };
-    ~WoBle(void) { };
+    WoBle(void) { }
+    ~WoBle(void) { }
 
     BLE_ERROR Init(void * an_app_state, bool expect_first_ack);
 
-    inline void SetTxFragmentSize(uint8_t size) { mTxFragmentSize = size; };
-    inline void SetRxFragmentSize(uint8_t size) { mRxFragmentSize = size; };
+    inline void SetTxFragmentSize(uint8_t size) { mTxFragmentSize = size; }
+    inline void SetRxFragmentSize(uint8_t size) { mRxFragmentSize = size; }
 
-    uint16_t GetRxFragmentSize(void) { return mRxFragmentSize; };
-    uint16_t GetTxFragmentSize(void) { return mTxFragmentSize; };
+    uint16_t GetRxFragmentSize(void) { return mRxFragmentSize; }
+    uint16_t GetTxFragmentSize(void) { return mTxFragmentSize; }
 
     SequenceNumber_t GetAndIncrementNextTxSeqNum(void);
     SequenceNumber_t GetAndRecordRxAckSeqNum(void);
 
-    inline SequenceNumber_t GetLastReceivedSequenceNumber(void) { return mRxNewestUnackedSeqNum; };
-    inline SequenceNumber_t GetNewestUnackedSentSequenceNumber(void) { return mTxNewestUnackedSeqNum; };
+    inline SequenceNumber_t GetLastReceivedSequenceNumber(void) { return mRxNewestUnackedSeqNum; }
+    inline SequenceNumber_t GetNewestUnackedSentSequenceNumber(void) { return mTxNewestUnackedSeqNum; }
 
-    inline bool ExpectingAck(void) const { return mExpectingAck; };
+    inline bool ExpectingAck(void) const { return mExpectingAck; }
 
     inline State_t RxState(void) { return mRxState; }
     inline State_t TxState(void) { return mTxState; }
 #if WEAVE_ENABLE_WOBLE_TEST
-    inline PacketType_t SetTxPacketType(PacketType_t type) { return (mTxPacketType = type); };
-    inline PacketType_t SetRxPacketType(PacketType_t type) { return (mRxPacketType = type); };
-    inline PacketType_t TxPacketType() { return mTxPacketType; };
-    inline PacketType_t RxPacketType() { return mRxPacketType; };
-    inline SequenceNumber_t SetTxPacketSeq(SequenceNumber_t seq) { return (mTxPacketSeq = seq); };
-    inline SequenceNumber_t SetRxPacketSeq(SequenceNumber_t seq) { return (mRxPacketSeq = seq); };
-    inline SequenceNumber_t TxPacketSeq() { return mTxPacketSeq; };
-    inline SequenceNumber_t RxPacketSeq() { return mRxPacketSeq; };
+    inline PacketType_t SetTxPacketType(PacketType_t type) { return (mTxPacketType = type); }
+    inline PacketType_t SetRxPacketType(PacketType_t type) { return (mRxPacketType = type); }
+    inline PacketType_t TxPacketType() { return mTxPacketType; }
+    inline PacketType_t RxPacketType() { return mRxPacketType; }
+    inline SequenceNumber_t SetTxPacketSeq(SequenceNumber_t seq) { return (mTxPacketSeq = seq); }
+    inline SequenceNumber_t SetRxPacketSeq(SequenceNumber_t seq) { return (mRxPacketSeq = seq); }
+    inline SequenceNumber_t TxPacketSeq() { return mTxPacketSeq; }
+    inline SequenceNumber_t RxPacketSeq() { return mRxPacketSeq; }
     inline bool IsCommandPacket(PacketBuffer * p) { return GetFlag(*(p->Start()), kHeaderFlag_CommandMessage); }
     inline void PushPacketTag(PacketBuffer * p, PacketType_t type)
     {
diff --git a/src/lib/core/WeaveBinding.h b/src/lib/core/WeaveBinding.h
index 0d78186..e92805f 100644
--- a/src/lib/core/WeaveBinding.h
+++ b/src/lib/core/WeaveBinding.h
@@ -619,7 +619,7 @@
     return mError;
 }
 
-}; // Weave
-}; // nl
+} // Weave
+} // nl
 
 #endif // WEAVE_BINDING_H_
diff --git a/src/lib/core/WeaveCircularTLVBuffer.h b/src/lib/core/WeaveCircularTLVBuffer.h
index 294da6b..d4c660c 100644
--- a/src/lib/core/WeaveCircularTLVBuffer.h
+++ b/src/lib/core/WeaveCircularTLVBuffer.h
@@ -64,14 +64,14 @@
     WEAVE_ERROR FinalizeBuffer(TLVWriter& ioWriter, uint8_t *inBufStart, uint32_t inBufLen);
     WEAVE_ERROR GetNextBuffer(TLVReader& ioReader, const uint8_t *& outBufStart, uint32_t& outBufLen);
 
-    inline uint8_t *QueueHead(void) const { return mQueueHead; };
-    inline uint8_t *QueueTail(void) const { return mQueue + (((mQueueHead-mQueue) + mQueueLength) % mQueueSize); };
-    inline size_t DataLength(void) const { return mQueueLength; };
-    inline size_t AvailableDataLength(void) const { return mQueueSize - mQueueLength; };
-    inline size_t GetQueueSize(void) const { return mQueueSize; };
-    inline uint8_t *GetQueue(void) const { return mQueue; };
-    inline void SetQueueHead(uint8_t *aQueueHead) { mQueueHead = aQueueHead; };
-    inline void SetQueueLength(size_t aQueueLength) { mQueueLength = aQueueLength; };
+    inline uint8_t *QueueHead(void) const { return mQueueHead; }
+    inline uint8_t *QueueTail(void) const { return mQueue + (((mQueueHead-mQueue) + mQueueLength) % mQueueSize); }
+    inline size_t DataLength(void) const { return mQueueLength; }
+    inline size_t AvailableDataLength(void) const { return mQueueSize - mQueueLength; }
+    inline size_t GetQueueSize(void) const { return mQueueSize; }
+    inline uint8_t *GetQueue(void) const { return mQueue; }
+    inline void SetQueueHead(uint8_t *aQueueHead) { mQueueHead = aQueueHead; }
+    inline void SetQueueLength(size_t aQueueLength) { mQueueLength = aQueueLength; }
 
     WEAVE_ERROR EvictHead(void);
 
diff --git a/src/lib/core/WeaveMessageLayer.h b/src/lib/core/WeaveMessageLayer.h
index 44cb6c1..b623e34 100644
--- a/src/lib/core/WeaveMessageLayer.h
+++ b/src/lib/core/WeaveMessageLayer.h
@@ -503,7 +503,7 @@
     void Init(WeaveMessageLayer *messageLayer);
     WEAVE_ERROR MakeTunnelConnected(TCPEndPoint *endpointOne, TCPEndPoint *endpointTwo);
     void CloseEndPoint(TCPEndPoint **endPoint);
-    inline bool IsInUse(void) const { return mMessageLayer != NULL; };
+    inline bool IsInUse(void) const { return mMessageLayer != NULL; }
 
     static void HandleTunnelDataReceived(TCPEndPoint *endPoint, PacketBuffer *data);
     static void HandleTunnelConnectionClosed(TCPEndPoint *endPoint, INET_ERROR err);
@@ -585,7 +585,7 @@
 #if WEAVE_CONFIG_ENABLE_EPHEMERAL_UDP_PORT
             enableEphemeralUDPPort = false;
 #endif
-        };
+        }
     };
 
     WeaveMessageLayer(void);
diff --git a/src/lib/core/WeaveVendorIdentifiers.hpp b/src/lib/core/WeaveVendorIdentifiers.hpp
index 8f2bd6e..273e09b 100644
--- a/src/lib/core/WeaveVendorIdentifiers.hpp
+++ b/src/lib/core/WeaveVendorIdentifiers.hpp
@@ -45,8 +45,8 @@
     kWeaveVendor_NotSpecified                   = 0xFFFF
 };
 
-}; // namespace Weave
+} // namespace Weave
 
-}; // namespace nl
+} // namespace nl
 
 #endif // WEAVE_VENDOR_IDENTIFIERS_HPP
diff --git a/src/lib/core/WeaveWRMPConfig.h b/src/lib/core/WeaveWRMPConfig.h
index 48414c1..6f62460 100644
--- a/src/lib/core/WeaveWRMPConfig.h
+++ b/src/lib/core/WeaveWRMPConfig.h
@@ -132,7 +132,7 @@
 
 // clang-format on
 
-}; // Weave
-}; // nl
+} // Weave
+} // nl
 
 #endif // WEAVE_WRM_CONFIG_H_
diff --git a/src/lib/profiles/bulk-data-transfer/BDXManagedNamespace.hpp b/src/lib/profiles/bulk-data-transfer/BDXManagedNamespace.hpp
index 25e4916..95a9d3c 100644
--- a/src/lib/profiles/bulk-data-transfer/BDXManagedNamespace.hpp
+++ b/src/lib/profiles/bulk-data-transfer/BDXManagedNamespace.hpp
@@ -49,14 +49,14 @@
  *     This namespace includes all interfaces within Weave for the
  *     Bulk Data Transfer (BDX) profile that are currently in production use.
  */
-namespace WeaveMakeManagedNamespaceIdentifier(BDX, kWeaveManagedNamespaceDesignation_Current) { };
+namespace WeaveMakeManagedNamespaceIdentifier(BDX, kWeaveManagedNamespaceDesignation_Current) { }
 
 #if WEAVE_CONFIG_BDX_NAMESPACE == kWeaveManagedNamespace_Current
 namespace BulkDataTransfer = WeaveMakeManagedNamespaceIdentifier(BDX, kWeaveManagedNamespaceDesignation_Current);
 #endif
 
-}; // namespace Profiles
-}; // namespace Weave
-}; // namespace nl
+} // namespace Profiles
+} // namespace Weave
+} // namespace nl
 
 #endif // _WEAVE_BDX_CURRENT_HPP
diff --git a/src/lib/profiles/bulk-data-transfer/Development/BDXManagedNamespace.hpp b/src/lib/profiles/bulk-data-transfer/Development/BDXManagedNamespace.hpp
index 2422590..2252b6b 100644
--- a/src/lib/profiles/bulk-data-transfer/Development/BDXManagedNamespace.hpp
+++ b/src/lib/profiles/bulk-data-transfer/Development/BDXManagedNamespace.hpp
@@ -50,12 +50,12 @@
  *     Bulk Data Transfer (BDX) profile that are actively under
  *     development and should not be used for production use.
  */
-namespace WeaveMakeManagedNamespaceIdentifier(BDX, kWeaveManagedNamespaceDesignation_Development) { };
+namespace WeaveMakeManagedNamespaceIdentifier(BDX, kWeaveManagedNamespaceDesignation_Development) { }
 
 namespace BulkDataTransfer = WeaveMakeManagedNamespaceIdentifier(BDX, kWeaveManagedNamespaceDesignation_Development);
 
-}; // namespace Profiles
-}; // namespace Weave
-}; // namespace nl
+} // namespace Profiles
+} // namespace Weave
+} // namespace nl
 
 #endif // _WEAVE_BDX_DEVELOPMENT_HPP
diff --git a/src/lib/profiles/common/WeaveMessage.h b/src/lib/profiles/common/WeaveMessage.h
index 7589970..2458259 100644
--- a/src/lib/profiles/common/WeaveMessage.h
+++ b/src/lib/profiles/common/WeaveMessage.h
@@ -267,7 +267,7 @@
     inline bool isEmpty(void)
     {
         return (theLength == 0 && theWriteCallback == NULL);
-    };
+    }
 
     // packing and parsing
 
@@ -287,7 +287,7 @@
         MessageIterator i(buff);
 
         return pack(i);
-    };
+    }
 
     WEAVE_ERROR pack(MessageIterator&i, uint32_t maxLen = 0xFFFFFFFFUL);
 
@@ -301,7 +301,7 @@
     inline uint16_t packedLength(void)
     {
         return theLength;
-    };
+    }
 
     /**
      * @fn WEAVE_ERROR parse(System::PacketBuffer *buff, ReferencedTLVData &aTarget)
@@ -324,7 +324,7 @@
         MessageIterator i(buff);
 
         return parse(i, aTarget);
-    };
+    }
 
     static WEAVE_ERROR parse(MessageIterator&i, ReferencedTLVData&aTarget);
 
@@ -343,10 +343,10 @@
     void            *theAppState;
   };
 
-}; // Profiles
+} // Profiles
 
-}; // Weave
+} // Weave
 
-}; // nl
+} // nl
 
 #endif // _WEAVE_MESSAGE_H
diff --git a/src/lib/profiles/data-management/Current/Command.h b/src/lib/profiles/data-management/Current/Command.h
index 6cb07b7..3650d61 100644
--- a/src/lib/profiles/data-management/Current/Command.h
+++ b/src/lib/profiles/data-management/Current/Command.h
@@ -107,7 +107,7 @@
      *
      *  @return  A pointer to the exchange context object used by this incoming command
      */
-    nl::Weave::ExchangeContext * GetExchangeContext(void) const { return mEC; };
+    nl::Weave::ExchangeContext * GetExchangeContext(void) const { return mEC; }
 
     WEAVE_ERROR ValidateAuthenticator(nl::Weave::System::PacketBuffer * aRequestBuffer);
 
@@ -138,12 +138,12 @@
     void SetExpiryTimeValid(bool inExpiryTimeValid);
     void SetIsOneWay(bool inIsOneWay);
 
-    bool IsFree(void) { return (NULL == mEC); };
+    bool IsFree(void) { return (NULL == mEC); }
 };
 
-}; // namespace WeaveMakeManagedNamespaceIdentifier(DataManagement, kWeaveManagedNamespaceDesignation_Current)
-}; // namespace Profiles
-}; // namespace Weave
-}; // namespace nl
+} // namespace WeaveMakeManagedNamespaceIdentifier(DataManagement, kWeaveManagedNamespaceDesignation_Current)
+} // namespace Profiles
+} // namespace Weave
+} // namespace nl
 
 #endif // _WEAVE_DATA_MANAGEMENT_COMMAND_CURRENT_H
diff --git a/src/lib/profiles/data-management/Current/CommandSender.h b/src/lib/profiles/data-management/Current/CommandSender.h
index a713197..94ff930 100644
--- a/src/lib/profiles/data-management/Current/CommandSender.h
+++ b/src/lib/profiles/data-management/Current/CommandSender.h
@@ -266,9 +266,9 @@
     friend class TestTdm;
 };
 
-}; // namespace WeaveMakeManagedNamespaceIdentifier(DataManagement, kWeaveManagedNamespaceDesignation_Current)
-}; // namespace Profiles
-}; // namespace Weave
-}; // namespace nl
+} // namespace WeaveMakeManagedNamespaceIdentifier(DataManagement, kWeaveManagedNamespaceDesignation_Current)
+} // namespace Profiles
+} // namespace Weave
+} // namespace nl
 
 #endif // _WEAVE_DATA_MANAGEMENT_COMMAND_CURRENT_H
diff --git a/src/lib/profiles/data-management/Current/EventLoggingTypes.h b/src/lib/profiles/data-management/Current/EventLoggingTypes.h
index 25d2a7c..120b0fe 100644
--- a/src/lib/profiles/data-management/Current/EventLoggingTypes.h
+++ b/src/lib/profiles/data-management/Current/EventLoggingTypes.h
@@ -151,7 +151,7 @@
     /**
      * Default constructor
      */
-    DetailedRootSection(void) : ResourceID(ResourceIdentifier::SELF_NODE_ID) { };
+    DetailedRootSection(void) : ResourceID(ResourceIdentifier::SELF_NODE_ID) { }
 
     ResourceIdentifier ResourceID;      /**< The ID of the resource that the generated event pertains to.
                                    When the event resource is equal to the event source, set
@@ -179,17 +179,17 @@
     /**
      * Default constructor.
      */
-    Timestamp(void) : systemTimestamp(0) { };
+    Timestamp(void) : systemTimestamp(0) { }
 
     /**
      * UTC timestamp constructor.
      */
-    Timestamp(utc_timestamp_t aUtc) : utcTimestamp(aUtc) { };
+    Timestamp(utc_timestamp_t aUtc) : utcTimestamp(aUtc) { }
 
     /**
      * System timestamp constructor.
      */
-    Timestamp(timestamp_t aSystem) : systemTimestamp(aSystem) { };
+    Timestamp(timestamp_t aSystem) : systemTimestamp(aSystem) { }
 
     timestamp_t systemTimestamp;  ///< System timestamp.
     utc_timestamp_t utcTimestamp; ///< UTC timestamp.
@@ -359,7 +359,7 @@
  */
 struct ExternalEvents
 {
-    ExternalEvents(void) : mFirstEventID(1), mLastEventID(0), mFetchEventsFunct(NULL), mNotifyEventsDeliveredFunct(NULL), mNotifyEventsEvictedFunct(NULL) { };
+    ExternalEvents(void) : mFirstEventID(1), mLastEventID(0), mFetchEventsFunct(NULL), mNotifyEventsDeliveredFunct(NULL), mNotifyEventsEvictedFunct(NULL) { }
 
     event_id_t mFirstEventID; /**< The first event ID stored externally. */
     event_id_t mLastEventID;  /**< The last event ID stored externally. */
@@ -367,8 +367,8 @@
     FetchExternalEventsFunct mFetchEventsFunct; /**< The callback to use to fetch the above IDs. */
     NotifyExternalEventsDeliveredFunct mNotifyEventsDeliveredFunct;
     NotifyExternalEventsEvictedFunct mNotifyEventsEvictedFunct;
-    bool IsValid(void) const { return mFirstEventID <= mLastEventID; };
-    void Invalidate(void) { mFirstEventID = 1; mLastEventID = 0; };
+    bool IsValid(void) const { return mFirstEventID <= mLastEventID; }
+    void Invalidate(void) { mFirstEventID = 1; mLastEventID = 0; }
 };
 
 // internal API
diff --git a/src/lib/profiles/data-management/Current/GenericTraitCatalogImpl.h b/src/lib/profiles/data-management/Current/GenericTraitCatalogImpl.h
index 8e67f74..1b5af57 100644
--- a/src/lib/profiles/data-management/Current/GenericTraitCatalogImpl.h
+++ b/src/lib/profiles/data-management/Current/GenericTraitCatalogImpl.h
@@ -103,9 +103,9 @@
 typedef GenericTraitCatalogImpl<TraitDataSink> GenericTraitSinkCatalog;
 typedef GenericTraitCatalogImpl<TraitDataSource> GenericTraitSourceCatalog;
 
-}; // namespace WeaveMakeManagedNamespaceIdentifier(DataManagement, kWeaveManagedNamespaceDesignation_Current)
-}; // namespace Profiles
-}; // namespace Weave
-}; // namespace nl
+} // namespace WeaveMakeManagedNamespaceIdentifier(DataManagement, kWeaveManagedNamespaceDesignation_Current)
+} // namespace Profiles
+} // namespace Weave
+} // namespace nl
 
 #endif // _WEAVE_DATA_MANAGEMENT_GENERIC_TRAIT_CATALOG_IMPL_CURRENT_H
diff --git a/src/lib/profiles/data-management/Current/LoggingManagement.h b/src/lib/profiles/data-management/Current/LoggingManagement.h
index 5798dd7..75edb3f 100644
--- a/src/lib/profiles/data-management/Current/LoggingManagement.h
+++ b/src/lib/profiles/data-management/Current/LoggingManagement.h
@@ -232,7 +232,7 @@
      * @retval true  The instance is valid (initialized with the appropriate backing store)
      * @retval false Otherwise
      */
-    bool IsValid(void) { return (mEventBuffer != NULL); };
+    bool IsValid(void) { return (mEventBuffer != NULL); }
 
     event_id_t GetLastEventID(ImportanceType inImportance);
     event_id_t GetFirstEventID(ImportanceType inImportance);
diff --git a/src/lib/profiles/data-management/Current/MessageDef.h b/src/lib/profiles/data-management/Current/MessageDef.h
index 07a3a43..ebc8cb4 100644
--- a/src/lib/profiles/data-management/Current/MessageDef.h
+++ b/src/lib/profiles/data-management/Current/MessageDef.h
@@ -248,8 +248,8 @@
 public:
     void ResetError(void);
     void ResetError(WEAVE_ERROR aErr);
-    WEAVE_ERROR GetError(void) const { return mError; };
-    nl::Weave::TLV::TLVWriter * GetWriter(void) { return mpWriter; };
+    WEAVE_ERROR GetError(void) const { return mError; }
+    nl::Weave::TLV::TLVWriter * GetWriter(void) { return mpWriter; }
 
 protected:
     WEAVE_ERROR mError;
@@ -296,7 +296,7 @@
 
 class Parser;
 class Builder;
-}; // namespace Path
+} // namespace Path
 
 /**
  *  @class Parser
@@ -377,7 +377,7 @@
 
     class Parser;
     class Builder;
-}; // namespace DataElement
+} // namespace DataElement
 
 /**
  *  @brief
@@ -444,7 +444,7 @@
 
 class Parser;
 class Builder;
-}; // namespace DataElement
+} // namespace DataElement
 
 /**
  *  @brief
@@ -534,7 +534,7 @@
 namespace PathList {
 class Parser;
 class Builder;
-}; // namespace PathList
+} // namespace PathList
 
 class PathList::Parser : public ListParserBase
 {
@@ -562,7 +562,7 @@
 namespace DataList {
 class Parser;
 class Builder;
-}; // namespace DataList
+} // namespace DataList
 
 class DataList::Parser : public ListParserBase
 {
@@ -617,7 +617,7 @@
 
 class Parser;
 class Builder;
-}; // namespace Event
+} // namespace Event
 
 class Event::Parser : protected DataElement::Parser
 {
@@ -676,7 +676,7 @@
 namespace EventList {
 class Parser;
 class Builder;
-}; // namespace EventList
+} // namespace EventList
 
 class EventList::Parser : public ListParserBase
 {
@@ -704,7 +704,7 @@
 namespace VersionList {
 class Parser;
 class Builder;
-}; // namespace VersionList
+} // namespace VersionList
 
 class VersionList::Parser : public ListParserBase
 {
@@ -735,7 +735,7 @@
 namespace StatusList {
     class Parser;
     class Builder;
-}; // namespace StatusList
+} // namespace StatusList
 
 /**
  * StatusList builder.
@@ -770,14 +770,14 @@
 {
     kCsTag_PathList = 1,
 };
-};
+}
 
 namespace ViewResponse {
 enum
 {
     kCsTag_DataList = 2,
 };
-};
+}
 
 namespace BaseMessageWithSubscribeId {
 enum
@@ -787,7 +787,7 @@
 
 class Parser;
 class Builder;
-}; // namespace BaseMessageWithSubscribeId
+} // namespace BaseMessageWithSubscribeId
 
 class BaseMessageWithSubscribeId::Parser : public ParserBase
 {
@@ -833,7 +833,7 @@
 
 class Parser;
 class Builder;
-}; // namespace SubscribeRequest
+} // namespace SubscribeRequest
 
 /**
  *  @brief
@@ -919,7 +919,7 @@
 
 class Parser;
 class Builder;
-}; // namespace SubscribeResponse
+} // namespace SubscribeResponse
 
 /**
  *  @brief
@@ -981,7 +981,7 @@
 
 class Parser;
 class Builder;
-}; // namespace SubscribeCancelRequest
+} // namespace SubscribeCancelRequest
 
 class SubscribeCancelRequest::Parser : public BaseMessageWithSubscribeId::Parser
 {
@@ -1018,7 +1018,7 @@
 
 class Parser;
 class Builder;
-}; // namespace SubscribeConfirmRequest
+} // namespace SubscribeConfirmRequest
 
 class SubscribeConfirmRequest::Parser : public SubscribeCancelRequest::Parser
 {
@@ -1042,7 +1042,7 @@
 
 class Parser;
 class Builder;
-}; // namespace RejectionRecord
+} // namespace RejectionRecord
 
 class RejectionRecord::Parser : public ParserBase
 {
@@ -1071,7 +1071,7 @@
 
 class Parser;
 class Builder;
-}; // namespace RejectionRecordList
+} // namespace RejectionRecordList
 
 class RejectionRecordList::Parser : public ListParserBase
 {
@@ -1117,7 +1117,7 @@
 };
 
 class Parser;
-}; // namespace NotificationRequest
+} // namespace NotificationRequest
 
 class NotificationRequest::Parser : public BaseMessageWithSubscribeId::Parser
 {
@@ -1171,7 +1171,7 @@
 
 class Parser;
 class Builder;
-}; // namespace CustomCommand
+} // namespace CustomCommand
 
 /**
  *  @brief
@@ -1390,7 +1390,7 @@
 
 class Parser;
 class Builder;
-}; // namespace CustomCommandResponse
+} // namespace CustomCommandResponse
 
 /**
  *  @brief
@@ -1496,7 +1496,7 @@
     };
 
     class Parser;
-}; // namespace UpdateRequest
+} // namespace UpdateRequest
 
 /**
  *  @brief
@@ -1572,7 +1572,7 @@
 
     class Parser;
     class Builder;
-};
+}
 
 /**
  *  @brief
@@ -1630,9 +1630,9 @@
     WEAVE_ERROR GetVersionList(VersionList::Parser * const apVersionList) const;
 };
 
-}; // namespace WeaveMakeManagedNamespaceIdentifier(DataManagement, kWeaveManagedNamespaceDesignation_Current)
-}; // namespace Profiles
-}; // namespace Weave
-}; // namespace nl
+} // namespace WeaveMakeManagedNamespaceIdentifier(DataManagement, kWeaveManagedNamespaceDesignation_Current)
+} // namespace Profiles
+} // namespace Weave
+} // namespace nl
 
 #endif // _WEAVE_DATA_MANAGEMENT_MESSAGE_DEF_CURRENT_H
diff --git a/src/lib/profiles/data-management/Current/NotificationEngine.h b/src/lib/profiles/data-management/Current/NotificationEngine.h
index 592208a..d55fda5 100644
--- a/src/lib/profiles/data-management/Current/NotificationEngine.h
+++ b/src/lib/profiles/data-management/Current/NotificationEngine.h
@@ -420,9 +420,9 @@
     WEAVE_CONFIG_WDM_PUBLISHER_GRAPH_SOLVER mGraphSolver;
 };
 
-}; // namespace WeaveMakeManagedNamespaceIdentifier(DataManagement, kWeaveManagedNamespaceDesignation_Current)
-}; // namespace Profiles
-}; // namespace Weave
-}; // namespace nl
+} // namespace WeaveMakeManagedNamespaceIdentifier(DataManagement, kWeaveManagedNamespaceDesignation_Current)
+} // namespace Profiles
+} // namespace Weave
+} // namespace nl
 
 #endif // _WEAVE_DATA_MANAGEMENT_NOTIFICATION_ENGINE_CURRENT_H
diff --git a/src/lib/profiles/data-management/Current/ResourceIdentifier.h b/src/lib/profiles/data-management/Current/ResourceIdentifier.h
index b34ffb7..5830d30 100644
--- a/src/lib/profiles/data-management/Current/ResourceIdentifier.h
+++ b/src/lib/profiles/data-management/Current/ResourceIdentifier.h
@@ -73,7 +73,7 @@
      *  of an RESERVED resource type with an kNodeIdNotSpeficied
      *  resource.
      */
-    ResourceIdentifier() : ResourceType(RESOURCE_TYPE_RESERVED), ResourceId(nl::Weave::kNodeIdNotSpecified) { };
+    ResourceIdentifier() : ResourceType(RESOURCE_TYPE_RESERVED), ResourceId(nl::Weave::kNodeIdNotSpecified) { }
 
     /**
      * Construct a ResourceIdentifier of type DEVICE based on a given aNodeId
@@ -83,7 +83,7 @@
     ResourceIdentifier(const uint64_t & aNodeId) : ResourceType(Schema::Weave::Common::RESOURCE_TYPE_DEVICE), ResourceId(aNodeId)
     {
         NormalizeResource();
-    };
+    }
 
     /**
      * Construct the ResourceIdentifier of the specified type with the given ID
@@ -94,7 +94,7 @@
     ResourceIdentifier(uint16_t aResourceType, const uint64_t & aResourceId) : ResourceType(aResourceType), ResourceId(aResourceId)
     {
         NormalizeResource();
-    };
+    }
 
     /**
      * Construct the ResourceIdentifier of the specified type with the given ID
@@ -111,7 +111,7 @@
             aResourceIdLen = sizeof(ResourceIdBytes);
 
         memcpy(ResourceIdBytes, aResourceId, aResourceIdLen);
-    };
+    }
 
     enum
     {
@@ -248,13 +248,13 @@
      * @brief
      *   An accessor function for fetching the ResourceId
      */
-    uint64_t GetResourceId() const { return ResourceId; };
+    uint64_t GetResourceId() const { return ResourceId; }
 
     /**
      * @brief
      *   An accessor function for fetching the ResourceType
      */
-    uint16_t GetResourceType() const { return ResourceType; };
+    uint16_t GetResourceType() const { return ResourceType; }
 
     friend bool operator ==(const ResourceIdentifier & lhs, const ResourceIdentifier & rhs);
 
@@ -272,16 +272,16 @@
 inline bool operator ==(const ResourceIdentifier & lhs, const ResourceIdentifier & rhs)
 {
     return lhs.ResourceId == rhs.ResourceId && lhs.ResourceType == rhs.ResourceType;
-};
+}
 
 inline bool operator !=(const ResourceIdentifier & lhs, const ResourceIdentifier & rhs)
 {
     return !(lhs == rhs);
 }
 
-}; // namespace WeaveMakeManagedNamespaceIdentifier(DataManagement, kWeaveManagedNamespaceDesignation_Current)
-}; // namespace Profiles
-}; // namespace Weave
-}; // namespace nl
+} // namespace WeaveMakeManagedNamespaceIdentifier(DataManagement, kWeaveManagedNamespaceDesignation_Current)
+} // namespace Profiles
+} // namespace Weave
+} // namespace nl
 
 #endif // _WEAVE_DATA_MANAGEMENT_MESSAGE_DEF_CURRENT_H
diff --git a/src/lib/profiles/data-management/Current/SingleResourceTraitCatalog.h b/src/lib/profiles/data-management/Current/SingleResourceTraitCatalog.h
index 395ed1c..21adee1 100644
--- a/src/lib/profiles/data-management/Current/SingleResourceTraitCatalog.h
+++ b/src/lib/profiles/data-management/Current/SingleResourceTraitCatalog.h
@@ -103,8 +103,8 @@
 typedef SingleResourceTraitCatalog<TraitDataSink> SingleResourceSinkTraitCatalog;
 typedef SingleResourceTraitCatalog<TraitDataSource> SingleResourceSourceTraitCatalog;
 
-}; // namespace WeaveMakeManagedNamespaceIdentifier(DataManagement, kWeaveManagedNamespaceDesignation_Current)
-}; // namespace Profiles
-}; // namespace Weave
-}; // namespace nl
+} // namespace WeaveMakeManagedNamespaceIdentifier(DataManagement, kWeaveManagedNamespaceDesignation_Current)
+} // namespace Profiles
+} // namespace Weave
+} // namespace nl
 #endif // _WEAVE_DATA_MANAGEMENT_SINGLE_RESOURCE_TRAIT_CATALOG_CURRENT_H
diff --git a/src/lib/profiles/data-management/Current/SubscriptionClient.h b/src/lib/profiles/data-management/Current/SubscriptionClient.h
index 0ab3825..5af7604 100644
--- a/src/lib/profiles/data-management/Current/SubscriptionClient.h
+++ b/src/lib/profiles/data-management/Current/SubscriptionClient.h
@@ -360,7 +360,7 @@
 
     WEAVE_ERROR GetSubscriptionId(uint64_t * const apSubscriptionId);
 
-    uint32_t GetLivenessTimeoutMsec(void) const { return mLivenessTimeoutMsec; };
+    uint32_t GetLivenessTimeoutMsec(void) const { return mLivenessTimeoutMsec; }
     void SetLivenessTimeoutMsec(uint32_t val) { mLivenessTimeoutMsec = val; }
 
     void EnableResubscribe(ResubscribePolicyCallback aCallback);
@@ -691,9 +691,9 @@
 #endif // WEAVE_CONFIG_ENABLE_WDM_UPDATE
 };
 
-}; // namespace WeaveMakeManagedNamespaceIdentifier(DataManagement, kWeaveManagedNamespaceDesignation_Current)
-}; // namespace Profiles
-}; // namespace Weave
-}; // namespace nl
+} // namespace WeaveMakeManagedNamespaceIdentifier(DataManagement, kWeaveManagedNamespaceDesignation_Current)
+} // namespace Profiles
+} // namespace Weave
+} // namespace nl
 
 #endif // _WEAVE_DATA_MANAGEMENT_SUBSCRIPTION_CLIENT_CURRENT_H
diff --git a/src/lib/profiles/data-management/Current/SubscriptionEngine.h b/src/lib/profiles/data-management/Current/SubscriptionEngine.h
index 396ec3c..cd1967e 100644
--- a/src/lib/profiles/data-management/Current/SubscriptionEngine.h
+++ b/src/lib/profiles/data-management/Current/SubscriptionEngine.h
@@ -374,7 +374,7 @@
     WEAVE_ERROR RegisterForSubscriptionlessNotifications(const TraitCatalogBase<TraitDataSink> * const apCatalog);
 #endif // WDM_ENABLE_SUBSCRIPTIONLESS_NOTIFICATION
 
-    nl::Weave::WeaveExchangeManager * GetExchangeManager(void) const { return mExchangeMgr; };
+    nl::Weave::WeaveExchangeManager * GetExchangeManager(void) const { return mExchangeMgr; }
 
 private:
     friend class SubscriptionHandler;
@@ -570,9 +570,9 @@
 #endif // WEAVE_CONFIG_PERSIST_SUBSCRIPTION_STATE
 };
 
-}; // namespace WeaveMakeManagedNamespaceIdentifier(DataManagement, kWeaveManagedNamespaceDesignation_Current)
-}; // namespace Profiles
-}; // namespace Weave
-}; // namespace nl
+} // namespace WeaveMakeManagedNamespaceIdentifier(DataManagement, kWeaveManagedNamespaceDesignation_Current)
+} // namespace Profiles
+} // namespace Weave
+} // namespace nl
 
 #endif // _WEAVE_DATA_MANAGEMENT_SUBSCRIPTION_ENGINE_CURRENT_H
diff --git a/src/lib/profiles/data-management/Current/SubscriptionHandler.h b/src/lib/profiles/data-management/Current/SubscriptionHandler.h
index 90fdd72..5984d7f 100644
--- a/src/lib/profiles/data-management/Current/SubscriptionHandler.h
+++ b/src/lib/profiles/data-management/Current/SubscriptionHandler.h
@@ -364,9 +364,9 @@
                                                          uint8_t aMsgType, PacketBuffer * aPayload);
 };
 
-}; // namespace WeaveMakeManagedNamespaceIdentifier(DataManagement, kWeaveManagedNamespaceDesignation_Current)
-}; // namespace Profiles
-}; // namespace Weave
-}; // namespace nl
+} // namespace WeaveMakeManagedNamespaceIdentifier(DataManagement, kWeaveManagedNamespaceDesignation_Current)
+} // namespace Profiles
+} // namespace Weave
+} // namespace nl
 
 #endif // _WEAVE_DATA_MANAGEMENT_SUBSCRIPTION_HANDLER_CURRENT_H
diff --git a/src/lib/profiles/data-management/Current/TraitCatalog.h b/src/lib/profiles/data-management/Current/TraitCatalog.h
index 7290920..65ad3f9 100644
--- a/src/lib/profiles/data-management/Current/TraitCatalog.h
+++ b/src/lib/profiles/data-management/Current/TraitCatalog.h
@@ -125,10 +125,10 @@
 #endif // WEAVE_CONFIG_ENABLE_WDM_UPDATE || WEAVE_CONFIG_ENABLE_WDM_CUSTOM_COMMAND_SENDER
 };
 
-}; // namespace WeaveMakeManagedNamespaceIdentifier(DataManagement, kWeaveManagedNamespaceDesignation_Current)
-}; // namespace Profiles
-}; // namespace Weave
-}; // namespace nl
+} // namespace WeaveMakeManagedNamespaceIdentifier(DataManagement, kWeaveManagedNamespaceDesignation_Current)
+} // namespace Profiles
+} // namespace Weave
+} // namespace nl
 
 #include <Weave/Profiles/data-management/Current/SingleResourceTraitCatalog.h>
 
diff --git a/src/lib/profiles/data-management/Current/TraitData.h b/src/lib/profiles/data-management/Current/TraitData.h
index 74d79bd..9ef61ae 100644
--- a/src/lib/profiles/data-management/Current/TraitData.h
+++ b/src/lib/profiles/data-management/Current/TraitData.h
@@ -1111,9 +1111,9 @@
 };
 #endif // WDM_ENABLE_PUBLISHER_UPDATE_SERVER_SUPPORT
 
-}; // namespace WeaveMakeManagedNamespaceIdentifier(DataManagement, kWeaveManagedNamespaceDesignation_Current)
-}; // namespace Profiles
-}; // namespace Weave
-}; // namespace nl
+} // namespace WeaveMakeManagedNamespaceIdentifier(DataManagement, kWeaveManagedNamespaceDesignation_Current)
+} // namespace Profiles
+} // namespace Weave
+} // namespace nl
 
 #endif // _WEAVE_DATA_MANAGEMENT_TRAIT_DATA_CURRENT_H
diff --git a/src/lib/profiles/data-management/Current/TraitPathStore.h b/src/lib/profiles/data-management/Current/TraitPathStore.h
index df61ea4..c132e1b 100644
--- a/src/lib/profiles/data-management/Current/TraitPathStore.h
+++ b/src/lib/profiles/data-management/Current/TraitPathStore.h
@@ -111,9 +111,9 @@
         size_t mNumItems;
 };
 
-}; // namespace WeaveMakeManagedNamespaceIdentifier(DataManagement, kWeaveManagedNamespaceDesignation_Current)
-}; // namespace Profiles
-}; // namespace Weave
-}; // namespace nl
+} // namespace WeaveMakeManagedNamespaceIdentifier(DataManagement, kWeaveManagedNamespaceDesignation_Current)
+} // namespace Profiles
+} // namespace Weave
+} // namespace nl
 
 #endif // _WEAVE_DATA_MANAGEMENT_TRAIT_PATH_STORE_CURRENT_H
diff --git a/src/lib/profiles/data-management/Current/UpdateClient.h b/src/lib/profiles/data-management/Current/UpdateClient.h
index d017191..ce2c9fd 100644
--- a/src/lib/profiles/data-management/Current/UpdateClient.h
+++ b/src/lib/profiles/data-management/Current/UpdateClient.h
@@ -133,9 +133,9 @@
     // };
     void Clear() { memset(this, 0, sizeof(*this)); }
 };
-}; // namespace WeaveMakeManagedNamespaceIdentifier(DataManagement, kWeaveManagedNamespaceDesignation_Current)
-}; // namespace Profiles
-}; // namespace Weave
-}; // namespace nl
+} // namespace WeaveMakeManagedNamespaceIdentifier(DataManagement, kWeaveManagedNamespaceDesignation_Current)
+} // namespace Profiles
+} // namespace Weave
+} // namespace nl
 
 #endif // _WEAVE_DATA_MANAGEMENT_UPDATE_CLIENT_CURRENT_H
diff --git a/src/lib/profiles/data-management/Current/UpdateEncoder.h b/src/lib/profiles/data-management/Current/UpdateEncoder.h
index 6ca95f4..b13a766 100644
--- a/src/lib/profiles/data-management/Current/UpdateEncoder.h
+++ b/src/lib/profiles/data-management/Current/UpdateEncoder.h
@@ -168,10 +168,10 @@
 
 };
 
-}; // namespace WeaveMakeManagedNamespaceIdentifier(DataManagement, kWeaveManagedNamespaceDesignation_Current)
-}; // namespace Profiles
-}; // namespace Weave
-}; // namespace nl
+} // namespace WeaveMakeManagedNamespaceIdentifier(DataManagement, kWeaveManagedNamespaceDesignation_Current)
+} // namespace Profiles
+} // namespace Weave
+} // namespace nl
 
 #endif // WEAVE_CONFIG_ENABLE_WDM_UPDATE
 
diff --git a/src/lib/profiles/data-management/Current/ViewClient.h b/src/lib/profiles/data-management/Current/ViewClient.h
index 3f8c140..5409fe9 100644
--- a/src/lib/profiles/data-management/Current/ViewClient.h
+++ b/src/lib/profiles/data-management/Current/ViewClient.h
@@ -167,9 +167,9 @@
                                   PacketBuffer * aPayload);
 };
 
-}; // namespace WeaveMakeManagedNamespaceIdentifier(DataManagement, kWeaveManagedNamespaceDesignation_Current)
-}; // namespace Profiles
-}; // namespace Weave
-}; // namespace nl
+} // namespace WeaveMakeManagedNamespaceIdentifier(DataManagement, kWeaveManagedNamespaceDesignation_Current)
+} // namespace Profiles
+} // namespace Weave
+} // namespace nl
 
 #endif // _WEAVE_DATA_MANAGEMENT_VIEW_CLIENT_CURRENT_H
diff --git a/src/lib/profiles/data-management/Current/WdmManagedNamespace.h b/src/lib/profiles/data-management/Current/WdmManagedNamespace.h
index 357c9b5..efc17c3 100644
--- a/src/lib/profiles/data-management/Current/WdmManagedNamespace.h
+++ b/src/lib/profiles/data-management/Current/WdmManagedNamespace.h
@@ -40,12 +40,12 @@
  *     Weave Data Management (WDM) profile that are currently supported
  *     for production use.
  */
-namespace WeaveMakeManagedNamespaceIdentifier(DataManagement, kWeaveManagedNamespaceDesignation_Current) { };
+namespace WeaveMakeManagedNamespaceIdentifier(DataManagement, kWeaveManagedNamespaceDesignation_Current) { }
 
 namespace DataManagement = WeaveMakeManagedNamespaceIdentifier(DataManagement, kWeaveManagedNamespaceDesignation_Current);
 
-}; // namespace Profiles
-}; // namespace Weave
-}; // namespace nl
+} // namespace Profiles
+} // namespace Weave
+} // namespace nl
 
 #endif // _WEAVE_DATA_MANAGEMENT_MANAGEDNAMESPACE_CURRENT_H
diff --git a/src/lib/profiles/data-management/Legacy/WdmManagedNamespace.h b/src/lib/profiles/data-management/Legacy/WdmManagedNamespace.h
index e1c668e..045820e 100644
--- a/src/lib/profiles/data-management/Legacy/WdmManagedNamespace.h
+++ b/src/lib/profiles/data-management/Legacy/WdmManagedNamespace.h
@@ -43,8 +43,8 @@
 
 namespace DataManagement = WeaveMakeManagedNamespaceIdentifier(DataManagement, kWeaveManagedNamespaceDesignation_Legacy);
 
-}; // namespace Profiles
-}; // namespace Weave
-}; // namespace nl
+} // namespace Profiles
+} // namespace Weave
+} // namespace nl
 
 #endif // _WEAVE_DATA_MANAGEMENT_MANAGEDNAMESPACE_LEGACY_H
diff --git a/src/lib/profiles/service-directory/ServiceDirectory.h b/src/lib/profiles/service-directory/ServiceDirectory.h
index 582c9c1..0385247 100644
--- a/src/lib/profiles/service-directory/ServiceDirectory.h
+++ b/src/lib/profiles/service-directory/ServiceDirectory.h
@@ -540,10 +540,10 @@
 }
 
 
-}; // ServiceDirectory
-}; // Profiles
-}; // Weave
-}; // nl
+} // ServiceDirectory
+} // Profiles
+} // Weave
+} // nl
 
 #endif //  WEAVE_CONFIG_ENABLE_SERVICE_DIRECTORY
 #endif // _WSD_PROFILE_H
diff --git a/src/lib/profiles/status-report/StatusReportProfile.h b/src/lib/profiles/status-report/StatusReportProfile.h
index 4f5affb..b84d9df 100644
--- a/src/lib/profiles/status-report/StatusReportProfile.h
+++ b/src/lib/profiles/status-report/StatusReportProfile.h
@@ -98,9 +98,9 @@
         ReferencedTLVData mAdditionalInfo;
     };
 
-}; // StatusReporting
-}; // namespace Profiles
-}; // namespace Weave
-}; // namespace nl
+} // StatusReporting
+} // namespace Profiles
+} // namespace Weave
+} // namespace nl
 
 #endif // _STATUS_REPORT_PROFILE_H
diff --git a/src/lib/profiles/time/WeaveTime.h b/src/lib/profiles/time/WeaveTime.h
index a18e70e..8ffcbf0 100644
--- a/src/lib/profiles/time/WeaveTime.h
+++ b/src/lib/profiles/time/WeaveTime.h
@@ -1144,7 +1144,7 @@
      *
      *  @return current state
      */
-    ClientState GetClientState(void) const { return mClientState; };
+    ClientState GetClientState(void) const { return mClientState; }
 
     /**
      *  @brief
@@ -1259,10 +1259,10 @@
     void OnResponseTimeout(void);
 
     /// Invalidate the registered information for time correction
-    inline void InvalidateRegisteredResult(void) { mFlightTime_usec = kFlightTimeInvalid; };
+    inline void InvalidateRegisteredResult(void) { mFlightTime_usec = kFlightTimeInvalid; }
 
     /// Check if the registered information for time correction is valid
-    inline bool IsRegisteredResultValid(void) { return mFlightTime_usec >= kFlightTimeMinimum; };
+    inline bool IsRegisteredResultValid(void) { return mFlightTime_usec >= kFlightTimeMinimum; }
 
     void ProceedToNextState(void);
     void EnterSync2(void);
diff --git a/src/lib/profiles/vendor/nestlabs/thermostat/NestThermostatWeaveConstants.h b/src/lib/profiles/vendor/nestlabs/thermostat/NestThermostatWeaveConstants.h
index fbe408d..4cfad1c 100644
--- a/src/lib/profiles/vendor/nestlabs/thermostat/NestThermostatWeaveConstants.h
+++ b/src/lib/profiles/vendor/nestlabs/thermostat/NestThermostatWeaveConstants.h
@@ -155,16 +155,16 @@
     kSystemStatusCode_MandatoryUpdateInProgress = 0x0004,  //Mandatory update in progress
 } SystemStatusCode;
 
-}; // namespace Thermostat
+} // namespace Thermostat
 
-}; // namespace Nestlabs
+} // namespace Nestlabs
 
-}; // namespace Vendor
+} // namespace Vendor
 
-}; // namespace Profiles
+} // namespace Profiles
 
-}; // namespace Weave
+} // namespace Weave
 
-}; // namespace nl
+} // namespace nl
 
 #endif // WEAVE_PROFILES_NEST_THERMOSTAT_CONSTANTS
diff --git a/src/lib/profiles/weave-tunneling/WeaveTunnelAgent.h b/src/lib/profiles/weave-tunneling/WeaveTunnelAgent.h
index 6b2cd2d..0acd1de 100644
--- a/src/lib/profiles/weave-tunneling/WeaveTunnelAgent.h
+++ b/src/lib/profiles/weave-tunneling/WeaveTunnelAgent.h
@@ -167,7 +167,7 @@
 #endif
 
     WeaveTunnelAgent(void);
-    virtual ~WeaveTunnelAgent(void) {};
+    virtual ~WeaveTunnelAgent(void) {}
 
 #if WEAVE_CONFIG_ENABLE_SERVICE_DIRECTORY
 /**
diff --git a/src/lib/support/FlagUtils.hpp b/src/lib/support/FlagUtils.hpp
index 986580d..9993bf0 100644
--- a/src/lib/support/FlagUtils.hpp
+++ b/src/lib/support/FlagUtils.hpp
@@ -61,6 +61,6 @@
     }
 }
 
-}; // namespace nl
+} // namespace nl
 
 #endif // NL_WEAVE_SUPPORT_FLAGUTILS_HPP
diff --git a/src/lib/support/WeaveCounter.h b/src/lib/support/WeaveCounter.h
index 0c7b3dd..ff77965 100644
--- a/src/lib/support/WeaveCounter.h
+++ b/src/lib/support/WeaveCounter.h
@@ -39,8 +39,8 @@
 class Counter
 {
 public:
-    Counter(void) { };
-    ~Counter(void) { };
+    Counter(void) { }
+    ~Counter(void) { }
 
     /**
      *  @brief
diff --git a/src/warm/Warm.h b/src/warm/Warm.h
index 60c461d..26c063a 100644
--- a/src/warm/Warm.h
+++ b/src/warm/Warm.h
@@ -362,7 +362,7 @@
      */
     extern PlatformResult SetThreadRoutePriority   (InterfaceType inInterfaceType, const Inet::IPPrefix &inPrefix, RoutePriority inPriority);
 
-}; // namespace Platform
+} // namespace Platform
 
 /**
  *  A WARM API to perform one time module initialization.
