diff --git a/gnss-converters.cabal b/gnss-converters.cabal
--- a/gnss-converters.cabal
+++ b/gnss-converters.cabal
@@ -1,6 +1,6 @@
 cabal-version: >=1.22
 name: gnss-converters
-version: 0.3.36
+version: 0.3.37
 license: BSD3
 copyright: Copyright (C) 2016, 2017 Swift Navigation, Inc.
 maintainer: Swift Navigation <dev@swiftnav.com>
diff --git a/src/Data/RTCM3/SBP/MSM.hs b/src/Data/RTCM3/SBP/MSM.hs
--- a/src/Data/RTCM3/SBP/MSM.hs
+++ b/src/Data/RTCM3/SBP/MSM.hs
@@ -19,11 +19,11 @@
 import Data.Bits
 import Data.Conduit
 import Data.IORef
-import Data.List.Extra      hiding (filter, null, zip)
+import Data.List.Extra      hiding (filter, map, null, zip)
 import Data.RTCM3
 import Data.RTCM3.SBP.Time
 import Data.RTCM3.SBP.Types
-import Data.Vector          hiding (filter, length, zip)
+import Data.Vector          hiding (filter, length, map, zip)
 import Data.Word
 import SwiftNav.SBP
 
@@ -40,10 +40,11 @@
 
 toCells :: MsmHeader -> [((Int, Word8), (Int, Word8))]
 toCells hdr =
-  masks (popCount (hdr ^. msmHeader_satelliteMask) * popCount (hdr ^. msmHeader_signalMask)) (hdr ^. msmHeader_cellMask) $ do
-    sat <- zip [0..] $ mask (hdr ^. msmHeader_satelliteMask)
-    sig <- zip [0..] $ mask (hdr ^. msmHeader_signalMask)
-    pure (sat, sig)
+  map (\(i, (sat, sig)) -> (sat, (i, sig))) $
+    zip [0..] $ masks (popCount (hdr ^. msmHeader_satelliteMask) * popCount (hdr ^. msmHeader_signalMask)) (hdr ^. msmHeader_cellMask) $ do
+      sat <- zip [0..] $ mask (hdr ^. msmHeader_satelliteMask)
+      sig <- mask (hdr ^. msmHeader_signalMask)
+      pure (sat, sig)
 
 toGpsSat :: Word8 -> Maybe Word8
 toGpsSat sat
