diff --git a/Data/Geo/GPX/Accessor/Accessor.hs b/Data/Geo/GPX/Accessor/Accessor.hs
--- a/Data/Geo/GPX/Accessor/Accessor.hs
+++ b/Data/Geo/GPX/Accessor/Accessor.hs
@@ -2,7 +2,5 @@
                                        using
                                      ) where
 
-import Control.Monad.Instances
-
-using :: (a -> d) -> (c -> a -> b) -> a -> (d -> c) -> b
-using f g = flip =<< (g .) . flip id . f
+using :: (a -> d) -> (c -> a -> b) -> (d -> c) -> a -> b
+using f g = flip (flip =<< (g .) . flip id . f)
diff --git a/Data/Geo/GPX/Accessor/Ageofdgpsdata.hs b/Data/Geo/GPX/Accessor/Ageofdgpsdata.hs
--- a/Data/Geo/GPX/Accessor/Ageofdgpsdata.hs
+++ b/Data/Geo/GPX/Accessor/Ageofdgpsdata.hs
@@ -9,5 +9,8 @@
   setAgeofdgpsdata' :: Double -> a -> a
   setAgeofdgpsdata' = setAgeofdgpsdata . Just
 
-  usingAgeofdgpsdata :: a -> (Maybe Double -> Maybe Double) -> a
+  usingAgeofdgpsdata :: (Maybe Double -> Maybe Double) -> a -> a
   usingAgeofdgpsdata = ageofdgpsdata `using` setAgeofdgpsdata
+
+  usingAgeofdgpsdata' :: (Double -> Double) -> a -> a
+  usingAgeofdgpsdata' = usingAgeofdgpsdata . fmap
diff --git a/Data/Geo/GPX/Accessor/Author.hs b/Data/Geo/GPX/Accessor/Author.hs
--- a/Data/Geo/GPX/Accessor/Author.hs
+++ b/Data/Geo/GPX/Accessor/Author.hs
@@ -7,5 +7,6 @@
 class Author a b | a -> b where
   author :: a -> b
   setAuthor :: b -> a -> a
-  updateAuthor :: a -> (b -> b) -> a
-  updateAuthor = author `using` setAuthor
+
+  usingAuthor :: (b -> b) -> a -> a
+  usingAuthor = author `using` setAuthor
diff --git a/Data/Geo/GPX/Accessor/Bounds.hs b/Data/Geo/GPX/Accessor/Bounds.hs
--- a/Data/Geo/GPX/Accessor/Bounds.hs
+++ b/Data/Geo/GPX/Accessor/Bounds.hs
@@ -10,5 +10,8 @@
   setBounds' :: BoundsType -> a -> a
   setBounds' = setBounds . Just
 
-  usingBounds :: a -> (Maybe BoundsType -> Maybe BoundsType) -> a
+  usingBounds :: (Maybe BoundsType -> Maybe BoundsType) -> a -> a
   usingBounds = bounds `using` setBounds
+
+  usingBounds' :: (BoundsType -> BoundsType) -> a -> a
+  usingBounds' = usingBounds . fmap
diff --git a/Data/Geo/GPX/Accessor/Cmt.hs b/Data/Geo/GPX/Accessor/Cmt.hs
--- a/Data/Geo/GPX/Accessor/Cmt.hs
+++ b/Data/Geo/GPX/Accessor/Cmt.hs
@@ -9,5 +9,8 @@
   setCmt' :: String -> a -> a
   setCmt' = setCmt . Just
 
-  usingCmt :: a -> (Maybe String -> Maybe String) -> a
+  usingCmt :: (Maybe String -> Maybe String) -> a -> a
   usingCmt = cmt `using` setCmt
+
+  usingCmt' :: (String -> String) -> a -> a
+  usingCmt' = usingCmt . fmap
diff --git a/Data/Geo/GPX/Accessor/Copyright.hs b/Data/Geo/GPX/Accessor/Copyright.hs
--- a/Data/Geo/GPX/Accessor/Copyright.hs
+++ b/Data/Geo/GPX/Accessor/Copyright.hs
@@ -10,5 +10,8 @@
   setCopyright' :: CopyrightType -> a -> a
   setCopyright' = setCopyright . Just
 
-  usingCopyright :: a -> (Maybe CopyrightType -> Maybe CopyrightType) -> a
+  usingCopyright :: (Maybe CopyrightType -> Maybe CopyrightType) -> a -> a
   usingCopyright = copyright `using` setCopyright
