diff --git a/proto-lens-arbitrary.cabal b/proto-lens-arbitrary.cabal
--- a/proto-lens-arbitrary.cabal
+++ b/proto-lens-arbitrary.cabal
@@ -1,5 +1,5 @@
 name:                proto-lens-arbitrary
-version:             0.1.0.3
+version:             0.1.1.0
 synopsis:            Arbitrary instances for proto-lens.
 description:
   The proto-lens-arbitrary allows generating arbitrary messages for
diff --git a/src/Data/ProtoLens/Arbitrary.hs b/src/Data/ProtoLens/Arbitrary.hs
--- a/src/Data/ProtoLens/Arbitrary.hs
+++ b/src/Data/ProtoLens/Arbitrary.hs
@@ -9,7 +9,8 @@
 {-# LANGUAGE RankNTypes #-}
 -- | An Arbitrary instance for protocol buffer Messages to use with QuickCheck.
 module Data.ProtoLens.Arbitrary
-    ( ArbitraryMessage(..),
+    ( ArbitraryMessage(..)
+    , arbitraryMessage
     ) where
 
 import Data.ProtoLens.Message
@@ -66,8 +67,8 @@
 
 arbitraryFieldValue :: FieldTypeDescriptor value -> Gen value
 arbitraryFieldValue ftd = case ftd of
-    MessageField -> unArbitraryMessage <$> arbitrary
-    GroupField -> unArbitraryMessage <$> arbitrary
+    MessageField -> arbitraryMessage
+    GroupField -> arbitraryMessage
     -- For enum fields, all we know is that the value is an instance of
     -- MessageEnum, meaning we can only use fromEnum, toEnum, or maybeToEnum. So
     -- we must rely on the instance of Arbitrary for Int and filter out only the
@@ -119,7 +120,7 @@
 
 shrinkFieldValue :: FieldTypeDescriptor value -> value -> [value]
 shrinkFieldValue ftd = case ftd of
-    MessageField -> map unArbitraryMessage . shrink . ArbitraryMessage
+    MessageField -> shrinkMessage
     GroupField -> map unArbitraryMessage . shrink . ArbitraryMessage
     -- Shrink to the 0-equivalent Enum value if it's both a valid Enum value
     -- and the value isn't already 0.
