diff --git a/plailude.cabal b/plailude.cabal
--- a/plailude.cabal
+++ b/plailude.cabal
@@ -1,5 +1,5 @@
 name:                plailude
-version:             0.3.0
+version:             0.4.0
 synopsis:            plaimi's prelude
 description:         The prelude used internally at plaimi.
 
@@ -23,6 +23,7 @@
 library
   exposed-modules:     Plailude
   other-modules:       Plailude.Control
+                       Plailude.Control.Arrow
                        Plailude.Control.Monad
                        Plailude.Data.Text
                        Plailude.Data.Text.Show
diff --git a/src/Plailude/Control.hs b/src/Plailude/Control.hs
--- a/src/Plailude/Control.hs
+++ b/src/Plailude/Control.hs
@@ -6,8 +6,10 @@
 
 Maintainer  :  plailude@plaimi.net
 -} module Plailude.Control (
+  both,
   erretreat,
   retreat,
   ) where
 
+import Plailude.Control.Arrow
 import Plailude.Control.Monad
diff --git a/src/Plailude/Control/Arrow.hs b/src/Plailude/Control/Arrow.hs
new file mode 100644
--- /dev/null
+++ b/src/Plailude/Control/Arrow.hs
@@ -0,0 +1,22 @@
+{- |
+Module      :  $Header$
+Description :  Arrows. dealwithit.jpeg.
+Copyright   :  (c) plaimi 2014
+License     :  GPL-3
+
+Maintainer  :  plailude@plaimi.net
+-} module Plailude.Control.Arrow where
+
+import Control.Arrow
+  (
+  (***),
+  Arrow,
+  )
+import Control.Monad
+  (
+  join,
+  )
+
+both :: Arrow a => a b c -> a (b, b) (c, c)
+-- | Send both components of the input through the argument arrow.
+both = join (***)