+
+  usingCopyright' :: (CopyrightType -> CopyrightType) -> a -> a
+  usingCopyright' = usingCopyright . fmap
diff --git a/Data/Geo/GPX/Accessor/Creator.hs b/Data/Geo/GPX/Accessor/Creator.hs
--- a/Data/Geo/GPX/Accessor/Creator.hs
+++ b/Data/Geo/GPX/Accessor/Creator.hs
@@ -6,5 +6,5 @@
   creator :: a -> String
   setCreator :: String -> a -> a
 
-  usingCreator :: a -> (String -> String) -> a
+  usingCreator :: (String -> String) -> a -> a
   usingCreator = creator `using` setCreator
diff --git a/Data/Geo/GPX/Accessor/Desc.hs b/Data/Geo/GPX/Accessor/Desc.hs
--- a/Data/Geo/GPX/Accessor/Desc.hs
+++ b/Data/Geo/GPX/Accessor/Desc.hs
@@ -9,5 +9,8 @@
   setDesc' :: String -> a -> a
   setDesc' = setDesc . Just
 
-  usingDesc :: a -> (Maybe String -> Maybe String) -> a
+  usingDesc :: (Maybe String -> Maybe String) -> a -> a
   usingDesc = desc `using` setDesc
+
+  usingDesc' :: (String -> String) -> a -> a
+  usingDesc' = usingDesc . fmap
diff --git a/Data/Geo/GPX/Accessor/Dgpsid.hs b/Data/Geo/GPX/Accessor/Dgpsid.hs
--- a/Data/Geo/GPX/Accessor/Dgpsid.hs
+++ b/Data/Geo/GPX/Accessor/Dgpsid.hs
@@ -10,5 +10,8 @@
   setDgpsid' :: DgpsStationType -> a -> a
   setDgpsid' = setDgpsid . Just
 
-  usingDgpsid :: a -> (Maybe DgpsStationType -> Maybe DgpsStationType) -> a
+  usingDgpsid :: (Maybe DgpsStationType -> Maybe DgpsStationType) -> a -> a
   usingDgpsid = dgpsid `using` setDgpsid
+
+  usingDgpsid' :: (DgpsStationType -> DgpsStationType) -> a -> a
+  usingDgpsid' = usingDgpsid . fmap
diff --git a/Data/Geo/GPX/Accessor/Domain.hs b/Data/Geo/GPX/Accessor/Domain.hs
--- a/Data/Geo/GPX/Accessor/Domain.hs
+++ b/Data/Geo/GPX/Accessor/Domain.hs
@@ -6,5 +6,5 @@
   domain :: a -> String
   setDomain :: String -> a -> a
 
-  usingDomain :: a -> (String -> String) -> a
+  usingDomain :: (String -> String) -> a -> a
   usingDomain = domain `using` setDomain
diff --git a/Data/Geo/GPX/Accessor/Ele.hs b/Data/Geo/GPX/Accessor/Ele.hs
--- a/Data/Geo/GPX/Accessor/Ele.hs
+++ b/Data/Geo/GPX/Accessor/Ele.hs
@@ -9,5 +9,8 @@
   setEle' :: Double -> a -> a
   setEle' = setEle . Just
 
-  usingEle :: a -> (Maybe Double -> Maybe Double) -> a
+  usingEle :: (Maybe Double -> Maybe Double) -> a -> a
   usingEle = ele `using` setEle
+
+  usingEle' :: (Double -> Double) -> a -> a
+  usingEle' = usingEle . fmap
diff --git a/Data/Geo/GPX/Accessor/Email.hs b/Data/Geo/GPX/Accessor/Email.hs
--- a/Data/Geo/GPX/Accessor/Email.hs
+++ b/Data/Geo/GPX/Accessor/Email.hs
@@ -10,5 +10,8 @@
   setEmail' :: EmailType -> a -> a
   setEmail' = setEmail . Just
 
-  usingEmail :: a -> (Maybe EmailType -> Maybe EmailType) -> a
+  usingEmail :: (Maybe EmailType -> Maybe EmailType) -> a -> a
   usingEmail = email `using` setEmail
+
+  usingEmail' :: (EmailType -> EmailType) -> a -> a
+  usingEmail' = usingEmail . fmap
diff --git a/Data/Geo/GPX/Accessor/Extensions.hs b/Data/Geo/GPX/Accessor/Extensions.hs
--- a/Data/Geo/GPX/Accessor/Extensions.hs
+++ b/Data/Geo/GPX/Accessor/Extensions.hs
@@ -10,5 +10,8 @@
   setExtensions' :: ExtensionsType -> a -> a
   setExtensions' = setExtensions . Just
 
