diff --git a/sbp.cabal b/sbp.cabal
--- a/sbp.cabal
+++ b/sbp.cabal
@@ -1,5 +1,5 @@
 name:                  sbp
-version:               4.10.0
+version:               4.11.0
 synopsis:              SwiftNav's SBP Library
 homepage:              https://github.com/swift-nav/libsbp
 license:               MIT
@@ -47,6 +47,7 @@
                      , SwiftNav.SBP.SolutionMeta
                      , SwiftNav.SBP.Ssr
                      , SwiftNav.SBP.System
+                     , SwiftNav.SBP.Telemetry
                      , SwiftNav.SBP.Tracking
                      , SwiftNav.SBP.User
                      , SwiftNav.SBP.Vehicle
diff --git a/src/SwiftNav/SBP.hs b/src/SwiftNav/SBP.hs
--- a/src/SwiftNav/SBP.hs
+++ b/src/SwiftNav/SBP.hs
@@ -36,6 +36,7 @@
 import SwiftNav.SBP.SolutionMeta as Exports
 import SwiftNav.SBP.Ssr as Exports
 import SwiftNav.SBP.System as Exports
+import SwiftNav.SBP.Telemetry as Exports
 import SwiftNav.SBP.Tracking as Exports
 import SwiftNav.SBP.User as Exports
 import SwiftNav.SBP.Vehicle as Exports
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
@@ -46,6 +46,7 @@
 import SwiftNav.SBP.SolutionMeta
 import SwiftNav.SBP.Ssr
 import SwiftNav.SBP.System
+import SwiftNav.SBP.Telemetry
 import SwiftNav.SBP.Tracking
 import SwiftNav.SBP.User
 import SwiftNav.SBP.Vehicle
@@ -239,11 +240,13 @@
    | SBPMsgSsrOrbitClockDepA MsgSsrOrbitClockDepA Msg
    | SBPMsgSsrPhaseBiases MsgSsrPhaseBiases Msg
    | SBPMsgSsrSatelliteApc MsgSsrSatelliteApc Msg
+   | SBPMsgSsrSatelliteApcDep MsgSsrSatelliteApcDep Msg
    | SBPMsgSsrStecCorrection MsgSsrStecCorrection Msg
    | SBPMsgSsrStecCorrectionDep MsgSsrStecCorrectionDep Msg
    | SBPMsgSsrStecCorrectionDepA MsgSsrStecCorrectionDepA Msg
    | SBPMsgSsrTileDefinition MsgSsrTileDefinition Msg
-   | SBPMsgSsrTileDefinitionDep MsgSsrTileDefinitionDep Msg
+   | SBPMsgSsrTileDefinitionDepA MsgSsrTileDefinitionDepA Msg
+   | SBPMsgSsrTileDefinitionDepB MsgSsrTileDefinitionDepB Msg
    | SBPMsgStartup MsgStartup Msg
    | SBPMsgStatusJournal MsgStatusJournal Msg
    | SBPMsgStatusReport MsgStatusReport Msg
@@ -253,6 +256,7 @@
    | SBPMsgStmUniqueIdResp MsgStmUniqueIdResp Msg
    | SBPMsgSvAzEl MsgSvAzEl Msg
    | SBPMsgSvConfigurationGpsDep MsgSvConfigurationGpsDep Msg
+   | SBPMsgTelSv MsgTelSv Msg
    | SBPMsgThreadState MsgThreadState Msg
    | SBPMsgTrackingIq MsgTrackingIq Msg
    | SBPMsgTrackingIqDepA MsgTrackingIqDepA Msg
