diff --git a/sbp.cabal b/sbp.cabal
--- a/sbp.cabal
+++ b/sbp.cabal
@@ -1,5 +1,5 @@
 name:                  sbp
-version:               6.1.0
+version:               6.2.0
 synopsis:              SwiftNav's SBP Library
 homepage:              https://github.com/swift-nav/libsbp
 license:               MIT
diff --git a/src/SwiftNav/SBP/Imu.hs b/src/SwiftNav/SBP/Imu.hs
--- a/src/SwiftNav/SBP/Imu.hs
+++ b/src/SwiftNav/SBP/Imu.hs
@@ -127,3 +127,58 @@
 $(makeSBP 'msgImuAux ''MsgImuAux)
 $(makeJSON "_msgImuAux_" ''MsgImuAux)
 $(makeLenses ''MsgImuAux)
+
+msgImuComp :: Word16
+msgImuComp = 0x0905
+
+-- | SBP class for message MSG_IMU_COMP (0x0905).
+--
+-- Data from the Inertial Measurement Unit, containing accelerometer and
+-- gyroscope readings compensated for estimated errors and constant  physical
+-- effects. The output is valid for inertially referenced center  of
+-- navigation (IMU body frame) represented in vehicle body frame.
+data MsgImuComp = MsgImuComp
+  { _msgImuComp_time     :: !Word64
+    -- ^ Microseconds since reference epoch
+  , _msgImuComp_flags    :: !Word16
+    -- ^ Contains the applied compensation parameters and time synchronization
+    -- mode
+  , _msgImuComp_acc_comp_x :: !Int32
+    -- ^ Compensated acceleration X axis
+  , _msgImuComp_acc_comp_y :: !Int32
+    -- ^ Compensated acceleration Y axis
+  , _msgImuComp_acc_comp_z :: !Int32
+    -- ^ Compensated acceleration Z axis
+  , _msgImuComp_gyr_comp_x :: !Int32
+    -- ^ Compensated angular rate X axis
+  , _msgImuComp_gyr_comp_y :: !Int32
+    -- ^ Compensated angular rate Y axis
+  , _msgImuComp_gyr_comp_z :: !Int32
+    -- ^ Compensated angular rate Z axis
+  } deriving ( Show, Read, Eq )
+
+instance Binary MsgImuComp where
+  get = do
+    _msgImuComp_time <- getWord64le
+    _msgImuComp_flags <- getWord16le
+    _msgImuComp_acc_comp_x <- (fromIntegral <$> getWord32le)
+    _msgImuComp_acc_comp_y <- (fromIntegral <$> getWord32le)
+    _msgImuComp_acc_comp_z <- (fromIntegral <$> getWord32le)
+    _msgImuComp_gyr_comp_x <- (fromIntegral <$> getWord32le)
+    _msgImuComp_gyr_comp_y <- (fromIntegral <$> getWord32le)
+    _msgImuComp_gyr_comp_z <- (fromIntegral <$> getWord32le)
+    pure MsgImuComp {..}
+
+  put MsgImuComp {..} = do
+    putWord64le _msgImuComp_time
+    putWord16le _msgImuComp_flags
+    (putWord32le . fromIntegral) _msgImuComp_acc_comp_x
+    (putWord32le . fromIntegral) _msgImuComp_acc_comp_y
+    (putWord32le . fromIntegral) _msgImuComp_acc_comp_z
+    (putWord32le . fromIntegral) _msgImuComp_gyr_comp_x
+    (putWord32le . fromIntegral) _msgImuComp_gyr_comp_y
+    (putWord32le . fromIntegral) _msgImuComp_gyr_comp_z
+
+$(makeSBP 'msgImuComp ''MsgImuComp)
+$(makeJSON "_msgImuComp_" ''MsgImuComp)
+$(makeLenses ''MsgImuComp)
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
@@ -156,6 +156,7 @@
    | SBPMsgHeartbeat MsgHeartbeat Msg
    | SBPMsgIarState MsgIarState Msg
    | SBPMsgImuAux MsgImuAux Msg
+   | SBPMsgImuComp MsgImuComp Msg
    | SBPMsgImuRaw MsgImuRaw Msg
    | SBPMsgInitBaseDep MsgInitBaseDep Msg
    | SBPMsgInsStatus MsgInsStatus Msg
@@ -407,6 +408,7 @@
           | _msgSBPType == msgHeartbeat = SBPMsgHeartbeat (decode (fromStrict (unBytes _msgSBPPayload))) m
           | _msgSBPType == msgIarState = SBPMsgIarState (decode (fromStrict (unBytes _msgSBPPayload))) m
           | _msgSBPType == msgImuAux = SBPMsgImuAux (decode (fromStrict (unBytes _msgSBPPayload))) m
+          | _msgSBPType == msgImuComp = SBPMsgImuComp (decode (fromStrict (unBytes _msgSBPPayload))) m
           | _msgSBPType == msgImuRaw = SBPMsgImuRaw (decode (fromStrict (unBytes _msgSBPPayload))) m
           | _msgSBPType == msgInitBaseDep = SBPMsgInitBaseDep (decode (fromStrict (unBytes _msgSBPPayload))) m
           | _msgSBPType == msgInsStatus = SBPMsgInsStatus (decode (fromStrict (unBytes _msgSBPPayload))) m
@@ -650,6 +652,7 @@
       encoder (SBPMsgHeartbeat _ m) = put m
       encoder (SBPMsgIarState _ m) = put m
       encoder (SBPMsgImuAux _ m) = put m
+      encoder (SBPMsgImuComp _ m) = put m
       encoder (SBPMsgImuRaw _ m) = put m
       encoder (SBPMsgInitBaseDep _ m) = put m
       encoder (SBPMsgInsStatus _ m) = put m
@@ -897,6 +900,7 @@
         | msgType == msgHeartbeat = SBPMsgHeartbeat <$> pure (decode (fromStrict (unBytes payload))) <*> parseJSON obj
         | msgType == msgIarState = SBPMsgIarState <$> pure (decode (fromStrict (unBytes payload))) <*> parseJSON obj
         | msgType == msgImuAux = SBPMsgImuAux <$> pure (decode (fromStrict (unBytes payload))) <*> parseJSON obj
+        | msgType == msgImuComp = SBPMsgImuComp <$> pure (decode (fromStrict (unBytes payload))) <*> parseJSON obj
         | msgType == msgImuRaw = SBPMsgImuRaw <$> pure (decode (fromStrict (unBytes payload))) <*> parseJSON obj
         | msgType == msgInitBaseDep = SBPMsgInitBaseDep <$> pure (decode (fromStrict (unBytes payload))) <*> parseJSON obj
         | msgType == msgInsStatus = SBPMsgInsStatus <$> pure (decode (fromStrict (unBytes payload))) <*> parseJSON obj
@@ -1145,6 +1149,7 @@
   toJSON (SBPMsgHeartbeat n m) = toJSON n <<>> toJSON m
   toJSON (SBPMsgIarState n m) = toJSON n <<>> toJSON m
   toJSON (SBPMsgImuAux n m) = toJSON n <<>> toJSON m
+  toJSON (SBPMsgImuComp n m) = toJSON n <<>> toJSON m
   toJSON (SBPMsgImuRaw n m) = toJSON n <<>> toJSON m
   toJSON (SBPMsgInitBaseDep _ m) = toJSON m
   toJSON (SBPMsgInsStatus n m) = toJSON n <<>> toJSON m
@@ -1387,6 +1392,7 @@
   msg f (SBPMsgHeartbeat n m) = SBPMsgHeartbeat n <$> f m
   msg f (SBPMsgIarState n m) = SBPMsgIarState n <$> f m
   msg f (SBPMsgImuAux n m) = SBPMsgImuAux n <$> f m
+  msg f (SBPMsgImuComp n m) = SBPMsgImuComp n <$> f m
   msg f (SBPMsgImuRaw n m) = SBPMsgImuRaw n <$> f m
   msg f (SBPMsgInitBaseDep n m) = SBPMsgInitBaseDep n <$> f m
   msg f (SBPMsgInsStatus n m) = SBPMsgInsStatus n <$> f m