-  usingExtensions :: a -> (Maybe ExtensionsType -> Maybe ExtensionsType) -> a
+  usingExtensions :: (Maybe ExtensionsType -> Maybe ExtensionsType) -> a -> a
   usingExtensions = extensions `using` setExtensions
+
+  usingExtensions' :: (ExtensionsType -> ExtensionsType) -> a -> a
+  usingExtensions' = usingExtensions . fmap
diff --git a/Data/Geo/GPX/Accessor/Fix.hs b/Data/Geo/GPX/Accessor/Fix.hs
--- a/Data/Geo/GPX/Accessor/Fix.hs
+++ b/Data/Geo/GPX/Accessor/Fix.hs
@@ -10,5 +10,8 @@
   setFix' :: FixType -> a -> a
   setFix' = setFix . Just
 
-  usingFix :: a -> (Maybe FixType -> Maybe FixType) -> a
+  usingFix :: (Maybe FixType -> Maybe FixType) -> a -> a
   usingFix = fix `using` setFix
+
+  usingFix' :: (FixType -> FixType) -> a -> a
+  usingFix' = usingFix . fmap
diff --git a/Data/Geo/GPX/Accessor/Geoidheight.hs b/Data/Geo/GPX/Accessor/Geoidheight.hs
--- a/Data/Geo/GPX/Accessor/Geoidheight.hs
+++ b/Data/Geo/GPX/Accessor/Geoidheight.hs
@@ -9,5 +9,8 @@
   setGeoidheight' :: Double -> a -> a
   setGeoidheight' = setGeoidheight . Just
 
-  usingGeoidheight :: a -> (Maybe Double -> Maybe Double) -> a
+  usingGeoidheight :: (Maybe Double -> Maybe Double) -> a -> a
   usingGeoidheight = geoidheight `using` setGeoidheight
+
+  usingGeoidheight' :: (Double -> Double) -> a -> a
+  usingGeoidheight' = usingGeoidheight . fmap
diff --git a/Data/Geo/GPX/Accessor/Hdop.hs b/Data/Geo/GPX/Accessor/Hdop.hs
--- a/Data/Geo/GPX/Accessor/Hdop.hs
+++ b/Data/Geo/GPX/Accessor/Hdop.hs
@@ -9,5 +9,8 @@
   setHdop' :: Double -> a -> a
   setHdop' = setHdop . Just
 
-  usingHdop :: a -> (Maybe Double -> Maybe Double) -> a
+  usingHdop :: (Maybe Double -> Maybe Double) -> a -> a
   usingHdop = hdop `using` setHdop
+
+  usingHdop' :: (Double -> Double) -> a -> a
+  usingHdop' = usingHdop . fmap
diff --git a/Data/Geo/GPX/Accessor/Href.hs b/Data/Geo/GPX/Accessor/Href.hs
--- a/Data/Geo/GPX/Accessor/Href.hs
+++ b/Data/Geo/GPX/Accessor/Href.hs
@@ -6,5 +6,5 @@
   href :: a -> String
   setHref :: String -> a -> a
 
-  usingHref :: a -> (String -> String) -> a
+  usingHref :: (String -> String) -> a -> a
   usingHref = href `using` setHref
diff --git a/Data/Geo/GPX/Accessor/Id.hs b/Data/Geo/GPX/Accessor/Id.hs
--- a/Data/Geo/GPX/Accessor/Id.hs
+++ b/Data/Geo/GPX/Accessor/Id.hs
@@ -7,5 +7,5 @@
   id :: a -> String
   setId :: String -> a -> a
 
-  usingId :: a -> (String -> String) -> a
+  usingId :: (String -> String) -> a -> a
   usingId = id `using` setId
diff --git a/Data/Geo/GPX/Accessor/Keywords.hs b/Data/Geo/GPX/Accessor/Keywords.hs
--- a/Data/Geo/GPX/Accessor/Keywords.hs
+++ b/Data/Geo/GPX/Accessor/Keywords.hs
@@ -9,5 +9,8 @@
   setKeywords' :: String -> a -> a
   setKeywords' = setKeywords . Just
 
-  usingKeywords :: a -> (Maybe String -> Maybe String) -> a
+  usingKeywords :: (Maybe String -> Maybe String) -> a -> a
   usingKeywords = keywords `using` setKeywords
