diff --git a/rtcm.cabal b/rtcm.cabal
--- a/rtcm.cabal
+++ b/rtcm.cabal
@@ -1,5 +1,5 @@
 name:                  rtcm
-version:               0.2.13
+version:               0.2.14
 synopsis:              RTCM Library.
 description:           Haskell bindings for RTCM.
 homepage:              http://github.com/swift-nav/librtcm
diff --git a/src/Data/RTCM3.hs b/src/Data/RTCM3.hs
--- a/src/Data/RTCM3.hs
+++ b/src/Data/RTCM3.hs
@@ -54,9 +54,15 @@
    | RTCM3Msg1033    Msg1033 Msg
    | RTCM3Msg1057    Msg1057 Msg
    | RTCM3Msg1058    Msg1058 Msg
+   | RTCM3Msg1059    Msg1059 Msg
+   | RTCM3Msg1060    Msg1060 Msg
    | RTCM3Msg1063    Msg1063 Msg
    | RTCM3Msg1064    Msg1064 Msg
+   | RTCM3Msg1065    Msg1065 Msg
+   | RTCM3Msg1066    Msg1066 Msg
    | RTCM3Msg1230    Msg1230 Msg
+   | RTCM3Msg1265    Msg1265 Msg
+   | RTCM3Msg1266    Msg1266 Msg
    | RTCM3MsgUnknown Word16  Msg
    | RTCM3MsgBadCrc          Msg
    | RTCM3MsgEmpty           Msg
@@ -90,9 +96,15 @@
           | num == msg1033 = RTCM3Msg1033 (decode $ fromStrict $ unBytes _msgRTCM3Payload) m
           | num == msg1057 = RTCM3Msg1057 (decode $ fromStrict $ unBytes _msgRTCM3Payload) m
           | num == msg1058 = RTCM3Msg1058 (decode $ fromStrict $ unBytes _msgRTCM3Payload) m
+          | num == msg1059 = RTCM3Msg1059 (decode $ fromStrict $ unBytes _msgRTCM3Payload) m
+          | num == msg1060 = RTCM3Msg1060 (decode $ fromStrict $ unBytes _msgRTCM3Payload) m
           | num == msg1063 = RTCM3Msg1063 (decode $ fromStrict $ unBytes _msgRTCM3Payload) m
           | num == msg1064 = RTCM3Msg1064 (decode $ fromStrict $ unBytes _msgRTCM3Payload) m
+          | num == msg1065 = RTCM3Msg1065 (decode $ fromStrict $ unBytes _msgRTCM3Payload) m
+          | num == msg1066 = RTCM3Msg1066 (decode $ fromStrict $ unBytes _msgRTCM3Payload) m
           | num == msg1230 = RTCM3Msg1230 (decode $ fromStrict $ unBytes _msgRTCM3Payload) m
+          | num == msg1265 = RTCM3Msg1265 (decode $ fromStrict $ unBytes _msgRTCM3Payload) m
+          | num == msg1266 = RTCM3Msg1266 (decode $ fromStrict $ unBytes _msgRTCM3Payload) m
           | otherwise = RTCM3MsgUnknown num m where
             crc = checkCrc _msgRTCM3Len $ unBytes _msgRTCM3Payload
             num = checkNum $ unBytes _msgRTCM3Payload
@@ -118,9 +130,15 @@
       encoder (RTCM3Msg1033    _n m) = put m
       encoder (RTCM3Msg1057    _n m) = put m
       encoder (RTCM3Msg1058    _n m) = put m
+      encoder (RTCM3Msg1059    _n m) = put m
+      encoder (RTCM3Msg1060    _n m) = put m
       encoder (RTCM3Msg1063    _n m) = put m
       encoder (RTCM3Msg1064    _n m) = put m
+      encoder (RTCM3Msg1065    _n m) = put m
+      encoder (RTCM3Msg1066    _n m) = put m
       encoder (RTCM3Msg1230    _n m) = put m
+      encoder (RTCM3Msg1265    _n m) = put m
+      encoder (RTCM3Msg1266    _n m) = put m
       encoder (RTCM3MsgUnknown _n m) = put m
       encoder (RTCM3MsgBadCrc     m) = put m
       encoder (RTCM3MsgEmpty      m) = put m
@@ -144,9 +162,15 @@
   msg f (RTCM3Msg1033    n m) = RTCM3Msg1033    n <$> f m
   msg f (RTCM3Msg1057    n m) = RTCM3Msg1057    n <$> f m
   msg f (RTCM3Msg1058    n m) = RTCM3Msg1058    n <$> f m
+  msg f (RTCM3Msg1059    n m) = RTCM3Msg1059    n <$> f m
+  msg f (RTCM3Msg1060    n m) = RTCM3Msg1060    n <$> f m
   msg f (RTCM3Msg1063    n m) = RTCM3Msg1063    n <$> f m
   msg f (RTCM3Msg1064    n m) = RTCM3Msg1064    n <$> f m
+  msg f (RTCM3Msg1065    n m) = RTCM3Msg1065    n <$> f m
+  msg f (RTCM3Msg1066    n m) = RTCM3Msg1066    n <$> f m
   msg f (RTCM3Msg1230    n m) = RTCM3Msg1230    n <$> f m
+  msg f (RTCM3Msg1265    n m) = RTCM3Msg1265    n <$> f m
+  msg f (RTCM3Msg1266    n m) = RTCM3Msg1266    n <$> f m
   msg f (RTCM3MsgUnknown n m) = RTCM3MsgUnknown n <$> f m
   msg f (RTCM3MsgBadCrc    m) = RTCM3MsgBadCrc    <$> f m
   msg f (RTCM3MsgEmpty     m) = RTCM3MsgEmpty     <$> f m
@@ -176,9 +200,15 @@
   toJSON (RTCM3Msg1033    n m) = toJSON n <<>> toJSON m
   toJSON (RTCM3Msg1057    n m) = toJSON n <<>> toJSON m
   toJSON (RTCM3Msg1058    n m) = toJSON n <<>> toJSON m
+  toJSON (RTCM3Msg1059    n m) = toJSON n <<>> toJSON m
+  toJSON (RTCM3Msg1060    n m) = toJSON n <<>> toJSON m
   toJSON (RTCM3Msg1063    n m) = toJSON n <<>> toJSON m
   toJSON (RTCM3Msg1064    n m) = toJSON n <<>> toJSON m
+  toJSON (RTCM3Msg1065    n m) = toJSON n <<>> toJSON m
+  toJSON (RTCM3Msg1066    n m) = toJSON n <<>> toJSON m
   toJSON (RTCM3Msg1230    n m) = toJSON n <<>> toJSON m
+  toJSON (RTCM3Msg1265    n m) = toJSON n <<>> toJSON m
+  toJSON (RTCM3Msg1266    n m) = toJSON n <<>> toJSON m
   toJSON (RTCM3MsgUnknown n m) = object [ "num" .= n ] <<>> toJSON m
   toJSON (RTCM3MsgBadCrc    m) = toJSON m
   toJSON (RTCM3MsgEmpty     m) = toJSON m
@@ -206,8 +236,13 @@
         | num == msg1033 = RTCM3Msg1033 <$> pure (decode $ fromStrict $ unBytes payload) <*> parseJSON obj
         | num == msg1057 = RTCM3Msg1057 <$> pure (decode $ fromStrict $ unBytes payload) <*> parseJSON obj
         | num == msg1058 = RTCM3Msg1058 <$> pure (decode $ fromStrict $ unBytes payload) <*> parseJSON obj
+        | num == msg1059 = RTCM3Msg1059 <$> pure (decode $ fromStrict $ unBytes payload) <*> parseJSON obj
+        | num == msg1060 = RTCM3Msg1060 <$> pure (decode $ fromStrict $ unBytes payload) <*> parseJSON obj
         | num == msg1063 = RTCM3Msg1063 <$> pure (decode $ fromStrict $ unBytes payload) <*> parseJSON obj
         | num == msg1064 = RTCM3Msg1064 <$> pure (decode $ fromStrict $ unBytes payload) <*> parseJSON obj
+        | num == msg1065 = RTCM3Msg1065 <$> pure (decode $ fromStrict $ unBytes payload) <*> parseJSON obj
+        | num == msg1066 = RTCM3Msg1066 <$> pure (decode $ fromStrict $ unBytes payload) <*> parseJSON obj
         | num == msg1230 = RTCM3Msg1230 <$> pure (decode $ fromStrict $ unBytes payload) <*> parseJSON obj
+        | num == msg1265 = RTCM3Msg1265 <$> pure (decode $ fromStrict $ unBytes payload) <*> parseJSON obj
         | otherwise = RTCM3MsgUnknown <$> pure num <*> parseJSON obj
   parseJSON _ = mzero
diff --git a/src/Data/RTCM3/SSR.hs b/src/Data/RTCM3/SSR.hs
--- a/src/Data/RTCM3/SSR.hs
+++ b/src/Data/RTCM3/SSR.hs
@@ -23,6 +23,7 @@
 import           Data.Binary.Bits
 import qualified Data.Binary.Bits.Get as B
 import qualified Data.Binary.Bits.Put as B
+import           Data.Int
 import           Data.RTCM3.Extras
 import           Data.RTCM3.TH
 
@@ -380,6 +381,672 @@
     putInt32be 21 _glonassClockCorrection_deltaClockC1
     putInt32be 27 _glonassClockCorrection_deltaClockC2
 
