diff --git a/biophd.cabal b/biophd.cabal
--- a/biophd.cabal
+++ b/biophd.cabal
@@ -1,5 +1,5 @@
 Name:                biophd
-Version:             0.0.2
+Version:             0.0.3
 Synopsis:            Library for reading phd sequence files
 Description:         Library for reading phd sequence files
 Homepage:	     https://patch-tag.com/r/dfornika/biophd/home
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
@@ -1,4 +1,4 @@
-module Bio.Sequence.Phd(PHD(..), readPhd) where
+module Bio.Sequence.Phd(Phd(..), readPhd, readPhdTags) where
 
 import Bio.Core.Sequence
 import Bio.Sequence.PhdData
@@ -12,21 +12,25 @@
 import Data.Ix
 import Data.Int (Int64)
 import Data.List
+import Data.Maybe
 import Data.Text (Text)
 import Data.Binary (encode)
 import System.IO
 
 -- | Parse a .phd file, extracting the contents as a PHD
-readPhd :: FilePath -> IO PHD
+readPhd :: FilePath -> IO Phd
 readPhd f = return . mkPhd =<< readFile f
 
+readPhdTags :: FilePath -> IO (Maybe [PhdTag])
+readPhdTags f = return . (mkPhdTags . lines) =<< readFile f
+
 -- | Parse .phd contents from a handle
-hReadPhd :: Handle -> IO PHD
+hReadPhd :: Handle -> IO Phd
 hReadPhd h = return . mkPhd =<< hGetContents h
 
 -- | The actual phd parser.
 
-mkPhd :: String -> PHD
+mkPhd :: String -> Phd
 mkPhd inp = 
   let (hd:fs)                = filter (not . null) . lines $ inp
       (magic,label)          = splitAt 15 hd
@@ -42,7 +46,7 @@
       dna                    = concat $ map (!!0) $ sdata
       qual                   = map ((\x -> read x :: Int) . (!!1)) $ sdata
       traceInd               = map ((\x -> read x :: Int) . (!!2)) $ sdata
-  in if (magic == "BEGIN_SEQUENCE ") then PHD (mkComment  comment) 
+  in if (magic == "BEGIN_SEQUENCE ") then Phd (mkComment  comment) 
                                               (mkDNABlock label dna qual traceInd)
                                               (mkPhdTags tags)
                                             
@@ -69,8 +73,9 @@
                               , traceIndices = t }
 
 mkPhdTags :: [String] -> Maybe [PhdTag]
-mkPhdTags [""] = Nothing
-mkPhdTags td = Just (map mkOnePhdTag (groupByTags td))
+mkPhdTags phdLines = case groupByTags phdLines of
+                       [] -> Nothing
+                       _ -> Just (map (fromJust . mkOnePhdTag) (groupByTags phdLines))
 
 groupByTags :: [String] -> [[String]]
 groupByTags [] = []
@@ -81,18 +86,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] -> PhdTag
-mkOnePhdTag td =      
-  if length td == 9 then
-     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 }
-  else
-     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 = ""}         
+mkOnePhdTag :: [String] -> Maybe 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 = ""
+                                   }         
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
@@ -6,7 +6,7 @@
 
 {-- 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 DNABlock (Maybe [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.--}