+
+  usingKeywords' :: (String -> String) -> a -> a
+  usingKeywords' = usingKeywords . fmap
diff --git a/Data/Geo/GPX/Accessor/Lat.hs b/Data/Geo/GPX/Accessor/Lat.hs
--- a/Data/Geo/GPX/Accessor/Lat.hs
+++ b/Data/Geo/GPX/Accessor/Lat.hs
@@ -7,5 +7,5 @@
   lat :: a -> LatitudeType
   setLat :: LatitudeType -> a -> a
 
-  usingLat :: a -> (LatitudeType -> LatitudeType) -> a
+  usingLat :: (LatitudeType -> LatitudeType) -> a -> a
   usingLat = lat `using` setLat
diff --git a/Data/Geo/GPX/Accessor/Latlon.hs b/Data/Geo/GPX/Accessor/Latlon.hs
--- a/Data/Geo/GPX/Accessor/Latlon.hs
+++ b/Data/Geo/GPX/Accessor/Latlon.hs
@@ -7,5 +7,5 @@
   latlon :: a -> (Double, Double)
   setLatlon :: (Double, Double) -> a -> a
 
-  usingLatlon :: a -> ((Double, Double) -> (Double, Double)) -> a
+  usingLatlon :: ((Double, Double) -> (Double, Double)) -> a -> a
   usingLatlon = latlon `using` setLatlon
diff --git a/Data/Geo/GPX/Accessor/License.hs b/Data/Geo/GPX/Accessor/License.hs
--- a/Data/Geo/GPX/Accessor/License.hs
+++ b/Data/Geo/GPX/Accessor/License.hs
@@ -9,5 +9,8 @@
   setLicense' :: String -> a -> a
   setLicense' = setLicense . Just
 
-  usingLicense :: a -> (Maybe String -> Maybe String) -> a
+  usingLicense :: (Maybe String -> Maybe String) -> a -> a
   usingLicense = license `using` setLicense
+
+  usingLicense' :: (String -> String) -> a -> a
+  usingLicense' = usingLicense . fmap
diff --git a/Data/Geo/GPX/Accessor/Link.hs b/Data/Geo/GPX/Accessor/Link.hs
--- a/Data/Geo/GPX/Accessor/Link.hs
+++ b/Data/Geo/GPX/Accessor/Link.hs
@@ -10,5 +10,8 @@
   setLink' :: LinkType -> a -> a
   setLink' = setLink . Just
 
-  usingLink :: a -> (Maybe LinkType -> Maybe LinkType) -> a
+  usingLink :: (Maybe LinkType -> Maybe LinkType) -> a -> a
   usingLink = link `using` setLink
+
+  usingLink' :: (LinkType -> LinkType) -> a -> a
+  usingLink' = usingLink . fmap
diff --git a/Data/Geo/GPX/Accessor/Links.hs b/Data/Geo/GPX/Accessor/Links.hs
--- a/Data/Geo/GPX/Accessor/Links.hs
+++ b/Data/Geo/GPX/Accessor/Links.hs
@@ -10,5 +10,8 @@
   setLinks' :: LinkType -> a -> a
   setLinks' = setLinks . return
 
-  usingLinks :: a -> ([LinkType] -> [LinkType]) -> a
+  usingLinks :: ([LinkType] -> [LinkType]) -> a -> a
   usingLinks = links `using` setLinks
+
+  usingLinks' :: (LinkType -> LinkType) -> a -> a
+  usingLinks' = usingLinks . fmap
diff --git a/Data/Geo/GPX/Accessor/Lon.hs b/Data/Geo/GPX/Accessor/Lon.hs
--- a/Data/Geo/GPX/Accessor/Lon.hs
+++ b/Data/Geo/GPX/Accessor/Lon.hs
@@ -7,5 +7,5 @@
   lon :: a -> LongitudeType
   setLon :: LongitudeType -> a -> a
 
-  usingLon :: a -> (LongitudeType -> LongitudeType) -> a
+  usingLon :: (LongitudeType -> LongitudeType) -> a -> a
   usingLon = lon `using` setLon
diff --git a/Data/Geo/GPX/Accessor/Magvar.hs b/Data/Geo/GPX/Accessor/Magvar.hs
--- a/Data/Geo/GPX/Accessor/Magvar.hs
+++ b/Data/Geo/GPX/Accessor/Magvar.hs
@@ -10,5 +10,8 @@
   setMagvar' :: DegreesType -> a -> a
   setMagvar' = setMagvar . Just
 
