diff --git a/hydra-jvm.cabal b/hydra-jvm.cabal
--- a/hydra-jvm.cabal
+++ b/hydra-jvm.cabal
@@ -5,7 +5,7 @@
 -- see: https://github.com/sol/hpack
 
 name:           hydra-jvm
-version:        0.17.2
+version:        0.17.3
 synopsis:       Shared JVM support for Hydra's Java, Scala, and Clojure coders
 description:    Hydra is an implementation of the LambdaGraph data model, which takes advantage of an isomorphism between labeled hypergraphs and typed lambda calculus: in Hydra, "graphs are programs, and programs are graphs". Common JVM support for Hydra (shared by hydra-java, hydra-scala, hydra-clojure)
 category:       Data
@@ -34,6 +34,6 @@
       src/main/haskell
   build-depends:
       base >=4.19.0 && <4.22
-    , hydra-kernel ==0.17.2
+    , hydra-kernel ==0.17.3
     , scientific >=0.3.7 && <0.4
   default-language: Haskell2010
diff --git a/src/main/haskell/Hydra/Jvm/Serde.hs b/src/main/haskell/Hydra/Jvm/Serde.hs
--- a/src/main/haskell/Hydra/Jvm/Serde.hs
+++ b/src/main/haskell/Hydra/Jvm/Serde.hs
@@ -19,6 +19,7 @@
 import qualified Hydra.Overlay.Haskell.Lib.Logic as Logic
 import qualified Hydra.Overlay.Haskell.Lib.Math as Math
 import qualified Hydra.Overlay.Haskell.Lib.Optionals as Optionals
+import qualified Hydra.Overlay.Haskell.Lib.Ordering as Ordering
 import qualified Hydra.Overlay.Haskell.Lib.Strings as Strings
 import qualified Hydra.Packaging as Packaging
 import qualified Hydra.Parsing as Parsing
@@ -39,32 +40,32 @@
 -- | Escape a single character for inclusion in a Java string or char literal
 escapeJavaChar :: Int -> String
 escapeJavaChar c =
-    Logic.ifElse (Equality.equal c 34) "\\\"" (Logic.ifElse (Equality.equal c 92) "\\\\" (Logic.ifElse (Equality.equal c 10) "\\n" (Logic.ifElse (Equality.equal c 13) "\\r" (Logic.ifElse (Equality.equal c 9) "\\t" (Logic.ifElse (Equality.equal c 8) "\\b" (Logic.ifElse (Equality.equal c 12) "\\f" (Logic.ifElse (Logic.and (Equality.gte c 32) (Equality.lt c 127)) (Strings.fromList [
+    Logic.ifElse (Equality.equal c 34) "\\\"" (Logic.ifElse (Equality.equal c 92) "\\\\" (Logic.ifElse (Equality.equal c 10) "\\n" (Logic.ifElse (Equality.equal c 13) "\\r" (Logic.ifElse (Equality.equal c 9) "\\t" (Logic.ifElse (Equality.equal c 8) "\\b" (Logic.ifElse (Equality.equal c 12) "\\f" (Logic.ifElse (Logic.and (Ordering.gte c 32) (Ordering.lt c 127)) (Strings.fromList [
       c]) (javaUnicodeEscape c))))))))
 
 escapeJavaString :: String -> String
-escapeJavaString s = Strings.cat (Lists.map (\c -> escapeJavaChar c) (Strings.toList s))
+escapeJavaString s = Strings.concat (Lists.map (\c -> escapeJavaChar c) (Strings.toList s))
 
 hexDigit :: Int -> Int
-hexDigit n = Logic.ifElse (Equality.lt n 10) (Math.add n 48) (Math.add (Math.sub n 10) 65)
+hexDigit n = Logic.ifElse (Ordering.lt n 10) (Math.add n 48) (Math.add (Math.sub n 10) 65)
 
 javaUnicodeEscape :: Int -> String
 javaUnicodeEscape n =
-    Logic.ifElse (Equality.gt n 65535) (
+    Logic.ifElse (Ordering.gt n 65535) (
       let n_ = Math.sub n 65536
-          hi = Math.add 55296 (Optionals.fromOptional 0 (Math.maybeDiv n_ 1024))
-          lo = Math.add 56320 (Optionals.fromOptional 0 (Math.maybeMod n_ 1024))
-      in (Strings.cat2 (Strings.cat2 "\\u" (padHex4 hi)) (Strings.cat2 "\\u" (padHex4 lo)))) (Strings.cat2 "\\u" (padHex4 n))
+          hi = Math.add 55296 (Optionals.withDefault 0 (Math.div n_ 1024))
+          lo = Math.add 56320 (Optionals.withDefault 0 (Math.mod n_ 1024))
+      in (Strings.concat2 (Strings.concat2 "\\u" (padHex4 hi)) (Strings.concat2 "\\u" (padHex4 lo)))) (Strings.concat2 "\\u" (padHex4 n))
 
 padHex4 :: Int -> String
 padHex4 n =
 
-      let d3 = Optionals.fromOptional 0 (Math.maybeDiv n 4096)
-          r3 = Optionals.fromOptional 0 (Math.maybeMod n 4096)
-          d2 = Optionals.fromOptional 0 (Math.maybeDiv r3 256)
-          r2 = Optionals.fromOptional 0 (Math.maybeMod r3 256)
-          d1 = Optionals.fromOptional 0 (Math.maybeDiv r2 16)
-          d0 = Optionals.fromOptional 0 (Math.maybeMod r2 16)
+      let d3 = Optionals.withDefault 0 (Math.div n 4096)
+          r3 = Optionals.withDefault 0 (Math.mod n 4096)
+          d2 = Optionals.withDefault 0 (Math.div r3 256)
+          r2 = Optionals.withDefault 0 (Math.mod r3 256)
+          d1 = Optionals.withDefault 0 (Math.div r2 16)
+          d0 = Optionals.withDefault 0 (Math.mod r2 16)
       in (Strings.fromList [
         hexDigit d3,
         (hexDigit d2),
