diff --git a/app/App/Dump.hs b/app/App/Dump.hs
--- a/app/App/Dump.hs
+++ b/app/App/Dump.hs
@@ -9,29 +9,29 @@
   ) where
 
 import Arbor.File.Format.Asif.Data.Ip
-import Arbor.File.Format.Asif.Format.Decoder as D
 import Arbor.File.Format.Asif.Segment
 import Arbor.File.Format.Asif.Whatever
 import Control.Lens
 import Control.Monad
-import Control.Monad.IO.Class                (liftIO)
-import Control.Monad.Trans.Resource          (MonadResource)
-import Data.Char                             (isPrint)
+import Control.Monad.IO.Class          (liftIO)
+import Control.Monad.Trans.Resource    (MonadResource)
+import Data.Char                       (isPrint)
 import Data.Generics.Product.Any
 import Data.List
-import Data.Monoid                           ((<>))
-import Data.Text                             (Text)
-import Data.Thyme.Format                     (formatTime)
+import Data.Monoid                     ((<>))
+import Data.Text                       (Text)
+import Data.Thyme.Format               (formatTime)
 import Data.Thyme.Time.Core
 import Data.Word
 import HaskellWorks.Data.Bits.BitShow
 import HaskellWorks.Data.Bits.BitWise
-import Numeric                               (showHex)
-import System.IO                             (Handle)
-import System.Locale                         (defaultTimeLocale, iso8601DateFormat)
+import Numeric                         (showHex)
+import System.IO                       (Handle)
+import System.Locale                   (defaultTimeLocale, iso8601DateFormat)
 
 import qualified Arbor.File.Format.Asif.ByteString.Lazy as LBS
 import qualified Arbor.File.Format.Asif.Format          as F
+import qualified Arbor.File.Format.Asif.Get             as D
 import qualified Data.Binary                            as G
 import qualified Data.Binary.Get                        as G
 import qualified Data.Bits                              as B
diff --git a/asif.cabal b/asif.cabal
--- a/asif.cabal
+++ b/asif.cabal
@@ -1,6 +1,6 @@
 cabal-version:  2.2
 name:           asif
-version:        5.0.2
+version:        6.0.0
 description:    Library for creating and querying segmented feeds. Please see <https://github.com/arbor/asif#readme>
 synopsis:       Library for creating and querying segmented feeds
 category:       Services
@@ -71,7 +71,6 @@
     Arbor.File.Format.Asif.Type
     Arbor.File.Format.Asif.Whatever
     Arbor.File.Format.Asif.Write
-    Arbor.File.Format.Asif.Format.Decoder
   other-modules:
     Arbor.File.Format.Asif.Format.SegmentValue
     Arbor.File.Format.Asif.Format.Type
diff --git a/src/Arbor/File/Format/Asif/Format/Decoder.hs b/src/Arbor/File/Format/Asif/Format/Decoder.hs
deleted file mode 100644
--- a/src/Arbor/File/Format/Asif/Format/Decoder.hs
+++ /dev/null
@@ -1,48 +0,0 @@
-module Arbor.File.Format.Asif.Format.Decoder where
-
-import Arbor.File.Format.Asif.Data.Ip
-import Control.Lens
-import Data.Thyme.Time.Core
-import Data.Word                             (Word32)
-import HaskellWorks.Data.Network.Ip.Validity (Canonical)
-
-import qualified Data.Binary.Get                   as G
-import qualified HaskellWorks.Data.Network.Ip.Ipv4 as IP4
-import qualified HaskellWorks.Data.Network.Ip.Ipv6 as IP6
-
-getWord32x4 :: G.Get (Word32, Word32, Word32, Word32)
-getWord32x4 = do
-  a <- G.getWord32be
-  b <- G.getWord32be
-  c <- G.getWord32be
-  d <- G.getWord32be
-  return (a, b, c, d)
-
-getBool :: G.Get Bool
-getBool = G.getWord8 <&> (/= 0)
-
-getIpv4 :: G.Get IP4.IpAddress
-getIpv4 = G.getWord32le <&> word32ToIpv4
-
-getIpv6 :: G.Get IP6.IpAddress
-getIpv6 = getWord32x4 <&> word32x4ToIpv6
-
-getIpv4Block :: G.Get (IP4.IpBlock Canonical)
-getIpv4Block =
-  let toIpBlock w32 w8 = IP4.IpBlock (IP4.IpAddress w32) (IP4.IpNetMask w8)
-  in toIpBlock <$> G.getWord32le <*> G.getWord8
-
-getIpv6Block :: G.Get (IP6.IpBlock Canonical)
-getIpv6Block =
-  let toIpBlock w128 w8 = IP6.IpBlock (IP6.IpAddress w128) (IP6.IpNetMask w8)
-  in toIpBlock <$> getWord32x4 <*> G.getWord8
-
-getTimeMillis :: G.Get UTCTime
-getTimeMillis =
-  let toTime ms = (ms * 1000) ^. from microseconds & posixSecondsToUTCTime
-  in G.getInt64le <&> toTime
-
-getTimeMicros :: G.Get UTCTime
-getTimeMicros =
-  let toTime ms = ms ^. from microseconds & posixSecondsToUTCTime
-  in G.getInt64le <&> toTime
diff --git a/src/Arbor/File/Format/Asif/Format/SegmentValue.hs b/src/Arbor/File/Format/Asif/Format/SegmentValue.hs
--- a/src/Arbor/File/Format/Asif/Format/SegmentValue.hs
+++ b/src/Arbor/File/Format/Asif/Format/SegmentValue.hs
@@ -6,27 +6,28 @@
 module Arbor.File.Format.Asif.Format.SegmentValue
 where
 