+-- | GpsOrbitClockCorrectionHeader.
+--
+-- GPS orbit and clock correction header.
+
+data GpsOrbitClockCorrectionHeader = GpsOrbitClockCorrectionHeader
+  { _gpsOrbitClockCorrectionHeader_num            :: Word16
+    -- ^ Message number.
+  , _gpsOrbitClockCorrectionHeader_epochs         :: Word32
+    -- ^ GPS epoch time.
+  , _gpsOrbitClockCorrectionHeader_updateInterval :: Word8
+    -- ^ SSR update interval.
+  , _gpsOrbitClockCorrectionHeader_multiple       :: Bool
+    -- ^ Multiple message indicator.
+  , _gpsOrbitClockCorrectionHeader_datum          :: Bool
+    -- ^ Satellite reference datum.
+  , _gpsOrbitClockCorrectionHeader_iod            :: Word8
+    -- ^ IOD SSR.
+  , _gpsOrbitClockCorrectionHeader_provider       :: Word16
+    -- ^ SSR provider id.
+  , _gpsOrbitClockCorrectionHeader_solution       :: Word8
+    -- ^ SSR solution id.
+  , _gpsOrbitClockCorrectionHeader_n              :: Word8
+    -- ^ Number of satellites.
+  } deriving ( Show, Read, Eq )
+
+$(makeLenses ''GpsOrbitClockCorrectionHeader)
+$(deriveJSON defaultOptions {fieldLabelModifier = fromMaybe "_gpsOrbitClockCorrectionHeader_" . stripPrefix "_gpsOrbitClockCorrectionHeader_"} ''GpsOrbitClockCorrectionHeader)
+
+instance BinaryBit GpsOrbitClockCorrectionHeader where
+  getBits _n = do
+    _gpsOrbitClockCorrectionHeader_num            <- B.getWord16be 12
+    _gpsOrbitClockCorrectionHeader_epochs         <- B.getWord32be 20
+    _gpsOrbitClockCorrectionHeader_updateInterval <- B.getWord8 4
+    _gpsOrbitClockCorrectionHeader_multiple       <- B.getBool
+    _gpsOrbitClockCorrectionHeader_datum          <- B.getBool
+    _gpsOrbitClockCorrectionHeader_iod            <- B.getWord8 4
+    _gpsOrbitClockCorrectionHeader_provider       <- B.getWord16be 16
+    _gpsOrbitClockCorrectionHeader_solution       <- B.getWord8 4
+    _gpsOrbitClockCorrectionHeader_n              <- B.getWord8 6
+    pure GpsOrbitClockCorrectionHeader {..}
+
+  putBits _n GpsOrbitClockCorrectionHeader {..} = do
+    B.putWord16be 12 _gpsOrbitClockCorrectionHeader_num
+    B.putWord32be 20 _gpsOrbitClockCorrectionHeader_epochs
+    B.putWord8 4     _gpsOrbitClockCorrectionHeader_updateInterval
+    B.putBool        _gpsOrbitClockCorrectionHeader_multiple
+    B.putBool        _gpsOrbitClockCorrectionHeader_datum
+    B.putWord8 4     _gpsOrbitClockCorrectionHeader_iod
+    B.putWord16be 16 _gpsOrbitClockCorrectionHeader_provider
+    B.putWord8 4     _gpsOrbitClockCorrectionHeader_solution
+    B.putWord8 6     _gpsOrbitClockCorrectionHeader_n
+
+-- | GpsOrbitClockCorrectionMessage.
+--
+-- GPS orbit correction message.
+data GpsOrbitClockCorrection = GpsOrbitClockCorrection
+  { _gpsOrbitClockCorrection_sat                :: Word8
+    -- ^ GPS satellite id.
+  , _gpsOrbitClockCorrection_iode               :: Word8
+    -- ^ GPS IODE.
+  , _gpsOrbitClockCorrection_deltaRadial        :: Int32
+    -- ^ Delta Radial.
+  , _gpsOrbitClockCorrection_deltaAlongTrack    :: Int32
+    -- ^ Delta Along-Track.
+  , _gpsOrbitClockCorrection_deltaCrossTrack    :: Int32
+    -- ^ Delta Cross-Track.
+  , _gpsOrbitClockCorrection_dotDeltaRadial     :: Int32
+    -- ^ Dot Delta Radial.
+  , _gpsOrbitClockCorrection_dotDeltaAlongTrack :: Int32
+    -- ^ Dot Delta Along-Track.
+  , _gpsOrbitClockCorrection_dotDeltaCrossTrack :: Int32
+    -- ^ Dot Delta Cross-Track.
+  , _gpsOrbitClockCorrection_deltaClockC0       :: Int32
+    -- ^ Delta clock C0.
+  , _gpsOrbitClockCorrection_deltaClockC1       :: Int32
+    -- ^ Delta clock C1.
+  , _gpsOrbitClockCorrection_deltaClockC2       :: Int32
+    -- ^ Delta clock C2.
+
+  } deriving ( Show, Read, Eq )
+
+$(makeLenses ''GpsOrbitClockCorrection)
+$(deriveJSON defaultOptions {fieldLabelModifier = fromMaybe "_gpsOrbitClockCorrection_" . stripPrefix "_gpsOrbitClockCorrection_"} ''GpsOrbitClockCorrection)
+
+instance BinaryBit GpsOrbitClockCorrection where
+  getBits _n = do
+    _gpsOrbitClockCorrection_sat                <- B.getWord8 6
+    _gpsOrbitClockCorrection_iode               <- B.getWord8 8
+    _gpsOrbitClockCorrection_deltaRadial        <- getInt32be 22
+    _gpsOrbitClockCorrection_deltaAlongTrack    <- getInt32be 20
+    _gpsOrbitClockCorrection_deltaCrossTrack    <- getInt32be 20
+    _gpsOrbitClockCorrection_dotDeltaRadial     <- getInt32be 21
+    _gpsOrbitClockCorrection_dotDeltaAlongTrack <- getInt32be 19
+    _gpsOrbitClockCorrection_dotDeltaCrossTrack <- getInt32be 19
+    _gpsOrbitClockCorrection_deltaClockC0       <- getInt32be 22
+    _gpsOrbitClockCorrection_deltaClockC1       <- getInt32be 21
+    _gpsOrbitClockCorrection_deltaClockC2       <- getInt32be 27
+    pure GpsOrbitClockCorrection {..}
+
+  putBits _n GpsOrbitClockCorrection {..} = do
+    B.putWord8 6  _gpsOrbitClockCorrection_sat
+    B.putWord8 8  _gpsOrbitClockCorrection_iode
+    putInt32be 22 _gpsOrbitClockCorrection_deltaRadial
+    putInt32be 20 _gpsOrbitClockCorrection_deltaAlongTrack
+    putInt32be 20 _gpsOrbitClockCorrection_deltaCrossTrack
+    putInt32be 21 _gpsOrbitClockCorrection_dotDeltaRadial
+    putInt32be 19 _gpsOrbitClockCorrection_dotDeltaAlongTrack
+    putInt32be 19 _gpsOrbitClockCorrection_dotDeltaCrossTrack
+    putInt32be 22 _gpsOrbitClockCorrection_deltaClockC0
+    putInt32be 21 _gpsOrbitClockCorrection_deltaClockC1
+    putInt32be 27 _gpsOrbitClockCorrection_deltaClockC2
+
+-- | GlonassOrbitClockCorrectionHeader.
+--
+-- GLONASS orbit correction header.
+data GlonassOrbitClockCorrectionHeader = GlonassOrbitClockCorrectionHeader
+  { _glonassOrbitClockCorrectionHeader_num            :: Word16
+    -- ^ Message number.
+  , _glonassOrbitClockCorrectionHeader_epochs         :: Word32
+    -- ^ GLONASS epoch time.
+  , _glonassOrbitClockCorrectionHeader_updateInterval :: Word8
+    -- ^ SSR update interval.
+  , _glonassOrbitClockCorrectionHeader_multiple       :: Bool
+    -- ^ Multiple message indicator.
+  , _glonassOrbitClockCorrectionHeader_datum          :: Bool
+    -- ^ Satellite reference datum.
+  , _glonassOrbitClockCorrectionHeader_iod            :: Word8
+    -- ^ IOD SSR.
+  , _glonassOrbitClockCorrectionHeader_provider       :: Word16
+    -- ^ SSR provider id.
+  , _glonassOrbitClockCorrectionHeader_solution       :: Word8
+    -- ^ SSR solution id.
+  , _glonassOrbitClockCorrectionHeader_n              :: Word8
+    -- ^ Number of satellites.
+  } deriving ( Show, Read, Eq )
+
+$(makeLenses ''GlonassOrbitClockCorrectionHeader)
+$(deriveJSON defaultOptions {fieldLabelModifier = fromMaybe "_glonassOrbitClockCorrectionHeader_" . stripPrefix "_glonassOrbitClockCorrectionHeader_"} ''GlonassOrbitClockCorrectionHeader)
+
+instance BinaryBit GlonassOrbitClockCorrectionHeader where
+  getBits _n = do
+    _glonassOrbitClockCorrectionHeader_num            <- B.getWord16be 12
+    _glonassOrbitClockCorrectionHeader_epochs         <- B.getWord32be 17
+    _glonassOrbitClockCorrectionHeader_updateInterval <- B.getWord8 4
+    _glonassOrbitClockCorrectionHeader_multiple       <- B.getBool
+    _glonassOrbitClockCorrectionHeader_datum          <- B.getBool
+    _glonassOrbitClockCorrectionHeader_iod            <- B.getWord8 4
+    _glonassOrbitClockCorrectionHeader_provider       <- B.getWord16be 16
+    _glonassOrbitClockCorrectionHeader_solution       <- B.getWord8 4
+    _glonassOrbitClockCorrectionHeader_n              <- B.getWord8 6
+    pure GlonassOrbitClockCorrectionHeader {..}
+
+  putBits _n GlonassOrbitClockCorrectionHeader {..} = do
+    B.putWord16be 12 _glonassOrbitClockCorrectionHeader_num
+    B.putWord32be 17 _glonassOrbitClockCorrectionHeader_epochs
+    B.putWord8 4     _glonassOrbitClockCorrectionHeader_updateInterval
+    B.putBool        _glonassOrbitClockCorrectionHeader_multiple
+    B.putBool        _glonassOrbitClockCorrectionHeader_datum
+    B.putWord8 4     _glonassOrbitClockCorrectionHeader_iod
+    B.putWord16be 16 _glonassOrbitClockCorrectionHeader_provider
+    B.putWord8 4     _glonassOrbitClockCorrectionHeader_solution
+    B.putWord8 6     _glonassOrbitClockCorrectionHeader_n
+
+-- | GlonassOrbitClockCorrectionMessage.
+--
+-- GLONASS orbit correction message.
+data GlonassOrbitClockCorrection = GlonassOrbitClockCorrection
+  { _glonassOrbitClockCorrection_sat                :: Word8
+    -- ^ GLONASS satellite id.
+  , _glonassOrbitClockCorrection_iode               :: Word8
+    -- ^ GLONASS IODE.
+  , _glonassOrbitClockCorrection_deltaRadial        :: Int32
+    -- ^ Delta Radial.
+  , _glonassOrbitClockCorrection_deltaAlongTrack    :: Int32
+    -- ^ Delta Along-Track.
+  , _glonassOrbitClockCorrection_deltaCrossTrack    :: Int32
+    -- ^ Delta Cross-Track.
+  , _glonassOrbitClockCorrection_dotDeltaRadial     :: Int32
+    -- ^ Dot Delta Radial.
+  , _glonassOrbitClockCorrection_dotDeltaAlongTrack :: Int32
+    -- ^ Dot Delta Along-Track.
+  , _glonassOrbitClockCorrection_dotDeltaCrossTrack :: Int32
+    -- ^ Dot Delta Cross-Track.
+  , _glonassOrbitClockCorrection_deltaClockC0       :: Int32
+    -- ^ Delta clock C0.
+  , _glonassOrbitClockCorrection_deltaClockC1       :: Int32
+    -- ^ Delta clock C1.
+  , _glonassOrbitClockCorrection_deltaClockC2       :: Int32
+    -- ^ Delta clock C2.
+  } deriving ( Show, Read, Eq )
+
+$(makeLenses ''GlonassOrbitClockCorrection)
+$(deriveJSON defaultOptions {fieldLabelModifier = fromMaybe "_glonassOrbitClockCorrection_" . stripPrefix "_glonassOrbitClockCorrection_"} ''GlonassOrbitClockCorrection)
+
+instance BinaryBit GlonassOrbitClockCorrection where
+  getBits _n = do
+    _glonassOrbitClockCorrection_sat                <- B.getWord8 5
+    _glonassOrbitClockCorrection_iode               <- B.getWord8 8
+    _glonassOrbitClockCorrection_deltaRadial        <- getInt32be 22
+    _glonassOrbitClockCorrection_deltaAlongTrack    <- getInt32be 20
+    _glonassOrbitClockCorrection_deltaCrossTrack    <- getInt32be 20
+    _glonassOrbitClockCorrection_dotDeltaRadial     <- getInt32be 21
+    _glonassOrbitClockCorrection_dotDeltaAlongTrack <- getInt32be 19
+    _glonassOrbitClockCorrection_dotDeltaCrossTrack <- getInt32be 19
+    _glonassOrbitClockCorrection_deltaClockC0       <- getInt32be 22
+    _glonassOrbitClockCorrection_deltaClockC1       <- getInt32be 21
+    _glonassOrbitClockCorrection_deltaClockC2       <- getInt32be 27
+    pure GlonassOrbitClockCorrection {..}
+
+  putBits _n GlonassOrbitClockCorrection {..} = do
+    B.putWord8 5  _glonassOrbitClockCorrection_sat
+    B.putWord8 8  _glonassOrbitClockCorrection_iode
+    putInt32be 22 _glonassOrbitClockCorrection_deltaRadial
+    putInt32be 20 _glonassOrbitClockCorrection_deltaAlongTrack
+    putInt32be 20 _glonassOrbitClockCorrection_deltaCrossTrack
+    putInt32be 21 _glonassOrbitClockCorrection_dotDeltaRadial
+    putInt32be 19 _glonassOrbitClockCorrection_dotDeltaAlongTrack
+    putInt32be 19 _glonassOrbitClockCorrection_dotDeltaCrossTrack
+    putInt32be 22 _glonassOrbitClockCorrection_deltaClockC0
+    putInt32be 21 _glonassOrbitClockCorrection_deltaClockC1
+    putInt32be 27 _glonassOrbitClockCorrection_deltaClockC2
+
+-- | GpsCodeBiasCorrectionHeader.
+--
+-- GPS code bias correction header.
+data GpsCodeBiasCorrectionHeader = GpsCodeBiasCorrectionHeader
+  { _gpsCodeBiasCorrectionHeader_num            :: Word16
+    -- ^ Message number.
+  , _gpsCodeBiasCorrectionHeader_epochs         :: Word32
+    -- ^ GPS epoch time.
+  , _gpsCodeBiasCorrectionHeader_updateInterval :: Word8
+    -- ^ SSR update interval.
+  , _gpsCodeBiasCorrectionHeader_multiple       :: Bool
+    -- ^ Multiple message indicator.
+  , _gpsCodeBiasCorrectionHeader_iod            :: Word8
+    -- ^ IOD SSR.
+  , _gpsCodeBiasCorrectionHeader_provider       :: Word16
+    -- ^ SSR provider id.
+  , _gpsCodeBiasCorrectionHeader_solution       :: Word8
+    -- ^ SSR solution id.
+  , _gpsCodeBiasCorrectionHeader_n              :: Word8
+    -- ^ Number of satellites.
+  } deriving ( Show, Read, Eq )
+
+$(makeLenses ''GpsCodeBiasCorrectionHeader)
+$(deriveJSON defaultOptions {fieldLabelModifier = fromMaybe "_gpsCodeBiasCorrectionHeader_" . stripPrefix "_gpsCodeBiasCorrectionHeader_"} ''GpsCodeBiasCorrectionHeader)
+
+instance BinaryBit GpsCodeBiasCorrectionHeader where
+  getBits _n = do
+    _gpsCodeBiasCorrectionHeader_num            <- B.getWord16be 12
+    _gpsCodeBiasCorrectionHeader_epochs         <- B.getWord32be 20
+    _gpsCodeBiasCorrectionHeader_updateInterval <- B.getWord8 4
+    _gpsCodeBiasCorrectionHeader_multiple       <- B.getBool
+    _gpsCodeBiasCorrectionHeader_iod            <- B.getWord8 4
+    _gpsCodeBiasCorrectionHeader_provider       <- B.getWord16be 16
+    _gpsCodeBiasCorrectionHeader_solution       <- B.getWord8 4
+    _gpsCodeBiasCorrectionHeader_n              <- B.getWord8 6
+    pure GpsCodeBiasCorrectionHeader {..}
+
+  putBits _n GpsCodeBiasCorrectionHeader {..} = do
+    B.putWord16be 12 _gpsCodeBiasCorrectionHeader_num
+    B.putWord32be 20 _gpsCodeBiasCorrectionHeader_epochs
+    B.putWord8 4     _gpsCodeBiasCorrectionHeader_updateInterval
+    B.putBool        _gpsCodeBiasCorrectionHeader_multiple
+    B.putWord8 4     _gpsCodeBiasCorrectionHeader_iod
+    B.putWord16be 16 _gpsCodeBiasCorrectionHeader_provider
+    B.putWord8 4     _gpsCodeBiasCorrectionHeader_solution
+    B.putWord8 6     _gpsCodeBiasCorrectionHeader_n
+
+-- | GpsCodeBias.
+--
+-- GPS code bias.
+data GpsCodeBias = GpsCodeBias
+  { _gpsCodeBias_signal   :: Word8
+    -- ^ GPS signal.
+  , _gpsCodeBias_codeBias :: Int16
+    -- ^ GPS code bias.
+  } deriving ( Show, Read, Eq )
+
+$(makeLenses ''GpsCodeBias)
+$(deriveJSON defaultOptions {fieldLabelModifier = fromMaybe "_gpsCodeBias_" . stripPrefix "_gpsCodeBias_"} ''GpsCodeBias)
+
+instance BinaryBit GpsCodeBias where
+  getBits _n = do
+    _gpsCodeBias_signal   <- B.getWord8 5
+    _gpsCodeBias_codeBias <- getInt16be 14
+    pure GpsCodeBias {..}
+
+  putBits _n GpsCodeBias {..} = do
+    B.putWord8 5  _gpsCodeBias_signal
+    putInt16be 14 _gpsCodeBias_codeBias
+
+-- | GpsCodeBiasCorrectionMessage.
+--
+-- GPS code bias correction message.
+data GpsCodeBiasCorrection = GpsCodeBiasCorrection
+  { _gpsCodeBiasCorrection_sat        :: Word8
+    -- ^ GPS satellite id.
+  , _gpsCodeBiasCorrection_n          :: Word8
+    -- ^ Number of biases.
+  , _gpsCodeBiasCorrection_codeBiases :: [GpsCodeBias]
+    -- ^ GPS code biases.
+  } deriving ( Show, Read, Eq )
+
+$(makeLenses ''GpsCodeBiasCorrection)
+$(deriveJSON defaultOptions {fieldLabelModifier = fromMaybe "_gpsCodeBiasCorrection_" . stripPrefix "_gpsCodeBiasCorrection_"} ''GpsCodeBiasCorrection)
+
+instance BinaryBit GpsCodeBiasCorrection where
+  getBits _n = do
+    _gpsCodeBiasCorrection_sat        <- B.getWord8 6
+    _gpsCodeBiasCorrection_n          <- B.getWord8 5
+    _gpsCodeBiasCorrection_codeBiases <- replicateM (fromIntegral _gpsCodeBiasCorrection_n) $ getBits 0
+    pure GpsCodeBiasCorrection {..}
+
+  putBits _n GpsCodeBiasCorrection {..} = do
+    B.putWord8 6 _gpsCodeBiasCorrection_sat
+    B.putWord8 5 _gpsCodeBiasCorrection_n
+    forM_ _gpsCodeBiasCorrection_codeBiases $ putBits 0
+
+-- | GlonassCodeBiasCorrectionHeader.
+--
+-- GLONASS code bias correction header.
+data GlonassCodeBiasCorrectionHeader = GlonassCodeBiasCorrectionHeader
+  { _glonassCodeBiasCorrectionHeader_num            :: Word16
+    -- ^ Message number.
+  , _glonassCodeBiasCorrectionHeader_epochs         :: Word32
+    -- ^ GLONASS epoch time.
+  , _glonassCodeBiasCorrectionHeader_updateInterval :: Word8
+    -- ^ SSR update interval.
+  , _glonassCodeBiasCorrectionHeader_multiple       :: Bool
+    -- ^ Multiple message indicator.
+  , _glonassCodeBiasCorrectionHeader_iod            :: Word8
+    -- ^ IOD SSR.
+  , _glonassCodeBiasCorrectionHeader_provider       :: Word16
+    -- ^ SSR provider id.
+  , _glonassCodeBiasCorrectionHeader_solution       :: Word8
+    -- ^ SSR solution id.
+  , _glonassCodeBiasCorrectionHeader_n              :: Word8
+    -- ^ Number of satellites.
+  } deriving ( Show, Read, Eq )
+
+$(makeLenses ''GlonassCodeBiasCorrectionHeader)
+$(deriveJSON defaultOptions {fieldLabelModifier = fromMaybe "_glonassCodeBiasCorrectionHeader_" . stripPrefix "_glonassCodeBiasCorrectionHeader_"} ''GlonassCodeBiasCorrectionHeader)
+
+instance BinaryBit GlonassCodeBiasCorrectionHeader where
+  getBits _n = do
+    _glonassCodeBiasCorrectionHeader_num            <- B.getWord16be 12
+    _glonassCodeBiasCorrectionHeader_epochs         <- B.getWord32be 17
+    _glonassCodeBiasCorrectionHeader_updateInterval <- B.getWord8 4
+    _glonassCodeBiasCorrectionHeader_multiple       <- B.getBool
+    _glonassCodeBiasCorrectionHeader_iod            <- B.getWord8 4
+    _glonassCodeBiasCorrectionHeader_provider       <- B.getWord16be 16
+    _glonassCodeBiasCorrectionHeader_solution       <- B.getWord8 4
+    _glonassCodeBiasCorrectionHeader_n              <- B.getWord8 6
+    pure GlonassCodeBiasCorrectionHeader {..}
+
+  putBits _n GlonassCodeBiasCorrectionHeader {..} = do
+    B.putWord16be 12 _glonassCodeBiasCorrectionHeader_num
+    B.putWord32be 17 _glonassCodeBiasCorrectionHeader_epochs
+    B.putWord8 4     _glonassCodeBiasCorrectionHeader_updateInterval
+    B.putBool        _glonassCodeBiasCorrectionHeader_multiple
+    B.putWord8 4     _glonassCodeBiasCorrectionHeader_iod
+    B.putWord16be 16 _glonassCodeBiasCorrectionHeader_provider
+    B.putWord8 4     _glonassCodeBiasCorrectionHeader_solution
+    B.putWord8 6     _glonassCodeBiasCorrectionHeader_n
+
+-- | GlonassCodeBias.
+--
+-- GLONASS code bias.
+data GlonassCodeBias = GlonassCodeBias
+  { _glonassCodeBias_signal   :: Word8
+    -- ^ GLONASS signal.
+  , _glonassCodeBias_codeBias :: Int16
+    -- ^ GLONASS code bias.
+  } deriving ( Show, Read, Eq )
+
+$(makeLenses ''GlonassCodeBias)
+$(deriveJSON defaultOptions {fieldLabelModifier = fromMaybe "_glonassCodeBias_" . stripPrefix "_glonassCodeBias_"} ''GlonassCodeBias)
+
+instance BinaryBit GlonassCodeBias where
+  getBits _n = do
+    _glonassCodeBias_signal   <- B.getWord8 5
+    _glonassCodeBias_codeBias <- getInt16be 14
+    pure GlonassCodeBias {..}
+
+  putBits _n GlonassCodeBias {..} = do
+    B.putWord8 5  _glonassCodeBias_signal
+    putInt16be 14 _glonassCodeBias_codeBias
+
+-- | GlonassCodeBiasCorrectionMessage.
+--
+-- GLONASS code bias correction message.
+data GlonassCodeBiasCorrection = GlonassCodeBiasCorrection
+  { _glonassCodeBiasCorrection_sat        :: Word8
+    -- ^ GLONASS satellite id.
+  , _glonassCodeBiasCorrection_n          :: Word8
+    -- ^ Number of biases.
+  , _glonassCodeBiasCorrection_codeBiases :: [GlonassCodeBias]
+    -- ^ GLONASS code biases.
+  } deriving ( Show, Read, Eq )
+
+$(makeLenses ''GlonassCodeBiasCorrection)
+$(deriveJSON defaultOptions {fieldLabelModifier = fromMaybe "_glonassCodeBiasCorrection_" . stripPrefix "_glonassCodeBiasCorrection_"} ''GlonassCodeBiasCorrection)
+
+instance BinaryBit GlonassCodeBiasCorrection where
+  getBits _n = do
+    _glonassCodeBiasCorrection_sat        <- B.getWord8 5
+    _glonassCodeBiasCorrection_n          <- B.getWord8 5
+    _glonassCodeBiasCorrection_codeBiases <- replicateM (fromIntegral _glonassCodeBiasCorrection_n) $ getBits 0
+    pure GlonassCodeBiasCorrection {..}
+
+  putBits _n GlonassCodeBiasCorrection {..} = do
+    B.putWord8 5 _glonassCodeBiasCorrection_sat
+    B.putWord8 5 _glonassCodeBiasCorrection_n
+    forM_ _glonassCodeBiasCorrection_codeBiases $ putBits 0
+
+-- | GpsPhaseBiasCorrectionHeader.
+--
+-- GPS phase bias correction header.
+data GpsPhaseBiasCorrectionHeader = GpsPhaseBiasCorrectionHeader
+  { _gpsPhaseBiasCorrectionHeader_num            :: Word16
+    -- ^ Message number.
+  , _gpsPhaseBiasCorrectionHeader_epochs         :: Word32
+    -- ^ GPS epoch time.
+  , _gpsPhaseBiasCorrectionHeader_updateInterval :: Word8
+    -- ^ SSR update interval.
+  , _gpsPhaseBiasCorrectionHeader_multiple       :: Bool
+    -- ^ Multiple message indicator.
+  , _gpsPhaseBiasCorrectionHeader_iod            :: Word8
+    -- ^ IOD SSR.
+  , _gpsPhaseBiasCorrectionHeader_provider       :: Word16
+    -- ^ SSR provider id.
+  , _gpsPhaseBiasCorrectionHeader_solution       :: Word8
+    -- ^ SSR solution id.
+  , _gpsPhaseBiasCorrectionHeader_dispersive     :: Bool
+    -- ^ Dispersive Bias Consistency Indicator.
+  , _gpsPhaseBiasCorrectionHeader_mw             :: Bool
+    -- ^ MW Consistency Indicator.
+  , _gpsPhaseBiasCorrectionHeader_n              :: Word8
+    -- ^ Number of satellites.
+  } deriving ( Show, Read, Eq )
+
+$(makeLenses ''GpsPhaseBiasCorrectionHeader)
+$(deriveJSON defaultOptions {fieldLabelModifier = fromMaybe "_gpsPhaseBiasCorrectionHeader_" . stripPrefix "_gpsPhaseBiasCorrectionHeader_"} ''GpsPhaseBiasCorrectionHeader)
+
+instance BinaryBit GpsPhaseBiasCorrectionHeader where
+  getBits _n = do
+    _gpsPhaseBiasCorrectionHeader_num            <- B.getWord16be 12
+    _gpsPhaseBiasCorrectionHeader_epochs         <- B.getWord32be 20
+    _gpsPhaseBiasCorrectionHeader_updateInterval <- B.getWord8 4
+    _gpsPhaseBiasCorrectionHeader_multiple       <- B.getBool
+    _gpsPhaseBiasCorrectionHeader_iod            <- B.getWord8 4
+    _gpsPhaseBiasCorrectionHeader_provider       <- B.getWord16be 16
+    _gpsPhaseBiasCorrectionHeader_solution       <- B.getWord8 4
+    _gpsPhaseBiasCorrectionHeader_dispersive     <- B.getBool
+    _gpsPhaseBiasCorrectionHeader_mw             <- B.getBool
+    _gpsPhaseBiasCorrectionHeader_n              <- B.getWord8 6
+    pure GpsPhaseBiasCorrectionHeader {..}
+
+  putBits _n GpsPhaseBiasCorrectionHeader {..} = do
+    B.putWord16be 12 _gpsPhaseBiasCorrectionHeader_num
+    B.putWord32be 20 _gpsPhaseBiasCorrectionHeader_epochs
+    B.putWord8 4     _gpsPhaseBiasCorrectionHeader_updateInterval
+    B.putBool        _gpsPhaseBiasCorrectionHeader_multiple
+    B.putWord8 4     _gpsPhaseBiasCorrectionHeader_iod
+    B.putWord16be 16 _gpsPhaseBiasCorrectionHeader_provider
+    B.putWord8 4     _gpsPhaseBiasCorrectionHeader_solution
+    B.putBool        _gpsPhaseBiasCorrectionHeader_dispersive
+    B.putBool        _gpsPhaseBiasCorrectionHeader_mw
+    B.putWord8 6     _gpsPhaseBiasCorrectionHeader_n
+
+-- | GpsPhaseBias.
+--
+-- GPS phase bias.
+data GpsPhaseBias = GpsPhaseBias
+  { _gpsPhaseBias_signal               :: Word8
+    -- ^ GPS signal.
+  , _gpsPhaseBias_integer              :: Bool
+    -- ^ Signal Integer Indicator.
+  , _gpsPhaseBias_wideLaneInteger      :: Word8
+    -- ^ Signals wide-lane integer indicator.
+  , _gpsPhaseBias_discontinuityCounter :: Word8
+    -- ^ Signal Discontinuity Counter.
+  , _gpsPhaseBias_phaseBias            :: Int32
+    -- ^ GPS phase bias.
+  } deriving ( Show, Read, Eq )
+
+$(makeLenses ''GpsPhaseBias)
+$(deriveJSON defaultOptions {fieldLabelModifier = fromMaybe "_gpsPhaseBias_" . stripPrefix "_gpsPhaseBias_"} ''GpsPhaseBias)
+
+instance BinaryBit GpsPhaseBias where
+  getBits _n = do
+    _gpsPhaseBias_signal               <- B.getWord8 5
+    _gpsPhaseBias_integer              <- B.getBool
+    _gpsPhaseBias_wideLaneInteger      <- B.getWord8 2
+    _gpsPhaseBias_discontinuityCounter <- B.getWord8 4
+    _gpsPhaseBias_phaseBias            <- getInt32be 20
+    pure GpsPhaseBias {..}
+
+  putBits _n GpsPhaseBias {..} = do
+    B.putWord8 5  _gpsPhaseBias_signal
+    B.putBool     _gpsPhaseBias_integer
+    B.putWord8 2  _gpsPhaseBias_wideLaneInteger
+    B.putWord8 4  _gpsPhaseBias_discontinuityCounter
+    putInt32be 20 _gpsPhaseBias_phaseBias
+
+-- | GpsPhaseBiasCorrectionMessage.
+--
+-- GPS phase bias correction message.
+data GpsPhaseBiasCorrection = GpsPhaseBiasCorrection
+  { _gpsPhaseBiasCorrection_sat        :: Word8
+    -- ^ GPS satellite id.
+  , _gpsPhaseBiasCorrection_n          :: Word8
+    -- ^ Number of biases.
+  , _gpsPhaseBiasCorrection_yawAngle   :: Word16
+    -- ^ Yaw angle.
+  , _gpsPhaseBiasCorrection_yawRate    :: Int8
+    -- ^ Yaw rate.
+  , _gpsPhaseBiasCorrection_phaseBiases :: [GpsPhaseBias]
+    -- ^ GPS phase biases.
+  } deriving ( Show, Read, Eq )
+
+$(makeLenses ''GpsPhaseBiasCorrection)
+$(deriveJSON defaultOptions {fieldLabelModifier = fromMaybe "_gpsPhaseBiasCorrection_" . stripPrefix "_gpsPhaseBiasCorrection_"} ''GpsPhaseBiasCorrection)
+
+instance BinaryBit GpsPhaseBiasCorrection where
+  getBits _n = do
+    _gpsPhaseBiasCorrection_sat         <- B.getWord8 6
+    _gpsPhaseBiasCorrection_n           <- B.getWord8 5
+    _gpsPhaseBiasCorrection_yawAngle    <- B.getWord16be 9
+    _gpsPhaseBiasCorrection_yawRate     <- getInt8 8
+    _gpsPhaseBiasCorrection_phaseBiases <- replicateM (fromIntegral _gpsPhaseBiasCorrection_n) $ getBits 0
+    pure GpsPhaseBiasCorrection {..}
+
+  putBits _n GpsPhaseBiasCorrection {..} = do
+    B.putWord8 6    _gpsPhaseBiasCorrection_sat
+    B.putWord8 5    _gpsPhaseBiasCorrection_n
+    B.putWord16be 9 _gpsPhaseBiasCorrection_yawAngle
+    putInt8 8       _gpsPhaseBiasCorrection_yawRate
+    forM_ _gpsPhaseBiasCorrection_phaseBiases $ putBits 0
+
+-- | GlonassPhaseBiasCorrectionHeader.
+--
+-- GLONASS phase bias correction header.
+data GlonassPhaseBiasCorrectionHeader = GlonassPhaseBiasCorrectionHeader
+  { _glonassPhaseBiasCorrectionHeader_num            :: Word16
+    -- ^ Message number.
+  , _glonassPhaseBiasCorrectionHeader_epochs         :: Word32
+    -- ^ GLONASS epoch time.
+  , _glonassPhaseBiasCorrectionHeader_updateInterval :: Word8
+    -- ^ SSR update interval.
+  , _glonassPhaseBiasCorrectionHeader_multiple       :: Bool
+    -- ^ Multiple message indicator.
+  , _glonassPhaseBiasCorrectionHeader_iod            :: Word8
+    -- ^ IOD SSR.
+  , _glonassPhaseBiasCorrectionHeader_provider       :: Word16
+    -- ^ SSR provider id.
+  , _glonassPhaseBiasCorrectionHeader_solution       :: Word8
+    -- ^ SSR solution id.
+  , _glonassPhaseBiasCorrectionHeader_dispersive     :: Bool
+    -- ^ Dispersive Bias Consistency Indicator.
+  , _glonassPhaseBiasCorrectionHeader_mw             :: Bool
+    -- ^ MW Consistency Indicator.
+  , _glonassPhaseBiasCorrectionHeader_n              :: Word8
+    -- ^ Number of satellites.
+  } deriving ( Show, Read, Eq )
+
+$(makeLenses ''GlonassPhaseBiasCorrectionHeader)
+$(deriveJSON defaultOptions {fieldLabelModifier = fromMaybe "_glonassPhaseBiasCorrectionHeader_" . stripPrefix "_glonassPhaseBiasCorrectionHeader_"} ''GlonassPhaseBiasCorrectionHeader)
+
+instance BinaryBit GlonassPhaseBiasCorrectionHeader where
+  getBits _n = do
+    _glonassPhaseBiasCorrectionHeader_num            <- B.getWord16be 12
+    _glonassPhaseBiasCorrectionHeader_epochs         <- B.getWord32be 17
+    _glonassPhaseBiasCorrectionHeader_updateInterval <- B.getWord8 4
+    _glonassPhaseBiasCorrectionHeader_multiple       <- B.getBool
+    _glonassPhaseBiasCorrectionHeader_iod            <- B.getWord8 4
+    _glonassPhaseBiasCorrectionHeader_provider       <- B.getWord16be 16
+    _glonassPhaseBiasCorrectionHeader_solution       <- B.getWord8 4
+    _glonassPhaseBiasCorrectionHeader_dispersive     <- B.getBool
+    _glonassPhaseBiasCorrectionHeader_mw             <- B.getBool
+    _glonassPhaseBiasCorrectionHeader_n              <- B.getWord8 6
+    pure GlonassPhaseBiasCorrectionHeader {..}
+
+  putBits _n GlonassPhaseBiasCorrectionHeader {..} = do
+    B.putWord16be 12 _glonassPhaseBiasCorrectionHeader_num
+    B.putWord32be 17 _glonassPhaseBiasCorrectionHeader_epochs
+    B.putWord8 4     _glonassPhaseBiasCorrectionHeader_updateInterval
+    B.putBool        _glonassPhaseBiasCorrectionHeader_multiple
+    B.putWord8 4     _glonassPhaseBiasCorrectionHeader_iod
+    B.putWord16be 16 _glonassPhaseBiasCorrectionHeader_provider
+    B.putWord8 4     _glonassPhaseBiasCorrectionHeader_solution
+    B.putBool        _glonassPhaseBiasCorrectionHeader_dispersive
+    B.putBool        _glonassPhaseBiasCorrectionHeader_mw
+    B.putWord8 6     _glonassPhaseBiasCorrectionHeader_n
+
+-- | GlonassPhaseBias.
+--
+-- GLONASS phase bias.
+data GlonassPhaseBias = GlonassPhaseBias
+  { _glonassPhaseBias_signal               :: Word8
+    -- ^ GLONASS signal.
+  , _glonassPhaseBias_integer              :: Bool
+    -- ^ Signal Integer Indicator.
+  , _glonassPhaseBias_wideLaneInteger      :: Word8
+    -- ^ Signals wide-lane integer indicator.
+  , _glonassPhaseBias_discontinuityCounter :: Word8
+    -- ^ Signal Discontinuity Counter.
+  , _glonassPhaseBias_phaseBias            :: Int32
+    -- ^ GLONASS phase bias.
+  } deriving ( Show, Read, Eq )
+
+$(makeLenses ''GlonassPhaseBias)
+$(deriveJSON defaultOptions {fieldLabelModifier = fromMaybe "_glonassPhaseBias_" . stripPrefix "_glonassPhaseBias_"} ''GlonassPhaseBias)
+
+instance BinaryBit GlonassPhaseBias where
+  getBits _n = do
+    _glonassPhaseBias_signal               <- B.getWord8 5
+    _glonassPhaseBias_integer              <- B.getBool
+    _glonassPhaseBias_wideLaneInteger      <- B.getWord8 2
+    _glonassPhaseBias_discontinuityCounter <- B.getWord8 4
+    _glonassPhaseBias_phaseBias            <- getInt32be 20
+    pure GlonassPhaseBias {..}
+
+  putBits _n GlonassPhaseBias {..} = do
+    B.putWord8 5  _glonassPhaseBias_signal
+    B.putBool     _glonassPhaseBias_integer
+    B.putWord8 2  _glonassPhaseBias_wideLaneInteger
+    B.putWord8 4  _glonassPhaseBias_discontinuityCounter
+    putInt32be 20 _glonassPhaseBias_phaseBias
+
+-- | GlonassPhaseBiasCorrectionMessage.
+--
+-- GLONASS phase bias correction message.
+data GlonassPhaseBiasCorrection = GlonassPhaseBiasCorrection
+  { _glonassPhaseBiasCorrection_sat        :: Word8
+    -- ^ GLONASS satellite id.
+  , _glonassPhaseBiasCorrection_n          :: Word8
+    -- ^ Number of biases.
+  , _glonassPhaseBiasCorrection_yawAngle   :: Word16
+    -- ^ Yaw angle.
+  , _glonassPhaseBiasCorrection_yawRate    :: Int8
+    -- ^ Yaw rate.
+  , _glonassPhaseBiasCorrection_phaseBiases :: [GlonassPhaseBias]
+    -- ^ GLONASS phase biases.
+  } deriving ( Show, Read, Eq )
+
+$(makeLenses ''GlonassPhaseBiasCorrection)
+$(deriveJSON defaultOptions {fieldLabelModifier = fromMaybe "_glonassPhaseBiasCorrection_" . stripPrefix "_glonassPhaseBiasCorrection_"} ''GlonassPhaseBiasCorrection)
+
+instance BinaryBit GlonassPhaseBiasCorrection where
+  getBits _n = do
+    _glonassPhaseBiasCorrection_sat         <- B.getWord8 5
+    _glonassPhaseBiasCorrection_n           <- B.getWord8 5
+    _glonassPhaseBiasCorrection_yawAngle    <- B.getWord16be 9
+    _glonassPhaseBiasCorrection_yawRate     <- getInt8 8
+    _glonassPhaseBiasCorrection_phaseBiases <- replicateM (fromIntegral _glonassPhaseBiasCorrection_n) $ getBits 0
+    pure GlonassPhaseBiasCorrection {..}
+
+  putBits _n GlonassPhaseBiasCorrection {..} = do
+    B.putWord8 5    _glonassPhaseBiasCorrection_sat
+    B.putWord8 5    _glonassPhaseBiasCorrection_n
+    B.putWord16be 9 _glonassPhaseBiasCorrection_yawAngle
+    putInt8 8       _glonassPhaseBiasCorrection_yawRate
+    forM_ _glonassPhaseBiasCorrection_phaseBiases $ putBits 0
+
 msg1057 :: Word16
 msg1057 = 1057
 
