diff --git a/CHANGES.txt b/CHANGES.txt
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -1,5 +1,9 @@
 Changelog for HLint
 
+1.9.21
+    #130, ignore a BOM if it exists
+    #128, don't find files starting with . when searching directories
+    Suggest concat even if the [] is written ""
 1.9.20
     #122, fix the zipWith/repeat hint
 1.9.19
diff --git a/data/Default.hs b/data/Default.hs
--- a/data/Default.hs
+++ b/data/Default.hs
@@ -108,7 +108,9 @@
 -- error = take (length x - 1) x ==> init x -- not true for x == []
 error = isPrefixOf (reverse x) (reverse y) ==> isSuffixOf x y
 error = foldr (++) [] ==> concat
+error = foldr (++) "" ==> concat
 error = foldl (++) [] ==> concat where note = IncreasesLaziness
+error = foldl (++) "" ==> concat where note = IncreasesLaziness
 error = foldl f (head x) (tail x) ==> foldl1 f x
 error = foldr f (last x) (init x) ==> foldr1 f x
 error = span (not . p) ==> break p
diff --git a/hlint.cabal b/hlint.cabal
--- a/hlint.cabal
+++ b/hlint.cabal
@@ -1,7 +1,7 @@
 cabal-version:      >= 1.6
 build-type:         Simple
 name:               hlint
-version:            1.9.20
+version:            1.9.21
 license:            BSD3
 license-file:       LICENSE
 category:           Development
diff --git a/src/CmdLine.hs b/src/CmdLine.hs
--- a/src/CmdLine.hs
+++ b/src/CmdLine.hs
@@ -210,9 +210,10 @@
 getFile (p:ath) exts file = do
     isDir <- doesDirectoryExist $ p <\> file
     if isDir then do
-        let avoid x = let y = takeFileName x in "_" `isPrefixOf` y || ("." `isPrefixOf` y && not (all (== '.') y))
-        xs <- listFilesInside (return . not . avoid) $ p <\> file
-        return [x | x <- xs, drop 1 (takeExtension x) `elem` exts]
+        let avoidDir x = let y = takeFileName x in "_" `isPrefixOf` y || ("." `isPrefixOf` y && not (all (== '.') y))
+            avoidFile x = let y = takeFileName x in "." `isPrefixOf` y
+        xs <- listFilesInside (return . not . avoidDir) $ p <\> file
+        return [x | x <- xs, drop 1 (takeExtension x) `elem` exts, not $ avoidFile x]
      else do
         isFil <- doesFileExist $ p <\> file
         if isFil then return [p <\> file]
diff --git a/src/HSE/All.hs b/src/HSE/All.hs
--- a/src/HSE/All.hs
+++ b/src/HSE/All.hs
@@ -67,6 +67,7 @@
 parseModuleEx :: ParseFlags -> FilePath -> Maybe String -> IO (Either ParseError (Module SrcSpanInfo, [Comment]))
 parseModuleEx flags file str = do
         str <- maybe (readFileEncoding (encoding flags) file) return str
+        str <- return $ fromMaybe str $ stripPrefix "\65279" str -- remove the BOM if it exists, see #130
         ppstr <- runCpp (cppFlags flags) file str
         case parseFileContentsWithComments (mode flags) ppstr of
             ParseOk (x, cs) -> return $ Right (applyFixity fixity x, cs)
