diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,12 @@
 # Changelog
 
+## [1.0.0.1] - 2022-08-30
+
+### Changed
+
+* Sped up shrinking of `TimeOfDay`, `LocalTime` and `TimeOfDay`
+* Shrinking benchmarks
+
 ## [1.0.0.0] - 2021-11-20
 
 ### Changed
diff --git a/bench/Main.hs b/bench/Main.hs
--- a/bench/Main.hs
+++ b/bench/Main.hs
@@ -12,14 +12,34 @@
 main :: IO ()
 main =
   Criterion.defaultMain
-    [ genValidBench @Day,
-      genValidBench @UniversalTime,
-      genValidBench @DiffTime,
-      genValidBench @UTCTime,
-      genValidBench @NominalDiffTime,
-      -- , genValidBench @TimeLocale -- No NFData instance
-      genValidBench @TimeZone,
-      genValidBench @TimeOfDay,
-      genValidBench @LocalTime,
-      genValidBench @ZonedTime
+    [ bgroup
+        "generators"
+        [ genValidBench @Day,
+          genValidBench @CalendarDiffDays,
+          genValidBench @DayOfWeek,
+          genValidBench @UniversalTime,
+          genValidBench @DiffTime,
+          genValidBench @UTCTime,
+          genValidBench @NominalDiffTime,
+          -- , genValidBench @TimeLocale -- No NFData instance
+          genValidBench @TimeZone,
+          genValidBench @TimeOfDay,
+          genValidBench @LocalTime,
+          genValidBench @ZonedTime
+        ],
+      bgroup
+        "shrinkers"
+        [ shrinkValidBench @Day,
+          shrinkValidBench @CalendarDiffDays,
+          shrinkValidBench @DayOfWeek,
+          shrinkValidBench @UniversalTime,
+          shrinkValidBench @DiffTime,
+          shrinkValidBench @UTCTime,
+          shrinkValidBench @NominalDiffTime,
+          -- , shrinkValidBench @TimeLocale -- No NFData instance
+          shrinkValidBench @TimeZone,
+          shrinkValidBench @TimeOfDay,
+          shrinkValidBench @LocalTime,
+          shrinkValidBench @ZonedTime
+        ]
     ]
diff --git a/genvalidity-time.cabal b/genvalidity-time.cabal
--- a/genvalidity-time.cabal
+++ b/genvalidity-time.cabal
@@ -1,11 +1,11 @@
 cabal-version: 1.12
 
--- This file has been generated from package.yaml by hpack version 0.34.4.
+-- This file has been generated from package.yaml by hpack version 0.34.7.
 --
 -- see: https://github.com/sol/hpack
 
 name:           genvalidity-time
-version:        1.0.0.0
+version:        1.0.0.1
 synopsis:       GenValidity support for time
 description:    Please see README.md
 category:       Testing
@@ -13,7 +13,7 @@
 bug-reports:    https://github.com/NorfairKing/validity/issues
 author:         Tom Sydney Kerckhove
 maintainer:     syd@cs-syd.eu
-copyright:      Copyright: (c) 2016-2021 Tom Sydney Kerckhove
+copyright:      Copyright: (c) 2016-2022 Tom Sydney Kerckhove
 license:        MIT
 license-file:   LICENSE
 build-type:     Simple
@@ -72,7 +72,7 @@
   build-depends:
       base >=4.7 && <5
     , criterion
-    , genvalidity-criterion
+    , genvalidity-criterion >=1.1.0.0
     , genvalidity-time
     , time
   default-language: Haskell2010
diff --git a/src/Data/GenValidity/Time/Calendar.hs b/src/Data/GenValidity/Time/Calendar.hs
--- a/src/Data/GenValidity/Time/Calendar.hs
+++ b/src/Data/GenValidity/Time/Calendar.hs
@@ -32,7 +32,7 @@
 
 genDayCloselyAround :: Day -> Gen Day
 genDayCloselyAround today = sized $ \s -> do
-  diff <- choose (- s, s)
+  diff <- choose (-s, s)
   pure $ addDays (fromIntegral diff) today
 
 instance GenValid CalendarDiffDays where
diff --git a/src/Data/GenValidity/Time/LocalTime.hs b/src/Data/GenValidity/Time/LocalTime.hs
--- a/src/Data/GenValidity/Time/LocalTime.hs
+++ b/src/Data/GenValidity/Time/LocalTime.hs
@@ -37,19 +37,26 @@
   genValid =
     TimeOfDay <$> (choose (0, 23)) <*> (choose (0, 59))
       <*> (MkFixed <$> choose (0, 60999999999999))
-  shrinkValid (TimeOfDay h m s) =
-    filter isValid [TimeOfDay h' m' s' | (h', m', s') <- shrinkValid (h, m, s)]
+  shrinkValid (TimeOfDay h m s) = do
+    (h', m', s') <-
+      shrinkTriple
+        (filter (\hh -> 0 <= hh && hh < 24) . shrinkValid)
+        (filter (\mm -> 0 <= mm && mm < 60) . shrinkValid)
+        (filter (\ss -> 0 <= ss && ss < 61) . shrinkValid)
+        (h, m, s)
+    pure (TimeOfDay h' m' s')
 
 instance GenValid LocalTime where
   genValid = LocalTime <$> genValid <*> genValid
   shrinkValid (LocalTime d tod) =
-    filter isValid [LocalTime d' tod' | (d', tod') <- shrinkValid (d, tod)]
+    [LocalTime d' tod' | (d', tod') <- shrinkValid (d, tod)]
 
 instance GenValid ZonedTime where
   genValid = ZonedTime <$> genValid <*> genValid
   shrinkValid (ZonedTime lt tz) =
-    filter isValid [ZonedTime lt' tz' | (lt', tz') <- shrinkValid (lt, tz)]
+    [ZonedTime lt' tz' | (lt', tz') <- shrinkValid (lt, tz)]
 
 instance GenValid CalendarDiffTime where
   genValid = CalendarDiffTime <$> genValid <*> genValid
-  shrinkValid (CalendarDiffTime ms t) = [CalendarDiffTime ms' t' | (ms', t') <- shrinkValid (ms, t)]
+  shrinkValid (CalendarDiffTime ms t) =
+    [CalendarDiffTime ms' t' | (ms', t') <- shrinkValid (ms, t)]