@@ -491,3 +1158,171 @@
     forM_ _msg1064_corrections $ putBits 0
 
 $(deriveRTCM3 ''Msg1064)
+
+msg1060 :: Word16
+msg1060 = 1060
+
+-- | Msg 1060.
+--
+-- RTCMv3 message 1060.
+data Msg1060 = Msg1060
+  { _msg1060_header      :: GpsOrbitClockCorrectionHeader
+    -- ^ GPS orbit correction header.
+  , _msg1060_corrections :: [GpsOrbitClockCorrection]
+    -- ^ GPS orbit corrections.
+  } deriving ( Show, Read, Eq )
+
+$(makeLenses ''Msg1060)
+$(deriveJSON defaultOptions {fieldLabelModifier = fromMaybe "_msg1060_" . stripPrefix "_msg1060_"} ''Msg1060)
+
+instance Binary Msg1060 where
+  get = B.runBitGet $ do
+    _msg1060_header      <- getBits 0
+    _msg1060_corrections <- replicateM (fromIntegral $ _msg1060_header ^. gpsOrbitClockCorrectionHeader_n) $ getBits 0
+    pure Msg1060 {..}
+
+  put Msg1060 {..} = B.runBitPut $ do
+    putBits 0 _msg1060_header
+    forM_ _msg1060_corrections $ putBits 0
+
+$(deriveRTCM3 ''Msg1060)
+
+msg1066 :: Word16
+msg1066 = 1066
+
+-- | Msg 1066.
+--
+-- RTCMv3 message 1066.
+data Msg1066 = Msg1066
+  { _msg1066_header      :: GlonassOrbitClockCorrectionHeader
+    -- ^ GLONASS orbit correction header.
+  , _msg1066_corrections :: [GlonassOrbitClockCorrection]
+    -- ^ GLONASS orbit corrections.
+  } deriving ( Show, Read, Eq )
+
+$(makeLenses ''Msg1066)
+$(deriveJSON defaultOptions {fieldLabelModifier = fromMaybe "_msg1066_" . stripPrefix "_msg1066_"} ''Msg1066)
+
+instance Binary Msg1066 where
+  get = B.runBitGet $ do
+    _msg1066_header      <- getBits 0
+    _msg1066_corrections <- replicateM (fromIntegral $ _msg1066_header ^. glonassOrbitClockCorrectionHeader_n) $ getBits 0
+    pure Msg1066 {..}
+
+  put Msg1066 {..} = B.runBitPut $ do
+    putBits 0 _msg1066_header
+    forM_ _msg1066_corrections $ putBits 0
+
+$(deriveRTCM3 ''Msg1066)
+
+msg1059 :: Word16
+msg1059 = 1059
+
+-- | Msg 1059.
+--
+-- RTCMv3 message 1059.
+data Msg1059 = Msg1059
+  { _msg1059_header      :: GpsCodeBiasCorrectionHeader
+    -- ^ GPS code bias correction header.
+  , _msg1059_corrections :: [GpsCodeBiasCorrection]
+    -- ^ GPS code bias corrections.
+  } deriving ( Show, Read, Eq )
+
+$(makeLenses ''Msg1059)
+$(deriveJSON defaultOptions {fieldLabelModifier = fromMaybe "_msg1059_" . stripPrefix "_msg1059_"} ''Msg1059)
+
+instance Binary Msg1059 where
+  get = B.runBitGet $ do
+    _msg1059_header      <- getBits 0
+    _msg1059_corrections <- replicateM (fromIntegral $ _msg1059_header ^. gpsCodeBiasCorrectionHeader_n) $ getBits 0
+    pure Msg1059 {..}
+
+  put Msg1059 {..} = B.runBitPut $ do
+    putBits 0 _msg1059_header
+    forM_ _msg1059_corrections $ putBits 0
+
+$(deriveRTCM3 ''Msg1059)
+
+msg1065 :: Word16
+msg1065 = 1065
+
+-- | Msg 1065.
+--
+-- RTCMv3 message 1065.
+data Msg1065 = Msg1065
+  { _msg1065_header      :: GlonassCodeBiasCorrectionHeader
+    -- ^ GLONASS code bias correction header.
+  , _msg1065_corrections :: [GlonassCodeBiasCorrection]
+    -- ^ GLONASS code bias corrections.
+  } deriving ( Show, Read, Eq )
+
+$(makeLenses ''Msg1065)
+$(deriveJSON defaultOptions {fieldLabelModifier = fromMaybe "_msg1065_" . stripPrefix "_msg1065_"} ''Msg1065)
+
+instance Binary Msg1065 where
+  get = B.runBitGet $ do
+    _msg1065_header      <- getBits 0
+    _msg1065_corrections <- replicateM (fromIntegral $ _msg1065_header ^. glonassCodeBiasCorrectionHeader_n) $ getBits 0
+    pure Msg1065 {..}
+
+  put Msg1065 {..} = B.runBitPut $ do
+    putBits 0 _msg1065_header
+    forM_ _msg1065_corrections $ putBits 0
+
+$(deriveRTCM3 ''Msg1065)
+
+msg1265 :: Word16
+msg1265 = 1265
+
+-- | Msg 1265.
+--
+-- RTCMv3 message 1265.
+data Msg1265 = Msg1265
+  { _msg1265_header      :: GpsPhaseBiasCorrectionHeader
+    -- ^ GPS phase bias correction header.
+  , _msg1265_corrections :: [GpsPhaseBiasCorrection]
+    -- ^ GPS phase bias corrections.
+  } deriving ( Show, Read, Eq )
+
+$(makeLenses ''Msg1265)
+$(deriveJSON defaultOptions {fieldLabelModifier = fromMaybe "_msg1265_" . stripPrefix "_msg1265_"} ''Msg1265)
+
+instance Binary Msg1265 where
+  get = B.runBitGet $ do
+    _msg1265_header      <- getBits 0
+    _msg1265_corrections <- replicateM (fromIntegral $ _msg1265_header ^. gpsPhaseBiasCorrectionHeader_n) $ getBits 0
+    pure Msg1265 {..}
+
+  put Msg1265 {..} = B.runBitPut $ do
+    putBits 0 _msg1265_header
+    forM_ _msg1265_corrections $ putBits 0
+
+$(deriveRTCM3 ''Msg1265)
+
+msg1266 :: Word16
+msg1266 = 1266
+
+-- | Msg 1266.
+--
+-- RTCMv3 message 1266.
+data Msg1266 = Msg1266
+  { _msg1266_header      :: GlonassPhaseBiasCorrectionHeader
+    -- ^ GLONASS phase bias correction header.
+  , _msg1266_corrections :: [GlonassPhaseBiasCorrection]
+    -- ^ GLONASS phase bias corrections.
+  } deriving ( Show, Read, Eq )
+
+$(makeLenses ''Msg1266)
+$(deriveJSON defaultOptions {fieldLabelModifier = fromMaybe "_msg1266_" . stripPrefix "_msg1266_"} ''Msg1266)
+
+instance Binary Msg1266 where
+  get = B.runBitGet $ do
+    _msg1266_header      <- getBits 0
+    _msg1266_corrections <- replicateM (fromIntegral $ _msg1266_header ^. glonassPhaseBiasCorrectionHeader_n) $ getBits 0
+    pure Msg1266 {..}
+
+  put Msg1266 {..} = B.runBitPut $ do
+    putBits 0 _msg1266_header
+    forM_ _msg1266_corrections $ putBits 0
+
+$(deriveRTCM3 ''Msg1266)
diff --git a/test/Test/Data/RTCM3/SSR.hs b/test/Test/Data/RTCM3/SSR.hs
--- a/test/Test/Data/RTCM3/SSR.hs
+++ b/test/Test/Data/RTCM3/SSR.hs
@@ -112,6 +112,176 @@
     _glonassClockCorrection_deltaClockC2 <- arbitraryInt 27
     pure GlonassClockCorrection {..}
 