-  usingMagvar :: a -> (Maybe DegreesType -> Maybe DegreesType) -> a
+  usingMagvar :: (Maybe DegreesType -> Maybe DegreesType) -> a -> a
   usingMagvar = magvar `using` setMagvar
+
+  usingMagvar' :: (DegreesType -> DegreesType) -> a -> a
+  usingMagvar' = usingMagvar . fmap
diff --git a/Data/Geo/GPX/Accessor/Maxlat.hs b/Data/Geo/GPX/Accessor/Maxlat.hs
--- a/Data/Geo/GPX/Accessor/Maxlat.hs
+++ b/Data/Geo/GPX/Accessor/Maxlat.hs
@@ -7,5 +7,5 @@
   maxlat :: a -> LatitudeType
   setMaxlat :: LatitudeType -> a -> a
 
-  usingMaxlat :: a -> (LatitudeType -> LatitudeType) -> a
+  usingMaxlat :: (LatitudeType -> LatitudeType) -> a -> a
   usingMaxlat = maxlat `using` setMaxlat
diff --git a/Data/Geo/GPX/Accessor/Maxlon.hs b/Data/Geo/GPX/Accessor/Maxlon.hs
--- a/Data/Geo/GPX/Accessor/Maxlon.hs
+++ b/Data/Geo/GPX/Accessor/Maxlon.hs
@@ -7,5 +7,5 @@
   maxlon :: a -> LongitudeType
   setMaxlon :: LongitudeType -> a -> a
 
-  usingMaxlon :: a -> (LongitudeType -> LongitudeType) -> a
+  usingMaxlon :: (LongitudeType -> LongitudeType) -> a -> a
   usingMaxlon = maxlon `using` setMaxlon
diff --git a/Data/Geo/GPX/Accessor/Metadata.hs b/Data/Geo/GPX/Accessor/Metadata.hs
--- a/Data/Geo/GPX/Accessor/Metadata.hs
+++ b/Data/Geo/GPX/Accessor/Metadata.hs
@@ -10,5 +10,8 @@
   setMetadata' :: MetadataType -> a -> a
   setMetadata' = setMetadata . Just
 
-  usingMetadata :: a -> (Maybe MetadataType -> Maybe MetadataType) -> a
+  usingMetadata :: (Maybe MetadataType -> Maybe MetadataType) -> a -> a
   usingMetadata = metadata `using` setMetadata
+
+  usingMetadata' :: (MetadataType -> MetadataType) -> a -> a
+  usingMetadata' = usingMetadata . fmap
diff --git a/Data/Geo/GPX/Accessor/Minlat.hs b/Data/Geo/GPX/Accessor/Minlat.hs
--- a/Data/Geo/GPX/Accessor/Minlat.hs
+++ b/Data/Geo/GPX/Accessor/Minlat.hs
@@ -7,5 +7,5 @@
   minlat :: a -> LatitudeType
   setMinlat :: LatitudeType -> a -> a
 
-  usingMinlat :: a -> (LatitudeType -> LatitudeType) -> a
+  usingMinlat :: (LatitudeType -> LatitudeType) -> a -> a
   usingMinlat = minlat `using` setMinlat
diff --git a/Data/Geo/GPX/Accessor/Minlon.hs b/Data/Geo/GPX/Accessor/Minlon.hs
--- a/Data/Geo/GPX/Accessor/Minlon.hs
+++ b/Data/Geo/GPX/Accessor/Minlon.hs
@@ -7,5 +7,5 @@
   minlon :: a -> LongitudeType
   setMinlon :: LongitudeType -> a -> a
 
-  usingMinlon :: a -> (LongitudeType -> LongitudeType) -> a
+  usingMinlon :: (LongitudeType -> LongitudeType) -> a -> a
   usingMinlon = minlon `using` setMinlon
diff --git a/Data/Geo/GPX/Accessor/Name.hs b/Data/Geo/GPX/Accessor/Name.hs
--- a/Data/Geo/GPX/Accessor/Name.hs
+++ b/Data/Geo/GPX/Accessor/Name.hs
@@ -9,5 +9,8 @@
   setName' :: String -> a -> a
   setName' = setName . Just
 
-  usingName :: a -> (Maybe String -> Maybe String) -> a
+  usingName :: (Maybe String -> Maybe String) -> a -> a
   usingName = name `using` setName
+
+  usingName' :: (String -> String) -> a -> a
+  usingName' = usingName . fmap
diff --git a/Data/Geo/GPX/Accessor/Number.hs b/Data/Geo/GPX/Accessor/Number.hs
--- a/Data/Geo/GPX/Accessor/Number.hs
+++ b/Data/Geo/GPX/Accessor/Number.hs
@@ -9,5 +9,8 @@
   setNumber' :: Int -> a -> a
   setNumber' = setNumber . Just
 
