diff --git a/changelog b/changelog
--- a/changelog
+++ b/changelog
@@ -1,3 +1,7 @@
+0.1.2
+
+* Add instance of `Wrapped` and `Swapped`.
+
 0.1.1
 
 * Introduce `separatedBy` and `separatedBy1` combinators.
diff --git a/separated.cabal b/separated.cabal
--- a/separated.cabal
+++ b/separated.cabal
@@ -1,5 +1,5 @@
 name:               separated
-version:            0.1.1
+version:            0.1.2
 license:            BSD3
 license-File:       etc/LICENCE
 author:             Tony Morris <ʇǝu˙sıɹɹoɯʇ@ןןǝʞsɐɥ>
diff --git a/src/Data/Separated/Separated.hs b/src/Data/Separated/Separated.hs
--- a/src/Data/Separated/Separated.hs
+++ b/src/Data/Separated/Separated.hs
@@ -1,29 +1,34 @@
 {-# LANGUAGE NoImplicitPrelude #-}
 {-# LANGUAGE TypeFamilies #-}
 {-# LANGUAGE MultiParamTypeClasses #-}
+{-# LANGUAGE TemplateHaskell #-}
+{-# LANGUAGE FlexibleInstances #-}
 
 module Data.Separated.Separated(
   Separated
 , separated
 , Separated1
 , separated1
+-- * Viewing
 , separated1Head
 , separated1Tail
+-- Constructing
 , empty
 , (+-)
 , single
+-- * Appending
 , shift
-, separatedSwap
 , (.++.)
 , (++.)
 , (.++)
+-- * Alternating
 , separatedBy
 , separatedBy1
 ) where
 
 import Control.Applicative(Alternative(many))
-import Data.Bifoldable
-import Data.Bitraversable
+import Data.Bifoldable(Bifoldable(bifoldr))
+import Data.Bitraversable(Bitraversable(bitraverse))
 import Data.Functor.Apply as Apply((<.>))
 import Data.List(intercalate, zipWith, repeat)
 import Data.Monoid as Monoid(mappend)
@@ -46,6 +51,26 @@
   Separated [(a, b)]
   deriving (Eq, Ord)
 
+makeWrapped ''Separated
+
+-- | The isomorphism that swaps elements with their separators.
+--
+-- >>> swapped # empty
+-- []
+--
+-- >>> swapped # ('x' +: 6 +: empty)
+-- [6,'x']
+--
+-- >>> empty ^. swapped
+-- []
+--
+-- >>> ('x' +: 6 +: empty) ^. swapped
+-- [6,'x']
+instance Swapped Separated where
+  swapped =
+    let swap = (\(Separated x) -> Separated (fmap (\(a, b) -> (b, a)) x))
+    in iso swap swap
+
 instance Bifunctor Separated where
   bimap f g (Separated x) =
     Separated (fmap (bimap f g) x)
@@ -159,7 +184,7 @@
   (<*>) =
     separated1Ap (<>)
   pure =
-    Separated1 mempty . (separatedSwap #) . pure
+    Separated1 mempty . (swapped #) . pure
 
 instance SeparatedCons Separated Separated1 where
   type SeparatedConsF Separated1 = Separated
@@ -185,7 +210,7 @@
 separated ::
   Iso [(a, b)] [(c, d)] (Separated a b) (Separated c d)
 separated =
-  iso Separated (\(Separated x) -> x)
+  from _Wrapped
 
 empty ::
   Separated s a
@@ -284,25 +309,6 @@
         let (w, z) = shiftL (Separated1 t' (Separated r))
         in ((s', a) : w, z)
   in iso shiftL shiftR
-
--- | The isomorphism that swaps elements with their separators.
---
--- >>> separatedSwap # empty
--- []
---
--- >>> separatedSwap # ('x' +: 6 +: empty)
--- [6,'x']
---
--- >>> empty ^. separatedSwap
--- []
---
--- >>> ('x' +: 6 +: empty) ^. separatedSwap
--- [6,'x']
-separatedSwap ::
-  Iso (Separated s a) (Separated t b) (Separated a s) (Separated b t)
-separatedSwap =
-  let swap (a, b) = (b, a)
-  in iso (\(Separated x) -> Separated (fmap swap x)) (\(Separated x) -> Separated (fmap swap x))
 
 -- | Append two lists of separated values to produce a list of pairs of separator and element values.
 --