+import Arbor.File.Format.Asif.List           as L
+import Arbor.File.Format.Asif.Segment
+import Arbor.File.Format.Asif.Whatever
+import Control.Lens
+import Data.Generics.Product.Any
+import Data.Int
+import Data.Semigroup                        ((<>))
+import Data.Thyme.Time.Core
+import Data.Word
+import GHC.Generics                          (Generic)
+import HaskellWorks.Data.Network.Ip.Validity
+
 import qualified Arbor.File.Format.Asif.ByteString.Lazy as LBS
-import           Arbor.File.Format.Asif.Format.Decoder  as D
 import qualified Arbor.File.Format.Asif.Format.Type     as F
-import           Arbor.File.Format.Asif.List            as L
-import           Arbor.File.Format.Asif.Segment
-import           Arbor.File.Format.Asif.Whatever
-import           Control.Lens
+import qualified Arbor.File.Format.Asif.Get             as D
 import qualified Data.Binary                            as G
 import qualified Data.Binary.Get                        as G
 import qualified Data.ByteString.Lazy                   as LBS
 import qualified Data.ByteString.Lazy.Char8             as LBSC
-import           Data.Generics.Product.Any
-import           Data.Int
-import           Data.Semigroup                         ((<>))
 import qualified Data.Text                              as T
-import           Data.Thyme.Time.Core
-import           Data.Word
-import           GHC.Generics                           (Generic)
 import qualified HaskellWorks.Data.Network.Ip.Ipv4      as IP4
 import qualified HaskellWorks.Data.Network.Ip.Ipv6      as IP6
-import           HaskellWorks.Data.Network.Ip.Validity
 
 data SegmentValue
   = SString LBS.ByteString
diff --git a/src/Arbor/File/Format/Asif/Get.hs b/src/Arbor/File/Format/Asif/Get.hs
--- a/src/Arbor/File/Format/Asif/Get.hs
+++ b/src/Arbor/File/Format/Asif/Get.hs
@@ -1,6 +1,7 @@
 module Arbor.File.Format.Asif.Get where
 
 import Arbor.File.Format.Asif.ByteString.Builder
+import Arbor.File.Format.Asif.Data.Ip            (word32ToIpv4, word32x4ToIpv6)
 import Control.Lens
 import Control.Monad
 import Data.Binary.Get
@@ -8,12 +9,17 @@
 import Data.Text                                 (Text)
 import Data.Thyme.Clock                          (microseconds)
 import Data.Thyme.Clock.POSIX                    (POSIXTime)
+import Data.Thyme.Time.Core                      (UTCTime, posixSecondsToUTCTime)
+import Data.Word                                 (Word32)
+import HaskellWorks.Data.Network.Ip.Validity     (Canonical)
 
-import qualified Data.Attoparsec.ByteString as AP
-import qualified Data.ByteString            as BS
-import qualified Data.ByteString.Lazy       as LBS
-import qualified Data.ByteString.Lazy.Char8 as LC8
-import qualified Data.Text.Encoding         as T
+import qualified Data.Attoparsec.ByteString        as AP
+import qualified Data.ByteString                   as BS
+import qualified Data.ByteString.Lazy              as LBS
+import qualified Data.ByteString.Lazy.Char8        as LC8
+import qualified Data.Text.Encoding                as T
+import qualified HaskellWorks.Data.Network.Ip.Ipv4 as IP4
+import qualified HaskellWorks.Data.Network.Ip.Ipv6 as IP6
 
 getMagic :: AP.Parser BS.ByteString -> Get ()
 getMagic magicParser = do
@@ -43,5 +49,46 @@
 getTimeMicro64 :: Get POSIXTime
 getTimeMicro64 = (^. from microseconds) <$> getInt64le
 
+getTimeMillis :: Get UTCTime
+getTimeMillis =
+  let toTime ms = (ms * 1000) ^. from microseconds & posixSecondsToUTCTime
+  in getInt64le <&> toTime
+
+getTimeMicros :: Get UTCTime
+getTimeMicros =
+  let toTime ms = ms ^. from microseconds & posixSecondsToUTCTime
+  in getInt64le <&> toTime
+
+getWord32x4 :: Get (Word32, Word32, Word32, Word32)
+getWord32x4 = do
+  a <- getWord32be
+  b <- getWord32be
+  c <- getWord32be
+  d <- getWord32be
+  return (a, b, c, d)
+
+getBool :: Get Bool
+getBool = getWord8 <&> (/= 0)
+
+getIpv4 :: Get IP4.IpAddress
+getIpv4 = getWord32le <&> word32ToIpv4
+
+getIpv6 :: Get IP6.IpAddress
+getIpv6 = getWord32x4 <&> word32x4ToIpv6
+
+getIpv4Block :: Get (IP4.IpBlock Canonical)
+getIpv4Block =
+  let toIpBlock w32 w8 = IP4.IpBlock (IP4.IpAddress w32) (IP4.IpNetMask w8)
+  in toIpBlock <$> getWord32le <*> getWord8
+
+getIpv6Block :: Get (IP6.IpBlock Canonical)
+getIpv6Block =
+  let toIpBlock w128 w8 = IP6.IpBlock (IP6.IpAddress w128) (IP6.IpNetMask w8)
+  in toIpBlock <$> getWord32x4 <*> getWord8
+
 getTextUtf8Z :: Get Text
 getTextUtf8Z = T.decodeUtf8 . LBS.toStrict <$> getLazyByteStringNul
+
+getNullTerminatedString :: Get LBS.ByteString
+getNullTerminatedString = getLazyByteStringNul
+
