diff --git a/Data/Semifunctor.hs b/Data/Semifunctor.hs
--- a/Data/Semifunctor.hs
+++ b/Data/Semifunctor.hs
@@ -93,6 +93,8 @@
 instance Extend w => Semifunctor (Bi (,)) (Product (Cokleisli w) (Cokleisli w)) (Cokleisli w) where
   semimap (Pair l r) = Cokleisli $ \p -> runCokleisli l (fstP <$> p) # runCokleisli r (sndP <$> p)
 
+-- instance Extend w => Semifunctor (Bi Either)) (Product (Cokleisli w) (Cokleisli w)) (Cokleisli w) where
+
 semibimap :: Semifunctor p (Product l r) cod => l a b -> r c d -> cod (p (a,c)) (p (b,d))
 semibimap f g = semimap (Pair f g)
 
diff --git a/Data/Semifunctor/Associative.hs b/Data/Semifunctor/Associative.hs
--- a/Data/Semifunctor/Associative.hs
+++ b/Data/Semifunctor/Associative.hs
@@ -1,4 +1,4 @@
-{-# LANGUAGE MultiParamTypeClasses, FlexibleContexts, FlexibleInstances, GADTs, ImplicitParams #-}
+{-# LANGUAGE MultiParamTypeClasses, FlexibleContexts, FlexibleInstances, GADTs #-}
 module Data.Semifunctor.Associative where
 
 import Prelude hiding ((.), id)
@@ -6,11 +6,7 @@
 import Control.Comonad
 import Data.Functor.Bind
 import Data.Semifunctor
--- import Data.Semigroupoid.Dual
--- import Data.Semigroupoid.Product
 
--- instance Semifunctor p (Product x y) z => Semifunctor (DualSemibifunctor p) (Product (Dual x) (Dual y)) (Dual z) where
-
 class Semifunctor p (Product k k) k => Associative k p where
   associate :: k (p(p(a,b),c)) (p(a,p(b,c)))
 
@@ -36,6 +32,8 @@
 
 instance Comonad m => Associative (Cokleisli m) (Bi (,)) where
   associate = cokleisliAssociate
+
+-- instance Comonad m => Associative (Cokleisli m) (Bi Either) where associate = cokleisliAssociate
 
 -- instance Disassociative k p => Associative (Dual k) p
 -- instance (Monad m, Semifunctor p (Product (Kleisli m) (Kleisli m) (Kleisli m), Associative (->) p) => Associative (Kleisli m) p) where associate = kleisliAssociate
diff --git a/Data/Semifunctor/Braided.hs b/Data/Semifunctor/Braided.hs
new file mode 100644
--- /dev/null
+++ b/Data/Semifunctor/Braided.hs
@@ -0,0 +1,56 @@
+{-# LANGUAGE MultiParamTypeClasses, FlexibleContexts, FlexibleInstances, GADTs #-}
+module Data.Semifunctor.Braided 
+  ( Braided(..)
+  , kleisliBraid
+  , cokleisliBraid
+  , Symmetric
+  , swap
+  ) where
+
+import Prelude hiding ((.), id)
+import Control.Arrow
+import Control.Comonad
+import Data.Functor.Bind
+import Data.Semifunctor
+import Data.Semifunctor.Associative
+-- import Data.Semigroupoid.Dual
+
+class Associative k p => Braided k p where
+  braid :: k (p(a,b)) (p(b,a))
+
+-- instance Braided k p => Braided (Dual k) p where braid = Dual braid
+
+instance Braided (->) (Bi Either) where
+  braid (Bi (Left a)) = Bi (Right a)
+  braid (Bi (Right a)) = Bi (Left a)
+
+instance Braided (->) (Bi (,)) where
+  braid (Bi (a,b)) = Bi (b,a)
+
+kleisliBraid :: (Monad m, Semifunctor p (Product (Kleisli m) (Kleisli m)) (Kleisli m), Braided (->) p) => Kleisli m (p(a,b)) (p(b,a))
+kleisliBraid = Kleisli (return . braid)
+
+instance (Bind m, Monad m) => Braided (Kleisli m) (Bi Either) where
+  braid = kleisliBraid
+
+instance (Bind m, Monad m) => Braided (Kleisli m) (Bi (,)) where
+  braid = kleisliBraid
+
+cokleisliBraid :: (Comonad w, Semifunctor p (Product (Cokleisli w) (Cokleisli w)) (Cokleisli w), Braided (->) p) => Cokleisli w (p(a,b)) (p(b,a))
+cokleisliBraid = Cokleisli (braid . extract)
+
+instance Comonad w => Braided (Cokleisli w) (Bi (,)) where
+  braid = cokleisliBraid
+
+-- instance Comonad w => Braided (Cokleisli w) (Bi Either) where braid = cokleisliBraid
+
+class Braided k p => Symmetric k p
+instance Symmetric (->) (Bi Either) 
+instance Symmetric (->) (Bi (,))
+instance (Bind m, Monad m) => Symmetric (Kleisli m) (Bi Either)
+instance (Bind m, Monad m) => Symmetric (Kleisli m) (Bi (,))
+instance Comonad w => Symmetric (Cokleisli w) (Bi (,))
+-- instance Comonad w => Symmetric (Cokleisli w) (Bi Either)
+
+swap :: Symmetric k p => k (p(a,b)) (p(b,a))
+swap = braid
diff --git a/semigroupoid-extras.cabal b/semigroupoid-extras.cabal
--- a/semigroupoid-extras.cabal
+++ b/semigroupoid-extras.cabal
@@ -1,6 +1,6 @@
 name:          semigroupoid-extras
 category:      Control
-version:       0.2.5
+version:       0.2.6
 license:       BSD3
 cabal-version: >= 1.6
 license-file:  LICENSE
@@ -28,6 +28,7 @@
   exposed-modules:
     Data.Semifunctor
     Data.Semifunctor.Associative
+    Data.Semifunctor.Braided
     Data.Semigroupoid.Ob
     Data.Semigroupoid.Product
     Data.Semigroupoid.Coproduct
