diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -7,7 +7,14 @@
 
 ## [Unreleased]
 
+## [0.10] - 2019-10-07
+### Added
+- Instances of `Generic` and `Hashable` for `ObjectRef`
+
 ## [0.9] - 2019-09-06
+### Added
+- A useful message when UUID parsing fails
+
 ### Changed
 - Renamed `Object` to `ObjectRef`
 
@@ -140,7 +147,8 @@
   - RON-Schema
   - RON-Schema TemplateHaskell code generator
 
-[Unreleased]: https://github.com/ff-notes/ron/compare/ron-0.9...HEAD
+[Unreleased]: https://github.com/ff-notes/ron/compare/ron-0.10...HEAD
+[0.10]: https://github.com/ff-notes/ron/compare/ron-0.9...ron-0.10
 [0.9]: https://github.com/ff-notes/ron/compare/ron-0.8...ron-0.9
 [0.8]: https://github.com/ff-notes/ron/compare/ron-0.7...ron-0.8
 [0.7]: https://github.com/ff-notes/ron/compare/ron-0.6...ron-0.7
diff --git a/lib/RON/Event.hs b/lib/RON/Event.hs
--- a/lib/RON/Event.hs
+++ b/lib/RON/Event.hs
@@ -171,7 +171,7 @@
     getEvents = lift . getEvents
     advance   = lift . advance
 
-instance ReplicaClock m => ReplicaClock (WriterT s m) where
+instance (Monoid s, ReplicaClock m) => ReplicaClock (WriterT s m) where
     getPid    = lift   getPid
     getEvents = lift . getEvents
     advance   = lift . advance
diff --git a/lib/RON/Prelude.hs b/lib/RON/Prelude.hs
--- a/lib/RON/Prelude.hs
+++ b/lib/RON/Prelude.hs
@@ -23,7 +23,8 @@
     (?:),
 ) where
 
-import           RON.Prelude.Writer as X
+-- TODO import           RON.Prelude.Writer as X
+import Control.Monad.Writer.Strict as X (WriterT, runWriterT, tell)
 
 -- base
 import           Control.Applicative as X (Alternative, Applicative, liftA2,
diff --git a/lib/RON/Prelude/Writer.hs b/lib/RON/Prelude/Writer.hs
deleted file mode 100644
--- a/lib/RON/Prelude/Writer.hs
+++ /dev/null
@@ -1,23 +0,0 @@
-{-# LANGUAGE FlexibleInstances #-}
-{-# LANGUAGE MultiParamTypeClasses #-}
-{-# OPTIONS_GHC -Wno-orphans #-}
-
-module RON.Prelude.Writer
-  ( module X
-    )
-where
-
-import Control.Monad.Trans.Writer.CPS as X (WriterT, execWriterT, runWriterT)
-import qualified Control.Monad.Trans.Writer.CPS as CPS
-import Control.Monad.Writer.Class as X (MonadWriter, listen, pass, tell, writer)
-import Prelude (Monad, Monoid)
-
-instance (Monoid w, Monad m) => MonadWriter w (WriterT w m) where
-
-  listen = CPS.listen
-
-  pass = CPS.pass
-
-  tell = CPS.tell
-
-  writer = CPS.writer
diff --git a/lib/RON/Types.hs b/lib/RON/Types.hs
--- a/lib/RON/Types.hs
+++ b/lib/RON/Types.hs
@@ -1,7 +1,9 @@
 {-# LANGUAGE DeriveAnyClass #-}
 {-# LANGUAGE DeriveDataTypeable #-}
 {-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
 {-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
 {-# LANGUAGE LambdaCase #-}
 {-# LANGUAGE NamedFieldPuns #-}
 {-# LANGUAGE PatternSynonyms #-}
@@ -125,7 +127,8 @@
 
 -- | Reference to an object
 newtype ObjectRef a = ObjectRef UUID
-    deriving (Eq)
+    deriving newtype (Eq, Hashable)
+    deriving stock (Generic)
 
 instance Typeable a => Show (ObjectRef a) where
     showsPrec a (ObjectRef b) =
diff --git a/lib/RON/UUID.hs b/lib/RON/UUID.hs
--- a/lib/RON/UUID.hs
+++ b/lib/RON/UUID.hs
@@ -131,8 +131,8 @@
     -> ByteString  -- ^ local name, max 10 Base64 letters
     -> m UUID
 mkScopedName scope nam = do
-    scope' <- maybe (fail "Bad scope") pure $ Base64.decode60 scope
-    nam'   <- maybe (fail "Bad name")  pure $ Base64.decode60 nam
+    scope' <- expectBase64x60 "UUID scope" scope $ Base64.decode60 scope
+    nam'   <- expectBase64x60 "UUID name"  nam   $ Base64.decode60 nam
     pure $ build UuidFields
         { uuidVariety = B0000
         , uuidValue   = scope'
@@ -140,6 +140,14 @@
         , uuidVersion = B00
         , uuidOrigin  = nam'
         }
+  where
+    expectBase64x60 field input =
+        maybe
+            (fail
+                $   field
+                <>  ": expected a Base64-encoded 60-character string, got "
+                <>  show input)
+            pure
 
 -- | Convert UUID to a name
 getName
diff --git a/ron.cabal b/ron.cabal
--- a/ron.cabal
+++ b/ron.cabal
@@ -1,7 +1,7 @@
 cabal-version:  2.2
 
 name:           ron
-version:        0.9
+version:        0.10
 
 bug-reports:    https://github.com/ff-notes/ron/issues
 category:       Distributed Systems, Protocol, Database
@@ -41,8 +41,8 @@
         template-haskell,
         text,
         time,
-        transformers >= 0.5.6.0,
-            -- ^ Writer.CPS
+        -- transformers >= 0.5.6.0,
+            -- ^ TODO Writer.CPS
         unordered-containers
     exposed-modules:
         RON.Base64
@@ -67,7 +67,7 @@
     other-modules:
         Attoparsec.Extra
         Data.ZigZag
-        RON.Prelude.Writer
+        -- TODO RON.Prelude.Writer
     hs-source-dirs: lib
 
 benchmark bench
