diff --git a/Setup.hs b/Setup.hs
--- a/Setup.hs
+++ b/Setup.hs
@@ -1,2 +1,4 @@
+#!/usr/bin/env runhaskell
 import Distribution.Simple
+main :: IO ()
 main = defaultMain
diff --git a/src/Yi/Fuzzy.hs b/src/Yi/Fuzzy.hs
--- a/src/Yi/Fuzzy.hs
+++ b/src/Yi/Fuzzy.hs
@@ -1,5 +1,6 @@
 {-# LANGUAGE DeriveDataTypeable #-}
 {-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE LambdaCase #-}
 {-# LANGUAGE OverloadedStrings #-}
 {-# LANGUAGE ScopedTypeVariables #-}
 {-# OPTIONS_HADDOCK show-extensions #-}
@@ -14,7 +15,7 @@
 --   TODO if need arises: factor out generic part that captures a pattern of
 --   having an interactive minibuffer and a window that just renders some state.
 
-module Yi.Fuzzy (fuzzyOpen) where
+module Yi.Fuzzy (fuzzyOpen, fuzzyOpenWithDepth, defaultDepth) where
 
 import           Control.Applicative
 import           Control.Monad
@@ -32,7 +33,7 @@
 import           GHC.Generics
 import           System.Directory (doesDirectoryExist, getDirectoryContents)
 import           System.FilePath ((</>))
-
+import           System.IO.Error
 import           Yi
 import           Yi.Completion
 import           Yi.MiniBuffer
@@ -40,6 +41,10 @@
 import           Yi.Types
 import           Yi.Utils ()
 
+-- The following import is a hack which silences redundant import
+-- warnings on recent (4.8.0.0) base
+import          Prelude
+
 -- FuzzyState is stored in minibuffer's dynamic state
 data FuzzyState = FuzzyState
     { _fsItems :: !(V.Vector FuzzyItem)
@@ -58,15 +63,30 @@
 itemToString (BufferItem (MemBuffer x))  = T.unpack x
 itemToString (BufferItem (FileBuffer x))  = x
 
+-- | The depth 'fuzzyOpen' should traverse by default. Currently
+-- __5__.
+defaultDepth :: Int
+defaultDepth = 5
+
+-- | Fuzzy open the current directory. The depth searched is
+-- 'defaultDepth', use fuzzyOpenWithDepth if you want to customise
+-- this.
 fuzzyOpen :: YiM ()
-fuzzyOpen = do
+fuzzyOpen = fuzzyOpenWithDepth defaultDepth
+
+-- | Fuzzy-opens the directory to the specified depth. The depth needs
+-- to be at least @1@ for it to do anything meaningful.
+fuzzyOpenWithDepth :: Int -> YiM ()
+fuzzyOpenWithDepth d = case () of
+  _ | d <= 0 -> printMsg "You need at least depth of 1 for fuzzyOpenWithDepth"
+    | otherwise -> do
     fileList <- fmap (fmap FileItem)
-                     (liftBase (getRecursiveContents "."))
+                     (liftBase (getRecursiveContents d "."))
     bufList <- fmap (fmap (BufferItem . ident . attributes))
                     (withEditor (gets (M.elems . buffers)))
     promptRef <- withEditor (spawnMinibufferE "" (const localKeymap))
     let initialState =
-            FuzzyState (V.fromList (fileList <> bufList))
+            FuzzyState (fileList <> V.fromList bufList)
                        (Just 0)
                        ""
     withGivenBuffer promptRef $ do
@@ -77,22 +97,26 @@
 -- takes about 3 seconds to traverse linux kernel, which is not too outrageous
 -- TODO: check if it works at all with cyclic links
 -- TODO: perform in background, limit file count or directory depth
-getRecursiveContents :: FilePath -> IO [FilePath]
-getRecursiveContents topdir = do
-    names <- getDirectoryContents topdir
+getRecursiveContents :: Int -> FilePath -> IO (V.Vector FilePath)
+getRecursiveContents d _ | d <= 0 = return mempty
+getRecursiveContents d t = tryIOError (getDirectoryContents t) >>= \case
+  Left _ -> return mempty
+  Right names -> do
     let properNames = filter predicate names
+
+        predicate :: FilePath -> Bool
         predicate fileName = and
             [ fileName `notElem` [".", "..", ".git", ".svn"]
             , not (".hi" `isSuffixOf` fileName)
             , not ("-boot" `isSuffixOf` fileName)
             ]
     paths <- forM properNames $ \name -> do
-        let path = topdir </> name
+        let path = t </> name
         isDirectory <- doesDirectoryExist path
         if isDirectory
-            then getRecursiveContents path
-            else return [path]
-    return (concat paths)
+            then getRecursiveContents (d - 1) path
+            else return $ V.singleton path
+    return $ mconcat paths
 
 localKeymap :: Keymap
 localKeymap =
diff --git a/yi-fuzzy-open.cabal b/yi-fuzzy-open.cabal
--- a/yi-fuzzy-open.cabal
+++ b/yi-fuzzy-open.cabal
@@ -1,5 +1,5 @@
 name:           yi-fuzzy-open
-version:        0.1.0
+version:        0.1.0.1
 category:       Development, Editor
 synopsis:       Fuzzy open plugin for Yi.
 description:
@@ -35,3 +35,7 @@
     , yi-rope
 
   ghc-options: -Wall
+
+source-repository head
+  type:     git
+  location: https://github.com/yi-editor/yi-fuzzy-open.git
