diff --git a/hspec-core.cabal b/hspec-core.cabal
--- a/hspec-core.cabal
+++ b/hspec-core.cabal
@@ -4,10 +4,10 @@
 --
 -- see: https://github.com/sol/hpack
 --
--- hash: 7cca186c021b61bad5f4aa3748a723fbe2ec81a918644d575eaa8d7fbba6f3a0
+-- hash: 39dc148675f73276544e876331589928821112ae13bb688991d3c5c5ee686cee
 
 name:             hspec-core
-version:          2.6.1
+version:          2.7.0
 license:          MIT
 license-file:     LICENSE
 copyright:        (c) 2011-2019 Simon Hengel,
diff --git a/src/Test/Hspec/Core/Config/Options.hs b/src/Test/Hspec/Core/Config/Options.hs
--- a/src/Test/Hspec/Core/Config/Options.hs
+++ b/src/Test/Hspec/Core/Config/Options.hs
@@ -33,6 +33,8 @@
 data Config = Config {
   configIgnoreConfigFile :: Bool
 , configDryRun :: Bool
+, configFocusedOnly :: Bool
+, configFailOnFocused :: Bool
 , configPrintCpuTime :: Bool
 , configFastFail :: Bool
 , configFailureReport :: Maybe FilePath
@@ -61,6 +63,8 @@
 defaultConfig = Config {
   configIgnoreConfigFile = False
 , configDryRun = False
+, configFocusedOnly = False
+, configFailOnFocused = False
 , configPrintCpuTime = False
 , configFastFail = False
 , configFailureReport = Nothing
@@ -190,10 +194,13 @@
   ]
 
 runnerOptions :: Monad m => [OptDescr (Result m -> Result m)]
-runnerOptions = [
-    Option [] ["dry-run"] (NoArg setDryRun) "pretend that everything passed; don't verify anything"
-  , Option [] ["fail-fast"] (NoArg setFastFail) "abort on first failure"
-  , Option "r" ["rerun"] (NoArg  setRerun) "rerun all examples that failed in the previous test run (only works in combination with --failure-report or in GHCi)"
+runnerOptions = concat [
+    mkFlag "dry-run" setDryRun "pretend that everything passed; don't verify anything"
+  , mkFlag "focused-only" setFocusedOnly "do not run anything, unless there are focused spec items"
+  , mkFlag "fail-on-focused" setFailOnFocused "fail on focused spec items"
+  , mkFlag "fail-fast" setFastFail "abort on first failure"
+  ] ++ [
+    Option "r" ["rerun"] (NoArg  setRerun) "rerun all examples that failed in the previous test run (only works in combination with --failure-report or in GHCi)"
   , mkOption [] "failure-report" (Arg "FILE" return setFailureReport) "read/write a failure report for use with --rerun"
   , Option [] ["rerun-all-on-success"] (NoArg setRerunAllOnSuccess) "run the whole test suite after a previously failing rerun succeeds for the first time (only works in combination with --rerun)"
   , mkOption "j" "jobs" (Arg "N" readMaxJobs setMaxJobs) "run at most N parallelizable tests simultaneously (default: number of available processors)"
@@ -211,8 +218,18 @@
     setMaxJobs :: Int -> Config -> Config
     setMaxJobs n c = c {configConcurrentJobs = Just n}
 
-    setDryRun       = set $ \config -> config {configDryRun = True}
-    setFastFail     = set $ \config -> config {configFastFail = True}
+    setDryRun :: Bool -> Config -> Config
+    setDryRun value config = config {configDryRun = value}
+
+    setFocusedOnly :: Bool -> Config -> Config
+    setFocusedOnly value config = config {configFocusedOnly = value}
+
+    setFailOnFocused :: Bool -> Config -> Config
+    setFailOnFocused value config = config {configFailOnFocused = value}
+
+    setFastFail :: Bool -> Config -> Config
+    setFastFail value config = config {configFastFail = value}
+
     setRerun        = set $ \config -> config {configRerun = True}
     setRerunAllOnSuccess = set $ \config -> config {configRerunAllOnSuccess = True}
 
diff --git a/src/Test/Hspec/Core/Runner.hs b/src/Test/Hspec/Core/Runner.hs
--- a/src/Test/Hspec/Core/Runner.hs
+++ b/src/Test/Hspec/Core/Runner.hs
@@ -180,6 +180,29 @@
         then runSpec spec c_
         else return summary
 
+failFocused :: Item a -> Item a
+failFocused item = item {itemExample = example}
+  where
+    failure = Failure Nothing (Reason "item is focused; failing due to --fail-on-focused")
+    example
+      | itemIsFocused item = \ params hook p -> do
+          Result info status <- itemExample item params hook p
+          return $ Result info $ case status of
+            Success -> failure
+            Pending _ _ -> failure
+            Failure{} -> status
+      | otherwise = itemExample item
+
+failFocusedItems :: Config -> Spec -> Spec
+failFocusedItems config spec
+  | configFailOnFocused config = mapSpecItem_ failFocused spec
+  | otherwise = spec
+
+focusSpec :: Config -> Spec -> Spec
+focusSpec config spec
+  | configFocusedOnly config = spec
+  | otherwise = focus spec
+
 runSpec_ :: Config -> Spec -> IO Summary
 runSpec_ config spec = do
   withHandle config $ \h -> do
@@ -193,9 +216,11 @@
 
     useColor <- doesUseColor h config
 
-    let params = Params (configQuickCheckArgs config) (configSmallCheckDepth config)
+    let
+      focusedSpec = focusSpec config (failFocusedItems config spec)
+      params = Params (configQuickCheckArgs config) (configSmallCheckDepth config)
 
-    filteredSpec <- filterSpecs config . mapMaybe (toEvalTree params) . applyDryRun config <$> runSpecM (focus spec)
+    filteredSpec <- filterSpecs config . mapMaybe (toEvalTree params) . applyDryRun config <$> runSpecM focusedSpec
 
     (total, failures) <- withHiddenCursor useColor h $ do
       let
diff --git a/test/Test/Hspec/Core/Config/OptionsSpec.hs b/test/Test/Hspec/Core/Config/OptionsSpec.hs
--- a/test/Test/Hspec/Core/Config/OptionsSpec.hs
+++ b/test/Test/Hspec/Core/Config/OptionsSpec.hs
@@ -91,6 +91,7 @@
         fromLeft (parseOptions [("~/.hspec", ["--fail"])] Nothing []) `shouldBe` (ExitFailure 1,
           unlines [
             "my-spec: option `--fail' is ambiguous; could be one of:"
+          , "    --fail-on-focused      fail on focused spec items"
           , "    --fail-fast            abort on first failure"
           , "    --failure-report=FILE  read/write a failure report for use with --rerun"
           , "in config file ~/.hspec"
diff --git a/test/Test/Hspec/Core/RunnerSpec.hs b/test/Test/Hspec/Core/RunnerSpec.hs
--- a/test/Test/Hspec/Core/RunnerSpec.hs
+++ b/test/Test/Hspec/Core/RunnerSpec.hs
@@ -254,6 +254,43 @@
             H.it "bar" True
         readIORef ref `shouldReturn` False
 
+    context "with --focused-only" $ do
+      let run = captureLines . withArgs ["--focused-only"] . H.hspec
+      context "when there aren't any focused spec items" $ do
+        it "does not run anything" $ do
+          r <- run $ do
+            H.it "foo" True
+            H.it "bar" True
+          normalizeSummary r `shouldBe` [
+              ""
+            , ""
+            , "Finished in 0.0000 seconds"
+            , "0 examples, 0 failures"
+            ]
+
+    context "with --fail-on-focused" $ do
+      let run = captureLines . ignoreExitCode . withArgs ["--fail-on-focused", "--seed", "23"] . H.hspec . removeLocations
+      it "fails on focused spec items" $ do
+        r <- run $ do
+          H.it "foo" True
+          H.fit "bar" True
+        normalizeSummary r `shouldBe` [
+            ""
+          , "bar FAILED [1]"
+          , ""
+          , "Failures:"
+          , ""
+          , "  1) bar"
+          , "       item is focused; failing due to --fail-on-focused"
+          , ""
+          , "  To rerun use: --match \"/bar/\""
+          , ""
+          , "Randomized with seed 23"
+          , ""
+          , "Finished in 0.0000 seconds"
+          , "1 example, 1 failure"
+          ]
+
     context "with --fail-fast" $ do
       it "stops after first failure" $ do
         r <- captureLines . ignoreExitCode . withArgs ["--fail-fast", "--seed", "23"] . H.hspec . removeLocations $ do
