diff --git a/sbp.cabal b/sbp.cabal
--- a/sbp.cabal
+++ b/sbp.cabal
@@ -1,5 +1,5 @@
 name: sbp
-version: 2.3.0
+version: 2.3.1
 cabal-version: >=1.22
 build-type: Simple
 license: LGPL-3
@@ -40,8 +40,7 @@
         lens-aeson >=1.0.0.5,
         monad-loops >=0.4.3,
         template-haskell >=2.10.0.0,
-        text >=1.2.2.2,
-        unordered-containers >=0.2.8.0
+        text >=1.2.2.2
     default-language: Haskell2010
     hs-source-dirs: src
     other-modules:
@@ -118,16 +117,11 @@
     type: exitcode-stdio-1.0
     main-is: Test.hs
     build-depends:
-        aeson >=0.11.3.0,
         base >=4.8.2.0,
-        base64-bytestring >=1.0.0.1,
         basic-prelude >=0.5.2,
-        bytestring >=0.10.6.0,
-        QuickCheck >=2.8.2,
         sbp,
         tasty >=0.11.2.1,
-        tasty-hunit >=0.9.2,
-        tasty-quickcheck >=0.8.4
+        tasty-hunit >=0.9.2
     default-language: Haskell2010
     hs-source-dirs: test
     other-modules:
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
@@ -108,6 +108,7 @@
    | SBPMsgFlashReadReq MsgFlashReadReq Msg
    | SBPMsgFlashReadResp MsgFlashReadResp Msg
    | SBPMsgFwd MsgFwd Msg
+   | SBPMsgGloBiases MsgGloBiases Msg
    | SBPMsgGpsTime MsgGpsTime Msg
    | SBPMsgGpsTimeDepA MsgGpsTimeDepA Msg
    | SBPMsgGroupDelay MsgGroupDelay Msg
@@ -247,6 +248,7 @@
           | _msgSBPType == msgFlashReadReq = SBPMsgFlashReadReq (decode (fromStrict (unBytes _msgSBPPayload))) m
           | _msgSBPType == msgFlashReadResp = SBPMsgFlashReadResp (decode (fromStrict (unBytes _msgSBPPayload))) m
           | _msgSBPType == msgFwd = SBPMsgFwd (decode (fromStrict (unBytes _msgSBPPayload))) m
+          | _msgSBPType == msgGloBiases = SBPMsgGloBiases (decode (fromStrict (unBytes _msgSBPPayload))) m
           | _msgSBPType == msgGpsTime = SBPMsgGpsTime (decode (fromStrict (unBytes _msgSBPPayload))) m
           | _msgSBPType == msgGpsTimeDepA = SBPMsgGpsTimeDepA (decode (fromStrict (unBytes _msgSBPPayload))) m
           | _msgSBPType == msgGroupDelay = SBPMsgGroupDelay (decode (fromStrict (unBytes _msgSBPPayload))) m
@@ -378,6 +380,7 @@
       encoder (SBPMsgFlashReadReq _ m) = put m
       encoder (SBPMsgFlashReadResp _ m) = put m
       encoder (SBPMsgFwd _ m) = put m
+      encoder (SBPMsgGloBiases _ m) = put m
       encoder (SBPMsgGpsTime _ m) = put m
       encoder (SBPMsgGpsTimeDepA _ m) = put m
       encoder (SBPMsgGroupDelay _ m) = put m
@@ -513,6 +516,7 @@
         | msgType == msgFlashReadReq = SBPMsgFlashReadReq <$> pure (decode (fromStrict (unBytes payload))) <*> parseJSON obj
         | msgType == msgFlashReadResp = SBPMsgFlashReadResp <$> pure (decode (fromStrict (unBytes payload))) <*> parseJSON obj
         | msgType == msgFwd = SBPMsgFwd <$> pure (decode (fromStrict (unBytes payload))) <*> parseJSON obj
+        | msgType == msgGloBiases = SBPMsgGloBiases <$> 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 == msgGroupDelay = SBPMsgGroupDelay <$> pure (decode (fromStrict (unBytes payload))) <*> parseJSON obj
@@ -649,6 +653,7 @@
   toJSON (SBPMsgFlashReadReq n m) = toJSON n <<>> toJSON m
   toJSON (SBPMsgFlashReadResp n m) = toJSON n <<>> toJSON m
   toJSON (SBPMsgFwd n m) = toJSON n <<>> toJSON m