+instance Arbitrary GpsOrbitClockCorrectionHeader where
+  arbitrary = do
+    _gpsOrbitClockCorrectionHeader_num            <- arbitraryWord 12
+    _gpsOrbitClockCorrectionHeader_epochs         <- arbitraryWord 20
+    _gpsOrbitClockCorrectionHeader_updateInterval <- arbitraryWord 4
+    _gpsOrbitClockCorrectionHeader_multiple       <- arbitrary
+    _gpsOrbitClockCorrectionHeader_datum          <- arbitrary
+    _gpsOrbitClockCorrectionHeader_iod            <- arbitraryWord 4
+    _gpsOrbitClockCorrectionHeader_provider       <- arbitraryWord 16
+    _gpsOrbitClockCorrectionHeader_solution       <- arbitraryWord 4
+    _gpsOrbitClockCorrectionHeader_n              <- arbitraryWord 6
+    pure GpsOrbitClockCorrectionHeader {..}
+
+instance Arbitrary GpsOrbitClockCorrection where
+  arbitrary = do
+    _gpsOrbitClockCorrection_sat                <- arbitraryWord 6
+    _gpsOrbitClockCorrection_iode               <- arbitraryWord 8
+    _gpsOrbitClockCorrection_deltaRadial        <- arbitraryInt 22
+    _gpsOrbitClockCorrection_deltaAlongTrack    <- arbitraryInt 20
+    _gpsOrbitClockCorrection_deltaCrossTrack    <- arbitraryInt 20
+    _gpsOrbitClockCorrection_dotDeltaRadial     <- arbitraryInt 21
+    _gpsOrbitClockCorrection_dotDeltaAlongTrack <- arbitraryInt 19
+    _gpsOrbitClockCorrection_dotDeltaCrossTrack <- arbitraryInt 19
+    _gpsOrbitClockCorrection_deltaClockC0       <- arbitraryInt 22
+    _gpsOrbitClockCorrection_deltaClockC1       <- arbitraryInt 21
+    _gpsOrbitClockCorrection_deltaClockC2       <- arbitraryInt 27
+    pure GpsOrbitClockCorrection {..}
+
+instance Arbitrary GlonassOrbitClockCorrectionHeader where
+  arbitrary = do
+    _glonassOrbitClockCorrectionHeader_num            <- arbitraryWord 12
+    _glonassOrbitClockCorrectionHeader_epochs         <- arbitraryWord 17
+    _glonassOrbitClockCorrectionHeader_updateInterval <- arbitraryWord 4
+    _glonassOrbitClockCorrectionHeader_multiple       <- arbitrary
+    _glonassOrbitClockCorrectionHeader_datum          <- arbitrary
+    _glonassOrbitClockCorrectionHeader_iod            <- arbitraryWord 4
+    _glonassOrbitClockCorrectionHeader_provider       <- arbitraryWord 16
+    _glonassOrbitClockCorrectionHeader_solution       <- arbitraryWord 4
+    _glonassOrbitClockCorrectionHeader_n              <- arbitraryWord 6
+    pure GlonassOrbitClockCorrectionHeader {..}
+
+instance Arbitrary GlonassOrbitClockCorrection where
+  arbitrary = do
+    _glonassOrbitClockCorrection_sat                <- arbitraryWord 5
+    _glonassOrbitClockCorrection_iode               <- arbitraryWord 8
+    _glonassOrbitClockCorrection_deltaRadial        <- arbitraryInt 22
+    _glonassOrbitClockCorrection_deltaAlongTrack    <- arbitraryInt 20
+    _glonassOrbitClockCorrection_deltaCrossTrack    <- arbitraryInt 20
+    _glonassOrbitClockCorrection_dotDeltaRadial     <- arbitraryInt 21
+    _glonassOrbitClockCorrection_dotDeltaAlongTrack <- arbitraryInt 19
+    _glonassOrbitClockCorrection_dotDeltaCrossTrack <- arbitraryInt 19
+    _glonassOrbitClockCorrection_deltaClockC0       <- arbitraryInt 22
+    _glonassOrbitClockCorrection_deltaClockC1       <- arbitraryInt 21
+    _glonassOrbitClockCorrection_deltaClockC2       <- arbitraryInt 27
+    pure GlonassOrbitClockCorrection {..}
+
+instance Arbitrary GpsCodeBiasCorrectionHeader where
+  arbitrary = do
+    _gpsCodeBiasCorrectionHeader_num            <- arbitraryWord 12
+    _gpsCodeBiasCorrectionHeader_epochs         <- arbitraryWord 20
+    _gpsCodeBiasCorrectionHeader_updateInterval <- arbitraryWord 4
+    _gpsCodeBiasCorrectionHeader_multiple       <- arbitrary
+    _gpsCodeBiasCorrectionHeader_iod            <- arbitraryWord 4
+    _gpsCodeBiasCorrectionHeader_provider       <- arbitraryWord 16
+    _gpsCodeBiasCorrectionHeader_solution       <- arbitraryWord 4
+    _gpsCodeBiasCorrectionHeader_n              <- arbitraryWord 6
+    pure GpsCodeBiasCorrectionHeader {..}
+
+instance Arbitrary GpsCodeBias where
+  arbitrary = do
+    _gpsCodeBias_signal   <- arbitraryWord 5
+    _gpsCodeBias_codeBias <- arbitraryInt 14
+    pure GpsCodeBias {..}
+
+instance Arbitrary GpsCodeBiasCorrection where
+  arbitrary = do
+    _gpsCodeBiasCorrection_sat        <- arbitraryWord 6
+    _gpsCodeBiasCorrection_n          <- arbitraryWord 5
+    _gpsCodeBiasCorrection_codeBiases <- replicateM (fromIntegral _gpsCodeBiasCorrection_n) arbitrary
+    pure GpsCodeBiasCorrection {..}
+
+instance Arbitrary GlonassCodeBiasCorrectionHeader where
+  arbitrary = do
+    _glonassCodeBiasCorrectionHeader_num            <- arbitraryWord 12
+    _glonassCodeBiasCorrectionHeader_epochs         <- arbitraryWord 17
+    _glonassCodeBiasCorrectionHeader_updateInterval <- arbitraryWord 4
+    _glonassCodeBiasCorrectionHeader_multiple       <- arbitrary
+    _glonassCodeBiasCorrectionHeader_iod            <- arbitraryWord 4
+    _glonassCodeBiasCorrectionHeader_provider       <- arbitraryWord 16
+    _glonassCodeBiasCorrectionHeader_solution       <- arbitraryWord 4
+    _glonassCodeBiasCorrectionHeader_n              <- arbitraryWord 6
+    pure GlonassCodeBiasCorrectionHeader {..}
+
+instance Arbitrary GlonassCodeBias where
+  arbitrary = do
+    _glonassCodeBias_signal   <- arbitraryWord 5
+    _glonassCodeBias_codeBias <- arbitraryInt 14
+    pure GlonassCodeBias {..}
+
+instance Arbitrary GlonassCodeBiasCorrection where
+  arbitrary = do
+    _glonassCodeBiasCorrection_sat        <- arbitraryWord 5
+    _glonassCodeBiasCorrection_n          <- arbitraryWord 5
+    _glonassCodeBiasCorrection_codeBiases <- replicateM (fromIntegral _glonassCodeBiasCorrection_n) arbitrary
+    pure GlonassCodeBiasCorrection {..}
+
+instance Arbitrary GpsPhaseBiasCorrectionHeader where
+  arbitrary = do
+    _gpsPhaseBiasCorrectionHeader_num            <- arbitraryWord 12
+    _gpsPhaseBiasCorrectionHeader_epochs         <- arbitraryWord 20
+    _gpsPhaseBiasCorrectionHeader_updateInterval <- arbitraryWord 4
+    _gpsPhaseBiasCorrectionHeader_multiple       <- arbitrary
+    _gpsPhaseBiasCorrectionHeader_iod            <- arbitraryWord 4
+    _gpsPhaseBiasCorrectionHeader_provider       <- arbitraryWord 16
+    _gpsPhaseBiasCorrectionHeader_solution       <- arbitraryWord 4
+    _gpsPhaseBiasCorrectionHeader_dispersive     <- arbitrary
+    _gpsPhaseBiasCorrectionHeader_mw             <- arbitrary
+    _gpsPhaseBiasCorrectionHeader_n              <- arbitraryWord 6
+    pure GpsPhaseBiasCorrectionHeader {..}
+
+instance Arbitrary GpsPhaseBias where
+  arbitrary = do
+    _gpsPhaseBias_signal               <- arbitraryWord 5
+    _gpsPhaseBias_integer              <- arbitrary
+    _gpsPhaseBias_wideLaneInteger      <- arbitraryWord 2
+    _gpsPhaseBias_discontinuityCounter <- arbitraryWord 4
+    _gpsPhaseBias_phaseBias            <- arbitraryInt 20
+    pure GpsPhaseBias {..}
+
+instance Arbitrary GpsPhaseBiasCorrection where
+  arbitrary = do
+    _gpsPhaseBiasCorrection_sat         <- arbitraryWord 6
+    _gpsPhaseBiasCorrection_n           <- arbitraryWord 5
+    _gpsPhaseBiasCorrection_yawAngle    <- arbitraryWord 9
+    _gpsPhaseBiasCorrection_yawRate     <- arbitraryInt 8
+    _gpsPhaseBiasCorrection_phaseBiases <- replicateM (fromIntegral _gpsPhaseBiasCorrection_n) arbitrary
+    pure GpsPhaseBiasCorrection {..}
+
+instance Arbitrary GlonassPhaseBiasCorrectionHeader where
+  arbitrary = do
+    _glonassPhaseBiasCorrectionHeader_num            <- arbitraryWord 12
+    _glonassPhaseBiasCorrectionHeader_epochs         <- arbitraryWord 17
+    _glonassPhaseBiasCorrectionHeader_updateInterval <- arbitraryWord 4
+    _glonassPhaseBiasCorrectionHeader_multiple       <- arbitrary
+    _glonassPhaseBiasCorrectionHeader_iod            <- arbitraryWord 4
+    _glonassPhaseBiasCorrectionHeader_provider       <- arbitraryWord 16
+    _glonassPhaseBiasCorrectionHeader_solution       <- arbitraryWord 4
+    _glonassPhaseBiasCorrectionHeader_dispersive     <- arbitrary
+    _glonassPhaseBiasCorrectionHeader_mw             <- arbitrary
+    _glonassPhaseBiasCorrectionHeader_n              <- arbitraryWord 6
+    pure GlonassPhaseBiasCorrectionHeader {..}
+
+instance Arbitrary GlonassPhaseBias where
+  arbitrary = do
+    _glonassPhaseBias_signal               <- arbitraryWord 5
+    _glonassPhaseBias_integer              <- arbitrary
+    _glonassPhaseBias_wideLaneInteger      <- arbitraryWord 2
+    _glonassPhaseBias_discontinuityCounter <- arbitraryWord 4
+    _glonassPhaseBias_phaseBias            <- arbitraryInt 20
+    pure GlonassPhaseBias {..}
+
+instance Arbitrary GlonassPhaseBiasCorrection where
+  arbitrary = do
+    _glonassPhaseBiasCorrection_sat         <- arbitraryWord 5
+    _glonassPhaseBiasCorrection_n           <- arbitraryWord 5
+    _glonassPhaseBiasCorrection_yawAngle    <- arbitraryWord 9
+    _glonassPhaseBiasCorrection_yawRate     <- arbitraryInt 8
+    _glonassPhaseBiasCorrection_phaseBiases <- replicateM (fromIntegral _glonassPhaseBiasCorrection_n) arbitrary
+    pure GlonassPhaseBiasCorrection {..}
+
 instance Arbitrary Msg1057 where
   arbitrary = do
     _msg1057_header      <- arbitrary