-  usingNumber :: a -> (Maybe Int -> Maybe Int) -> a
+  usingNumber :: (Maybe Int -> Maybe Int) -> a -> a
   usingNumber = number `using` setNumber
+
+  usingNumber' :: (Int -> Int) -> a -> a
+  usingNumber' = usingNumber . fmap
diff --git a/Data/Geo/GPX/Accessor/Pdop.hs b/Data/Geo/GPX/Accessor/Pdop.hs
--- a/Data/Geo/GPX/Accessor/Pdop.hs
+++ b/Data/Geo/GPX/Accessor/Pdop.hs
@@ -9,5 +9,8 @@
   setPdop' :: Double -> a -> a
   setPdop' = setPdop . Just
 
-  usingPdop :: a -> (Maybe Double -> Maybe Double) -> a
+  usingPdop :: (Maybe Double -> Maybe Double) -> a -> a
   usingPdop = pdop `using` setPdop
+
+  usingPdop' :: (Double -> Double) -> a -> a
+  usingPdop' = usingPdop . fmap
diff --git a/Data/Geo/GPX/Accessor/Pts.hs b/Data/Geo/GPX/Accessor/Pts.hs
--- a/Data/Geo/GPX/Accessor/Pts.hs
+++ b/Data/Geo/GPX/Accessor/Pts.hs
@@ -10,5 +10,8 @@
   setPts' :: PtType -> a -> a
   setPts' = setPts . return
 
-  usingPts :: a -> ([PtType] -> [PtType]) -> a
+  usingPts :: ([PtType] -> [PtType]) -> a -> a
   usingPts = pts `using` setPts
+
+  usingPts' :: (PtType -> PtType) -> a -> a
+  usingPts' = usingPts . fmap
diff --git a/Data/Geo/GPX/Accessor/Rtepts.hs b/Data/Geo/GPX/Accessor/Rtepts.hs
--- a/Data/Geo/GPX/Accessor/Rtepts.hs
+++ b/Data/Geo/GPX/Accessor/Rtepts.hs
@@ -10,5 +10,8 @@
   setRtepts' :: WptType -> a -> a
   setRtepts' = setRtepts . return
 
-  usingRtepts :: a -> ([WptType] -> [WptType]) -> a
+  usingRtepts :: ([WptType] -> [WptType]) -> a -> a
   usingRtepts = rtepts `using` setRtepts
+
+  usingRtepts' :: (WptType -> WptType) -> a -> a
+  usingRtepts' = usingRtepts . fmap
diff --git a/Data/Geo/GPX/Accessor/Rtes.hs b/Data/Geo/GPX/Accessor/Rtes.hs
--- a/Data/Geo/GPX/Accessor/Rtes.hs
+++ b/Data/Geo/GPX/Accessor/Rtes.hs
@@ -10,5 +10,8 @@
   setRtes' :: RteType -> a -> a
   setRtes' = setRtes . return
 
-  usingRtes :: a -> ([RteType] -> [RteType]) -> a
+  usingRtes :: ([RteType] -> [RteType]) -> a -> a
   usingRtes = rtes `using` setRtes
+
+  usingRtes' :: (RteType -> RteType) -> a -> a
+  usingRtes' = usingRtes . fmap
diff --git a/Data/Geo/GPX/Accessor/Sat.hs b/Data/Geo/GPX/Accessor/Sat.hs
--- a/Data/Geo/GPX/Accessor/Sat.hs
+++ b/Data/Geo/GPX/Accessor/Sat.hs
@@ -9,5 +9,8 @@
   setSat' :: Int -> a -> a
   setSat' = setSat . Just
 
-  usingSat :: a -> (Maybe Int -> Maybe Int) -> a
+  usingSat :: (Maybe Int -> Maybe Int) -> a -> a
   usingSat = sat `using` setSat
+
+  usingSat' :: (Int -> Int) -> a -> a
+  usingSat' = usingSat . fmap
diff --git a/Data/Geo/GPX/Accessor/Src.hs b/Data/Geo/GPX/Accessor/Src.hs
--- a/Data/Geo/GPX/Accessor/Src.hs
+++ b/Data/Geo/GPX/Accessor/Src.hs
@@ -9,5 +9,8 @@
   setSrc' :: String -> a -> a
   setSrc' = setSrc . Just
 
