diff --git a/lawful-conversions.cabal b/lawful-conversions.cabal
--- a/lawful-conversions.cabal
+++ b/lawful-conversions.cabal
@@ -1,6 +1,6 @@
 cabal-version: 3.0
 name: lawful-conversions
-version: 0.1.2.2
+version: 0.1.3
 synopsis: Lawful typeclasses for bidirectional conversion between types
 category: Conversion
 homepage: https://github.com/nikita-volkov/lawful-conversions
@@ -18,11 +18,11 @@
 
   Lawful typeclasses capturing three patterns of bidirectional mapping and forming a layered hierarchy with an ascending strictness of laws.
 
-  1. `IsSome`: Smart constructor
+  1. Smart constructor
 
-  2. `IsMany`: Lossy conversion
+  2. Canonicalization or lossy conversion
 
-  3. `Is`: Isomorphism or lossless conversion
+  3. Isomorphism or lossless conversion
 
   = The conversion problem
 
@@ -120,19 +120,24 @@
     LawfulConversions.Relations.LazyTextAndStrictTextBuilder
     LawfulConversions.Relations.LazyTextAndString
     LawfulConversions.Relations.LazyTextAndText
+    LawfulConversions.Relations.LazyTextAndUtcTime
     LawfulConversions.Relations.LazyTextAndUuid
     LawfulConversions.Relations.LazyTextBuilderAndStrictTextBuilder
     LawfulConversions.Relations.LazyTextBuilderAndString
     LawfulConversions.Relations.LazyTextBuilderAndText
+    LawfulConversions.Relations.LazyTextBuilderAndUtcTime
     LawfulConversions.Relations.LazyTextBuilderAndUuid
     LawfulConversions.Relations.ListAndSeq
     LawfulConversions.Relations.ShortByteStringAndTextArray
     LawfulConversions.Relations.ShortByteStringAndWord8List
     LawfulConversions.Relations.StrictTextBuilderAndString
     LawfulConversions.Relations.StrictTextBuilderAndText
+    LawfulConversions.Relations.StrictTextBuilderAndUtcTime
     LawfulConversions.Relations.StrictTextBuilderAndUuid
     LawfulConversions.Relations.StringAndText
+    LawfulConversions.Relations.StringAndUtcTime
     LawfulConversions.Relations.StringAndUuid
+    LawfulConversions.Relations.TextAndUtcTime
     LawfulConversions.Relations.TextAndUuid
     LawfulConversions.Relations.TextArrayAndWord8List
     LawfulConversions.TextCompat.Array
@@ -146,6 +151,7 @@
     primitive >=0.7 && <0.10,
     profunctors >=5 && <6,
     text >=1.2 && <2.2,
+    time >=1.9 && <2,
     unordered-containers >=0.2 && <0.3,
     uuid-types >=1.0 && <1.1,
     vector >=0.12 && <0.14,
diff --git a/src/library/LawfulConversions/Optics.hs b/src/library/LawfulConversions/Optics.hs
--- a/src/library/LawfulConversions/Optics.hs
+++ b/src/library/LawfulConversions/Optics.hs
@@ -4,7 +4,7 @@
 import LawfulConversions.Classes
 import LawfulConversions.Prelude
 
--- | Van-Laarhoven-style Prism, compatible with the \"lens\" library.
+-- | Van-Laarhoven-style Prism, compatible with libraries like \"lens\" and \"optics\".
 isSomePrism :: (IsSome a b, Choice p, Applicative f) => p b (f b) -> p a (f a)
 isSomePrism =
   dimap
@@ -12,10 +12,10 @@
     (either pure (fmap to))
     . right'
 
--- | Van-Laarhoven-style Isomorphism, compatible with the \"lens\" library.
+-- | Van-Laarhoven-style Isomorphism, compatible with libraries like \"lens\" and \"optics\".
 isManyIso :: (IsMany a b, Profunctor p, Functor f) => p b (f b) -> p a (f a)
 isManyIso = dimap from (fmap to)
 
--- | Van-Laarhoven-style Isomorphism, compatible with the \"lens\" library.
+-- | Van-Laarhoven-style Isomorphism, compatible with libraries like \"lens\" and \"optics\".
 isIso :: (Is a b, Profunctor p, Functor f) => p b (f b) -> p a (f a)
 isIso = isManyIso