@@ -136,6 +306,42 @@
     _msg1064_corrections <- replicateM (fromIntegral $ _msg1064_header ^. glonassClockCorrectionHeader_n) arbitrary
     pure Msg1064 {..}
 
+instance Arbitrary Msg1060 where
+  arbitrary = do
+    _msg1060_header      <- arbitrary
+    _msg1060_corrections <- replicateM (fromIntegral $ _msg1060_header ^. gpsOrbitClockCorrectionHeader_n) arbitrary
+    pure Msg1060 {..}
+
+instance Arbitrary Msg1066 where
+  arbitrary = do
+    _msg1066_header      <- arbitrary
+    _msg1066_corrections <- replicateM (fromIntegral $ _msg1066_header ^. glonassOrbitClockCorrectionHeader_n) arbitrary
+    pure Msg1066 {..}
+
+instance Arbitrary Msg1059 where
+  arbitrary = do
+    _msg1059_header      <- arbitrary
+    _msg1059_corrections <- replicateM (fromIntegral $ _msg1059_header ^. gpsCodeBiasCorrectionHeader_n) arbitrary
+    pure Msg1059 {..}
+
+instance Arbitrary Msg1065 where
+  arbitrary = do
+    _msg1065_header      <- arbitrary
+    _msg1065_corrections <- replicateM (fromIntegral $ _msg1065_header ^. glonassCodeBiasCorrectionHeader_n) arbitrary
+    pure Msg1065 {..}
+
+instance Arbitrary Msg1265 where
+  arbitrary = do
+    _msg1265_header      <- arbitrary
+    _msg1265_corrections <- replicateM (fromIntegral $ _msg1265_header ^. gpsPhaseBiasCorrectionHeader_n) arbitrary
+    pure Msg1265 {..}
+
+instance Arbitrary Msg1266 where
+  arbitrary = do
+    _msg1266_header      <- arbitrary
+    _msg1266_corrections <- replicateM (fromIntegral $ _msg1266_header ^. glonassPhaseBiasCorrectionHeader_n) arbitrary
+    pure Msg1266 {..}
+
 testMsg1057 :: TestTree
 testMsg1057 =
   testProperty "Roundtrip Msg1057" $ \m ->
