diff --git a/Bundled/Posix.hsc b/Bundled/Posix.hsc
--- a/Bundled/Posix.hsc
+++ b/Bundled/Posix.hsc
@@ -4,7 +4,7 @@
                     , getFileStatusBS
                     , fileExists
                     , modificationTime, fileSize, FileStatus
-                    , EpochTime, isDirectory ) where
+                    , EpochTime, isDirectory, isRegularFile ) where
 
 import qualified Data.ByteString.Char8 as BS
 import Data.ByteString.Unsafe( unsafeUseAsCString )
@@ -16,7 +16,7 @@
 
 import System.Posix.Internals
           ( CStat, c_fstat, lstat, c_stat, sizeof_stat
-          , st_mode, st_size, st_mtime, s_isdir )
+          , st_mode, st_size, st_mtime, s_isdir, s_isreg )
 
 import System.Posix.Types ( Fd(..), CMode, EpochTime )
 
@@ -58,6 +58,9 @@
 isDirectory :: FileStatus -> Bool
 isDirectory = s_isdir . fst_mode
 
+isRegularFile :: FileStatus -> Bool
+isRegularFile = s_isreg . fst_mode
+
 modificationTime :: FileStatus -> EpochTime
 modificationTime = fst_mtime
 
@@ -80,7 +83,7 @@
 
 getFileStatus :: FilePath -> IO FileStatus
 getFileStatus fp =
-  do_stat (\p -> (fp `withCString` (`c_stat` p)))
+  do_stat (\p -> (fp `withCString` (`lstat` p)))
 
 -- | Requires NULL-terminated bytestring -> unsafe! Use with care.
 getFileStatusBS :: BS.ByteString -> IO FileStatus
diff --git a/Storage/Hashed/Plain.hs b/Storage/Hashed/Plain.hs
--- a/Storage/Hashed/Plain.hs
+++ b/Storage/Hashed/Plain.hs
@@ -13,13 +13,14 @@
                              plainTreeIO  -- (obsolete?  if so remove implementation!)
                            ) where
 
+import Data.Maybe( catMaybes )
 import qualified Data.ByteString as BS
 import qualified Data.ByteString.Char8 as BS8
 import qualified Data.ByteString.Lazy as BL
 import System.FilePath( (</>) )
 import System.Directory( getDirectoryContents
                        , createDirectoryIfMissing )
-import Bundled.Posix( getFileStatus, isDirectory, FileStatus )
+import Bundled.Posix( getFileStatus, isDirectory, isRegularFile, FileStatus )
 import Control.Monad( forM_ )
 
 import Storage.Hashed.AnchoredPath
@@ -43,13 +44,12 @@
 readPlainTree :: FilePath -> IO (Tree IO)
 readPlainTree dir = do
   items <- readPlainDir dir
-  let subs = [
+  let subs = catMaybes [
        let name = Name (BS8.pack name')
-        in if isDirectory status
-              then (name,
-                    Stub (readPlainTree (dir </> name')) NoHash)
-              else (name, File $
-                    Blob (readBlob' name) NoHash)
+        in case status of
+             _ | isDirectory status -> Just (name, Stub (readPlainTree (dir </> name')) NoHash)
+             _ | isRegularFile status -> Just (name, File $ Blob (readBlob' name) NoHash)
+             _ -> Nothing
             | (name', status) <- items ]
   return $ makeTree subs
     where readBlob' (Name name) = readSegment (dir </> BS8.unpack name, Nothing)
diff --git a/hashed-storage.cabal b/hashed-storage.cabal
--- a/hashed-storage.cabal
+++ b/hashed-storage.cabal
@@ -1,5 +1,5 @@
 name:          hashed-storage
-version:       0.4.10
+version:       0.4.11
 synopsis:      Hashed file storage support code.
 
 description:   Support code for reading and manipulating hashed file storage
