diff --git a/Data/Geo/GPX/BoundsType.hs b/Data/Geo/GPX/BoundsType.hs
--- a/Data/Geo/GPX/BoundsType.hs
+++ b/Data/Geo/GPX/BoundsType.hs
@@ -10,7 +10,7 @@
 import Data.Geo.GPX.Accessor.Maxlat
 import Data.Geo.GPX.Accessor.Minlon
 import Data.Geo.GPX.Accessor.Maxlon
-import Text.XML.HXT.Arrow
+import Text.XML.HXT.Core
 
 data BoundsType = BoundsType (LatitudeType, LongitudeType) (LatitudeType, LongitudeType)
   deriving (Show, Eq)
diff --git a/Data/Geo/GPX/CopyrightType.hs b/Data/Geo/GPX/CopyrightType.hs
--- a/Data/Geo/GPX/CopyrightType.hs
+++ b/Data/Geo/GPX/CopyrightType.hs
@@ -9,7 +9,7 @@
 import Data.Geo.GPX.Accessor.Author
 import Data.Geo.GPX.Accessor.Year
 import Data.Geo.GPX.Accessor.License
-import Text.XML.HXT.Arrow
+import Text.XML.HXT.Core
 
 data CopyrightType = CopyrightType String (Maybe String) (Maybe String)
   deriving (Eq, Show)
diff --git a/Data/Geo/GPX/DegreesType.hs b/Data/Geo/GPX/DegreesType.hs
--- a/Data/Geo/GPX/DegreesType.hs
+++ b/Data/Geo/GPX/DegreesType.hs
@@ -8,7 +8,7 @@
 
 import Data.Geo.GPX.Accessor.Value
 import Data.Fixed
-import Text.XML.HXT.Arrow
+import Text.XML.HXT.Core
 
 newtype DegreesType = DegreesType Double
   deriving (Eq, Show)
diff --git a/Data/Geo/GPX/DgpsStationType.hs b/Data/Geo/GPX/DgpsStationType.hs
--- a/Data/Geo/GPX/DgpsStationType.hs
+++ b/Data/Geo/GPX/DgpsStationType.hs
@@ -6,10 +6,10 @@
                                      dgpsStationType
                                    ) where
 
+import Text.XML.HXT.Core
 import Data.Geo.GPX.Accessor.Value
 import Data.Ix
 import Data.Maybe
-import Text.XML.HXT.Arrow
 
 newtype DgpsStationType = DgpsStationType Int
   deriving Eq
diff --git a/Data/Geo/GPX/EmailType.hs b/Data/Geo/GPX/EmailType.hs
--- a/Data/Geo/GPX/EmailType.hs
+++ b/Data/Geo/GPX/EmailType.hs
@@ -4,7 +4,7 @@
                                emailType
                              ) where
 
-import Text.XML.HXT.Arrow
+import Text.XML.HXT.Core
 import Data.Geo.GPX.Accessor.Id
 import Data.Geo.GPX.Accessor.Domain
 
diff --git a/Data/Geo/GPX/ExtensionsType.hs b/Data/Geo/GPX/ExtensionsType.hs
--- a/Data/Geo/GPX/ExtensionsType.hs
+++ b/Data/Geo/GPX/ExtensionsType.hs
@@ -1,4 +1,4 @@
-{-# LANGUAGE MultiParamTypeClasses, TypeSynonymInstances #-}
+{-# LANGUAGE MultiParamTypeClasses, TypeSynonymInstances, FlexibleInstances #-}
 
 -- | Complex Type: @extensionsType@ <http://www.topografix.com/GPX/1/1/#type_extensionsType>
 module Data.Geo.GPX.ExtensionsType(
@@ -6,7 +6,7 @@
                                     extensionsType
                                   ) where
 
-import Text.XML.HXT.Arrow
+import Text.XML.HXT.Core
 import Data.Geo.GPX.Accessor.Value
 
 newtype ExtensionsType = ExtensionsType XmlTree
diff --git a/Data/Geo/GPX/FixType.hs b/Data/Geo/GPX/FixType.hs
--- a/Data/Geo/GPX/FixType.hs
+++ b/Data/Geo/GPX/FixType.hs
@@ -10,7 +10,7 @@
                              fixType
                            ) where
 
-import Text.XML.HXT.Arrow hiding (none)
+import Text.XML.HXT.Core hiding (none)
 
 data FixType = None | Twod | Threed | Dgps | Pps
   deriving (Eq, Enum)
diff --git a/Data/Geo/GPX/Gpx.hs b/Data/Geo/GPX/Gpx.hs
--- a/Data/Geo/GPX/Gpx.hs
+++ b/Data/Geo/GPX/Gpx.hs
@@ -16,7 +16,7 @@
                          interactsGpx'
                        ) where
 
