diff --git a/directory-layout.cabal b/directory-layout.cabal
--- a/directory-layout.cabal
+++ b/directory-layout.cabal
@@ -1,7 +1,7 @@
 name:          directory-layout
-version:       0.1.0.0
+version:       0.2.0.0
 synopsis:      Declare, construct and verify directory layout
-description:   Friendly language to express directory layouts
+description:   Language to express directory layouts
 category:      System
 license:       MIT
 license-file:  LICENSE
@@ -22,9 +22,11 @@
                  filepath,
                  transformers,
                  parsec,
-                 text
+                 text,
+                 QuickCheck
   ghc-options: -Wall
                -fno-warn-unused-do-bind
+
 
 source-repository head
   type: git
diff --git a/src/System/Directory/Layout/Internal.hs b/src/System/Directory/Layout/Internal.hs
--- a/src/System/Directory/Layout/Internal.hs
+++ b/src/System/Directory/Layout/Internal.hs
@@ -4,7 +4,11 @@
   ( DL(..), Layout
   ) where
 
+import Control.Applicative
+import Control.Arrow
+
 import Data.Text (Text)
+import Test.QuickCheck
 
 
 -- | Abstract data type representing directory tree is nice
@@ -30,3 +34,20 @@
   E x >>= f = f x
   F fp c x >>= f = F fp c (x >>= f)
   D fp x y >>= f = D fp x (y >>= f)
+
+
+-- Make arbitrary layout of reasonable size
+-- Frequencies are pretty /arbitrary/ chosen with layout construction termination in mind
+instance Arbitrary a ⇒ Arbitrary (DL a) where
+  arbitrary = snd <$> generator 0
+   where
+    generator ∷ Arbitrary a ⇒ Int → Gen (Int, DL a)
+    generator n = frequency
+      [ (8, do
+          (n', g') ← generator (succ n)
+          generator n' <&> second (D (show n) g'))
+      , (20, generator (succ n) <&> second (F (show n) Nothing))
+      , (10, arbitrary <&> \r → (n, E r))
+      ]
+     where
+      (<&>) = flip fmap
