diff --git a/sbp.cabal b/sbp.cabal
--- a/sbp.cabal
+++ b/sbp.cabal
@@ -1,5 +1,5 @@
 name:                  sbp
-version:               4.2.0
+version:               4.3.0
 synopsis:              SwiftNav's SBP Library
 homepage:              https://github.com/swift-nav/libsbp
 license:               MIT
@@ -32,6 +32,7 @@
                      , SwiftNav.SBP.Flash
                      , SwiftNav.SBP.Gnss
                      , SwiftNav.SBP.Imu
+                     , SwiftNav.SBP.Integrity
                      , SwiftNav.SBP.Linux
                      , SwiftNav.SBP.Logging
                      , SwiftNav.SBP.Mag
diff --git a/src/SwiftNav/SBP.hs b/src/SwiftNav/SBP.hs
--- a/src/SwiftNav/SBP.hs
+++ b/src/SwiftNav/SBP.hs
@@ -21,6 +21,7 @@
 import SwiftNav.SBP.Flash as Exports
 import SwiftNav.SBP.Gnss as Exports
 import SwiftNav.SBP.Imu as Exports
+import SwiftNav.SBP.Integrity as Exports
 import SwiftNav.SBP.Linux as Exports
 import SwiftNav.SBP.Logging as Exports
 import SwiftNav.SBP.Mag as Exports
