diff --git a/hspec-discover/src/Run.hs b/hspec-discover/src/Run.hs
--- a/hspec-discover/src/Run.hs
+++ b/hspec-discover/src/Run.hs
@@ -5,6 +5,7 @@
 import           Control.Monad
 import           Control.Applicative
 import           Data.List
+import           Data.Maybe
 import           Data.String
 import           Data.Function
 import           System.Environment
@@ -138,10 +139,21 @@
         SpecNode d False <$> (getFilesAndDirectories dir >>= go dir)
       (return . filterSpecs . combineSpecs) (specsFromFiles files ++ nestedSpecs)
       where
-        specsFromFiles = map (\x -> SpecNode (stripSuffix x) True []) . filter (isSuffixOf suffix)
+        specsFromFiles = catMaybes . map specFromFile
           where
-            suffix = "Spec.hs"
-            stripSuffix = reverse . drop (length suffix) . reverse
+            suffixes :: [String]
+            suffixes = ["Spec.hs","Spec.lhs"]
+
+            specFromFile :: FilePath -> Maybe SpecNode
+            specFromFile file = msum $ map (specFromFile_ file) suffixes
+
+            specFromFile_ :: FilePath -> String -> Maybe SpecNode
+            specFromFile_ file suffix
+              | suffix `isSuffixOf` file = Just $ SpecNode (dropEnd (length suffix) file) True []
+              | otherwise = Nothing
+
+            dropEnd :: Int -> [a] -> [a]
+            dropEnd n = reverse . drop n . reverse
 
         -- remove empty leafs
         filterSpecs :: [SpecNode] -> [SpecNode]
diff --git a/hspec-discover/test-data/lhs-spec/FooSpec.lhs b/hspec-discover/test-data/lhs-spec/FooSpec.lhs
new file mode 100644
--- /dev/null
+++ b/hspec-discover/test-data/lhs-spec/FooSpec.lhs
diff --git a/hspec-discover/test-data/lhs-spec/Spec.hs b/hspec-discover/test-data/lhs-spec/Spec.hs
new file mode 100644
--- /dev/null
+++ b/hspec-discover/test-data/lhs-spec/Spec.hs
diff --git a/hspec-discover/test/RunSpec.hs b/hspec-discover/test/RunSpec.hs
--- a/hspec-discover/test/RunSpec.hs
+++ b/hspec-discover/test/RunSpec.hs
@@ -18,6 +18,9 @@
       it "finds several specs" $ do
         findSpecs "hspec-discover/test-data/several-specs/Spec.hs" `shouldReturn` [SpecNode "Bar" True [], SpecNode "Baz" True [], SpecNode "Foo" True []]
 
+      it "discovers .lhs files" $ do
+        findSpecs "hspec-discover/test-data/lhs-spec/Spec.hs" `shouldReturn` [SpecNode "Foo" True []]
+
     context "when specs are nested" $ do
       it "finds a single spec" $ do
         findSpecs "hspec-discover/test-data/single-spec-nested/Spec.hs" `shouldReturn` [SpecNode "Foo" False [SpecNode "Bar" True []]]
diff --git a/hspec.cabal b/hspec.cabal
--- a/hspec.cabal
+++ b/hspec.cabal
@@ -1,5 +1,5 @@
 name:             hspec
-version:          1.4.4
+version:          1.4.5
 license:          BSD3
 license-file:     LICENSE
 copyright:        (c) 2011-2012 Trystan Spangler, (c) 2011-2012 Simon Hengel, (c) 2011 Greg Weber
@@ -28,6 +28,8 @@
   hspec-discover/test-data/nested-spec/FooSpec.hs
   hspec-discover/test-data/nested-spec/Foo/Bar/BazSpec.hs
   hspec-discover/test-data/nested-spec/Foo/BarSpec.hs
+  hspec-discover/test-data/lhs-spec/FooSpec.lhs
+  hspec-discover/test-data/lhs-spec/Spec.hs
   hspec-discover/test-data/several-specs/BarSpec.hs
   hspec-discover/test-data/several-specs/FooSpec.hs
   hspec-discover/test-data/several-specs/BazSpec.hs
