diff --git a/Data/Distributive.hs b/Data/Distributive.hs
--- a/Data/Distributive.hs
+++ b/Data/Distributive.hs
@@ -22,6 +22,8 @@
 import Control.Monad.Trans.Reader
 import Control.Monad.Instances ()
 import Data.Functor.Identity
+import Data.Functor.Product
+import Data.Functor.Compose
 
 -- | This is the categorical dual of 'Traversable'. However, there appears
 -- to be little benefit to allow the distribution via an arbitrary comonad
@@ -76,7 +78,15 @@
 instance Distributive g => Distributive (IdentityT g) where
   collect f = IdentityT . collect (runIdentityT . f)
 
+instance (Distributive f, Distributive g) => Distributive (Compose f g) where
+  distribute = Compose . fmap distribute . collect getCompose
+
+instance (Distributive f, Distributive g) => Distributive (Product f g) where
+  -- distribute  :: Functor w => w (Product f g a) -> Product f g (w a)
+  distribute wp = Pair (collect fstP wp) (collect sndP wp) where 
+    fstP (Pair a _) = a
+    sndP (Pair _ b) = b
+
 -- | Every 'Distributive' is a 'Functor'. This is a valid default definition.
 fmapDefault :: Distributive g => (a -> b) -> g a -> g b
 fmapDefault f = cotraverse (f . runIdentity) . Identity
-
diff --git a/distributive.cabal b/distributive.cabal
--- a/distributive.cabal
+++ b/distributive.cabal
@@ -1,6 +1,6 @@
 name:          distributive
 category:      Data Structures
-version:       0.1
+version:       0.1.1
 license:       BSD3
 cabal-version: >= 1.6
 license-file:  LICENSE