diff --git a/src/SwiftNav/SBP/Integrity.hs b/src/SwiftNav/SBP/Integrity.hs
new file mode 100644
--- /dev/null
+++ b/src/SwiftNav/SBP/Integrity.hs
@@ -0,0 +1,151 @@
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# LANGUAGE NoImplicitPrelude           #-}
+{-# LANGUAGE TemplateHaskell             #-}
+{-# LANGUAGE RecordWildCards             #-}
+
+-- |
+-- Module:      SwiftNav.SBP.Integrity
+-- Copyright:   Copyright (C) 2015-2021 Swift Navigation, Inc.
+-- License:     MIT
+-- Contact:     https://support.swiftnav.com
+-- Stability:   experimental
+-- Portability: portable
+--
+-- \< Integrity flag messages \>
+
+module SwiftNav.SBP.Integrity
+  ( module SwiftNav.SBP.Integrity
+  ) where
+
+import BasicPrelude
+import Control.Lens
+import Control.Monad.Loops
+import Data.Binary
+import Data.Binary.Get
+import Data.Binary.IEEE754
+import Data.Binary.Put
+import Data.ByteString.Lazy    hiding (ByteString)
+import Data.Int
+import Data.Word
+import SwiftNav.SBP.TH
+import SwiftNav.SBP.Types
+import SwiftNav.SBP.Gnss
+
+{-# ANN module ("HLint: ignore Use camelCase"::String) #-}
+{-# ANN module ("HLint: ignore Redundant do"::String) #-}
+{-# ANN module ("HLint: ignore Use newtype instead of data"::String) #-}
+
+
+msgSsrFlagHighLevel :: Word16
+msgSsrFlagHighLevel = 0x0BB9
+
+data MsgSsrFlagHighLevel = MsgSsrFlagHighLevel
+  { _msgSsrFlagHighLevel_stub :: ![Word8]
+  } deriving ( Show, Read, Eq )
+
+instance Binary MsgSsrFlagHighLevel where
+  get = do
+    _msgSsrFlagHighLevel_stub <- whileM (not <$> isEmpty) getWord8
+    pure MsgSsrFlagHighLevel {..}
+
+  put MsgSsrFlagHighLevel {..} = do
+    mapM_ putWord8 _msgSsrFlagHighLevel_stub
+
+$(makeSBP 'msgSsrFlagHighLevel ''MsgSsrFlagHighLevel)
+$(makeJSON "_msgSsrFlagHighLevel_" ''MsgSsrFlagHighLevel)
+$(makeLenses ''MsgSsrFlagHighLevel)
+
+msgSsrFlagSatellites :: Word16
+msgSsrFlagSatellites = 0x0BBD
+
+data MsgSsrFlagSatellites = MsgSsrFlagSatellites
+  { _msgSsrFlagSatellites_stub :: ![Word8]
+  } deriving ( Show, Read, Eq )
+
+instance Binary MsgSsrFlagSatellites where
+  get = do
+    _msgSsrFlagSatellites_stub <- whileM (not <$> isEmpty) getWord8
+    pure MsgSsrFlagSatellites {..}
+
+  put MsgSsrFlagSatellites {..} = do
+    mapM_ putWord8 _msgSsrFlagSatellites_stub
+
+$(makeSBP 'msgSsrFlagSatellites ''MsgSsrFlagSatellites)
+$(makeJSON "_msgSsrFlagSatellites_" ''MsgSsrFlagSatellites)
+$(makeLenses ''MsgSsrFlagSatellites)
+
+msgSsrFlagTropoGridPoints :: Word16
+msgSsrFlagTropoGridPoints = 0x0BC3
+
+data MsgSsrFlagTropoGridPoints = MsgSsrFlagTropoGridPoints
+  { _msgSsrFlagTropoGridPoints_stub :: ![Word8]
+  } deriving ( Show, Read, Eq )
+
+instance Binary MsgSsrFlagTropoGridPoints where
+  get = do
+    _msgSsrFlagTropoGridPoints_stub <- whileM (not <$> isEmpty) getWord8
+    pure MsgSsrFlagTropoGridPoints {..}
+
+  put MsgSsrFlagTropoGridPoints {..} = do
+    mapM_ putWord8 _msgSsrFlagTropoGridPoints_stub
+
+$(makeSBP 'msgSsrFlagTropoGridPoints ''MsgSsrFlagTropoGridPoints)
+$(makeJSON "_msgSsrFlagTropoGridPoints_" ''MsgSsrFlagTropoGridPoints)
+$(makeLenses ''MsgSsrFlagTropoGridPoints)
+
+msgSsrFlagIonoGridPoints :: Word16
+msgSsrFlagIonoGridPoints = 0x0BC7
+
+data MsgSsrFlagIonoGridPoints = MsgSsrFlagIonoGridPoints
+  { _msgSsrFlagIonoGridPoints_stub :: ![Word8]
+  } deriving ( Show, Read, Eq )
+
+instance Binary MsgSsrFlagIonoGridPoints where
+  get = do
+    _msgSsrFlagIonoGridPoints_stub <- whileM (not <$> isEmpty) getWord8
+    pure MsgSsrFlagIonoGridPoints {..}
+
+  put MsgSsrFlagIonoGridPoints {..} = do
+    mapM_ putWord8 _msgSsrFlagIonoGridPoints_stub
+
+$(makeSBP 'msgSsrFlagIonoGridPoints ''MsgSsrFlagIonoGridPoints)
+$(makeJSON "_msgSsrFlagIonoGridPoints_" ''MsgSsrFlagIonoGridPoints)
+$(makeLenses ''MsgSsrFlagIonoGridPoints)
+
+msgSsrFlagIonoTileSatLos :: Word16
+msgSsrFlagIonoTileSatLos = 0x0BCD
+
+data MsgSsrFlagIonoTileSatLos = MsgSsrFlagIonoTileSatLos
+  { _msgSsrFlagIonoTileSatLos_stub :: ![Word8]
+  } deriving ( Show, Read, Eq )
+
+instance Binary MsgSsrFlagIonoTileSatLos where
+  get = do
+    _msgSsrFlagIonoTileSatLos_stub <- whileM (not <$> isEmpty) getWord8
+    pure MsgSsrFlagIonoTileSatLos {..}
+
+  put MsgSsrFlagIonoTileSatLos {..} = do
+    mapM_ putWord8 _msgSsrFlagIonoTileSatLos_stub
+
+$(makeSBP 'msgSsrFlagIonoTileSatLos ''MsgSsrFlagIonoTileSatLos)
+$(makeJSON "_msgSsrFlagIonoTileSatLos_" ''MsgSsrFlagIonoTileSatLos)
+$(makeLenses ''MsgSsrFlagIonoTileSatLos)
+
+msgSsrFlagIonoGridPointSatLos :: Word16
+msgSsrFlagIonoGridPointSatLos = 0x0BD1
+
+data MsgSsrFlagIonoGridPointSatLos = MsgSsrFlagIonoGridPointSatLos
+  { _msgSsrFlagIonoGridPointSatLos_stub :: ![Word8]
+  } deriving ( Show, Read, Eq )
+
+instance Binary MsgSsrFlagIonoGridPointSatLos where
+  get = do
+    _msgSsrFlagIonoGridPointSatLos_stub <- whileM (not <$> isEmpty) getWord8
+    pure MsgSsrFlagIonoGridPointSatLos {..}
+
+  put MsgSsrFlagIonoGridPointSatLos {..} = do
+    mapM_ putWord8 _msgSsrFlagIonoGridPointSatLos_stub
+
+$(makeSBP 'msgSsrFlagIonoGridPointSatLos ''MsgSsrFlagIonoGridPointSatLos)
+$(makeJSON "_msgSsrFlagIonoGridPointSatLos_" ''MsgSsrFlagIonoGridPointSatLos)
+$(makeLenses ''MsgSsrFlagIonoGridPointSatLos)
diff --git a/src/SwiftNav/SBP/Msg.hs b/src/SwiftNav/SBP/Msg.hs
--- a/src/SwiftNav/SBP/Msg.hs
+++ b/src/SwiftNav/SBP/Msg.hs
@@ -31,6 +31,7 @@
 import SwiftNav.SBP.Flash
 import SwiftNav.SBP.Gnss
 import SwiftNav.SBP.Imu
+import SwiftNav.SBP.Integrity
 import SwiftNav.SBP.Linux
 import SwiftNav.SBP.Logging
 import SwiftNav.SBP.Mag
@@ -131,6 +132,7 @@
    | SBPMsgGloBiases MsgGloBiases Msg
    | SBPMsgGnssCapb MsgGnssCapb Msg
    | SBPMsgGnssTimeOffset MsgGnssTimeOffset Msg
+   | SBPMsgGpsLeapSecond MsgGpsLeapSecond Msg
    | SBPMsgGpsTime MsgGpsTime Msg
    | SBPMsgGpsTimeDepA MsgGpsTimeDepA Msg
    | SBPMsgGpsTimeGnss MsgGpsTimeGnss Msg
@@ -146,6 +148,7 @@
    | SBPMsgInsStatus MsgInsStatus Msg
    | SBPMsgInsUpdates MsgInsUpdates Msg
    | SBPMsgIono MsgIono Msg
+   | SBPMsgItrf MsgItrf Msg
    | SBPMsgLinuxCpuState MsgLinuxCpuState Msg
    | SBPMsgLinuxCpuStateDepA MsgLinuxCpuStateDepA Msg
    | SBPMsgLinuxMemState MsgLinuxMemState Msg
@@ -213,17 +216,29 @@
    | SBPMsgSpecan MsgSpecan Msg
    | SBPMsgSpecanDep MsgSpecanDep Msg
    | SBPMsgSsrCodeBiases MsgSsrCodeBiases Msg
+   | SBPMsgSsrCodePhaseBiasesBounds MsgSsrCodePhaseBiasesBounds Msg
+   | SBPMsgSsrFlagHighLevel MsgSsrFlagHighLevel Msg
+   | SBPMsgSsrFlagIonoGridPointSatLos MsgSsrFlagIonoGridPointSatLos Msg
+   | SBPMsgSsrFlagIonoGridPoints MsgSsrFlagIonoGridPoints Msg
+   | SBPMsgSsrFlagIonoTileSatLos MsgSsrFlagIonoTileSatLos Msg
+   | SBPMsgSsrFlagSatellites MsgSsrFlagSatellites Msg
+   | SBPMsgSsrFlagTropoGridPoints MsgSsrFlagTropoGridPoints Msg
    | SBPMsgSsrGridDefinitionDepA MsgSsrGridDefinitionDepA Msg
    | SBPMsgSsrGriddedCorrection MsgSsrGriddedCorrection Msg
+   | SBPMsgSsrGriddedCorrectionBounds MsgSsrGriddedCorrectionBounds Msg
    | SBPMsgSsrGriddedCorrectionDepA MsgSsrGriddedCorrectionDepA Msg
    | SBPMsgSsrGriddedCorrectionNoStdDepA MsgSsrGriddedCorrectionNoStdDepA Msg
    | SBPMsgSsrOrbitClock MsgSsrOrbitClock Msg
+   | SBPMsgSsrOrbitClockBounds MsgSsrOrbitClockBounds Msg
+   | SBPMsgSsrOrbitClockBoundsDegradation MsgSsrOrbitClockBoundsDegradation Msg
    | SBPMsgSsrOrbitClockDepA MsgSsrOrbitClockDepA Msg
    | SBPMsgSsrPhaseBiases MsgSsrPhaseBiases Msg
    | SBPMsgSsrSatelliteApc MsgSsrSatelliteApc Msg
    | SBPMsgSsrStecCorrection MsgSsrStecCorrection Msg
+   | SBPMsgSsrStecCorrectionDep MsgSsrStecCorrectionDep Msg
    | SBPMsgSsrStecCorrectionDepA MsgSsrStecCorrectionDepA Msg
    | SBPMsgSsrTileDefinition MsgSsrTileDefinition Msg
+   | SBPMsgSsrTileDefinitionDep MsgSsrTileDefinitionDep Msg
    | SBPMsgStartup MsgStartup Msg
    | SBPMsgStatusJournal MsgStatusJournal Msg
    | SBPMsgStatusReport MsgStatusReport Msg
@@ -349,6 +364,7 @@
           | _msgSBPType == msgGloBiases = SBPMsgGloBiases (decode (fromStrict (unBytes _msgSBPPayload))) m
           | _msgSBPType == msgGnssCapb = SBPMsgGnssCapb (decode (fromStrict (unBytes _msgSBPPayload))) m
           | _msgSBPType == msgGnssTimeOffset = SBPMsgGnssTimeOffset (decode (fromStrict (unBytes _msgSBPPayload))) m
+          | _msgSBPType == msgGpsLeapSecond = SBPMsgGpsLeapSecond (decode (fromStrict (unBytes _msgSBPPayload))) m
           | _msgSBPType == msgGpsTime = SBPMsgGpsTime (decode (fromStrict (unBytes _msgSBPPayload))) m
           | _msgSBPType == msgGpsTimeDepA = SBPMsgGpsTimeDepA (decode (fromStrict (unBytes _msgSBPPayload))) m
           | _msgSBPType == msgGpsTimeGnss = SBPMsgGpsTimeGnss (decode (fromStrict (unBytes _msgSBPPayload))) m
@@ -364,6 +380,7 @@
           | _msgSBPType == msgInsStatus = SBPMsgInsStatus (decode (fromStrict (unBytes _msgSBPPayload))) m
           | _msgSBPType == msgInsUpdates = SBPMsgInsUpdates (decode (fromStrict (unBytes _msgSBPPayload))) m
           | _msgSBPType == msgIono = SBPMsgIono (decode (fromStrict (unBytes _msgSBPPayload))) m
+          | _msgSBPType == msgItrf = SBPMsgItrf (decode (fromStrict (unBytes _msgSBPPayload))) m
           | _msgSBPType == msgLinuxCpuState = SBPMsgLinuxCpuState (decode (fromStrict (unBytes _msgSBPPayload))) m
           | _msgSBPType == msgLinuxCpuStateDepA = SBPMsgLinuxCpuStateDepA (decode (fromStrict (unBytes _msgSBPPayload))) m
           | _msgSBPType == msgLinuxMemState = SBPMsgLinuxMemState (decode (fromStrict (unBytes _msgSBPPayload))) m
@@ -431,17 +448,29 @@
           | _msgSBPType == msgSpecan = SBPMsgSpecan (decode (fromStrict (unBytes _msgSBPPayload))) m
           | _msgSBPType == msgSpecanDep = SBPMsgSpecanDep (decode (fromStrict (unBytes _msgSBPPayload))) m
           | _msgSBPType == msgSsrCodeBiases = SBPMsgSsrCodeBiases (decode (fromStrict (unBytes _msgSBPPayload))) m
+          | _msgSBPType == msgSsrCodePhaseBiasesBounds = SBPMsgSsrCodePhaseBiasesBounds (decode (fromStrict (unBytes _msgSBPPayload))) m
+          | _msgSBPType == msgSsrFlagHighLevel = SBPMsgSsrFlagHighLevel (decode (fromStrict (unBytes _msgSBPPayload))) m
+          | _msgSBPType == msgSsrFlagIonoGridPointSatLos = SBPMsgSsrFlagIonoGridPointSatLos (decode (fromStrict (unBytes _msgSBPPayload))) m
+          | _msgSBPType == msgSsrFlagIonoGridPoints = SBPMsgSsrFlagIonoGridPoints (decode (fromStrict (unBytes _msgSBPPayload))) m
+          | _msgSBPType == msgSsrFlagIonoTileSatLos = SBPMsgSsrFlagIonoTileSatLos (decode (fromStrict (unBytes _msgSBPPayload))) m
+          | _msgSBPType == msgSsrFlagSatellites = SBPMsgSsrFlagSatellites (decode (fromStrict (unBytes _msgSBPPayload))) m
+          | _msgSBPType == msgSsrFlagTropoGridPoints = SBPMsgSsrFlagTropoGridPoints (decode (fromStrict (unBytes _msgSBPPayload))) m
           | _msgSBPType == msgSsrGridDefinitionDepA = SBPMsgSsrGridDefinitionDepA (decode (fromStrict (unBytes _msgSBPPayload))) m
           | _msgSBPType == msgSsrGriddedCorrection = SBPMsgSsrGriddedCorrection (decode (fromStrict (unBytes _msgSBPPayload))) m
+          | _msgSBPType == msgSsrGriddedCorrectionBounds = SBPMsgSsrGriddedCorrectionBounds (decode (fromStrict (unBytes _msgSBPPayload))) m
           | _msgSBPType == msgSsrGriddedCorrectionDepA = SBPMsgSsrGriddedCorrectionDepA (decode (fromStrict (unBytes _msgSBPPayload))) m
           | _msgSBPType == msgSsrGriddedCorrectionNoStdDepA = SBPMsgSsrGriddedCorrectionNoStdDepA (decode (fromStrict (unBytes _msgSBPPayload))) m
           | _msgSBPType == msgSsrOrbitClock = SBPMsgSsrOrbitClock (decode (fromStrict (unBytes _msgSBPPayload))) m
+          | _msgSBPType == msgSsrOrbitClockBounds = SBPMsgSsrOrbitClockBounds (decode (fromStrict (unBytes _msgSBPPayload))) m
+          | _msgSBPType == msgSsrOrbitClockBoundsDegradation = SBPMsgSsrOrbitClockBoundsDegradation (decode (fromStrict (unBytes _msgSBPPayload))) m
           | _msgSBPType == msgSsrOrbitClockDepA = SBPMsgSsrOrbitClockDepA (decode (fromStrict (unBytes _msgSBPPayload))) m
           | _msgSBPType == msgSsrPhaseBiases = SBPMsgSsrPhaseBiases (decode (fromStrict (unBytes _msgSBPPayload))) m
           | _msgSBPType == msgSsrSatelliteApc = SBPMsgSsrSatelliteApc (decode (fromStrict (unBytes _msgSBPPayload))) m
           | _msgSBPType == msgSsrStecCorrection = SBPMsgSsrStecCorrection (decode (fromStrict (unBytes _msgSBPPayload))) m
+          | _msgSBPType == msgSsrStecCorrectionDep = SBPMsgSsrStecCorrectionDep (decode (fromStrict (unBytes _msgSBPPayload))) m
           | _msgSBPType == msgSsrStecCorrectionDepA = SBPMsgSsrStecCorrectionDepA (decode (fromStrict (unBytes _msgSBPPayload))) m
           | _msgSBPType == msgSsrTileDefinition = SBPMsgSsrTileDefinition (decode (fromStrict (unBytes _msgSBPPayload))) m
+          | _msgSBPType == msgSsrTileDefinitionDep = SBPMsgSsrTileDefinitionDep (decode (fromStrict (unBytes _msgSBPPayload))) m
           | _msgSBPType == msgStartup = SBPMsgStartup (decode (fromStrict (unBytes _msgSBPPayload))) m
           | _msgSBPType == msgStatusJournal = SBPMsgStatusJournal (decode (fromStrict (unBytes _msgSBPPayload))) m
           | _msgSBPType == msgStatusReport = SBPMsgStatusReport (decode (fromStrict (unBytes _msgSBPPayload))) m
@@ -559,6 +588,7 @@
       encoder (SBPMsgGloBiases _ m) = put m
       encoder (SBPMsgGnssCapb _ m) = put m
       encoder (SBPMsgGnssTimeOffset _ m) = put m
+      encoder (SBPMsgGpsLeapSecond _ m) = put m
       encoder (SBPMsgGpsTime _ m) = put m
       encoder (SBPMsgGpsTimeDepA _ m) = put m
       encoder (SBPMsgGpsTimeGnss _ m) = put m
@@ -574,6 +604,7 @@
       encoder (SBPMsgInsStatus _ m) = put m
       encoder (SBPMsgInsUpdates _ m) = put m
       encoder (SBPMsgIono _ m) = put m
+      encoder (SBPMsgItrf _ m) = put m
       encoder (SBPMsgLinuxCpuState _ m) = put m
       encoder (SBPMsgLinuxCpuStateDepA _ m) = put m
       encoder (SBPMsgLinuxMemState _ m) = put m
@@ -641,17 +672,29 @@
       encoder (SBPMsgSpecan _ m) = put m
       encoder (SBPMsgSpecanDep _ m) = put m
       encoder (SBPMsgSsrCodeBiases _ m) = put m
+      encoder (SBPMsgSsrCodePhaseBiasesBounds _ m) = put m
+      encoder (SBPMsgSsrFlagHighLevel _ m) = put m
+      encoder (SBPMsgSsrFlagIonoGridPointSatLos _ m) = put m
+      encoder (SBPMsgSsrFlagIonoGridPoints _ m) = put m
+      encoder (SBPMsgSsrFlagIonoTileSatLos _ m) = put m
+      encoder (SBPMsgSsrFlagSatellites _ m) = put m
+      encoder (SBPMsgSsrFlagTropoGridPoints _ m) = put m
       encoder (SBPMsgSsrGridDefinitionDepA _ m) = put m
       encoder (SBPMsgSsrGriddedCorrection _ m) = put m
+      encoder (SBPMsgSsrGriddedCorrectionBounds _ m) = put m
       encoder (SBPMsgSsrGriddedCorrectionDepA _ m) = put m
       encoder (SBPMsgSsrGriddedCorrectionNoStdDepA _ m) = put m
       encoder (SBPMsgSsrOrbitClock _ m) = put m
+      encoder (SBPMsgSsrOrbitClockBounds _ m) = put m
+      encoder (SBPMsgSsrOrbitClockBoundsDegradation _ m) = put m
       encoder (SBPMsgSsrOrbitClockDepA _ m) = put m
       encoder (SBPMsgSsrPhaseBiases _ m) = put m
       encoder (SBPMsgSsrSatelliteApc _ m) = put m
       encoder (SBPMsgSsrStecCorrection _ m) = put m
+      encoder (SBPMsgSsrStecCorrectionDep _ m) = put m
       encoder (SBPMsgSsrStecCorrectionDepA _ m) = put m
       encoder (SBPMsgSsrTileDefinition _ m) = put m
+      encoder (SBPMsgSsrTileDefinitionDep _ m) = put m
       encoder (SBPMsgStartup _ m) = put m
       encoder (SBPMsgStatusJournal _ m) = put m
       encoder (SBPMsgStatusReport _ m) = put m
@@ -773,6 +816,7 @@
         | msgType == msgGloBiases = SBPMsgGloBiases <$> pure (decode (fromStrict (unBytes payload))) <*> parseJSON obj
         | msgType == msgGnssCapb = SBPMsgGnssCapb <$> pure (decode (fromStrict (unBytes payload))) <*> parseJSON obj
         | msgType == msgGnssTimeOffset = SBPMsgGnssTimeOffset <$> pure (decode (fromStrict (unBytes payload))) <*> parseJSON obj
+        | msgType == msgGpsLeapSecond = SBPMsgGpsLeapSecond <$> pure (decode (fromStrict (unBytes payload))) <*> parseJSON obj
         | msgType == msgGpsTime = SBPMsgGpsTime <$> pure (decode (fromStrict (unBytes payload))) <*> parseJSON obj
         | msgType == msgGpsTimeDepA = SBPMsgGpsTimeDepA <$> pure (decode (fromStrict (unBytes payload))) <*> parseJSON obj
         | msgType == msgGpsTimeGnss = SBPMsgGpsTimeGnss <$> pure (decode (fromStrict (unBytes payload))) <*> parseJSON obj
@@ -788,6 +832,7 @@
         | msgType == msgInsStatus = SBPMsgInsStatus <$> pure (decode (fromStrict (unBytes payload))) <*> parseJSON obj
         | msgType == msgInsUpdates = SBPMsgInsUpdates <$> pure (decode (fromStrict (unBytes payload))) <*> parseJSON obj
         | msgType == msgIono = SBPMsgIono <$> pure (decode (fromStrict (unBytes payload))) <*> parseJSON obj
+        | msgType == msgItrf = SBPMsgItrf <$> pure (decode (fromStrict (unBytes payload))) <*> parseJSON obj
         | msgType == msgLinuxCpuState = SBPMsgLinuxCpuState <$> pure (decode (fromStrict (unBytes payload))) <*> parseJSON obj
         | msgType == msgLinuxCpuStateDepA = SBPMsgLinuxCpuStateDepA <$> pure (decode (fromStrict (unBytes payload))) <*> parseJSON obj
         | msgType == msgLinuxMemState = SBPMsgLinuxMemState <$> pure (decode (fromStrict (unBytes payload))) <*> parseJSON obj
@@ -855,17 +900,29 @@
         | msgType == msgSpecan = SBPMsgSpecan <$> pure (decode (fromStrict (unBytes payload))) <*> parseJSON obj
         | msgType == msgSpecanDep = SBPMsgSpecanDep <$> pure (decode (fromStrict (unBytes payload))) <*> parseJSON obj
         | msgType == msgSsrCodeBiases = SBPMsgSsrCodeBiases <$> pure (decode (fromStrict (unBytes payload))) <*> parseJSON obj
+        | msgType == msgSsrCodePhaseBiasesBounds = SBPMsgSsrCodePhaseBiasesBounds <$> pure (decode (fromStrict (unBytes payload))) <*> parseJSON obj
+        | msgType == msgSsrFlagHighLevel = SBPMsgSsrFlagHighLevel <$> pure (decode (fromStrict (unBytes payload))) <*> parseJSON obj
+        | msgType == msgSsrFlagIonoGridPointSatLos = SBPMsgSsrFlagIonoGridPointSatLos <$> pure (decode (fromStrict (unBytes payload))) <*> parseJSON obj
+        | msgType == msgSsrFlagIonoGridPoints = SBPMsgSsrFlagIonoGridPoints <$> pure (decode (fromStrict (unBytes payload))) <*> parseJSON obj
+        | msgType == msgSsrFlagIonoTileSatLos = SBPMsgSsrFlagIonoTileSatLos <$> pure (decode (fromStrict (unBytes payload))) <*> parseJSON obj
+        | msgType == msgSsrFlagSatellites = SBPMsgSsrFlagSatellites <$> pure (decode (fromStrict (unBytes payload))) <*> parseJSON obj
+        | msgType == msgSsrFlagTropoGridPoints = SBPMsgSsrFlagTropoGridPoints <$> pure (decode (fromStrict (unBytes payload))) <*> parseJSON obj
         | msgType == msgSsrGridDefinitionDepA = SBPMsgSsrGridDefinitionDepA <$> pure (decode (fromStrict (unBytes payload))) <*> parseJSON obj
         | msgType == msgSsrGriddedCorrection = SBPMsgSsrGriddedCorrection <$> pure (decode (fromStrict (unBytes payload))) <*> parseJSON obj
+        | msgType == msgSsrGriddedCorrectionBounds = SBPMsgSsrGriddedCorrectionBounds <$> pure (decode (fromStrict (unBytes payload))) <*> parseJSON obj
         | msgType == msgSsrGriddedCorrectionDepA = SBPMsgSsrGriddedCorrectionDepA <$> pure (decode (fromStrict (unBytes payload))) <*> parseJSON obj
         | msgType == msgSsrGriddedCorrectionNoStdDepA = SBPMsgSsrGriddedCorrectionNoStdDepA <$> pure (decode (fromStrict (unBytes payload))) <*> parseJSON obj
         | msgType == msgSsrOrbitClock = SBPMsgSsrOrbitClock <$> pure (decode (fromStrict (unBytes payload))) <*> parseJSON obj
+        | msgType == msgSsrOrbitClockBounds = SBPMsgSsrOrbitClockBounds <$> pure (decode (fromStrict (unBytes payload))) <*> parseJSON obj
+        | msgType == msgSsrOrbitClockBoundsDegradation = SBPMsgSsrOrbitClockBoundsDegradation <$> pure (decode (fromStrict (unBytes payload))) <*> parseJSON obj
         | msgType == msgSsrOrbitClockDepA = SBPMsgSsrOrbitClockDepA <$> pure (decode (fromStrict (unBytes payload))) <*> parseJSON obj
         | msgType == msgSsrPhaseBiases = SBPMsgSsrPhaseBiases <$> pure (decode (fromStrict (unBytes payload))) <*> parseJSON obj
         | msgType == msgSsrSatelliteApc = SBPMsgSsrSatelliteApc <$> pure (decode (fromStrict (unBytes payload))) <*> parseJSON obj
         | msgType == msgSsrStecCorrection = SBPMsgSsrStecCorrection <$> pure (decode (fromStrict (unBytes payload))) <*> parseJSON obj
+        | msgType == msgSsrStecCorrectionDep = SBPMsgSsrStecCorrectionDep <$> pure (decode (fromStrict (unBytes payload))) <*> parseJSON obj
         | msgType == msgSsrStecCorrectionDepA = SBPMsgSsrStecCorrectionDepA <$> pure (decode (fromStrict (unBytes payload))) <*> parseJSON obj
         | msgType == msgSsrTileDefinition = SBPMsgSsrTileDefinition <$> pure (decode (fromStrict (unBytes payload))) <*> parseJSON obj
+        | msgType == msgSsrTileDefinitionDep = SBPMsgSsrTileDefinitionDep <$> pure (decode (fromStrict (unBytes payload))) <*> parseJSON obj
         | msgType == msgStartup = SBPMsgStartup <$> pure (decode (fromStrict (unBytes payload))) <*> parseJSON obj
         | msgType == msgStatusJournal = SBPMsgStatusJournal <$> pure (decode (fromStrict (unBytes payload))) <*> parseJSON obj
         | msgType == msgStatusReport = SBPMsgStatusReport <$> pure (decode (fromStrict (unBytes payload))) <*> parseJSON obj
@@ -988,6 +1045,7 @@
   toJSON (SBPMsgGloBiases n m) = toJSON n <<>> toJSON m
   toJSON (SBPMsgGnssCapb n m) = toJSON n <<>> toJSON m
   toJSON (SBPMsgGnssTimeOffset n m) = toJSON n <<>> toJSON m
+  toJSON (SBPMsgGpsLeapSecond n m) = toJSON n <<>> toJSON m
   toJSON (SBPMsgGpsTime n m) = toJSON n <<>> toJSON m
   toJSON (SBPMsgGpsTimeDepA n m) = toJSON n <<>> toJSON m
   toJSON (SBPMsgGpsTimeGnss n m) = toJSON n <<>> toJSON m
@@ -1003,6 +1061,7 @@
   toJSON (SBPMsgInsStatus n m) = toJSON n <<>> toJSON m
   toJSON (SBPMsgInsUpdates n m) = toJSON n <<>> toJSON m
   toJSON (SBPMsgIono n m) = toJSON n <<>> toJSON m
+  toJSON (SBPMsgItrf n m) = toJSON n <<>> toJSON m
   toJSON (SBPMsgLinuxCpuState n m) = toJSON n <<>> toJSON m
   toJSON (SBPMsgLinuxCpuStateDepA n m) = toJSON n <<>> toJSON m
   toJSON (SBPMsgLinuxMemState n m) = toJSON n <<>> toJSON m
@@ -1070,17 +1129,29 @@
   toJSON (SBPMsgSpecan n m) = toJSON n <<>> toJSON m
   toJSON (SBPMsgSpecanDep n m) = toJSON n <<>> toJSON m
   toJSON (SBPMsgSsrCodeBiases n m) = toJSON n <<>> toJSON m
+  toJSON (SBPMsgSsrCodePhaseBiasesBounds n m) = toJSON n <<>> toJSON m
+  toJSON (SBPMsgSsrFlagHighLevel n m) = toJSON n <<>> toJSON m
+  toJSON (SBPMsgSsrFlagIonoGridPointSatLos n m) = toJSON n <<>> toJSON m
+  toJSON (SBPMsgSsrFlagIonoGridPoints n m) = toJSON n <<>> toJSON m
+  toJSON (SBPMsgSsrFlagIonoTileSatLos n m) = toJSON n <<>> toJSON m
+  toJSON (SBPMsgSsrFlagSatellites n m) = toJSON n <<>> toJSON m
+  toJSON (SBPMsgSsrFlagTropoGridPoints n m) = toJSON n <<>> toJSON m
   toJSON (SBPMsgSsrGridDefinitionDepA n m) = toJSON n <<>> toJSON m
   toJSON (SBPMsgSsrGriddedCorrection n m) = toJSON n <<>> toJSON m
+  toJSON (SBPMsgSsrGriddedCorrectionBounds n m) = toJSON n <<>> toJSON m
   toJSON (SBPMsgSsrGriddedCorrectionDepA n m) = toJSON n <<>> toJSON m
   toJSON (SBPMsgSsrGriddedCorrectionNoStdDepA n m) = toJSON n <<>> toJSON m
   toJSON (SBPMsgSsrOrbitClock n m) = toJSON n <<>> toJSON m
+  toJSON (SBPMsgSsrOrbitClockBounds n m) = toJSON n <<>> toJSON m
+  toJSON (SBPMsgSsrOrbitClockBoundsDegradation n m) = toJSON n <<>> toJSON m
   toJSON (SBPMsgSsrOrbitClockDepA n m) = toJSON n <<>> toJSON m
   toJSON (SBPMsgSsrPhaseBiases n m) = toJSON n <<>> toJSON m
   toJSON (SBPMsgSsrSatelliteApc n m) = toJSON n <<>> toJSON m
   toJSON (SBPMsgSsrStecCorrection n m) = toJSON n <<>> toJSON m
+  toJSON (SBPMsgSsrStecCorrectionDep n m) = toJSON n <<>> toJSON m
   toJSON (SBPMsgSsrStecCorrectionDepA n m) = toJSON n <<>> toJSON m
   toJSON (SBPMsgSsrTileDefinition n m) = toJSON n <<>> toJSON m
+  toJSON (SBPMsgSsrTileDefinitionDep n m) = toJSON n <<>> toJSON m
   toJSON (SBPMsgStartup n m) = toJSON n <<>> toJSON m
   toJSON (SBPMsgStatusJournal n m) = toJSON n <<>> toJSON m
   toJSON (SBPMsgStatusReport n m) = toJSON n <<>> toJSON m
@@ -1197,6 +1268,7 @@
   msg f (SBPMsgGloBiases n m) = SBPMsgGloBiases n <$> f m
   msg f (SBPMsgGnssCapb n m) = SBPMsgGnssCapb n <$> f m
   msg f (SBPMsgGnssTimeOffset n m) = SBPMsgGnssTimeOffset n <$> f m
+  msg f (SBPMsgGpsLeapSecond n m) = SBPMsgGpsLeapSecond n <$> f m
   msg f (SBPMsgGpsTime n m) = SBPMsgGpsTime n <$> f m
   msg f (SBPMsgGpsTimeDepA n m) = SBPMsgGpsTimeDepA n <$> f m
   msg f (SBPMsgGpsTimeGnss n m) = SBPMsgGpsTimeGnss n <$> f m
@@ -1212,6 +1284,7 @@
   msg f (SBPMsgInsStatus n m) = SBPMsgInsStatus n <$> f m
   msg f (SBPMsgInsUpdates n m) = SBPMsgInsUpdates n <$> f m
   msg f (SBPMsgIono n m) = SBPMsgIono n <$> f m
+  msg f (SBPMsgItrf n m) = SBPMsgItrf n <$> f m
   msg f (SBPMsgLinuxCpuState n m) = SBPMsgLinuxCpuState n <$> f m
   msg f (SBPMsgLinuxCpuStateDepA n m) = SBPMsgLinuxCpuStateDepA n <$> f m
   msg f (SBPMsgLinuxMemState n m) = SBPMsgLinuxMemState n <$> f m
@@ -1279,17 +1352,29 @@
   msg f (SBPMsgSpecan n m) = SBPMsgSpecan n <$> f m
   msg f (SBPMsgSpecanDep n m) = SBPMsgSpecanDep n <$> f m
   msg f (SBPMsgSsrCodeBiases n m) = SBPMsgSsrCodeBiases n <$> f m
+  msg f (SBPMsgSsrCodePhaseBiasesBounds n m) = SBPMsgSsrCodePhaseBiasesBounds n <$> f m
+  msg f (SBPMsgSsrFlagHighLevel n m) = SBPMsgSsrFlagHighLevel n <$> f m
+  msg f (SBPMsgSsrFlagIonoGridPointSatLos n m) = SBPMsgSsrFlagIonoGridPointSatLos n <$> f m
+  msg f (SBPMsgSsrFlagIonoGridPoints n m) = SBPMsgSsrFlagIonoGridPoints n <$> f m
+  msg f (SBPMsgSsrFlagIonoTileSatLos n m) = SBPMsgSsrFlagIonoTileSatLos n <$> f m
+  msg f (SBPMsgSsrFlagSatellites n m) = SBPMsgSsrFlagSatellites n <$> f m
+  msg f (SBPMsgSsrFlagTropoGridPoints n m) = SBPMsgSsrFlagTropoGridPoints n <$> f m
   msg f (SBPMsgSsrGridDefinitionDepA n m) = SBPMsgSsrGridDefinitionDepA n <$> f m
   msg f (SBPMsgSsrGriddedCorrection n m) = SBPMsgSsrGriddedCorrection n <$> f m
+  msg f (SBPMsgSsrGriddedCorrectionBounds n m) = SBPMsgSsrGriddedCorrectionBounds n <$> f m
   msg f (SBPMsgSsrGriddedCorrectionDepA n m) = SBPMsgSsrGriddedCorrectionDepA n <$> f m
   msg f (SBPMsgSsrGriddedCorrectionNoStdDepA n m) = SBPMsgSsrGriddedCorrectionNoStdDepA n <$> f m
   msg f (SBPMsgSsrOrbitClock n m) = SBPMsgSsrOrbitClock n <$> f m
+  msg f (SBPMsgSsrOrbitClockBounds n m) = SBPMsgSsrOrbitClockBounds n <$> f m
+  msg f (SBPMsgSsrOrbitClockBoundsDegradation n m) = SBPMsgSsrOrbitClockBoundsDegradation n <$> f m
   msg f (SBPMsgSsrOrbitClockDepA n m) = SBPMsgSsrOrbitClockDepA n <$> f m
   msg f (SBPMsgSsrPhaseBiases n m) = SBPMsgSsrPhaseBiases n <$> f m
   msg f (SBPMsgSsrSatelliteApc n m) = SBPMsgSsrSatelliteApc n <$> f m
   msg f (SBPMsgSsrStecCorrection n m) = SBPMsgSsrStecCorrection n <$> f m
+  msg f (SBPMsgSsrStecCorrectionDep n m) = SBPMsgSsrStecCorrectionDep n <$> f m
   msg f (SBPMsgSsrStecCorrectionDepA n m) = SBPMsgSsrStecCorrectionDepA n <$> f m
   msg f (SBPMsgSsrTileDefinition n m) = SBPMsgSsrTileDefinition n <$> f m
+  msg f (SBPMsgSsrTileDefinitionDep n m) = SBPMsgSsrTileDefinitionDep n <$> f m
   msg f (SBPMsgStartup n m) = SBPMsgStartup n <$> f m
   msg f (SBPMsgStatusJournal n m) = SBPMsgStatusJournal n <$> f m
   msg f (SBPMsgStatusReport n m) = SBPMsgStatusReport n <$> f m
diff --git a/src/SwiftNav/SBP/Navigation.hs b/src/SwiftNav/SBP/Navigation.hs
--- a/src/SwiftNav/SBP/Navigation.hs
+++ b/src/SwiftNav/SBP/Navigation.hs
@@ -2303,3 +2303,45 @@
 $(makeSBP 'msgProtectionLevel ''MsgProtectionLevel)
 $(makeJSON "_msgProtectionLevel_" ''MsgProtectionLevel)
 $(makeLenses ''MsgProtectionLevel)
+
+msgGpsLeapSecond :: Word16
+msgGpsLeapSecond = 0x023A
+
+-- | SBP class for message MSG_GPS_LEAP_SECOND (0x023A).
+--
+-- Emulates the GPS CNAV message, reserving bytes for future broadcast of the
+-- drift model parameters.
+data MsgGpsLeapSecond = MsgGpsLeapSecond
+  { _msgGpsLeapSecond_stub :: ![Word8]
+  } deriving ( Show, Read, Eq )
+
+instance Binary MsgGpsLeapSecond where
+  get = do
+    _msgGpsLeapSecond_stub <- whileM (not <$> isEmpty) getWord8
+    pure MsgGpsLeapSecond {..}
+
+  put MsgGpsLeapSecond {..} = do
+    mapM_ putWord8 _msgGpsLeapSecond_stub
+
+$(makeSBP 'msgGpsLeapSecond ''MsgGpsLeapSecond)
+$(makeJSON "_msgGpsLeapSecond_" ''MsgGpsLeapSecond)
+$(makeLenses ''MsgGpsLeapSecond)
+
+msgItrf :: Word16
+msgItrf = 0x0244
+
+data MsgItrf = MsgItrf
+  { _msgItrf_stub :: ![Word8]
+  } deriving ( Show, Read, Eq )
+
+instance Binary MsgItrf where
+  get = do
+    _msgItrf_stub <- whileM (not <$> isEmpty) getWord8
+    pure MsgItrf {..}
+
+  put MsgItrf {..} = do
+    mapM_ putWord8 _msgItrf_stub
+
+$(makeSBP 'msgItrf ''MsgItrf)
+$(makeJSON "_msgItrf_" ''MsgItrf)
+$(makeLenses ''MsgItrf)
diff --git a/src/SwiftNav/SBP/Ssr.hs b/src/SwiftNav/SBP/Ssr.hs
--- a/src/SwiftNav/SBP/Ssr.hs
+++ b/src/SwiftNav/SBP/Ssr.hs
@@ -507,10 +507,10 @@
 $(makeJSON "_msgSsrPhaseBiases_" ''MsgSsrPhaseBiases)
 $(makeLenses ''MsgSsrPhaseBiases)
 
-msgSsrStecCorrection :: Word16
-msgSsrStecCorrection = 0x05FB
+msgSsrStecCorrectionDep :: Word16
+msgSsrStecCorrectionDep = 0x05FB
 
--- | SBP class for message MSG_SSR_STEC_CORRECTION (0x05FB).
+-- | SBP class for message MSG_SSR_STEC_CORRECTION_DEP (0x05FB).
 --
 -- The Slant Total Electron Content per space vehicle, given as polynomial
 -- approximation for a given tile. This should be combined with the
@@ -518,22 +518,41 @@
 -- the atmospheric delay.
 --
 -- It is typically equivalent to the QZSS CLAS Sub Type 8 messages.
-data MsgSsrStecCorrection = MsgSsrStecCorrection
-  { _msgSsrStecCorrection_header      :: !STECHeader
+data MsgSsrStecCorrectionDep = MsgSsrStecCorrectionDep
+  { _msgSsrStecCorrectionDep_header      :: !STECHeader
     -- ^ Header of a STEC polynomial coefficient message.
-  , _msgSsrStecCorrection_stec_sat_list :: ![STECSatElement]
+  , _msgSsrStecCorrectionDep_stec_sat_list :: ![STECSatElement]
     -- ^ Array of STEC polynomial coefficients for each space vehicle.
   } deriving ( Show, Read, Eq )
 
+instance Binary MsgSsrStecCorrectionDep where
+  get = do
+    _msgSsrStecCorrectionDep_header <- get
+    _msgSsrStecCorrectionDep_stec_sat_list <- whileM (not <$> isEmpty) get
+    pure MsgSsrStecCorrectionDep {..}
+
+  put MsgSsrStecCorrectionDep {..} = do
+    put _msgSsrStecCorrectionDep_header
+    mapM_ put _msgSsrStecCorrectionDep_stec_sat_list
+
+$(makeSBP 'msgSsrStecCorrectionDep ''MsgSsrStecCorrectionDep)
+$(makeJSON "_msgSsrStecCorrectionDep_" ''MsgSsrStecCorrectionDep)
+$(makeLenses ''MsgSsrStecCorrectionDep)
+
+msgSsrStecCorrection :: Word16
+msgSsrStecCorrection = 0x05FD
+
+data MsgSsrStecCorrection = MsgSsrStecCorrection
+  { _msgSsrStecCorrection_stub :: ![Word8]
+  } deriving ( Show, Read, Eq )
+
 instance Binary MsgSsrStecCorrection where
   get = do
-    _msgSsrStecCorrection_header <- get
-    _msgSsrStecCorrection_stec_sat_list <- whileM (not <$> isEmpty) get
+    _msgSsrStecCorrection_stub <- whileM (not <$> isEmpty) getWord8
     pure MsgSsrStecCorrection {..}
 
   put MsgSsrStecCorrection {..} = do
-    put _msgSsrStecCorrection_header
-    mapM_ put _msgSsrStecCorrection_stec_sat_list
+    mapM_ putWord8 _msgSsrStecCorrection_stub
 
 $(makeSBP 'msgSsrStecCorrection ''MsgSsrStecCorrection)
 $(makeJSON "_msgSsrStecCorrection_" ''MsgSsrStecCorrection)
@@ -576,25 +595,44 @@
 $(makeJSON "_msgSsrGriddedCorrection_" ''MsgSsrGriddedCorrection)
 $(makeLenses ''MsgSsrGriddedCorrection)
 
-msgSsrTileDefinition :: Word16
-msgSsrTileDefinition = 0x05F6
+msgSsrGriddedCorrectionBounds :: Word16
+msgSsrGriddedCorrectionBounds = 0x05FE
 
--- | SBP class for message MSG_SSR_TILE_DEFINITION (0x05F6).
+data MsgSsrGriddedCorrectionBounds = MsgSsrGriddedCorrectionBounds
+  { _msgSsrGriddedCorrectionBounds_stub :: ![Word8]
+  } deriving ( Show, Read, Eq )
+
+instance Binary MsgSsrGriddedCorrectionBounds where
+  get = do
+    _msgSsrGriddedCorrectionBounds_stub <- whileM (not <$> isEmpty) getWord8
+    pure MsgSsrGriddedCorrectionBounds {..}
+
+  put MsgSsrGriddedCorrectionBounds {..} = do
+    mapM_ putWord8 _msgSsrGriddedCorrectionBounds_stub
+
+$(makeSBP 'msgSsrGriddedCorrectionBounds ''MsgSsrGriddedCorrectionBounds)
+$(makeJSON "_msgSsrGriddedCorrectionBounds_" ''MsgSsrGriddedCorrectionBounds)
+$(makeLenses ''MsgSsrGriddedCorrectionBounds)
+
+msgSsrTileDefinitionDep :: Word16
+msgSsrTileDefinitionDep = 0x05F6
+
+-- | SBP class for message MSG_SSR_TILE_DEFINITION_DEP (0x05F6).
 --
 -- Provides the correction point coordinates for the atmospheric correction
--- values in the MSG_SSR_STEC_CORRECTION and MSG_SSR_GRIDDED_CORRECTION
+-- values in the MSG_SSR_STEC_CORRECTION_DEP and MSG_SSR_GRIDDED_CORRECTION
 -- messages.
 --
 -- Based on ETSI TS 137 355 V16.1.0 (LTE Positioning Protocol) information
 -- element GNSS-SSR-CorrectionPoints. SBP only supports gridded arrays of
 -- correction points, not lists of points.
-data MsgSsrTileDefinition = MsgSsrTileDefinition
-  { _msgSsrTileDefinition_tile_set_id :: !Word16
+data MsgSsrTileDefinitionDep = MsgSsrTileDefinitionDep
+  { _msgSsrTileDefinitionDep_tile_set_id :: !Word16
     -- ^ Unique identifier of the tile set this tile belongs to.
-  , _msgSsrTileDefinition_tile_id     :: !Word16
+  , _msgSsrTileDefinitionDep_tile_id     :: !Word16
     -- ^ Unique identifier of this tile in the tile set.
     -- See GNSS-SSR-ArrayOfCorrectionPoints field correctionPointSetID.
-  , _msgSsrTileDefinition_corner_nw_lat :: !Int16
+  , _msgSsrTileDefinitionDep_corner_nw_lat :: !Int16
     -- ^ North-West corner correction point latitude.
     --
     -- The relation between the latitude X in the range [-90, 90] and the
@@ -603,7 +641,7 @@
     -- N = floor((X / 90) * 2^14)
     --
     -- See GNSS-SSR-ArrayOfCorrectionPoints field referencePointLatitude.
-  , _msgSsrTileDefinition_corner_nw_lon :: !Int16
+  , _msgSsrTileDefinitionDep_corner_nw_lon :: !Int16
     -- ^ North-West corner correction point longitude.
     --
     -- The relation between the longitude X in the range [-180, 180] and the
@@ -612,23 +650,23 @@
     -- N = floor((X / 180) * 2^15)
     --
     -- See GNSS-SSR-ArrayOfCorrectionPoints field referencePointLongitude.
-  , _msgSsrTileDefinition_spacing_lat :: !Word16
+  , _msgSsrTileDefinitionDep_spacing_lat :: !Word16
     -- ^ Spacing of the correction points in the latitude direction.
     --
     -- See GNSS-SSR-ArrayOfCorrectionPoints field stepOfLatitude.
-  , _msgSsrTileDefinition_spacing_lon :: !Word16
+  , _msgSsrTileDefinitionDep_spacing_lon :: !Word16
     -- ^ Spacing of the correction points in the longitude direction.
     --
     -- See GNSS-SSR-ArrayOfCorrectionPoints field stepOfLongitude.
-  , _msgSsrTileDefinition_rows        :: !Word16
+  , _msgSsrTileDefinitionDep_rows        :: !Word16
     -- ^ Number of steps in the latitude direction.
     --
     -- See GNSS-SSR-ArrayOfCorrectionPoints field numberOfStepsLatitude.
-  , _msgSsrTileDefinition_cols        :: !Word16
+  , _msgSsrTileDefinitionDep_cols        :: !Word16
     -- ^ Number of steps in the longitude direction.
     --
     -- See GNSS-SSR-ArrayOfCorrectionPoints field numberOfStepsLongitude.
-  , _msgSsrTileDefinition_bitmask     :: !Word64
+  , _msgSsrTileDefinitionDep_bitmask     :: !Word64
     -- ^ Specifies the availability of correction data at the correction points
     -- in the array.
     --
@@ -646,29 +684,57 @@
     -- definition of the bits is inverted.
   } deriving ( Show, Read, Eq )
 
+instance Binary MsgSsrTileDefinitionDep where
+  get = do
+    _msgSsrTileDefinitionDep_tile_set_id <- getWord16le
+    _msgSsrTileDefinitionDep_tile_id <- getWord16le
+    _msgSsrTileDefinitionDep_corner_nw_lat <- (fromIntegral <$> getWord16le)
+    _msgSsrTileDefinitionDep_corner_nw_lon <- (fromIntegral <$> getWord16le)
+    _msgSsrTileDefinitionDep_spacing_lat <- getWord16le
+    _msgSsrTileDefinitionDep_spacing_lon <- getWord16le
+    _msgSsrTileDefinitionDep_rows <- getWord16le
+    _msgSsrTileDefinitionDep_cols <- getWord16le
+    _msgSsrTileDefinitionDep_bitmask <- getWord64le
+    pure MsgSsrTileDefinitionDep {..}
+
+  put MsgSsrTileDefinitionDep {..} = do
+    putWord16le _msgSsrTileDefinitionDep_tile_set_id
+    putWord16le _msgSsrTileDefinitionDep_tile_id
+    (putWord16le . fromIntegral) _msgSsrTileDefinitionDep_corner_nw_lat
+    (putWord16le . fromIntegral) _msgSsrTileDefinitionDep_corner_nw_lon
+    putWord16le _msgSsrTileDefinitionDep_spacing_lat
+    putWord16le _msgSsrTileDefinitionDep_spacing_lon
+    putWord16le _msgSsrTileDefinitionDep_rows
+    putWord16le _msgSsrTileDefinitionDep_cols
+    putWord64le _msgSsrTileDefinitionDep_bitmask
+
+$(makeSBP 'msgSsrTileDefinitionDep ''MsgSsrTileDefinitionDep)
+$(makeJSON "_msgSsrTileDefinitionDep_" ''MsgSsrTileDefinitionDep)
+$(makeLenses ''MsgSsrTileDefinitionDep)
+
+msgSsrTileDefinition :: Word16
+msgSsrTileDefinition = 0x05F7
+
+-- | SBP class for message MSG_SSR_TILE_DEFINITION (0x05F7).
+--
+-- Provides the correction point coordinates for the atmospheric correction
+-- values in the MSG_SSR_STEC_CORRECTION and MSG_SSR_GRIDDED_CORRECTION
+-- messages.
+--
+-- Based on ETSI TS 137 355 V16.1.0 (LTE Positioning Protocol) information
+-- element GNSS-SSR-CorrectionPoints. SBP only supports gridded arrays of
+-- correction points, not lists of points.
+data MsgSsrTileDefinition = MsgSsrTileDefinition
+  { _msgSsrTileDefinition_stub :: ![Word8]
+  } deriving ( Show, Read, Eq )
+
 instance Binary MsgSsrTileDefinition where
   get = do
-    _msgSsrTileDefinition_tile_set_id <- getWord16le
-    _msgSsrTileDefinition_tile_id <- getWord16le
-    _msgSsrTileDefinition_corner_nw_lat <- (fromIntegral <$> getWord16le)
-    _msgSsrTileDefinition_corner_nw_lon <- (fromIntegral <$> getWord16le)
-    _msgSsrTileDefinition_spacing_lat <- getWord16le
-    _msgSsrTileDefinition_spacing_lon <- getWord16le
-    _msgSsrTileDefinition_rows <- getWord16le
-    _msgSsrTileDefinition_cols <- getWord16le
-    _msgSsrTileDefinition_bitmask <- getWord64le
+    _msgSsrTileDefinition_stub <- whileM (not <$> isEmpty) getWord8
     pure MsgSsrTileDefinition {..}
 
   put MsgSsrTileDefinition {..} = do
-    putWord16le _msgSsrTileDefinition_tile_set_id
-    putWord16le _msgSsrTileDefinition_tile_id
-    (putWord16le . fromIntegral) _msgSsrTileDefinition_corner_nw_lat
-    (putWord16le . fromIntegral) _msgSsrTileDefinition_corner_nw_lon
-    putWord16le _msgSsrTileDefinition_spacing_lat
-    putWord16le _msgSsrTileDefinition_spacing_lon
-    putWord16le _msgSsrTileDefinition_rows
-    putWord16le _msgSsrTileDefinition_cols
-    putWord64le _msgSsrTileDefinition_bitmask
+    mapM_ putWord8 _msgSsrTileDefinition_stub
 
 $(makeSBP 'msgSsrTileDefinition ''MsgSsrTileDefinition)
 $(makeJSON "_msgSsrTileDefinition_" ''MsgSsrTileDefinition)
@@ -1043,3 +1109,60 @@
 $(makeSBP 'msgSsrGridDefinitionDepA ''MsgSsrGridDefinitionDepA)
 $(makeJSON "_msgSsrGridDefinitionDepA_" ''MsgSsrGridDefinitionDepA)
 $(makeLenses ''MsgSsrGridDefinitionDepA)
+
+msgSsrOrbitClockBounds :: Word16
+msgSsrOrbitClockBounds = 0x05DE
+
+data MsgSsrOrbitClockBounds = MsgSsrOrbitClockBounds
+  { _msgSsrOrbitClockBounds_stub :: ![Word8]
+  } deriving ( Show, Read, Eq )
+
+instance Binary MsgSsrOrbitClockBounds where
+  get = do
+    _msgSsrOrbitClockBounds_stub <- whileM (not <$> isEmpty) getWord8
+    pure MsgSsrOrbitClockBounds {..}
+
+  put MsgSsrOrbitClockBounds {..} = do
+    mapM_ putWord8 _msgSsrOrbitClockBounds_stub
+
+$(makeSBP 'msgSsrOrbitClockBounds ''MsgSsrOrbitClockBounds)
+$(makeJSON "_msgSsrOrbitClockBounds_" ''MsgSsrOrbitClockBounds)
+$(makeLenses ''MsgSsrOrbitClockBounds)
+
+msgSsrCodePhaseBiasesBounds :: Word16
+msgSsrCodePhaseBiasesBounds = 0x05EC
+
+data MsgSsrCodePhaseBiasesBounds = MsgSsrCodePhaseBiasesBounds
+  { _msgSsrCodePhaseBiasesBounds_stub :: ![Word8]
+  } deriving ( Show, Read, Eq )
+
+instance Binary MsgSsrCodePhaseBiasesBounds where
+  get = do
+    _msgSsrCodePhaseBiasesBounds_stub <- whileM (not <$> isEmpty) getWord8
+    pure MsgSsrCodePhaseBiasesBounds {..}
+
+  put MsgSsrCodePhaseBiasesBounds {..} = do
+    mapM_ putWord8 _msgSsrCodePhaseBiasesBounds_stub
+
+$(makeSBP 'msgSsrCodePhaseBiasesBounds ''MsgSsrCodePhaseBiasesBounds)
+$(makeJSON "_msgSsrCodePhaseBiasesBounds_" ''MsgSsrCodePhaseBiasesBounds)
+$(makeLenses ''MsgSsrCodePhaseBiasesBounds)
+
+msgSsrOrbitClockBoundsDegradation :: Word16
+msgSsrOrbitClockBoundsDegradation = 0x05DF
+
+data MsgSsrOrbitClockBoundsDegradation = MsgSsrOrbitClockBoundsDegradation
+  { _msgSsrOrbitClockBoundsDegradation_stub :: ![Word8]
+  } deriving ( Show, Read, Eq )
+
+instance Binary MsgSsrOrbitClockBoundsDegradation where
+  get = do
+    _msgSsrOrbitClockBoundsDegradation_stub <- whileM (not <$> isEmpty) getWord8
+    pure MsgSsrOrbitClockBoundsDegradation {..}
+
+  put MsgSsrOrbitClockBoundsDegradation {..} = do
+    mapM_ putWord8 _msgSsrOrbitClockBoundsDegradation_stub
+
+$(makeSBP 'msgSsrOrbitClockBoundsDegradation ''MsgSsrOrbitClockBoundsDegradation)
+$(makeJSON "_msgSsrOrbitClockBoundsDegradation_" ''MsgSsrOrbitClockBoundsDegradation)
+$(makeLenses ''MsgSsrOrbitClockBoundsDegradation)