-  usingSrc :: a -> (Maybe String -> Maybe String) -> a
+  usingSrc :: (Maybe String -> Maybe String) -> a -> a
   usingSrc = src `using` setSrc
+
+  usingSrc' :: (String -> String) -> a -> a
+  usingSrc' = usingSrc . fmap
diff --git a/Data/Geo/GPX/Accessor/Sym.hs b/Data/Geo/GPX/Accessor/Sym.hs
--- a/Data/Geo/GPX/Accessor/Sym.hs
+++ b/Data/Geo/GPX/Accessor/Sym.hs
@@ -9,5 +9,8 @@
   setSym' :: String -> a -> a
   setSym' = setSym . Just
 
-  usingSym :: a -> (Maybe String -> Maybe String) -> a
+  usingSym :: (Maybe String -> Maybe String) -> a -> a
   usingSym = sym `using` setSym
+
+  usingSym' :: (String -> String) -> a -> a
+  usingSym' = usingSym . fmap
diff --git a/Data/Geo/GPX/Accessor/Text.hs b/Data/Geo/GPX/Accessor/Text.hs
--- a/Data/Geo/GPX/Accessor/Text.hs
+++ b/Data/Geo/GPX/Accessor/Text.hs
@@ -9,5 +9,8 @@
   setText' :: String -> a -> a
   setText' = setText . Just
 
-  usingText :: a -> (Maybe String -> Maybe String) -> a
+  usingText :: (Maybe String -> Maybe String) -> a -> a
   usingText = text `using` setText
+
+  usingText' :: (String -> String) -> a -> a
+  usingText' = usingText . fmap
diff --git a/Data/Geo/GPX/Accessor/Time.hs b/Data/Geo/GPX/Accessor/Time.hs
--- a/Data/Geo/GPX/Accessor/Time.hs
+++ b/Data/Geo/GPX/Accessor/Time.hs
@@ -1,7 +1,17 @@
 module Data.Geo.GPX.Accessor.Time where
 
 import Text.XML.XSD.DateTime
+import Data.Geo.GPX.Accessor.Accessor
 
 class Time a where
   time :: a -> Maybe DateTime
   setTime :: Maybe DateTime -> a -> a
+
+  setTime' :: DateTime -> a -> a
+  setTime' = setTime . Just
+
+  usingTime :: (Maybe DateTime -> Maybe DateTime) -> a -> a
+  usingTime = time `using` setTime
+
+  usingTime' :: (DateTime -> DateTime) -> a -> a
+  usingTime' = usingTime . fmap
diff --git a/Data/Geo/GPX/Accessor/Trkpts.hs b/Data/Geo/GPX/Accessor/Trkpts.hs
--- a/Data/Geo/GPX/Accessor/Trkpts.hs
+++ b/Data/Geo/GPX/Accessor/Trkpts.hs
@@ -10,5 +10,8 @@
   setTrkpts' :: WptType -> a -> a
   setTrkpts' = setTrkpts . return
 
-  usingTrkpts :: a -> ([WptType] -> [WptType]) -> a
+  usingTrkpts :: ([WptType] -> [WptType]) -> a -> a
   usingTrkpts = trkpts `using` setTrkpts
+
+  usingTrkpts' :: (WptType -> WptType) -> a -> a
+  usingTrkpts' = usingTrkpts . fmap
diff --git a/Data/Geo/GPX/Accessor/Trks.hs b/Data/Geo/GPX/Accessor/Trks.hs
--- a/Data/Geo/GPX/Accessor/Trks.hs
+++ b/Data/Geo/GPX/Accessor/Trks.hs
@@ -10,5 +10,8 @@
   setTrks' :: TrkType -> a -> a
   setTrks' = setTrks . return
 
-  usingTrks :: a -> ([TrkType] -> [TrkType]) -> a
+  usingTrks :: ([TrkType] -> [TrkType]) -> a -> a
   usingTrks = trks `using` setTrks
+
+  usingTrks' :: (TrkType -> TrkType) -> a -> a
+  usingTrks' = usingTrks . fmap
diff --git a/Data/Geo/GPX/Accessor/Trksegs.hs b/Data/Geo/GPX/Accessor/Trksegs.hs
--- a/Data/Geo/GPX/Accessor/Trksegs.hs
+++ b/Data/Geo/GPX/Accessor/Trksegs.hs
@@ -10,5 +10,8 @@
   setTrksegs' :: TrksegType -> a -> a
   setTrksegs' = setTrksegs . return
 
