diff --git a/PaymentServer.cabal b/PaymentServer.cabal
index 6926cee8c9c79935f302ddc0b3a6d021c63d2b38..165887ef0111186ff8eda3db078cdda6c634fc6d 100644
--- a/PaymentServer.cabal
+++ b/PaymentServer.cabal
@@ -52,6 +52,7 @@ executable PaymentServer-generate-key
   main-is:             Main.hs
   ghc-options:         -threaded -rtsopts -with-rtsopts=-N -Wmissing-import-lists -Wunused-imports
   build-depends:       base
+                     , text
                      , PaymentServer
   default-language:    Haskell2010
 
diff --git a/generate-key/Main.hs b/generate-key/Main.hs
index 3eb7b0e256043e702ffedff0b38641b0dfd8d7f4..0da05457932103bb1d1605f0658d571bdd569ef6 100644
--- a/generate-key/Main.hs
+++ b/generate-key/Main.hs
@@ -2,6 +2,14 @@ module Main
   ( main
   ) where
 
+import Prelude hiding
+  ( putStrLn
+  )
+
+import Data.Text.IO
+  ( putStrLn
+  )
+
 import PaymentServer.Ristretto
   ( randomSigningKey
   )
diff --git a/src/PaymentServer/Ristretto.hs b/src/PaymentServer/Ristretto.hs
index d56faf88ff05cd69bc17b9f635014053d7037ee9..832e125eb77d445edf48c2963a8a2faf6dc253f4 100644
--- a/src/PaymentServer/Ristretto.hs
+++ b/src/PaymentServer/Ristretto.hs
@@ -73,11 +73,11 @@ ristretto textSigningKey textTokens = do
 
 -- | randomSigningKey generates a new signing key at random and returns it
 -- encoded as a base64 string.
-randomSigningKey :: IO String
+randomSigningKey :: IO Text
 randomSigningKey = do
   cSigningKey <- signing_key_random
   cString <- signing_key_encode_base64 cSigningKey
   signing_key_destroy cSigningKey
   result <- peekCString cString
   free cString
-  return result
+  return $ pack result