diff --git a/bench/Main.hs b/bench/Main.hs
new file mode 100644
--- /dev/null
+++ b/bench/Main.hs
@@ -0,0 +1,20 @@
+{-# LANGUAGE AllowAmbiguousTypes #-}
+{-# LANGUAGE ScopedTypeVariables #-}
+{-# LANGUAGE TypeApplications #-}
+
+module Main where
+
+import Criterion.Main as Criterion
+import Data.GenValidity
+import Data.GenValidity.Criterion
+import Data.GenValidity.UUID ()
+import Data.UUID
+import Test.QuickCheck
+
+main :: IO ()
+main =
+  Criterion.defaultMain
+    [ genValidBench @UUID,
+      genUncheckedBench @UUID,
+      genBench "valid UUID via genUnchecked" ((genUnchecked `suchThat` isValid) :: Gen UUID)
+    ]
diff --git a/genvalidity-uuid.cabal b/genvalidity-uuid.cabal
--- a/genvalidity-uuid.cabal
+++ b/genvalidity-uuid.cabal
@@ -4,10 +4,10 @@
 --
 -- see: https://github.com/sol/hpack
 --
--- hash: acc801e8b1f6aca3c589d815de1c651c40506f464bdae9be9089ff0e59ae8a93
+-- hash: fc85c45732a67308227ab1b3a08dd68797f21a09df65fe651368d18b8ff6c72e
 
 name:           genvalidity-uuid
-version:        0.1.0.3
+version:        0.1.0.4
 synopsis:       GenValidity support for UUID
 category:       Testing
 homepage:       https://github.com/NorfairKing/validity#readme
@@ -55,5 +55,23 @@
     , genvalidity-hspec
     , genvalidity-uuid
     , hspec
+    , uuid
+  default-language: Haskell2010
+
+benchmark genvalidity-uuid-bench
+  type: exitcode-stdio-1.0
+  main-is: Main.hs
+  other-modules:
+      Paths_genvalidity_uuid
+  hs-source-dirs:
+      bench/
+  ghc-options: -Wall
+  build-depends:
+      QuickCheck
+    , base >=4.7 && <5
+    , criterion
+    , genvalidity
+    , genvalidity-criterion
+    , genvalidity-uuid
     , uuid
   default-language: Haskell2010
diff --git a/src/Data/GenValidity/UUID.hs b/src/Data/GenValidity/UUID.hs
--- a/src/Data/GenValidity/UUID.hs
+++ b/src/Data/GenValidity/UUID.hs
@@ -19,4 +19,11 @@
         | (w1, w2, w3, w4) <- shrinkUnchecked $ toWords u
         ]
 
-instance GenValid UUID
+instance GenValid UUID where
+    genValid =
+        fromWords <$> genValid <*> genValid <*> genValid <*>
+        genValid
+    shrinkValid u =
+        [ fromWords w1 w2 w3 w4
+        | (w1, w2, w3, w4) <- shrinkValid $ toWords u
+        ]