+  toJSON (SBPMsgGloBiases n m) = toJSON n <<>> toJSON m
   toJSON (SBPMsgGpsTime n m) = toJSON n <<>> toJSON m
   toJSON (SBPMsgGpsTimeDepA n m) = toJSON n <<>> toJSON m
   toJSON (SBPMsgGroupDelay n m) = toJSON n <<>> toJSON m
@@ -779,6 +784,7 @@
   msg f (SBPMsgFlashReadReq n m) = SBPMsgFlashReadReq n <$> f m
   msg f (SBPMsgFlashReadResp n m) = SBPMsgFlashReadResp n <$> f m
   msg f (SBPMsgFwd n m) = SBPMsgFwd n <$> f m
+  msg f (SBPMsgGloBiases n m) = SBPMsgGloBiases n <$> f m
   msg f (SBPMsgGpsTime n m) = SBPMsgGpsTime n <$> f m
   msg f (SBPMsgGpsTimeDepA n m) = SBPMsgGpsTimeDepA n <$> f m
   msg f (SBPMsgGroupDelay n m) = SBPMsgGroupDelay n <$> f m
diff --git a/src/SwiftNav/SBP/Observation.hs b/src/SwiftNav/SBP/Observation.hs
--- a/src/SwiftNav/SBP/Observation.hs
+++ b/src/SwiftNav/SBP/Observation.hs
@@ -2149,3 +2149,44 @@
 $(makeSBP 'msgAlmanacGlo ''MsgAlmanacGlo)
 $(makeJSON "_msgAlmanacGlo_" ''MsgAlmanacGlo)
 $(makeLenses ''MsgAlmanacGlo)
+
+msgGloBiases :: Word16
+msgGloBiases = 0x0075
+
+-- | SBP class for message MSG_GLO_BIASES (0x0075).
+--
+-- The GLONASS L1/L2 Code-Phase biases allows to perform  GPS+GLONASS integer
+-- ambiguity resolution for baselines with mixed receiver types (e.g. receiver
+-- of different manufacturers)
+data MsgGloBiases = MsgGloBiases
+  { _msgGloBiases_mask    :: !Word8
+    -- ^ GLONASS FDMA signals mask
+  , _msgGloBiases_l1ca_bias :: !Int16
+    -- ^ GLONASS L1 C/A Code-Phase Bias
+  , _msgGloBiases_l1p_bias :: !Int16
+    -- ^ GLONASS L1 P Code-Phase Bias
+  , _msgGloBiases_l2ca_bias :: !Int16
+    -- ^ GLONASS L2 C/A Code-Phase Bias
+  , _msgGloBiases_l2p_bias :: !Int16
+    -- ^ GLONASS L2 P Code-Phase Bias
+  } deriving ( Show, Read, Eq )
+
+instance Binary MsgGloBiases where
+  get = do
+    _msgGloBiases_mask <- getWord8
+    _msgGloBiases_l1ca_bias <- fromIntegral <$> getWord16le
+    _msgGloBiases_l1p_bias <- fromIntegral <$> getWord16le
+    _msgGloBiases_l2ca_bias <- fromIntegral <$> getWord16le
+    _msgGloBiases_l2p_bias <- fromIntegral <$> getWord16le
+    pure MsgGloBiases {..}
+
+  put MsgGloBiases {..} = do
+    putWord8 _msgGloBiases_mask
+    putWord16le $ fromIntegral _msgGloBiases_l1ca_bias
+    putWord16le $ fromIntegral _msgGloBiases_l1p_bias
+    putWord16le $ fromIntegral _msgGloBiases_l2ca_bias
+    putWord16le $ fromIntegral _msgGloBiases_l2p_bias
+
+$(makeSBP 'msgGloBiases ''MsgGloBiases)
+$(makeJSON "_msgGloBiases_" ''MsgGloBiases)
+$(makeLenses ''MsgGloBiases)
