diff --git a/biophd.cabal b/biophd.cabal
--- a/biophd.cabal
+++ b/biophd.cabal
@@ -1,5 +1,5 @@
 Name:                biophd
-Version:             0.0.3
+Version:             0.0.4
 Synopsis:            Library for reading phd sequence files
 Description:         Library for reading phd sequence files
 Homepage:	     https://patch-tag.com/r/dfornika/biophd/home
@@ -14,7 +14,7 @@
 
 Library
   Build-depends:     base >= 2 && < 5, biocore, bytestring, parsec, text, binary
-  Exposed-modules:   Bio.Sequence.Phd, Bio.Sequence.PhdData
+  Exposed-modules:   Bio.Sequence.Phd, Bio.Sequence.PhdData, Bio.Sequence.PhdTag
   Hs-source-dirs:    src
 
 source-Repository    head
diff --git a/src/Bio/Sequence/Phd.hs b/src/Bio/Sequence/Phd.hs
--- a/src/Bio/Sequence/Phd.hs
+++ b/src/Bio/Sequence/Phd.hs
@@ -2,6 +2,7 @@
 
 import Bio.Core.Sequence
 import Bio.Sequence.PhdData
+import qualified Bio.Sequence.PhdTag as PT
 
 import Text.ParserCombinators.Parsec hiding (label)
 
@@ -21,7 +22,7 @@
 readPhd :: FilePath -> IO Phd
 readPhd f = return . mkPhd =<< readFile f
 
-readPhdTags :: FilePath -> IO (Maybe [PhdTag])
+readPhdTags :: FilePath -> IO (Maybe [PT.PhdTag])
 readPhdTags f = return . (mkPhdTags . lines) =<< readFile f
 
 -- | Parse .phd contents from a handle
@@ -72,7 +73,7 @@
                               , qualities    = QualData { unQD = encode   q }
                               , traceIndices = t }
 
-mkPhdTags :: [String] -> Maybe [PhdTag]
+mkPhdTags :: [String] -> Maybe [PT.PhdTag]
 mkPhdTags phdLines = case groupByTags phdLines of
                        [] -> Nothing
                        _ -> Just (map (fromJust . mkOnePhdTag) (groupByTags phdLines))
@@ -86,19 +87,19 @@
       grouping      = \x -> drop (fst (tag_spans!!x)) (take (snd (tag_spans!!x) + 1) xs)
   in  map grouping (Data.Ix.range (0, (length tag_spans) -1)) 
 
-mkOnePhdTag :: [String] -> Maybe PhdTag
+mkOnePhdTag :: [String] -> Maybe PT.PhdTag
 mkOnePhdTag td = case length td of 
                    0 -> Nothing
-                   9 -> Just PhdTag { tagType = drop 6 (td!!1)
-                                   , source  = drop 8 (td!!2)
-                                   , unpaddedReadPosition = map (\x -> Offset {unOff = read x :: Int64}) (words (drop 19 (td!!3)))
-                                   , date    = drop 6 (td!!4)
-                                   , comment = if td!!6 == "BEGIN_TAG" then ""
-                                               else td!!6 
-                                   }
-                   _ -> Just PhdTag { tagType = drop 6 (td!!1)
-                                   , source  = drop 8 (td!!2)            
-                                   , unpaddedReadPosition = map (\x -> Offset {unOff = read x :: Int64}) (words (drop 19 (td!!3)))          
-                                   , date    = drop 6 (td!!4)                           
-                                   , comment = ""
-                                   }         
+                   9 -> Just PT.PhdTag { PT.tagType = drop 6 (td!!1)
+                                       , PT.source  = drop 8 (td!!2)
+                                       , PT.unpaddedReadPosition = map (\x -> Offset {unOff = read x :: Int64}) (words (drop 19 (td!!3)))
+                                       , PT.date    = drop 6 (td!!4)
+                                       , PT.comment = if td!!6 == "BEGIN_TAG" then ""
+                                                  else td!!6 
+                                       }
+                   _ -> Just PT.PhdTag { PT.tagType = drop 6 (td!!1)
+                                       , PT.source  = drop 8 (td!!2)            
+                                       , PT.unpaddedReadPosition = map (\x -> Offset {unOff = read x :: Int64}) (words (drop 19 (td!!3)))          
+                                       , PT.date    = drop 6 (td!!4)                           
+                                       , PT.comment = ""
+                                       }          
diff --git a/src/Bio/Sequence/PhdData.hs b/src/Bio/Sequence/PhdData.hs
--- a/src/Bio/Sequence/PhdData.hs
+++ b/src/Bio/Sequence/PhdData.hs
@@ -1,12 +1,16 @@
 module Bio.Sequence.PhdData where
 
 import Bio.Core.Sequence