diff --git a/src/library/LawfulConversions/Relations/LazyTextAndStrictTextBuilder.hs b/src/library/LawfulConversions/Relations/LazyTextAndStrictTextBuilder.hs
--- a/src/library/LawfulConversions/Relations/LazyTextAndStrictTextBuilder.hs
+++ b/src/library/LawfulConversions/Relations/LazyTextAndStrictTextBuilder.hs
@@ -3,7 +3,28 @@
 
 module LawfulConversions.Relations.LazyTextAndStrictTextBuilder where
 
-#if MIN_VERSION_text(2,0,2)
+#if MIN_VERSION_text(2,1,2)
+
+import qualified Data.Text.Encoding
+import qualified Data.Text.Lazy
+import LawfulConversions.Classes
+import LawfulConversions.Prelude
+
+instance IsSome Data.Text.Lazy.Text Data.Text.Encoding.StrictTextBuilder where
+  to = Data.Text.Lazy.fromStrict . Data.Text.Encoding.strictBuilderToText
+
+instance IsSome Data.Text.Encoding.StrictTextBuilder Data.Text.Lazy.Text where
+  to = Data.Text.Encoding.textToStrictBuilder . Data.Text.Lazy.toStrict
+
+instance IsMany Data.Text.Lazy.Text Data.Text.Encoding.StrictTextBuilder
+
+instance IsMany Data.Text.Encoding.StrictTextBuilder Data.Text.Lazy.Text
+
+instance Is Data.Text.Lazy.Text Data.Text.Encoding.StrictTextBuilder
+
+instance Is Data.Text.Encoding.StrictTextBuilder Data.Text.Lazy.Text
+
+#elif MIN_VERSION_text(2,0,2)
 
 import qualified Data.Text.Encoding
 import qualified Data.Text.Lazy