-import Text.XML.HXT.Arrow
+import Text.XML.HXT.Core
 import Control.Monad
 import Data.List
 import Data.Geo.GPX.GpxType
@@ -63,26 +63,26 @@
 
 -- | Reads a GPX file into a list of @Gpx@ values removing whitespace.
 readGpxFile :: FilePath -> IO [Gpx]
-readGpxFile = runX . xunpickleDocument (xpickle :: PU Gpx) [(a_remove_whitespace, v_1)]
+readGpxFile = runX . xunpickleDocument (xpickle :: PU Gpx) [withRemoveWS yes, withValidate          no]
 
 -- | Reads 0 or more GPX files into a list of @Gpx@ values removing whitespace.
 readGpxFiles :: [FilePath] -> IO [Gpx]
 readGpxFiles = fmap join . mapM readGpxFile
 
 -- | Reads a GPX file, executes the given function on the XML, then writes the given file.
-interactGpxIO' :: Attributes -- ^ The options for reading the GPX file.
+interactGpxIO' :: SysConfigList -- ^ The options for reading the GPX file.
                   -> FilePath -- ^ The GPX file to read.
                   -> (Gpx -> IO Gpx) -- ^ The function to execute on the XML that is read.
-                  -> Attributes -- ^ The options for writing the GPX file.
+                  -> SysConfigList -- ^ The options for writing the GPX file.
                   -> FilePath -- ^ The GPX file to write.
                   -> IO ()
 interactGpxIO' froma from f toa to = runX (xunpickleDocument (xpickle :: PU Gpx) froma from >>> arrIO f >>> xpickleDocument (xpickle :: PU Gpx) toa to) >> return ()
 
 -- | Reads a GPX file, executes the given functions on the XML, then writes the given file.
-interactsGpxIO' :: Attributes -- ^ The options for reading the GPX file.
+interactsGpxIO' :: SysConfigList -- ^ The options for reading the GPX file.
                    -> FilePath -- ^ The GPX file to read.
                    -> [Gpx -> IO Gpx] -- ^ The function to execute on the XML that is read.
-                   -> Attributes -- ^ The options for writing the GPX file.
+                   -> SysConfigList -- ^ The options for writing the GPX file.
                    -> FilePath -- ^ The GPX file to write.
                    -> IO ()
 interactsGpxIO' froma from = interactGpxIO' froma from . sumIO'
@@ -92,7 +92,7 @@
                  -> (Gpx -> IO Gpx) -- ^ The function to execute on the XML that is read.
                  -> FilePath -- ^ The GPX file to write.
                  -> IO ()
-interactGpxIO from f = interactGpxIO' [(a_remove_whitespace, v_1)] from f [(a_indent, v_1)]
+interactGpxIO from f = interactGpxIO' [] from f []
 
 -- | Reads a GPX file removing whitespace, executes the given functions on the XML, then writes the given file with indentation.
 interactsGpxIO :: FilePath -- ^ The GPX file to read.
@@ -102,19 +102,19 @@
 interactsGpxIO from = interactGpxIO from . sumIO'
 
 -- | Reads a GPX file, executes the given function on the XML, then writes the given file.
-interactGpx' :: Attributes -- ^ The options for reading the GPX file.
+interactGpx' :: SysConfigList -- ^ The options for reading the GPX file.
                 -> FilePath -- ^ The GPX file to read.
                 -> (Gpx -> Gpx) -- ^ The function to execute on the XML that is read.
-                -> Attributes -- ^ The options for writing the GPX file.
+                -> SysConfigList -- ^ The options for writing the GPX file.
                 -> FilePath -- ^ The GPX file to write.
                 -> IO ()
 interactGpx' froma from f = interactGpxIO' froma from (return . f)
 
 -- | Reads a GPX file, executes the given functions on the XML, then writes the given file.
-interactsGpx' :: Attributes -- ^ The options for reading the GPX file.
+interactsGpx' :: SysConfigList -- ^ The options for reading the GPX file.
                  -> FilePath -- ^ The GPX file to read.
                  -> [Gpx -> Gpx] -- ^ The functions to execute on the XML that is read.
-                 -> Attributes -- ^ The options for writing the GPX file.
+                 -> SysConfigList -- ^ The options for writing the GPX file.
                  -> FilePath -- ^ The GPX file to write.
                  -> IO ()
 interactsGpx' froma from = interactGpx' froma from . sum'
