diff --git a/hw-uri.cabal b/hw-uri.cabal
--- a/hw-uri.cabal
+++ b/hw-uri.cabal
@@ -1,7 +1,7 @@
 cabal-version:          2.2
 
 name:                   hw-uri
-version:                0.1.1.1
+version:                0.1.1.2
 synopsis:               Supports IO on URIs
 description:            Supports IO on URIs.
 homepage:               https://github.com/haskell-works/hw-uri
diff --git a/src/HaskellWorks/Data/Uri/Location.hs b/src/HaskellWorks/Data/Uri/Location.hs
--- a/src/HaskellWorks/Data/Uri/Location.hs
+++ b/src/HaskellWorks/Data/Uri/Location.hs
@@ -1,6 +1,7 @@
 {-# LANGUAGE DataKinds              #-}
 {-# LANGUAGE DeriveGeneric          #-}
 {-# LANGUAGE FunctionalDependencies #-}
+{-# LANGUAGE MultiParamTypeClasses  #-}
 {-# LANGUAGE MultiWayIf             #-}
 {-# LANGUAGE OverloadedStrings      #-}
 {-# LANGUAGE TypeApplications       #-}
@@ -10,22 +11,25 @@
   ( IsPath(..)
   , Location(..)
   , toLocation
+  , basename
   , dirname
   ) where
 
-import Antiope.Core         (ToText (..), fromText)
-import Antiope.S3           (ObjectKey (..), S3Uri (..))
+import Antiope.Core              (ToText (..), fromText)
+import Antiope.S3                (ObjectKey (..), S3Uri (..))
 import Control.Applicative
+import Control.Lens              ((^.))
 import Data.Aeson
-import Data.Maybe           (fromMaybe)
-import Data.Semigroup       ((<>))
-import Data.Text            (Text)
-import GHC.Generics         (Generic)
+import Data.Generics.Product.Any
+import Data.Maybe                (fromMaybe)
+import Data.Semigroup            ((<>))
+import Data.Text                 (Text)
+import GHC.Generics              (Generic)
 
+import qualified Antiope.S3.Types as Z
+import qualified Data.Aeson.Types as J
 import qualified Data.Text        as T
 import qualified System.FilePath  as FP
-import qualified Data.Aeson.Types as J
-import qualified Antiope.S3.Types as Z
 
 class IsPath a s | a -> s where
   (</>)  :: a -> s -> a
@@ -44,13 +48,13 @@
 
 instance ToJSON Location where
   toJSON v = case v of
-    S3 uri          -> toJSON uri
-    Local filePath  -> toJSON filePath
-    HttpUri text    -> toJSON text
+    S3 uri         -> toJSON uri
+    Local filePath -> toJSON filePath
+    HttpUri text   -> toJSON text
 
 parseJsonLocal :: Value -> J.Parser FilePath
 parseJsonLocal (J.String v) = return (T.unpack v)
-parseJsonLocal v = J.typeMismatch ("FilePath (String)") v
+parseJsonLocal v            = J.typeMismatch ("FilePath (String)") v
 
 parseJsonHttpUri :: Value -> J.Parser Text
 parseJsonHttpUri v@(J.String s) = if T.isPrefixOf "http://" s || T.isPrefixOf "https://" s
@@ -65,9 +69,9 @@
     <|> (Local    <$> parseJsonLocal   v)
 
 instance ToText Location where
-  toText (S3 uri)       = toText uri
-  toText (Local p)      = T.pack p
-  toText (HttpUri uri)  = uri
+  toText (S3 uri)      = toText uri
+  toText (Local p)     = T.pack p
+  toText (HttpUri uri) = uri
 
 instance IsPath Location Text where
   (S3      b) </>  p = S3      (b </>           p)
@@ -116,6 +120,12 @@
   S3 s3Uri    -> S3 (Z.dirname s3Uri)
   Local fp    -> Local (FP.takeDirectory fp)
   HttpUri uri -> HttpUri (T.pack (FP.takeDirectory (T.unpack uri)))
+
+basename :: Location -> Text
+basename location = case location of
+  S3 s3Uri    -> T.pack . FP.takeFileName $ T.unpack (toText (s3Uri ^. the @"objectKey"))
+  Local fp    -> T.pack $ FP.takeFileName fp
+  HttpUri uri -> T.pack . FP.takeFileName $ T.unpack uri
 
 -------------------------------------------------------------------------------
 stripStart :: Text -> Text -> Text
diff --git a/test/HaskellWorks/Data/Uri/Gen.hs b/test/HaskellWorks/Data/Uri/Gen.hs
--- a/test/HaskellWorks/Data/Uri/Gen.hs
+++ b/test/HaskellWorks/Data/Uri/Gen.hs
@@ -7,20 +7,15 @@
   , localPath
   ) where
 
-import Antiope.Core                   (toText)
 import Antiope.S3                     (BucketName (..), ObjectKey (..), S3Uri (..))
-import Data.Aeson
 import Data.Semigroup                 ((<>))
 import HaskellWorks.Data.Uri.Location
-import HaskellWorks.Hspec.Hedgehog
-import Hedgehog
-import Test.Hspec
+import Hedgehog                       (MonadGen)
 
-import qualified Data.List       as L
-import qualified Data.Text       as T
-import qualified Hedgehog.Gen    as G
-import qualified Hedgehog.Range  as R
-import qualified System.FilePath as FP
+import qualified Data.List      as L
+import qualified Data.Text      as T
+import qualified Hedgehog.Gen   as G
+import qualified Hedgehog.Range as R
 
 {-# ANN module ("HLint: ignore Redundant do"        :: String) #-}
 {-# ANN module ("HLint: ignore Reduce duplication"  :: String) #-}