@@ -156,6 +362,36 @@
   testProperty "Roundtrip Msg1064" $ \m ->
     decode (encode m) == (m :: Msg1064)
 
+testMsg1060 :: TestTree
+testMsg1060 =
+  testProperty "Roundtrip Msg1060" $ \m ->
+    decode (encode m) == (m :: Msg1060)
+
+testMsg1066 :: TestTree
+testMsg1066 =
+  testProperty "Roundtrip Msg1066" $ \m ->
+    decode (encode m) == (m :: Msg1066)
+
+testMsg1059 :: TestTree
+testMsg1059 =
+  testProperty "Roundtrip Msg1059" $ \m ->
+    decode (encode m) == (m :: Msg1059)
+
+testMsg1065 :: TestTree
+testMsg1065 =
+  testProperty "Roundtrip Msg1065" $ \m ->
+    decode (encode m) == (m :: Msg1065)
+
+testMsg1265 :: TestTree
+testMsg1265 =
+  testProperty "Roundtrip Msg1265" $ \m ->
+    decode (encode m) == (m :: Msg1265)
+
+testMsg1266 :: TestTree
+testMsg1266 =
+  testProperty "Roundtrip Msg1266" $ \m ->
+    decode (encode m) == (m :: Msg1266)
+
 tests :: TestTree
 tests =
   testGroup "SSR tests"
@@ -163,4 +399,10 @@
     , testMsg1058
     , testMsg1063
     , testMsg1064
+    , testMsg1060
+    , testMsg1066
+    , testMsg1059
+    , testMsg1065
+    , testMsg1265
+    , testMsg1266
     ]