diff --git a/Data/Geo/GPX/GpxType.hs b/Data/Geo/GPX/GpxType.hs
--- a/Data/Geo/GPX/GpxType.hs
+++ b/Data/Geo/GPX/GpxType.hs
@@ -29,7 +29,7 @@
 import Data.Geo.GPX.Accessor.Bounds
 import Data.Geo.GPX.Accessor.Rtepts
 import Data.Geo.GPX.Accessor.Trkpts
-import Text.XML.HXT.Arrow
+import Text.XML.HXT.Core
 import Text.XML.HXT.Extras
 import Data.Maybe
 
diff --git a/Data/Geo/GPX/LatitudeType.hs b/Data/Geo/GPX/LatitudeType.hs
--- a/Data/Geo/GPX/LatitudeType.hs
+++ b/Data/Geo/GPX/LatitudeType.hs
@@ -8,7 +8,7 @@
 
 import Data.Geo.GPX.Accessor.Value
 import Data.Fixed
-import Text.XML.HXT.Arrow
+import Text.XML.HXT.Core
 
 newtype LatitudeType = LatitudeType Double
   deriving (Eq, Ord, Enum, Num, Fractional, Floating, Real, RealFrac, RealFloat)
diff --git a/Data/Geo/GPX/LinkType.hs b/Data/Geo/GPX/LinkType.hs
--- a/Data/Geo/GPX/LinkType.hs
+++ b/Data/Geo/GPX/LinkType.hs
@@ -4,7 +4,7 @@
                               linkType
                             ) where
 
-import Text.XML.HXT.Arrow
+import Text.XML.HXT.Core
 
 data LinkType = LinkType String (Maybe String) (Maybe String)
   deriving (Eq, Show)
diff --git a/Data/Geo/GPX/LongitudeType.hs b/Data/Geo/GPX/LongitudeType.hs
--- a/Data/Geo/GPX/LongitudeType.hs
+++ b/Data/Geo/GPX/LongitudeType.hs
@@ -8,7 +8,7 @@
 
 import Data.Geo.GPX.Accessor.Value
 import Data.Fixed
-import Text.XML.HXT.Arrow
+import Text.XML.HXT.Core
 
 newtype LongitudeType = LongitudeType Double
   deriving (Eq, Ord, Enum, Num, Fractional, Floating, Real, RealFrac, RealFloat)
diff --git a/Data/Geo/GPX/MetadataType.hs b/Data/Geo/GPX/MetadataType.hs
--- a/Data/Geo/GPX/MetadataType.hs
+++ b/Data/Geo/GPX/MetadataType.hs
@@ -20,7 +20,7 @@
 import Data.Geo.GPX.Accessor.Keywords
 import Data.Geo.GPX.Accessor.Bounds
 import Data.Geo.GPX.Accessor.Extensions
-import Text.XML.HXT.Arrow
+import Text.XML.HXT.Core
 import Text.XML.HXT.Extras
 import Text.XML.XSD.DateTime
 
diff --git a/Data/Geo/GPX/PersonType.hs b/Data/Geo/GPX/PersonType.hs
--- a/Data/Geo/GPX/PersonType.hs
+++ b/Data/Geo/GPX/PersonType.hs
@@ -9,7 +9,7 @@
 import Data.Geo.GPX.Accessor.Name
 import Data.Geo.GPX.Accessor.Email
 import Data.Geo.GPX.Accessor.Link
-import Text.XML.HXT.Arrow
+import Text.XML.HXT.Core
 
 data PersonType = PersonType (Maybe String) (Maybe EmailType) (Maybe LinkType)
   deriving (Eq, Show)
diff --git a/Data/Geo/GPX/PtType.hs b/Data/Geo/GPX/PtType.hs
--- a/Data/Geo/GPX/PtType.hs
+++ b/Data/Geo/GPX/PtType.hs
@@ -10,7 +10,7 @@
 import Data.Geo.GPX.Accessor.Lon
 import Data.Geo.GPX.Accessor.Ele
 import Data.Geo.GPX.Accessor.Time
-import Text.XML.HXT.Arrow
+import Text.XML.HXT.Core
 import Text.XML.XSD.DateTime
 
 data PtType = PtType LatitudeType LongitudeType (Maybe Double) (Maybe DateTime)
diff --git a/Data/Geo/GPX/PtsegType.hs b/Data/Geo/GPX/PtsegType.hs
--- a/Data/Geo/GPX/PtsegType.hs
+++ b/Data/Geo/GPX/PtsegType.hs
@@ -6,7 +6,7 @@
 
 import Data.Geo.GPX.PtType
 import Data.Geo.GPX.Accessor.Pts
