diff --git a/CHANGES.txt b/CHANGES.txt
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -1,5 +1,8 @@
 Changelog for HLint
 
+1.9.19
+    #119, don't remove RecursiveDo if they use the rec statement
+    Add a suggestion concatMap/map ==> concatMap
 1.9.18
     More GHC 7.10 warnings and build support
 1.9.17
diff --git a/data/Default.hs b/data/Default.hs
--- a/data/Default.hs
+++ b/data/Default.hs
@@ -91,6 +91,7 @@
 error = concat (map f x) ==> concatMap f x
 warn = concat [a, b] ==> a ++ b
 warn "Use map once" = map f (map g x) ==> map (f . g) x
+warn "Fuse concatMap/map" = concatMap f (map g x) ==> concatMap (f . g) x
 warn  = x !! 0 ==> head x
 error = take n (repeat x) ==> replicate n x
     where _ = noQuickCheck -- takes too long
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.18
+version:            1.9.19
 license:            BSD3
 license-file:       LICENSE
 category:           Development
diff --git a/src/HSE/Util.hs b/src/HSE/Util.hs
--- a/src/HSE/Util.hs
+++ b/src/HSE/Util.hs
@@ -101,6 +101,7 @@
 isQuasiQuote QuasiQuote{} = True; isQuasiQuote _ = False
 isSpliceDecl SpliceDecl{} = True; isSpliceDecl _ = False
 isNewType NewType{} = True; isNewType _ = False
+isRecStmt RecStmt{} = True; isRecStmt _ = False
 
 isSection LeftSection{} = True
 isSection RightSection{} = True
diff --git a/src/Hint/Extensions.hs b/src/Hint/Extensions.hs
--- a/src/Hint/Extensions.hs
+++ b/src/Hint/Extensions.hs
@@ -20,6 +20,8 @@
 $(fmap return $ dataD (return []) (mkName "Void") [] [] [])
 {-# LANGUAGE RecursiveDo #-} \
 main = mdo x <- y; return y
+{-# LANGUAGE RecursiveDo #-} \
+main = do {rec {x <- return 1}; print x}
 {-# LANGUAGE ImplicitParams, BangPatterns #-} \
 sort :: (?cmp :: a -> a -> Bool) => [a] -> [a] \
 sort !f = undefined
@@ -106,7 +108,7 @@
 
 
 used :: KnownExtension -> Module_ -> Bool
-used RecursiveDo = hasS isMDo
+used RecursiveDo = hasS isMDo & hasS isRecStmt
 used ParallelListComp = hasS isParComp
 used FunctionalDependencies = hasT (un :: FunDep S)
 used ImplicitParams = hasT (un :: IPName S)