-  usingTrksegs :: a -> ([TrksegType] -> [TrksegType]) -> a
+  usingTrksegs :: ([TrksegType] -> [TrksegType]) -> a -> a
   usingTrksegs = trksegs `using` setTrksegs
+
+  usingTrksegs' :: (TrksegType -> TrksegType) -> a -> a
+  usingTrksegs' = usingTrksegs . fmap
diff --git a/Data/Geo/GPX/Accessor/Type.hs b/Data/Geo/GPX/Accessor/Type.hs
--- a/Data/Geo/GPX/Accessor/Type.hs
+++ b/Data/Geo/GPX/Accessor/Type.hs
@@ -9,5 +9,8 @@
   setType' :: String -> a -> a
   setType' = setType . Just
 
-  usingType :: a -> (Maybe String -> Maybe String) -> a
+  usingType :: (Maybe String -> Maybe String) -> a -> a
   usingType = type' `using` setType
+
+  usingType' :: (String -> String) -> a -> a
+  usingType' = usingType . fmap
diff --git a/Data/Geo/GPX/Accessor/Value.hs b/Data/Geo/GPX/Accessor/Value.hs
--- a/Data/Geo/GPX/Accessor/Value.hs
+++ b/Data/Geo/GPX/Accessor/Value.hs
@@ -7,5 +7,5 @@
   value :: a -> b
   setValue :: b -> a -> a
 
-  usingValue :: a -> (b -> b) -> a
+  usingValue :: (b -> b) -> a -> a
   usingValue = value `using` setValue
diff --git a/Data/Geo/GPX/Accessor/Vdop.hs b/Data/Geo/GPX/Accessor/Vdop.hs
--- a/Data/Geo/GPX/Accessor/Vdop.hs
+++ b/Data/Geo/GPX/Accessor/Vdop.hs
@@ -9,5 +9,8 @@
   setVdop' :: Double -> a -> a
   setVdop' = setVdop . Just
 
-  usingVdop :: a -> (Maybe Double -> Maybe Double) -> a
+  usingVdop :: (Maybe Double -> Maybe Double) -> a -> a
   usingVdop = vdop `using` setVdop
+
+  usingVdop' :: (Double -> Double) -> a -> a
+  usingVdop' = usingVdop . fmap
diff --git a/Data/Geo/GPX/Accessor/Version.hs b/Data/Geo/GPX/Accessor/Version.hs
--- a/Data/Geo/GPX/Accessor/Version.hs
+++ b/Data/Geo/GPX/Accessor/Version.hs
@@ -6,5 +6,5 @@
   version :: a -> String
   setVersion :: String -> a -> a
 
-  usingVersion :: a -> (String -> String) -> a
+  usingVersion :: (String -> String) -> a -> a
   usingVersion = version `using` setVersion
diff --git a/Data/Geo/GPX/Accessor/Wpts.hs b/Data/Geo/GPX/Accessor/Wpts.hs
--- a/Data/Geo/GPX/Accessor/Wpts.hs
+++ b/Data/Geo/GPX/Accessor/Wpts.hs
@@ -10,5 +10,8 @@
   setWpts' :: WptType -> a -> a
   setWpts' = setWpts . return
 
-  usingWpts :: a -> ([WptType] -> [WptType]) -> a
+  usingWpts :: ([WptType] -> [WptType]) -> a -> a
   usingWpts = wpts `using` setWpts
+
+  usingWpts' :: (WptType -> WptType) -> a -> a
+  usingWpts' = usingWpts . fmap
diff --git a/Data/Geo/GPX/Accessor/Year.hs b/Data/Geo/GPX/Accessor/Year.hs
--- a/Data/Geo/GPX/Accessor/Year.hs
+++ b/Data/Geo/GPX/Accessor/Year.hs
@@ -9,5 +9,8 @@
   setYear' :: String -> a -> a
   setYear' = setYear . Just
 
-  usingYear :: a -> (Maybe String -> Maybe String) -> a
+  usingYear :: (Maybe String -> Maybe String) -> a -> a
   usingYear = year `using` setYear
+
+  usingYear' :: (String -> String) -> a -> a
+  usingYear' = usingYear . fmap
diff --git a/GPX.cabal b/GPX.cabal
--- a/GPX.cabal
+++ b/GPX.cabal
@@ -1,5 +1,5 @@
 Name:                GPX
-Version:             0.4.3
+Version:             0.4.4
 License:             BSD3
 License-File:        LICENSE
 Synopsis:            Parse GPX files