-import Text.XML.HXT.Arrow
+import Text.XML.HXT.Core
 
 newtype PtsegType = PtsegType [PtType]
   deriving (Eq, Show)
diff --git a/Data/Geo/GPX/RteType.hs b/Data/Geo/GPX/RteType.hs
--- a/Data/Geo/GPX/RteType.hs
+++ b/Data/Geo/GPX/RteType.hs
@@ -16,7 +16,7 @@
 import Data.Geo.GPX.Accessor.Type
 import Data.Geo.GPX.Accessor.Extensions
 import Data.Geo.GPX.Accessor.Rtepts
-import Text.XML.HXT.Arrow
+import Text.XML.HXT.Core
 import Text.XML.HXT.Extras
 
 data RteType = RteType (Maybe String) (Maybe String) (Maybe String) (Maybe String) [LinkType] (Maybe Int) (Maybe String) (Maybe ExtensionsType) [WptType]
diff --git a/Data/Geo/GPX/TrkType.hs b/Data/Geo/GPX/TrkType.hs
--- a/Data/Geo/GPX/TrkType.hs
+++ b/Data/Geo/GPX/TrkType.hs
@@ -17,7 +17,7 @@
 import Data.Geo.GPX.Accessor.Extensions
 import Data.Geo.GPX.Accessor.Trksegs
 import Data.Geo.GPX.Accessor.Trkpts
-import Text.XML.HXT.Arrow
+import Text.XML.HXT.Core
 import Text.XML.HXT.Extras
 
 data TrkType = TrkType (Maybe String) (Maybe String) (Maybe String) (Maybe String) [LinkType] (Maybe Int) (Maybe String) (Maybe ExtensionsType) [TrksegType]
diff --git a/Data/Geo/GPX/TrksegType.hs b/Data/Geo/GPX/TrksegType.hs
--- a/Data/Geo/GPX/TrksegType.hs
+++ b/Data/Geo/GPX/TrksegType.hs
@@ -8,7 +8,7 @@
 import Data.Geo.GPX.ExtensionsType
 import Data.Geo.GPX.Accessor.Trkpts
 import Data.Geo.GPX.Accessor.Extensions
-import Text.XML.HXT.Arrow
+import Text.XML.HXT.Core
 
 data TrksegType = TrksegType [WptType] (Maybe ExtensionsType)
   deriving (Eq, Show)
diff --git a/Data/Geo/GPX/WptType.hs b/Data/Geo/GPX/WptType.hs
--- a/Data/Geo/GPX/WptType.hs
+++ b/Data/Geo/GPX/WptType.hs
@@ -35,7 +35,7 @@
 import Data.Geo.GPX.Accessor.Extensions
 import Data.Geo.GPX.Accessor.Latlon
 import Data.Geo.GPX.Accessor.Value
-import Text.XML.HXT.Arrow
+import Text.XML.HXT.Core
 import Text.XML.HXT.Extras
 import Text.XML.XSD.DateTime
 
diff --git a/GPX.cabal b/GPX.cabal
--- a/GPX.cabal
+++ b/GPX.cabal
@@ -1,14 +1,14 @@
 Name:                GPX
-Version:             0.4.8
+Version:             0.5
 License:             BSD3
 License-File:        LICENSE
 Synopsis:            Parse GPX files
 Description:         Parse GPS Exchange (GPX) files using HXT into data structures.
 Homepage:            http://code.google.com/p/geo-gpx/
 Category:            Utils
-Author:              Tony Morris <ʇǝu˙sıɹɹoɯʇ@ןןǝʞsɐɥ>
-Maintainer:          Tony Morris <ʇǝu˙sıɹɹoɯʇ@ןןǝʞsɐɥ>
-Copyright:           2009, 2010, 2011 Tony Morris
+Author:              Tony Morris
+Maintainer:          code@tmorris.net
+Copyright:           2009, 2010 Tony Morris
 build-type:          Simple
 cabal-version:       >= 1.2
 
@@ -17,7 +17,7 @@
 
 Library
   if flag(small_base)
-    Build-Depends: base < 5 && >= 3, hxt, hxt-extras, containers, xsd
+    Build-Depends: base < 5 && >= 3, hxt >= 9.1, hxt-extras >= 0.4.1, containers, xsd
   else
     Build-Depends: base < 5 && >= 3, hxt, hxt-extras, containers, xsd
 
