diff --git a/Changelog.md b/Changelog.md
--- a/Changelog.md
+++ b/Changelog.md
@@ -1,4 +1,8 @@
-# NEXT
+# 0.3.4
+
+* Bump `containers` upper bound to support `0.6`.
+  (GHC 8.6.1 support)
+  Thanks Christiaan Baaij.
 
 # 0.3.3
 
diff --git a/examples/Prof.hs b/examples/Prof.hs
deleted file mode 100644
--- a/examples/Prof.hs
+++ /dev/null
@@ -1,42 +0,0 @@
-{-# language GADTs, RankNTypes #-}
-module Prof where
-
-import Data.Profunctor
-
-data Shop a b s t where
-  Shop :: (s -> a) -> (s -> b -> t) -> Shop a b s t
-
-type Optic p s t a b  = p a b -> p s t
-type Lens s t a b = forall p . (Strong p) => Optic p s t a b
-
-lens :: (s -> a) -> (s -> b -> t) -> Lens s t a b
-lens get set pab = dimap (\s -> (s, get s)) (uncurry set) (second' pab)
-
-instance Profunctor (Shop a b) where
-  dimap f g (Shop get set) = Shop (get . f) (\s -> g . set (f s))
-
-instance Strong (Shop a b) where
-   first' (Shop get set) = Shop (get . fst) (\(s,c) b -> (set s b, c))
-
-withLens :: Lens s t a b -> ((s -> a) -> (s -> b -> t) -> r) -> r
-withLens l k = case l (Shop id (const id)) of
-                 Shop getter setter -> k getter setter
-
-
-type Prism s t a b = forall p . (Choice p) => Optic p s t a b
-
-prism :: (s -> Either t a) -> (b -> t) -> Prism s t a b
-prism view review pab = dimap view (either id review) (right' pab)
-
-data Market a b s t where
-  Market :: (s -> Either t a) -> (b -> t) -> Market a b s t
-
-instance Profunctor (Market a b) where
-  dimap f g (Market view review) = Market (either (Left . g) Right . (view . f)) (g . review)
-
-instance Choice (Market a b) where
-  left' (Market view review) = Market (either (either (Left . Left) Right . view) (Left . Right)) (Left . review)
-
-withPrism :: Prism s t a b -> ((s -> Either t a) -> (b -> t) -> r) -> r
-withPrism l k = case l (Market Right id) of
-                  Market view review -> k view review
diff --git a/src/Unbound/Generics/PermM.hs b/src/Unbound/Generics/PermM.hs
--- a/src/Unbound/Generics/PermM.hs
+++ b/src/Unbound/Generics/PermM.hs
@@ -119,7 +119,7 @@
 join :: Ord a => Perm a -> Perm a -> Maybe (Perm a)
 join (Perm p1) (Perm p2) =
      let overlap = M.intersectionWith (==) p1 p2 in
-     if M.fold (&&) True overlap then
+     if M.foldr (&&) True overlap then
        Just (Perm (M.union p1 p2))
        else Nothing
 
diff --git a/unbound-generics.cabal b/unbound-generics.cabal
--- a/unbound-generics.cabal
+++ b/unbound-generics.cabal
@@ -2,7 +2,7 @@
 -- documentation, see http://haskell.org/cabal/users-guide/
 
 name:                unbound-generics
-version:             0.3.3
+version:             0.3.4
 synopsis:            Support for programming with names and binders using GHC Generics
 description:         Specify the binding structure of your data type with an
                      expressive set of type combinators, and unbound-generics
@@ -29,7 +29,7 @@
                      README.md,
                      Changelog.md
 cabal-version:       >=1.10
-tested-with: GHC == 7.6.3, GHC == 7.8.4, GHC == 7.10.3, GHC == 8.0.*, GHC == 8.2.*, GHC == 8.4.*
+tested-with: GHC == 7.6.3, GHC == 7.8.4, GHC == 7.10.3, GHC == 8.0.*, GHC == 8.2.*, GHC == 8.4.*, GHC == 8.6.*
              
 library
   exposed-modules:     Unbound.Generics.LocallyNameless
@@ -50,15 +50,15 @@
                        Unbound.Generics.LocallyNameless.TH
                        Unbound.Generics.PermM
                        Unbound.Generics.LocallyNameless.Subst
-  -- other-modules:       
-  -- other-extensions:    
+  -- other-modules:
+  -- other-extensions:
   build-depends:       base >=4.6 && <5,
                        template-haskell >= 2.8.0.0,
                        deepseq >= 1.3.0.0,
                        mtl >= 2.1,
                        transformers >= 0.3,
                        transformers-compat >= 0.3,
-                       containers == 0.5.*,
+                       containers >= 0.5 && < 0.7,
                        contravariant >= 0.5,
                        profunctors >= 4.0,
                        ansi-wl-pprint >= 0.6.7.2 && < 0.7,
