diff --git a/README.md b/README.md
--- a/README.md
+++ b/README.md
@@ -4,7 +4,7 @@
 Usage
 -----
 
-Cgrep 6.5.4 Usage: cgrep [OPTION] [PATTERN] files...
+Cgrep 6.5.5 Usage: cgrep [OPTION] [PATTERN] files...
 
 cgrep [OPTIONS] [ITEM]
 
@@ -52,6 +52,7 @@
        --force-language=ITEM  force the language
        --multiline=INT        enable multi-line matching
     -r --recursive            Enable recursive search (don't follow symlinks)
+       --prune-dir=ITEM       Do not descend into dir
     -R --deference-recursive  Recursive, follow symlinks
     -v --invert-match         select non-matching lines
        --max-count=INT        stop search in files after INT matches
diff --git a/cgrep.cabal b/cgrep.cabal
--- a/cgrep.cabal
+++ b/cgrep.cabal
@@ -1,6 +1,6 @@
 Name:                cgrep
 Description:         Cgrep: a context-aware grep for source codes
-Version:             6.5.4
+Version:             6.5.5
 Synopsis:            Command line tool
 Homepage:            http://awgn.github.io/cgrep/
 License:             GPL-2
diff --git a/src/CmdOptions.hs b/src/CmdOptions.hs
--- a/src/CmdOptions.hs
+++ b/src/CmdOptions.hs
@@ -53,6 +53,7 @@
           ,     count = False               &= help "Print only a count of matching lines per file" &= explicit &= name "count"
           ,     multiline = 1               &= help "Enable multi-line matching"
           ,     recursive = False           &= help "Enable recursive search (don't follow symlinks)" &= explicit &= name "recursive" &= name "r"
+          ,     prune_dir = []              &= help "Do not descend into dir" &= explicit &= name "prune-dir"
           ,     deference_recursive = False &= help "Recursive, follow symlinks" &= explicit &= name "deference-recursive" &= name "R"
           ,     invert_match = False        &= help "Select non-matching lines" &= explicit &= name "invert-match" &= name "v"
           ,     show_match = False          &= help "Show list of matching tokens" &= explicit &= name "show-match"
diff --git a/src/Config.hs b/src/Config.hs
--- a/src/Config.hs
+++ b/src/Config.hs
@@ -18,7 +18,9 @@
 
 module Config where
 
-import Data.Maybe
+import Data.List
+import Data.Char
+
 import Control.Monad
 import System.Directory
 import System.FilePath ((</>))
@@ -31,7 +33,7 @@
 cgreprc = "cgreprc"
 
 version :: String
-version = "6.5.4"
+version = "6.5.5"
 
 
 data Config = Config
@@ -41,16 +43,17 @@
     } deriving (Show, Read)
 
 
-getConfig :: IO Config
-getConfig = do
-    home <- getHomeDirectory
-    conf <- liftM msum $ forM [ home </> "." ++ cgreprc, "/etc" </> cgreprc ] $ \f ->
-                (doesFileExist >=> (\b -> return $ guard b >> Just f)) f
 
-    if isJust conf then readFile (fromJust conf) >>= \xs ->
-                        return (prettyRead (dropComments xs) "Config error" :: Config)
-                   else return $ Config [] [] False
+dropComments :: String -> String
+dropComments =  unlines . filter notComment . lines
+    where notComment = (not . ("#" `isPrefixOf`)) . dropWhile isSpace
 
-    where dropComments :: String -> String
-          dropComments = unlines . map (takeWhile $ not .(== '#')) . lines
+
+getConfig :: IO Config
+getConfig = do
+    home  <- getHomeDirectory
+    confs <- filterM doesFileExist ["." ++ cgreprc, home </> "." ++ cgreprc, "/etc" </> cgreprc]
+    if notNull confs then liftM dropComments (readFile (head confs)) >>= \xs ->
+                            return (prettyRead xs "Config error" :: Config)
+                    else return $ Config [] [] False
 
diff --git a/src/Debug.hs b/src/Debug.hs
--- a/src/Debug.hs
+++ b/src/Debug.hs
@@ -24,6 +24,7 @@
 import Control.Monad
 import Options
 
+
 putStrLevel1 :: String -> ReaderT Options IO ()
 putStrLevel1 xs = do
     n <- reader debug
diff --git a/src/Main.hs b/src/Main.hs
--- a/src/Main.hs
+++ b/src/Main.hs
@@ -82,10 +82,10 @@
                -- process dirs
                --
                forM_ dirs $ \path -> do
-                    let filename = takeFileName path
+                    let dirname = takeFileName path
                     lstatus <- getSymbolicLinkStatus path
                     when ( deference_recursive opts || not (isSymbolicLink lstatus)) $
-                        unless (filename `elem` prunedir) $ do -- this is a good directory (unless already visited)!
+                        unless (dirname `elem` prunedir) $ do -- this is a good directory (unless already visited)!
                             cpath <- canonicalizePath path
                             unless (cpath `Set.member` visited) $ withRecursiveContents opts path langs prunedir (Set.insert cpath visited) action
              else action [dir]
@@ -139,7 +139,7 @@
     _ <- liftIO . forkIO $ do
 
         if recursive opts || deference_recursive opts
-            then forM_ (if null paths then ["."] else paths) $ \p -> withRecursiveContents opts p langs (configPruneDirs conf) (Set.singleton p) (atomically . writeTChan in_chan)
+            then forM_ (if null paths then ["."] else paths) $ \p -> withRecursiveContents opts p langs (configPruneDirs conf ++ prune_dir opts) (Set.singleton p) (atomically . writeTChan in_chan)
             else forM_ (if null paths && not isTermIn then [""] else paths) (atomically . writeTChan in_chan . (:[]))
 
         -- enqueue EOF messages:
diff --git a/src/Options.hs b/src/Options.hs
--- a/src/Options.hs
+++ b/src/Options.hs
@@ -55,6 +55,7 @@
     -- General:
     ,   multiline           :: Int
     ,   recursive           :: Bool
+    ,   prune_dir           :: [FilePath]
     ,   deference_recursive :: Bool
     ,   invert_match        :: Bool
     ,   max_count           :: Int
diff --git a/src/Util.hs b/src/Util.hs
--- a/src/Util.hs
+++ b/src/Util.hs
@@ -28,6 +28,7 @@
 
 -- from hlint :-)
 
+
 partitionM :: Monad m => (a -> m Bool) -> [a] -> m ([a], [a])
 partitionM _ [] = return ([], [])
 partitionM f (x:xs) = do
@@ -51,10 +52,9 @@
 
 prettyRead :: Read a => String -> String -> a
 prettyRead xs err =
-    case value of
+    case readMaybe xs of
         Just v -> v
-        _      -> error $ err ++ ": parse error near " ++ show(take 40 xs)
-        where value = readMaybe xs
+        _      -> error $ err ++ ": parse error near " ++ show (take 40 xs)
 
 
 readMaybe :: Read a => String -> Maybe a
@@ -69,6 +69,7 @@
 
 toStrict :: LC.ByteString -> C.ByteString
 toStrict = C.concat . LC.toChunks
+
 
 toLowercase :: Char -> Char
 toLowercase x = ctypeLowercase ! x
