diff --git a/Data/DiscreteSpaceMap.hs b/Data/DiscreteSpaceMap.hs
--- a/Data/DiscreteSpaceMap.hs
+++ b/Data/DiscreteSpaceMap.hs
@@ -1,4 +1,4 @@
-{-# LANGUAGE TypeFamilies, MultiParamTypeClasses, FlexibleInstances #-}
+{-# LANGUAGE TypeFamilies, MultiParamTypeClasses, ViewPatterns, FlexibleInstances #-}
 module Data.DiscreteSpaceMap (Pos(..), Map(..), modify) where
 
 import Control.Comonad
@@ -65,10 +65,14 @@
   lookup = lookupDefault
 instance Pos p => Adjustable (Map p) where
   adjust f p z = seek (pos z) . modify f . seek p $ z
+
+-- | @ `distribute` :: Functor f => f (Map p a) -> Map p (f a)@
 instance Pos p => Distributive (Map p) where
-  distribute = distributeRep
--- | @ `index` :: Pos p => Map p a -> p -> a@
--- | @ `tabulate` :: Pos p => (p -> a) -> Map p a@
+  distribute (fmap (seek zero) -> m) = Map zero (fmap extract m) (cotraverseD id $ (\(Map _ _ c) -> c) <$> m)
+
+-- | @
+-- `index` :: Pos p => Map p a -> p -> a
+-- `tabulate` :: Pos p => (p -> a) -> Map p a@
 instance Pos p => Representable (Map p) where
   type Rep (Map p) = p
   tabulate f = Map zero (f zero) (tabulateD f)
diff --git a/Data/DiscreteSpaceMap/Internal.hs b/Data/DiscreteSpaceMap/Internal.hs
--- a/Data/DiscreteSpaceMap/Internal.hs
+++ b/Data/DiscreteSpaceMap/Internal.hs
@@ -69,6 +69,12 @@
 tabulateD :: Pos p => (p -> a) -> MapD a
 tabulateD f = MapD (f (cons (zero, True))) $ tabulateD (\p -> (f (cons (p, False)), f (cons (p, True)))) 
 
+cotraverseD :: Functor f => (f a -> b) -> f (MapD a) -> MapD b
+cotraverseD f m = MapD (f $ hd <$> m) (cotraverseD (\fa2 -> (f $ fst <$> fa2, f $ snd <$> fa2)) (tl <$> m))
+  where
+    hd (MapD a _) = a
+    tl (MapD _ as) = as
+
 zipWithKeyD :: Pos p => (p -> a -> b -> c) -> p -> MapD a -> MapD b -> MapD c
 zipWithKeyD f p (MapD a ca) (MapD b cb) = 
   MapD (f pOther a b) (zipWithKeyD f' pUp ca cb)
diff --git a/discrete-space-map.cabal b/discrete-space-map.cabal
--- a/discrete-space-map.cabal
+++ b/discrete-space-map.cabal
@@ -1,5 +1,5 @@
 name:                discrete-space-map
-version:             0.0.2
+version:             0.0.3
 synopsis:            A discrete space map.
 description:         A discrete space map implemented as a zipper on an infinite perfect binary tree.
 homepage:            https://github.com/sjoerdvisscher/discrete-space-map