diff --git a/src/library/LawfulConversions/Relations/LazyTextAndUtcTime.hs b/src/library/LawfulConversions/Relations/LazyTextAndUtcTime.hs
new file mode 100644
--- /dev/null
+++ b/src/library/LawfulConversions/Relations/LazyTextAndUtcTime.hs
@@ -0,0 +1,14 @@
+{-# OPTIONS_GHC -Wno-orphans #-}
+
+module LawfulConversions.Relations.LazyTextAndUtcTime where
+
+import qualified Data.Text.Lazy
+import Data.Time
+import LawfulConversions.Classes
+import LawfulConversions.Prelude
+import LawfulConversions.Relations.LazyTextAndString ()
+import LawfulConversions.Relations.StringAndUtcTime ()
+
+instance IsSome Data.Text.Lazy.Text UTCTime where
+  to = fromString . to
+  maybeFrom = maybeFrom @String . to
diff --git a/src/library/LawfulConversions/Relations/LazyTextBuilderAndStrictTextBuilder.hs b/src/library/LawfulConversions/Relations/LazyTextBuilderAndStrictTextBuilder.hs
--- a/src/library/LawfulConversions/Relations/LazyTextBuilderAndStrictTextBuilder.hs
+++ b/src/library/LawfulConversions/Relations/LazyTextBuilderAndStrictTextBuilder.hs
@@ -3,7 +3,29 @@
 
 module LawfulConversions.Relations.LazyTextBuilderAndStrictTextBuilder where
 
-#if MIN_VERSION_text(2,0,2)
+#if MIN_VERSION_text(2,1,2)
+
+import qualified Data.Text.Encoding
+import qualified Data.Text.Lazy
+import qualified Data.Text.Lazy.Builder
+import LawfulConversions.Classes
+import LawfulConversions.Prelude
+
+instance IsSome Data.Text.Lazy.Builder.Builder Data.Text.Encoding.StrictTextBuilder where
+  to = Data.Text.Lazy.Builder.fromText . Data.Text.Encoding.strictBuilderToText
+
+instance IsSome Data.Text.Encoding.StrictTextBuilder Data.Text.Lazy.Builder.Builder where
+  to = Data.Text.Encoding.textToStrictBuilder . Data.Text.Lazy.toStrict . Data.Text.Lazy.Builder.toLazyText
+
+instance IsMany Data.Text.Lazy.Builder.Builder Data.Text.Encoding.StrictTextBuilder
+
+instance IsMany Data.Text.Encoding.StrictTextBuilder Data.Text.Lazy.Builder.Builder
+
+instance Is Data.Text.Lazy.Builder.Builder Data.Text.Encoding.StrictTextBuilder
+
+instance Is Data.Text.Encoding.StrictTextBuilder Data.Text.Lazy.Builder.Builder
+
+#elif MIN_VERSION_text(2,0,2)
 
 import qualified Data.Text.Encoding
 import qualified Data.Text.Lazy
diff --git a/src/library/LawfulConversions/Relations/LazyTextBuilderAndUtcTime.hs b/src/library/LawfulConversions/Relations/LazyTextBuilderAndUtcTime.hs
new file mode 100644
--- /dev/null
+++ b/src/library/LawfulConversions/Relations/LazyTextBuilderAndUtcTime.hs
@@ -0,0 +1,14 @@
+{-# OPTIONS_GHC -Wno-orphans #-}
+
+module LawfulConversions.Relations.LazyTextBuilderAndUtcTime where
+
+import qualified Data.Text.Lazy.Builder
+import Data.Time
+import LawfulConversions.Classes
+import LawfulConversions.Prelude
+import LawfulConversions.Relations.LazyTextBuilderAndString ()
+import LawfulConversions.Relations.StringAndUtcTime ()
+
+instance IsSome Data.Text.Lazy.Builder.Builder UTCTime where
+  to = fromString . to
+  maybeFrom = maybeFrom @String . to
diff --git a/src/library/LawfulConversions/Relations/StrictTextBuilderAndString.hs b/src/library/LawfulConversions/Relations/StrictTextBuilderAndString.hs
--- a/src/library/LawfulConversions/Relations/StrictTextBuilderAndString.hs
+++ b/src/library/LawfulConversions/Relations/StrictTextBuilderAndString.hs
@@ -3,7 +3,21 @@
 
 module LawfulConversions.Relations.StrictTextBuilderAndString where
 
-#if MIN_VERSION_text(2,0,2)
+#if MIN_VERSION_text(2,1,2)
+
+import qualified Data.Text.Encoding
+import LawfulConversions.Classes
+import LawfulConversions.Relations.StringAndText ()
+import LawfulConversions.Prelude
+
+instance IsSome String Data.Text.Encoding.StrictTextBuilder where
+  to = to . Data.Text.Encoding.strictBuilderToText
+  maybeFrom = fmap Data.Text.Encoding.textToStrictBuilder . maybeFrom
+
+instance IsMany String Data.Text.Encoding.StrictTextBuilder where
+  from =  Data.Text.Encoding.textToStrictBuilder . from
+
+#elif MIN_VERSION_text(2,0,2)
 
 import qualified Data.Text.Encoding
 import LawfulConversions.Classes
diff --git a/src/library/LawfulConversions/Relations/StrictTextBuilderAndText.hs b/src/library/LawfulConversions/Relations/StrictTextBuilderAndText.hs
--- a/src/library/LawfulConversions/Relations/StrictTextBuilderAndText.hs
+++ b/src/library/LawfulConversions/Relations/StrictTextBuilderAndText.hs
@@ -3,7 +3,27 @@
 
 module LawfulConversions.Relations.StrictTextBuilderAndText where
 
-#if MIN_VERSION_text(2,0,2)
+#if MIN_VERSION_text(2,1,2)
+
+import qualified Data.Text.Encoding
+import LawfulConversions.Classes
+import LawfulConversions.Prelude
+
+instance IsSome Text Data.Text.Encoding.StrictTextBuilder where
+  to = Data.Text.Encoding.strictBuilderToText
+
+instance IsSome Data.Text.Encoding.StrictTextBuilder Text where
+  to = Data.Text.Encoding.textToStrictBuilder
+
+instance IsMany Text Data.Text.Encoding.StrictTextBuilder
+
+instance IsMany Data.Text.Encoding.StrictTextBuilder Text
+
+instance Is Text Data.Text.Encoding.StrictTextBuilder
+
+instance Is Data.Text.Encoding.StrictTextBuilder Text
+
+#elif MIN_VERSION_text(2,0,2)
 
 import qualified Data.Text.Encoding
 import LawfulConversions.Classes
diff --git a/src/library/LawfulConversions/Relations/StrictTextBuilderAndUtcTime.hs b/src/library/LawfulConversions/Relations/StrictTextBuilderAndUtcTime.hs
new file mode 100644
--- /dev/null
+++ b/src/library/LawfulConversions/Relations/StrictTextBuilderAndUtcTime.hs
@@ -0,0 +1,34 @@
+{-# LANGUAGE CPP #-}
+{-# OPTIONS_GHC -Wno-orphans #-}
+
+module LawfulConversions.Relations.StrictTextBuilderAndUtcTime where
+
+#if MIN_VERSION_text(2,1,2)
+
+import qualified Data.Text.Encoding
+import Data.Time
+import LawfulConversions.Classes
+import LawfulConversions.Prelude
+import LawfulConversions.Relations.StrictTextBuilderAndString ()
+import LawfulConversions.Relations.StringAndText ()
+import LawfulConversions.Relations.StringAndUtcTime ()
+
+instance IsSome Data.Text.Encoding.StrictTextBuilder UTCTime where
+  to = from . to @String
+  maybeFrom = maybeFrom @String . to
+
+#elif MIN_VERSION_text(2,0,2)
+
+import qualified Data.Text.Encoding
+import Data.Time
+import LawfulConversions.Classes
+import LawfulConversions.Prelude
+import LawfulConversions.Relations.StrictTextBuilderAndString ()
+import LawfulConversions.Relations.StringAndText ()
+import LawfulConversions.Relations.StringAndUtcTime ()
+
+instance IsSome Data.Text.Encoding.StrictBuilder UTCTime where
+  to = from . to @String
+  maybeFrom = maybeFrom @String . to
+
+#endif
diff --git a/src/library/LawfulConversions/Relations/StrictTextBuilderAndUuid.hs b/src/library/LawfulConversions/Relations/StrictTextBuilderAndUuid.hs
--- a/src/library/LawfulConversions/Relations/StrictTextBuilderAndUuid.hs
+++ b/src/library/LawfulConversions/Relations/StrictTextBuilderAndUuid.hs
@@ -3,7 +3,18 @@
 
 module LawfulConversions.Relations.StrictTextBuilderAndUuid where
 
-#if MIN_VERSION_text(2,0,2)
+#if MIN_VERSION_text(2,1,2)
+
+import qualified Data.UUID.Types
+import qualified Data.Text.Encoding
+import LawfulConversions.Classes
+import LawfulConversions.Prelude
+
+instance IsSome Data.Text.Encoding.StrictTextBuilder UUID where
+  to = Data.Text.Encoding.textToStrictBuilder . Data.UUID.Types.toText
+  maybeFrom = Data.UUID.Types.fromText . Data.Text.Encoding.strictBuilderToText
+
+#elif MIN_VERSION_text(2,0,2)
 
 import qualified Data.UUID.Types
 import qualified Data.Text.Encoding
diff --git a/src/library/LawfulConversions/Relations/StringAndUtcTime.hs b/src/library/LawfulConversions/Relations/StringAndUtcTime.hs
new file mode 100644
--- /dev/null
+++ b/src/library/LawfulConversions/Relations/StringAndUtcTime.hs
@@ -0,0 +1,12 @@
+{-# OPTIONS_GHC -Wno-orphans #-}
+
+module LawfulConversions.Relations.StringAndUtcTime where
+
+import Data.Time
+import Data.Time.Format.ISO8601
+import LawfulConversions.Classes
+import LawfulConversions.Prelude
+
+instance IsSome String UTCTime where
+  to = iso8601Show
+  maybeFrom = iso8601ParseM
diff --git a/src/library/LawfulConversions/Relations/TextAndUtcTime.hs b/src/library/LawfulConversions/Relations/TextAndUtcTime.hs
new file mode 100644
--- /dev/null
+++ b/src/library/LawfulConversions/Relations/TextAndUtcTime.hs
@@ -0,0 +1,13 @@
+{-# OPTIONS_GHC -Wno-orphans #-}
+
+module LawfulConversions.Relations.TextAndUtcTime where
+
+import Data.Time
+import LawfulConversions.Classes
+import LawfulConversions.Prelude
+import LawfulConversions.Relations.StringAndText ()
+import LawfulConversions.Relations.StringAndUtcTime ()
+
+instance IsSome Text UTCTime where
+  to = fromString . to
+  maybeFrom = maybeFrom @String . to