@@ -476,11 +480,13 @@
           | _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 == msgSsrSatelliteApcDep = SBPMsgSsrSatelliteApcDep (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 == msgSsrTileDefinitionDepA = SBPMsgSsrTileDefinitionDepA (decode (fromStrict (unBytes _msgSBPPayload))) m
+          | _msgSBPType == msgSsrTileDefinitionDepB = SBPMsgSsrTileDefinitionDepB (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
@@ -490,6 +496,7 @@
           | _msgSBPType == msgStmUniqueIdResp = SBPMsgStmUniqueIdResp (decode (fromStrict (unBytes _msgSBPPayload))) m
           | _msgSBPType == msgSvAzEl = SBPMsgSvAzEl (decode (fromStrict (unBytes _msgSBPPayload))) m
           | _msgSBPType == msgSvConfigurationGpsDep = SBPMsgSvConfigurationGpsDep (decode (fromStrict (unBytes _msgSBPPayload))) m
+          | _msgSBPType == msgTelSv = SBPMsgTelSv (decode (fromStrict (unBytes _msgSBPPayload))) m
           | _msgSBPType == msgThreadState = SBPMsgThreadState (decode (fromStrict (unBytes _msgSBPPayload))) m
           | _msgSBPType == msgTrackingIq = SBPMsgTrackingIq (decode (fromStrict (unBytes _msgSBPPayload))) m
           | _msgSBPType == msgTrackingIqDepA = SBPMsgTrackingIqDepA (decode (fromStrict (unBytes _msgSBPPayload))) m
@@ -705,11 +712,13 @@
       encoder (SBPMsgSsrOrbitClockDepA _ m) = put m
       encoder (SBPMsgSsrPhaseBiases _ m) = put m
       encoder (SBPMsgSsrSatelliteApc _ m) = put m
+      encoder (SBPMsgSsrSatelliteApcDep _ 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 (SBPMsgSsrTileDefinitionDepA _ m) = put m
+      encoder (SBPMsgSsrTileDefinitionDepB _ m) = put m
       encoder (SBPMsgStartup _ m) = put m
       encoder (SBPMsgStatusJournal _ m) = put m
       encoder (SBPMsgStatusReport _ m) = put m
@@ -719,6 +728,7 @@
       encoder (SBPMsgStmUniqueIdResp _ m) = put m
       encoder (SBPMsgSvAzEl _ m) = put m
       encoder (SBPMsgSvConfigurationGpsDep _ m) = put m
+      encoder (SBPMsgTelSv _ m) = put m
       encoder (SBPMsgThreadState _ m) = put m
       encoder (SBPMsgTrackingIq _ m) = put m
       encoder (SBPMsgTrackingIqDepA _ m) = put m
@@ -938,11 +948,13 @@
         | 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 == msgSsrSatelliteApcDep = SBPMsgSsrSatelliteApcDep <$> 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 == msgSsrTileDefinitionDepA = SBPMsgSsrTileDefinitionDepA <$> pure (decode (fromStrict (unBytes payload))) <*> parseJSON obj
+        | msgType == msgSsrTileDefinitionDepB = SBPMsgSsrTileDefinitionDepB <$> 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
@@ -952,6 +964,7 @@
         | msgType == msgStmUniqueIdResp = SBPMsgStmUniqueIdResp <$> pure (decode (fromStrict (unBytes payload))) <*> parseJSON obj
         | msgType == msgSvAzEl = SBPMsgSvAzEl <$> pure (decode (fromStrict (unBytes payload))) <*> parseJSON obj
         | msgType == msgSvConfigurationGpsDep = SBPMsgSvConfigurationGpsDep <$> pure (decode (fromStrict (unBytes payload))) <*> parseJSON obj
+        | msgType == msgTelSv = SBPMsgTelSv <$> pure (decode (fromStrict (unBytes payload))) <*> parseJSON obj
         | msgType == msgThreadState = SBPMsgThreadState <$> pure (decode (fromStrict (unBytes payload))) <*> parseJSON obj
         | msgType == msgTrackingIq = SBPMsgTrackingIq <$> pure (decode (fromStrict (unBytes payload))) <*> parseJSON obj
         | msgType == msgTrackingIqDepA = SBPMsgTrackingIqDepA <$> pure (decode (fromStrict (unBytes payload))) <*> parseJSON obj
@@ -1172,11 +1185,13 @@
   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 (SBPMsgSsrSatelliteApcDep 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 (SBPMsgSsrTileDefinitionDepA n m) = toJSON n <<>> toJSON m
+  toJSON (SBPMsgSsrTileDefinitionDepB 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
@@ -1186,6 +1201,7 @@
   toJSON (SBPMsgStmUniqueIdResp n m) = toJSON n <<>> toJSON m
   toJSON (SBPMsgSvAzEl n m) = toJSON n <<>> toJSON m
   toJSON (SBPMsgSvConfigurationGpsDep n m) = toJSON n <<>> toJSON m
+  toJSON (SBPMsgTelSv n m) = toJSON n <<>> toJSON m
   toJSON (SBPMsgThreadState n m) = toJSON n <<>> toJSON m
   toJSON (SBPMsgTrackingIq n m) = toJSON n <<>> toJSON m
   toJSON (SBPMsgTrackingIqDepA n m) = toJSON n <<>> toJSON m
@@ -1400,11 +1416,13 @@
   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 (SBPMsgSsrSatelliteApcDep n m) = SBPMsgSsrSatelliteApcDep 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 (SBPMsgSsrTileDefinitionDepA n m) = SBPMsgSsrTileDefinitionDepA n <$> f m
+  msg f (SBPMsgSsrTileDefinitionDepB n m) = SBPMsgSsrTileDefinitionDepB 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
@@ -1414,6 +1432,7 @@
   msg f (SBPMsgStmUniqueIdResp n m) = SBPMsgStmUniqueIdResp n <$> f m
   msg f (SBPMsgSvAzEl n m) = SBPMsgSvAzEl n <$> f m
   msg f (SBPMsgSvConfigurationGpsDep n m) = SBPMsgSvConfigurationGpsDep n <$> f m
+  msg f (SBPMsgTelSv n m) = SBPMsgTelSv n <$> f m
   msg f (SBPMsgThreadState n m) = SBPMsgThreadState n <$> f m
   msg f (SBPMsgTrackingIq n m) = SBPMsgTrackingIq n <$> f m
   msg f (SBPMsgTrackingIqDepA n m) = SBPMsgTrackingIqDepA n <$> f m
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
@@ -759,10 +759,10 @@
 $(makeJSON "_msgSsrGriddedCorrectionBounds_" ''MsgSsrGriddedCorrectionBounds)
 $(makeLenses ''MsgSsrGriddedCorrectionBounds)
 
-msgSsrTileDefinitionDep :: Word16
-msgSsrTileDefinitionDep = 0x05F6
+msgSsrTileDefinitionDepA :: Word16
+msgSsrTileDefinitionDepA = 0x05F6
 
--- | SBP class for message MSG_SSR_TILE_DEFINITION_DEP (0x05F6).
+-- | SBP class for message MSG_SSR_TILE_DEFINITION_DEP_A (0x05F6).
 --
 -- Provides the correction point coordinates for the atmospheric correction
 -- values in the MSG_SSR_STEC_CORRECTION_DEP and MSG_SSR_GRIDDED_CORRECTION
@@ -771,13 +771,13 @@
 -- 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 MsgSsrTileDefinitionDep = MsgSsrTileDefinitionDep
-  { _msgSsrTileDefinitionDep_tile_set_id :: !Word16
+data MsgSsrTileDefinitionDepA = MsgSsrTileDefinitionDepA
+  { _msgSsrTileDefinitionDepA_tile_set_id :: !Word16
     -- ^ Unique identifier of the tile set this tile belongs to.
-  , _msgSsrTileDefinitionDep_tile_id     :: !Word16
+  , _msgSsrTileDefinitionDepA_tile_id     :: !Word16
     -- ^ Unique identifier of this tile in the tile set.
     -- See GNSS-SSR-ArrayOfCorrectionPoints field correctionPointSetID.
-  , _msgSsrTileDefinitionDep_corner_nw_lat :: !Int16
+  , _msgSsrTileDefinitionDepA_corner_nw_lat :: !Int16
     -- ^ North-West corner correction point latitude.
     --
     -- The relation between the latitude X in the range [-90, 90] and the
@@ -786,7 +786,7 @@
     -- N = floor((X / 90) * 2^14)
     --
     -- See GNSS-SSR-ArrayOfCorrectionPoints field referencePointLatitude.
-  , _msgSsrTileDefinitionDep_corner_nw_lon :: !Int16
+  , _msgSsrTileDefinitionDepA_corner_nw_lon :: !Int16
     -- ^ North-West corner correction point longitude.
     --
     -- The relation between the longitude X in the range [-180, 180] and the
@@ -795,23 +795,23 @@
     -- N = floor((X / 180) * 2^15)
     --
     -- See GNSS-SSR-ArrayOfCorrectionPoints field referencePointLongitude.
-  , _msgSsrTileDefinitionDep_spacing_lat :: !Word16
+  , _msgSsrTileDefinitionDepA_spacing_lat :: !Word16
     -- ^ Spacing of the correction points in the latitude direction.
     --
     -- See GNSS-SSR-ArrayOfCorrectionPoints field stepOfLatitude.
-  , _msgSsrTileDefinitionDep_spacing_lon :: !Word16
+  , _msgSsrTileDefinitionDepA_spacing_lon :: !Word16
     -- ^ Spacing of the correction points in the longitude direction.
     --
     -- See GNSS-SSR-ArrayOfCorrectionPoints field stepOfLongitude.
-  , _msgSsrTileDefinitionDep_rows        :: !Word16
+  , _msgSsrTileDefinitionDepA_rows        :: !Word16
     -- ^ Number of steps in the latitude direction.
     --
     -- See GNSS-SSR-ArrayOfCorrectionPoints field numberOfStepsLatitude.
-  , _msgSsrTileDefinitionDep_cols        :: !Word16
+  , _msgSsrTileDefinitionDepA_cols        :: !Word16
     -- ^ Number of steps in the longitude direction.
     --
     -- See GNSS-SSR-ArrayOfCorrectionPoints field numberOfStepsLongitude.
-  , _msgSsrTileDefinitionDep_bitmask     :: !Word64
+  , _msgSsrTileDefinitionDepA_bitmask     :: !Word64
     -- ^ Specifies the availability of correction data at the correction points
     -- in the array.
     --
@@ -829,38 +829,38 @@
     -- definition of the bits is inverted.
   } deriving ( Show, Read, Eq )
 
-instance Binary MsgSsrTileDefinitionDep where
+instance Binary MsgSsrTileDefinitionDepA 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 {..}
+    _msgSsrTileDefinitionDepA_tile_set_id <- getWord16le
+    _msgSsrTileDefinitionDepA_tile_id <- getWord16le
+    _msgSsrTileDefinitionDepA_corner_nw_lat <- (fromIntegral <$> getWord16le)
+    _msgSsrTileDefinitionDepA_corner_nw_lon <- (fromIntegral <$> getWord16le)
+    _msgSsrTileDefinitionDepA_spacing_lat <- getWord16le
+    _msgSsrTileDefinitionDepA_spacing_lon <- getWord16le
+    _msgSsrTileDefinitionDepA_rows <- getWord16le
+    _msgSsrTileDefinitionDepA_cols <- getWord16le
+    _msgSsrTileDefinitionDepA_bitmask <- getWord64le
+    pure MsgSsrTileDefinitionDepA {..}
 
-  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
+  put MsgSsrTileDefinitionDepA {..} = do
+    putWord16le _msgSsrTileDefinitionDepA_tile_set_id
+    putWord16le _msgSsrTileDefinitionDepA_tile_id
+    (putWord16le . fromIntegral) _msgSsrTileDefinitionDepA_corner_nw_lat
+    (putWord16le . fromIntegral) _msgSsrTileDefinitionDepA_corner_nw_lon
+    putWord16le _msgSsrTileDefinitionDepA_spacing_lat
+    putWord16le _msgSsrTileDefinitionDepA_spacing_lon
+    putWord16le _msgSsrTileDefinitionDepA_rows
+    putWord16le _msgSsrTileDefinitionDepA_cols
+    putWord64le _msgSsrTileDefinitionDepA_bitmask
 
-$(makeSBP 'msgSsrTileDefinitionDep ''MsgSsrTileDefinitionDep)
-$(makeJSON "_msgSsrTileDefinitionDep_" ''MsgSsrTileDefinitionDep)
-$(makeLenses ''MsgSsrTileDefinitionDep)
+$(makeSBP 'msgSsrTileDefinitionDepA ''MsgSsrTileDefinitionDepA)
+$(makeJSON "_msgSsrTileDefinitionDepA_" ''MsgSsrTileDefinitionDepA)
+$(makeLenses ''MsgSsrTileDefinitionDepA)
 
-msgSsrTileDefinition :: Word16
-msgSsrTileDefinition = 0x05F7
+msgSsrTileDefinitionDepB :: Word16
+msgSsrTileDefinitionDepB = 0x05F7
 
--- | SBP class for message MSG_SSR_TILE_DEFINITION (0x05F7).
+-- | SBP class for message MSG_SSR_TILE_DEFINITION_DEP_B (0x05F7).
 --
 -- Provides the correction point coordinates for the atmospheric correction
 -- values in the MSG_SSR_STEC_CORRECTION and MSG_SSR_GRIDDED_CORRECTION
@@ -869,15 +869,15 @@
 -- 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_ssr_sol_id  :: !Word8
+data MsgSsrTileDefinitionDepB = MsgSsrTileDefinitionDepB
+  { _msgSsrTileDefinitionDepB_ssr_sol_id  :: !Word8
     -- ^ SSR Solution ID.
-  , _msgSsrTileDefinition_tile_set_id :: !Word16
+  , _msgSsrTileDefinitionDepB_tile_set_id :: !Word16
     -- ^ Unique identifier of the tile set this tile belongs to.
-  , _msgSsrTileDefinition_tile_id     :: !Word16
+  , _msgSsrTileDefinitionDepB_tile_id     :: !Word16
     -- ^ Unique identifier of this tile in the tile set.
     -- See GNSS-SSR-ArrayOfCorrectionPoints field correctionPointSetID.
-  , _msgSsrTileDefinition_corner_nw_lat :: !Int16
+  , _msgSsrTileDefinitionDepB_corner_nw_lat :: !Int16
     -- ^ North-West corner correction point latitude.
     --
     -- The relation between the latitude X in the range [-90, 90] and the
@@ -886,7 +886,7 @@
     -- N = floor((X / 90) * 2^14)
     --
     -- See GNSS-SSR-ArrayOfCorrectionPoints field referencePointLatitude.
-  , _msgSsrTileDefinition_corner_nw_lon :: !Int16
+  , _msgSsrTileDefinitionDepB_corner_nw_lon :: !Int16
     -- ^ North-West corner correction point longitude.
     --
     -- The relation between the longitude X in the range [-180, 180] and the
@@ -895,23 +895,23 @@
     -- N = floor((X / 180) * 2^15)
     --
     -- See GNSS-SSR-ArrayOfCorrectionPoints field referencePointLongitude.
-  , _msgSsrTileDefinition_spacing_lat :: !Word16
+  , _msgSsrTileDefinitionDepB_spacing_lat :: !Word16
     -- ^ Spacing of the correction points in the latitude direction.
     --
     -- See GNSS-SSR-ArrayOfCorrectionPoints field stepOfLatitude.
-  , _msgSsrTileDefinition_spacing_lon :: !Word16
+  , _msgSsrTileDefinitionDepB_spacing_lon :: !Word16
     -- ^ Spacing of the correction points in the longitude direction.
     --
     -- See GNSS-SSR-ArrayOfCorrectionPoints field stepOfLongitude.
-  , _msgSsrTileDefinition_rows        :: !Word16
+  , _msgSsrTileDefinitionDepB_rows        :: !Word16
     -- ^ Number of steps in the latitude direction.
     --
     -- See GNSS-SSR-ArrayOfCorrectionPoints field numberOfStepsLatitude.
-  , _msgSsrTileDefinition_cols        :: !Word16
+  , _msgSsrTileDefinitionDepB_cols        :: !Word16
     -- ^ Number of steps in the longitude direction.
     --
     -- See GNSS-SSR-ArrayOfCorrectionPoints field numberOfStepsLongitude.
-  , _msgSsrTileDefinition_bitmask     :: !Word64
+  , _msgSsrTileDefinitionDepB_bitmask     :: !Word64
     -- ^ Specifies the availability of correction data at the correction points
     -- in the array.
     --
@@ -929,9 +929,116 @@
     -- definition of the bits is inverted.
   } deriving ( Show, Read, Eq )
 
+instance Binary MsgSsrTileDefinitionDepB where
+  get = do
+    _msgSsrTileDefinitionDepB_ssr_sol_id <- getWord8
+    _msgSsrTileDefinitionDepB_tile_set_id <- getWord16le
+    _msgSsrTileDefinitionDepB_tile_id <- getWord16le
+    _msgSsrTileDefinitionDepB_corner_nw_lat <- (fromIntegral <$> getWord16le)
+    _msgSsrTileDefinitionDepB_corner_nw_lon <- (fromIntegral <$> getWord16le)
+    _msgSsrTileDefinitionDepB_spacing_lat <- getWord16le
+    _msgSsrTileDefinitionDepB_spacing_lon <- getWord16le
+    _msgSsrTileDefinitionDepB_rows <- getWord16le
+    _msgSsrTileDefinitionDepB_cols <- getWord16le
+    _msgSsrTileDefinitionDepB_bitmask <- getWord64le
+    pure MsgSsrTileDefinitionDepB {..}
+
+  put MsgSsrTileDefinitionDepB {..} = do
+    putWord8 _msgSsrTileDefinitionDepB_ssr_sol_id
+    putWord16le _msgSsrTileDefinitionDepB_tile_set_id
+    putWord16le _msgSsrTileDefinitionDepB_tile_id
+    (putWord16le . fromIntegral) _msgSsrTileDefinitionDepB_corner_nw_lat
+    (putWord16le . fromIntegral) _msgSsrTileDefinitionDepB_corner_nw_lon
+    putWord16le _msgSsrTileDefinitionDepB_spacing_lat
+    putWord16le _msgSsrTileDefinitionDepB_spacing_lon
+    putWord16le _msgSsrTileDefinitionDepB_rows
+    putWord16le _msgSsrTileDefinitionDepB_cols
+    putWord64le _msgSsrTileDefinitionDepB_bitmask
+
+$(makeSBP 'msgSsrTileDefinitionDepB ''MsgSsrTileDefinitionDepB)
+$(makeJSON "_msgSsrTileDefinitionDepB_" ''MsgSsrTileDefinitionDepB)
+$(makeLenses ''MsgSsrTileDefinitionDepB)
+
+msgSsrTileDefinition :: Word16
+msgSsrTileDefinition = 0x05F8
+
+-- | SBP class for message MSG_SSR_TILE_DEFINITION (0x05F8).
+--
+-- 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_time          :: !GpsTimeSec
+    -- ^ GNSS reference time of the correction
+  , _msgSsrTileDefinition_update_interval :: !Word8
+    -- ^ Update interval between consecutive corrections. Encoded following RTCM
+    -- DF391 specification.
+  , _msgSsrTileDefinition_sol_id        :: !Word8
+    -- ^ SSR Solution ID. Similar to RTCM DF415.
+  , _msgSsrTileDefinition_iod_atmo      :: !Word8
+    -- ^ IOD of the SSR atmospheric correction.
+  , _msgSsrTileDefinition_tile_set_id   :: !Word16
+    -- ^ Unique identifier of the tile set this tile belongs to.
+  , _msgSsrTileDefinition_tile_id       :: !Word16
+    -- ^ Unique identifier of this tile in the tile set.
+    -- See GNSS-SSR-ArrayOfCorrectionPoints field correctionPointSetID.
+  , _msgSsrTileDefinition_corner_nw_lat :: !Int16
+    -- ^ North-West corner correction point latitude.
+    --
+    -- The relation between the latitude X in the range [-90, 90] and the
+    -- coded number N is:  N = floor((X / 90) * 2^14)
+    --
+    -- See GNSS-SSR-ArrayOfCorrectionPoints field referencePointLatitude.
+  , _msgSsrTileDefinition_corner_nw_lon :: !Int16
+    -- ^ North-West corner correction point longitude.
+    --
+    -- The relation between the longitude X in the range [-180, 180] and the
+    -- coded number N is: N = floor((X / 180) * 2^15)
+    --
+    -- See GNSS-SSR-ArrayOfCorrectionPoints field referencePointLongitude.
+  , _msgSsrTileDefinition_spacing_lat   :: !Word16
+    -- ^ Spacing of the correction points in the latitude direction.
+    --
+    -- See GNSS-SSR-ArrayOfCorrectionPoints field stepOfLatitude.
+  , _msgSsrTileDefinition_spacing_lon   :: !Word16
+    -- ^ Spacing of the correction points in the longitude direction.
+    --
+    -- See GNSS-SSR-ArrayOfCorrectionPoints field stepOfLongitude.
+  , _msgSsrTileDefinition_rows          :: !Word16
+    -- ^ Number of steps in the latitude direction.
+    --
+    -- See GNSS-SSR-ArrayOfCorrectionPoints field numberOfStepsLatitude.
+  , _msgSsrTileDefinition_cols          :: !Word16
+    -- ^ Number of steps in the longitude direction.
+    --
+    -- See GNSS-SSR-ArrayOfCorrectionPoints field numberOfStepsLongitude.
+  , _msgSsrTileDefinition_bitmask       :: !Word64
+    -- ^ Specifies the absence of correction data at the correction points in
+    -- the array (grid).
+    --
+    -- Only the first rows * cols bits are used, and if a specific bit is
+    -- enabled (set to 1), the correction is not available. If there are more
+    -- than 64 correction points the remaining corrections are always
+    -- available.
+    --
+    -- The correction points are packed by rows, starting with the northwest
+    -- corner of the array (top-left on a north oriented map), with each row
+    -- spanning west to east, ending with the southeast corner of the array.
+    --
+    -- See GNSS-SSR-ArrayOfCorrectionPoints field bitmaskOfGrids but note the
+    -- definition of the bits is inverted.
+  } deriving ( Show, Read, Eq )
+
 instance Binary MsgSsrTileDefinition where
   get = do
-    _msgSsrTileDefinition_ssr_sol_id <- getWord8
+    _msgSsrTileDefinition_time <- get
+    _msgSsrTileDefinition_update_interval <- getWord8
+    _msgSsrTileDefinition_sol_id <- getWord8
+    _msgSsrTileDefinition_iod_atmo <- getWord8
     _msgSsrTileDefinition_tile_set_id <- getWord16le
     _msgSsrTileDefinition_tile_id <- getWord16le
     _msgSsrTileDefinition_corner_nw_lat <- (fromIntegral <$> getWord16le)
@@ -944,7 +1051,10 @@
     pure MsgSsrTileDefinition {..}
 
   put MsgSsrTileDefinition {..} = do
-    putWord8 _msgSsrTileDefinition_ssr_sol_id
+    put _msgSsrTileDefinition_time
+    putWord8 _msgSsrTileDefinition_update_interval
+    putWord8 _msgSsrTileDefinition_sol_id
+    putWord8 _msgSsrTileDefinition_iod_atmo
     putWord16le _msgSsrTileDefinition_tile_set_id
     putWord16le _msgSsrTileDefinition_tile_id
     (putWord16le . fromIntegral) _msgSsrTileDefinition_corner_nw_lat
@@ -998,20 +1108,58 @@
 $(makeJSON "_satelliteAPC_" ''SatelliteAPC)
 $(makeLenses ''SatelliteAPC)
 
+msgSsrSatelliteApcDep :: Word16
+msgSsrSatelliteApcDep = 0x0604
+
+data MsgSsrSatelliteApcDep = MsgSsrSatelliteApcDep
+  { _msgSsrSatelliteApcDep_apc :: ![SatelliteAPC]
+    -- ^ Satellite antenna phase center corrections
+  } deriving ( Show, Read, Eq )
+
+instance Binary MsgSsrSatelliteApcDep where
+  get = do
+    _msgSsrSatelliteApcDep_apc <- whileM (not <$> isEmpty) get
+    pure MsgSsrSatelliteApcDep {..}
+
+  put MsgSsrSatelliteApcDep {..} = do
+    mapM_ put _msgSsrSatelliteApcDep_apc
+
+$(makeSBP 'msgSsrSatelliteApcDep ''MsgSsrSatelliteApcDep)
+$(makeJSON "_msgSsrSatelliteApcDep_" ''MsgSsrSatelliteApcDep)
+$(makeLenses ''MsgSsrSatelliteApcDep)
+
 msgSsrSatelliteApc :: Word16
-msgSsrSatelliteApc = 0x0604
+msgSsrSatelliteApc = 0x0605
 
 data MsgSsrSatelliteApc = MsgSsrSatelliteApc
-  { _msgSsrSatelliteApc_apc :: ![SatelliteAPC]
+  { _msgSsrSatelliteApc_time          :: !GpsTimeSec
+    -- ^ GNSS reference time of the correction
+  , _msgSsrSatelliteApc_update_interval :: !Word8
+    -- ^ Update interval between consecutive corrections. Encoded following RTCM
+    -- DF391 specification.
+  , _msgSsrSatelliteApc_sol_id        :: !Word8
+    -- ^ SSR Solution ID. Similar to RTCM DF415.
+  , _msgSsrSatelliteApc_iod_ssr       :: !Word8
+    -- ^ IOD of the SSR correction. A change of Issue Of Data SSR is used to
+    -- indicate a change in the SSR generating configuration
+  , _msgSsrSatelliteApc_apc           :: ![SatelliteAPC]
     -- ^ Satellite antenna phase center corrections
   } deriving ( Show, Read, Eq )
 
 instance Binary MsgSsrSatelliteApc where
   get = do
+    _msgSsrSatelliteApc_time <- get
+    _msgSsrSatelliteApc_update_interval <- getWord8
+    _msgSsrSatelliteApc_sol_id <- getWord8
+    _msgSsrSatelliteApc_iod_ssr <- getWord8
     _msgSsrSatelliteApc_apc <- whileM (not <$> isEmpty) get
     pure MsgSsrSatelliteApc {..}
 
   put MsgSsrSatelliteApc {..} = do
+    put _msgSsrSatelliteApc_time
+    putWord8 _msgSsrSatelliteApc_update_interval
+    putWord8 _msgSsrSatelliteApc_sol_id
+    putWord8 _msgSsrSatelliteApc_iod_ssr
     mapM_ put _msgSsrSatelliteApc_apc
 
 $(makeSBP 'msgSsrSatelliteApc ''MsgSsrSatelliteApc)
diff --git a/src/SwiftNav/SBP/Telemetry.hs b/src/SwiftNav/SBP/Telemetry.hs
new file mode 100644
--- /dev/null
+++ b/src/SwiftNav/SBP/Telemetry.hs
@@ -0,0 +1,129 @@
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# LANGUAGE NoImplicitPrelude           #-}
+{-# LANGUAGE TemplateHaskell             #-}
+{-# LANGUAGE RecordWildCards             #-}
+
+-- |
+-- Module:      SwiftNav.SBP.Telemetry
+-- Copyright:   Copyright (C) 2015-2021 Swift Navigation, Inc.
+-- License:     MIT
+-- Contact:     https://support.swiftnav.com
+-- Stability:   experimental
+-- Portability: portable
+--
+-- \< Telemetry messages reported by Starling engine. The messages include
+-- various byproducts of state estimation and other logic across Starling and
+-- are aimed at efficient issue diagnostics. \>
+
+module SwiftNav.SBP.Telemetry
+  ( module SwiftNav.SBP.Telemetry
+  ) 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.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) #-}
+
+
+data TelemetrySV = TelemetrySV
+  { _telemetrySV_az                 :: !Word8
+    -- ^ Azimuth angle (range 0..179)
+  , _telemetrySV_el                 :: !Int8
+    -- ^ Elevation angle (range -90..90)
+  , _telemetrySV_availability_flags :: !Word8
+    -- ^ Observation availability at filter update
+  , _telemetrySV_pseudorange_residual :: !Int16
+    -- ^ Pseudorange observation residual
+  , _telemetrySV_phase_residual     :: !Int16
+    -- ^ Carrier-phase or carrier-phase-derived observation residual
+  , _telemetrySV_outlier_flags      :: !Word8
+    -- ^ Reports if observation is marked as an outlier and is excluded from the
+    -- update
+  , _telemetrySV_ephemeris_flags    :: !Word8
+    -- ^ Ephemeris metadata
+  , _telemetrySV_correction_flags   :: !Word8
+    -- ^ Reserved
+  , _telemetrySV_sid                :: !GnssSignal
+    -- ^ GNSS signal identifier (16 bit)
+  } deriving ( Show, Read, Eq )
+
+instance Binary TelemetrySV where
+  get = do
+    _telemetrySV_az <- getWord8
+    _telemetrySV_el <- (fromIntegral <$> getWord8)
+    _telemetrySV_availability_flags <- getWord8
+    _telemetrySV_pseudorange_residual <- (fromIntegral <$> getWord16le)
+    _telemetrySV_phase_residual <- (fromIntegral <$> getWord16le)
+    _telemetrySV_outlier_flags <- getWord8
+    _telemetrySV_ephemeris_flags <- getWord8
+    _telemetrySV_correction_flags <- getWord8
+    _telemetrySV_sid <- get
+    pure TelemetrySV {..}
+
+  put TelemetrySV {..} = do
+    putWord8 _telemetrySV_az
+    (putWord8 . fromIntegral) _telemetrySV_el
+    putWord8 _telemetrySV_availability_flags
+    (putWord16le . fromIntegral) _telemetrySV_pseudorange_residual
+    (putWord16le . fromIntegral) _telemetrySV_phase_residual
+    putWord8 _telemetrySV_outlier_flags
+    putWord8 _telemetrySV_ephemeris_flags
+    putWord8 _telemetrySV_correction_flags
+    put _telemetrySV_sid
+
+$(makeJSON "_telemetrySV_" ''TelemetrySV)
+$(makeLenses ''TelemetrySV)
+
+msgTelSv :: Word16
+msgTelSv = 0x0120
+
+-- | SBP class for message MSG_TEL_SV (0x0120).
+--
+-- This message includes telemetry pertinent to satellite signals available to
+-- Starling.
+data MsgTelSv = MsgTelSv
+  { _msgTelSv_wn         :: !Word16
+    -- ^ GPS week number
+  , _msgTelSv_tow        :: !Word32
+    -- ^ GPS Time of Week
+  , _msgTelSv_n_obs      :: !Word8
+    -- ^ Total number of observations. First nibble is the size of the sequence
+    -- (n), second nibble is the zero-indexed counter (ith packet of n)
+  , _msgTelSv_origin_flags :: !Word8
+    -- ^ Flags to identify the filter type from which the telemetry is reported
+    -- from
+  , _msgTelSv_sv_tel     :: ![TelemetrySV]
+    -- ^ Array of per-signal telemetry entries
+  } deriving ( Show, Read, Eq )
+
+instance Binary MsgTelSv where
+  get = do
+    _msgTelSv_wn <- getWord16le
+    _msgTelSv_tow <- getWord32le
+    _msgTelSv_n_obs <- getWord8
+    _msgTelSv_origin_flags <- getWord8
+    _msgTelSv_sv_tel <- whileM (not <$> isEmpty) get
+    pure MsgTelSv {..}
+
+  put MsgTelSv {..} = do
+    putWord16le _msgTelSv_wn
+    putWord32le _msgTelSv_tow
+    putWord8 _msgTelSv_n_obs
+    putWord8 _msgTelSv_origin_flags
+    mapM_ put _msgTelSv_sv_tel
+
+$(makeSBP 'msgTelSv ''MsgTelSv)
+$(makeJSON "_msgTelSv_" ''MsgTelSv)
+$(makeLenses ''MsgTelSv)
