diff --git a/CHANGELOG.markdown b/CHANGELOG.markdown
--- a/CHANGELOG.markdown
+++ b/CHANGELOG.markdown
@@ -1,7 +1,11 @@
+3.8.5
+-----
+* Fixed more sporadic issues in doctests, caused by carrying flags from `$setup` between modules.
+
 3.8.4
 -----
 * Renamed `strippingPrefix` to `prefixed`, `strippingSuffix` to `suffixed`. Left the old names as deprecated aliases.
-* Fixed issues with the test suite caused by `doctests` carrying flags from the $setup block between modules.
+* Fixed issues with the test suite caused by `doctests` carrying flags from the `$setup` block between modules.
 * Benchmarks now use `generic-deriving` rather than `ghc-prim` directly, like the rest of the package.
 * Added `Generics.Deriving.Lens`, which is now simply re-exported from `GHC.Generics.Lens`.
 
diff --git a/lens.cabal b/lens.cabal
--- a/lens.cabal
+++ b/lens.cabal
@@ -1,6 +1,6 @@
 name:          lens
 category:      Data, Lenses
-version:       3.8.4
+version:       3.8.5
 license:       BSD3
 cabal-version: >= 1.8
 license-file:  LICENSE
@@ -368,6 +368,7 @@
       deepseq,
       doctest        >= 0.9.1,
       filepath,
+      generic-deriving,
       mtl,
       nats,
       parallel,