+import qualified Bio.Sequence.PhdTag as PT
 import qualified Data.ByteString.Lazy as LB
 import qualified Data.ByteString.Lazy.Char8 as LBC
 
 {-- A .phd file consists of a DNA block with base and quality 
     values, followed by one or more (optional) tag blocks. --}
-data Phd = Phd Comment DNABlock (Maybe [PhdTag]) deriving (Show)
+data Phd = Phd { comment  :: Comment 
+               , dnaBlock :: DNABlock 
+               , phdTags    :: Maybe [PT.PhdTag] 
+               } deriving (Show)
 
 {-- These types are subject to change if it improves functionality,
     but for now it's simplest to just call them String, Int etc.--}
@@ -50,23 +54,6 @@
 instance Show DNABlock where
   show = LBC.unpack . toFasta
 
-data PhdTag = PhdTag
-    { tagType              :: String
-    , source               :: String
-    , unpaddedReadPosition :: [Offset]
-    , date                 :: String
-    , comment              :: String  
-    } deriving (Eq)
-
-instance Show PhdTag where
-  show (PhdTag tt so urp da co) =
-    ("\n" ++) $ unlines $ map (" " ++)
-      [ "TYPE: "              ++ show tt
-      , "SOURCE: "            ++ show so
-      , "UNPADDED_READ_POS: " ++ show (map unOff urp)
-      , "DATE: "              ++ show da
-      , "COMMENT: "           ++ show co ]
-
 instance BioSeq DNABlock where
   seqlabel  db = SeqLabel $ LBC.pack $ label db
   seqdata   db = bases db
@@ -94,8 +81,8 @@
                            , qualities    = QualData $ LBC.pack "0000000000"
                            , traceIndices = [0,1,2,3,4,5,6,7,8,9,10] }
 
-defaultPhdTag = PhdTag { tagType              = "polymorphism"
-                       , source               = "polyphred"
-                       , unpaddedReadPosition = [5, 5]
-                       , date                 = "01/01/70 00:00:00"
-                       , comment              = "" }
+defaultPhdTag = PT.PhdTag { PT.tagType              = "polymorphism"
+                          , PT.source               = "polyphred"
+                          , PT.unpaddedReadPosition = [5, 5]
+                          , PT.date                 = "01/01/70 00:00:00"
+                          , PT.comment              = "" }
diff --git a/src/Bio/Sequence/PhdTag.hs b/src/Bio/Sequence/PhdTag.hs
new file mode 100644
--- /dev/null
+++ b/src/Bio/Sequence/PhdTag.hs
@@ -0,0 +1,19 @@
+module Bio.Sequence.PhdTag where 
+
+import Bio.Core.Sequence (Offset, unOff)
+
+data PhdTag = PhdTag
+              { tagType              :: String
+              , source               :: String
+              , unpaddedReadPosition :: [Offset]
+              , date                 :: String
+              , comment              :: String  
+              } deriving (Eq)
+
+instance Show PhdTag where
+  show (PhdTag tt so urp da co) = ("\n" ++) $ unlines $ map (" " ++)
+                                  [ "TYPE: "              ++ show tt
+                                  , "SOURCE: "            ++ show so
+                                  , "UNPADDED_READ_POS: " ++ show (map unOff urp)
+                                  , "DATE: "              ++ show da
+                                  , "COMMENT: "           ++ show co ]