diff --git a/src/Control/Exception/Lens.hs b/src/Control/Exception/Lens.hs
--- a/src/Control/Exception/Lens.hs
+++ b/src/Control/Exception/Lens.hs
@@ -115,6 +115,7 @@
 {-# ANN module "HLint: ignore Use Control.Exception.catch" #-}
 
 -- $setup
+-- >>> :set -XNoOverloadedStrings
 -- >>> :m + Control.Exception Control.Monad Data.List Prelude
 
 ------------------------------------------------------------------------------
diff --git a/src/Control/Lens/At.hs b/src/Control/Lens/At.hs
--- a/src/Control/Lens/At.hs
+++ b/src/Control/Lens/At.hs
@@ -78,6 +78,7 @@
 import Data.Word
 
 -- $setup
+-- >>> :set -XNoOverloadedStrings
 -- >>> import Control.Lens
 -- >>> import Debug.SimpleReflect.Expr
 -- >>> import Debug.SimpleReflect.Vars as Vars hiding (f,g)
diff --git a/src/Control/Lens/Each.hs b/src/Control/Lens/Each.hs
--- a/src/Control/Lens/Each.hs
+++ b/src/Control/Lens/Each.hs
@@ -104,6 +104,7 @@
 type instance Index LazyB.ByteString = Int64
 
 -- $setup
+-- >>> :set -XNoOverloadedStrings
 -- >>> import Control.Lens
 -- >>> import Data.Text.Strict.Lens as Text
 -- >>> import Data.Char as Char
diff --git a/src/Control/Lens/Getter.hs b/src/Control/Lens/Getter.hs
--- a/src/Control/Lens/Getter.hs
+++ b/src/Control/Lens/Getter.hs
@@ -74,6 +74,7 @@
 import Data.Profunctor.Unsafe
 
 -- $setup
+-- >>> :set -XNoOverloadedStrings
 -- >>> import Control.Lens
 -- >>> import Data.List.Lens
 -- >>> import Debug.SimpleReflect.Expr
diff --git a/src/Control/Lens/Indexed.hs b/src/Control/Lens/Indexed.hs
--- a/src/Control/Lens/Indexed.hs
+++ b/src/Control/Lens/Indexed.hs
@@ -105,6 +105,7 @@
 infixr 9 <.>, <., .>
 
 -- $setup
+-- >>> :set -XNoOverloadedStrings
 -- >>> import Control.Lens
 
 -- | Compose an 'Indexed' function with a non-indexed function.
diff --git a/src/Control/Lens/Iso.hs b/src/Control/Lens/Iso.hs
--- a/src/Control/Lens/Iso.hs
+++ b/src/Control/Lens/Iso.hs
@@ -73,6 +73,7 @@
 {-# ANN module "HLint: ignore Use on" #-}
 
 -- $setup
+-- >>> :set -XNoOverloadedStrings
 -- >>> import Control.Lens
 -- >>> import Data.Map as Map
 -- >>> import Data.Foldable
diff --git a/src/Control/Lens/Prism.hs b/src/Control/Lens/Prism.hs
--- a/src/Control/Lens/Prism.hs
+++ b/src/Control/Lens/Prism.hs
@@ -47,10 +47,15 @@
 #endif
 
 -- $setup
+-- >>> :set -XNoOverloadedStrings
 -- >>> import Control.Lens
 -- >>> import Numeric.Natural
+-- >>> import Debug.SimpleReflect.Expr
+-- >>> import Debug.SimpleReflect.Vars as Vars hiding (f,g)
 -- >>> let isLeft  (Left  _) = True; isLeft  _ = False
 -- >>> let isRight (Right _) = True; isRight _ = False
+-- >>> let f :: Expr -> Expr; f = Debug.SimpleReflect.Vars.f
+-- >>> let g :: Expr -> Expr; g = Debug.SimpleReflect.Vars.g
 
 ------------------------------------------------------------------------------
 -- Prism Internals
@@ -89,6 +94,7 @@
 -- | Build a 'Control.Lens.Prism.Prism'.
 --
 -- @'Either' t a@ is used instead of @'Maybe' a@ to permit the types of @s@ and @t@ to differ.
+--
 prism :: (b -> t) -> (s -> Either t a) -> Prism s t a b
 prism bt seta = dimap seta (either pure (fmap bt)) . right'
 {-# INLINE prism #-}
@@ -161,6 +167,9 @@
 --
 -- It also can be turned around to obtain the embedding into the 'Left' half of an 'Either':
 --
+-- >>> _Left # 5
+-- Left 5
+--
 -- >>> 5^.re _Left
 -- Left 5
 _Left :: Prism (Either a c) (Either b c) a b
@@ -183,6 +192,9 @@
 --
 -- It also can be turned around to obtain the embedding into the 'Right' half of an 'Either':
 --
+-- >>> _Right # 5
+-- Right 5
+--
 -- >>> 5^.re _Right
 -- Right 5
 _Right :: Prism (Either c a) (Either c b) a b
@@ -196,8 +208,23 @@
 --
 -- Unlike 'Data.Traversable.traverse' this is a 'Prism', and so you can use it to inject as well:
 --
+-- >>> _Just # 5
+-- Just 5
+--
 -- >>> 5^.re _Just
 -- Just 5
+--
+-- Interestingly,
+--
+-- @
+-- m '^?' '_Just' ≡ m
+-- @
+--
+-- >>> Just x ^? _Just
+-- Just x
+--
+-- >>> Nothing ^? _Just
+-- Nothing
 _Just :: Prism (Maybe a) (Maybe b) a b
 _Just = prism Just $ maybe (Left Nothing) Right
 {-# INLINE _Just #-}
diff --git a/src/Control/Lens/Review.hs b/src/Control/Lens/Review.hs
--- a/src/Control/Lens/Review.hs
+++ b/src/Control/Lens/Review.hs
@@ -40,6 +40,7 @@
 import Data.Profunctor.Unsafe
 
 -- $setup
+-- >>> :set -XNoOverloadedStrings
 -- >>> import Control.Lens
 -- >>> import Numeric.Lens
 -- >>> let isLeft  (Left  _) = True; isLeft  _ = False
@@ -138,8 +139,8 @@
 -- | An infix alias for 'review'.
 --
 -- @
--- 'unto' f '#' x ≡ f x
--- l '#' x ≡ x '^.' 're' l
+-- 'unto' f # x ≡ f x
+-- l # x ≡ x '^.' 're' l
 -- @
 --
 -- This is commonly used when using a 'Prism' as a smart constructor.
@@ -153,10 +154,10 @@
 -- "7b"
 --
 -- @
--- ('#') :: 'Iso''      s a -> a -> s
--- ('#') :: 'Prism''    s a -> a -> s
--- ('#') :: 'Review''   s a -> a -> s
--- ('#') :: 'Equality'' s a -> a -> s
+-- (#) :: 'Iso''      s a -> a -> s
+-- (#) :: 'Prism''    s a -> a -> s
+-- (#) :: 'Review''   s a -> a -> s
+-- (#) :: 'Equality'' s a -> a -> s
 -- @
 ( # ) :: AReview s t a b -> b -> t
 ( # ) p = runIdentity #. runReviewed #. p .# Reviewed .# Identity
diff --git a/src/Control/Lens/Tuple.hs b/src/Control/Lens/Tuple.hs
--- a/src/Control/Lens/Tuple.hs
+++ b/src/Control/Lens/Tuple.hs
@@ -40,6 +40,7 @@
 import Data.Functor.Identity
 
 -- $setup
+-- >>> :set -XNoOverloadedStrings
 -- >>> import Control.Lens
 
 -- | Provides access to 1st field of a tuple.
diff --git a/src/Control/Lens/Type.hs b/src/Control/Lens/Type.hs
--- a/src/Control/Lens/Type.hs
+++ b/src/Control/Lens/Type.hs
@@ -60,6 +60,7 @@
 import Data.Profunctor
 
 -- $setup
+-- >>> :set -XNoOverloadedStrings
 -- >>> import Control.Lens
 -- >>> import Debug.SimpleReflect.Expr
 -- >>> import Debug.SimpleReflect.Vars as Vars hiding (f,g,h)
diff --git a/src/Control/Lens/Wrapped.hs b/src/Control/Lens/Wrapped.hs
--- a/src/Control/Lens/Wrapped.hs
+++ b/src/Control/Lens/Wrapped.hs
@@ -91,8 +91,8 @@
 import           Data.Tagged
 
 -- $setup
+-- >>> :set -XNoOverloadedStrings
 -- >>> import Control.Lens
--- >>> import Data.Foldable
 
 -- | 'Wrapped' provides isomorphisms to wrap and unwrap newtypes or
 -- data types with one constructor.
diff --git a/src/Data/Bits/Lens.hs b/src/Data/Bits/Lens.hs
--- a/src/Data/Bits/Lens.hs
+++ b/src/Data/Bits/Lens.hs
@@ -25,6 +25,7 @@
 import Data.Word
 
 -- $setup
+-- >>> :set -XNoOverloadedStrings
 -- >>> import Data.Word
 
 infixr 4 .|.~, .&.~, <.|.~, <.&.~
diff --git a/src/Data/HashSet/Lens.hs b/src/Data/HashSet/Lens.hs
--- a/src/Data/HashSet/Lens.hs
+++ b/src/Data/HashSet/Lens.hs
@@ -25,7 +25,8 @@
 import Data.Hashable
 
 -- $setup
--- >>> :m + Data.HashSet Control.Lens
+-- >>> :set -XNoOverloadedStrings
+-- >>> import Control.Lens
 
 -- | This 'Setter' can be used to change the type of a 'HashSet' by mapping
 -- the elements to new values.
diff --git a/src/Data/IntSet/Lens.hs b/src/Data/IntSet/Lens.hs
--- a/src/Data/IntSet/Lens.hs
+++ b/src/Data/IntSet/Lens.hs
@@ -19,7 +19,8 @@
 import Data.IntSet as IntSet
 
 -- $setup
--- >>> :m + Data.IntSet.Lens Control.Lens
+-- >>> :set -XNoOverloadedStrings
+-- >>> import Control.Lens
 
 -- | IntSet isn't Foldable, but this 'Fold' can be used to access the members of an 'IntSet'.
 --
diff --git a/src/Data/Set/Lens.hs b/src/Data/Set/Lens.hs
--- a/src/Data/Set/Lens.hs
+++ b/src/Data/Set/Lens.hs
@@ -19,8 +19,10 @@
 import Control.Lens.Type
 import Data.Set as Set
 
+
 -- $setup
--- >>> :m + Data.Set.Lens Control.Lens
+-- >>> :set -XNoOverloadedStrings
+-- >>> import Control.Lens
 
 -- | This 'Setter' can be used to change the type of a 'Set' by mapping
 -- the elements to new values.
diff --git a/src/Generics/Deriving/Lens.hs b/src/Generics/Deriving/Lens.hs
--- a/src/Generics/Deriving/Lens.hs
+++ b/src/Generics/Deriving/Lens.hs
@@ -40,6 +40,9 @@
 import qualified Generics.Deriving as Generic
 import           Generics.Deriving hiding (from, to)
 
+-- $setup
+-- >>> :set -XNoOverloadedStrings
+
 -- | Convert from the data type to its representation (or back)
 --
 -- >>> "hello"^.generic.from generic :: String
diff --git a/src/Numeric/Lens.hs b/src/Numeric/Lens.hs
--- a/src/Numeric/Lens.hs
+++ b/src/Numeric/Lens.hs
@@ -15,6 +15,9 @@
 import Data.Maybe (fromMaybe)
 import Numeric (readInt, showIntAtBase)
 
+-- $setup
+-- >>> :set -XNoOverloadedStrings
+
 -- | This 'Prism' extracts can be used to model the fact that every 'Integral'
 -- type is a subset of 'Integer'.
 --
diff --git a/src/System/FilePath/Lens.hs b/src/System/FilePath/Lens.hs
--- a/src/System/FilePath/Lens.hs
+++ b/src/System/FilePath/Lens.hs
@@ -28,6 +28,9 @@
 
 import Control.Lens hiding ((<.>))
 
+-- $setup
+-- >>> :set -XNoOverloadedStrings
+
 infixr 4 </>~, <</>~, <.>~, <<.>~
 infix 4 </>=, <</>=, <.>=, <<.>=
 
