diff --git a/src/gurka.erl b/src/gurka.erl
index abd65c5c3ba7ab97b1ba19ee8d8733d2a419aead..2ec783ccc095cd578f8abdebeaf15161e988978b 100644
--- a/src/gurka.erl
+++ b/src/gurka.erl
@@ -59,6 +59,7 @@ run(Module, Options, FeatureState, ScenarioState, _PreviousPhase, [Step = #step{
         {Flag, State} when Flag == ok; Flag == true ->
             [{ok, Step} | run(Module, Options, State, ScenarioState, background, Steps)];
         Term ->
+            apply(Module, Options, teardown_feature, [FeatureState]),
             [{Term, Step}]
     end;
 
@@ -77,6 +78,7 @@ run(Module, Options, FeatureState, ScenarioState, PreviousPhase, [Step = #step{p
                 {error, undef, _Stack} ->
                     [{ok, Step} | run(Module, Options, FeatureState, FeatureState, scenario, Steps)];
                 Term ->
+                    apply(Module, Options, teardown_feature, [FeatureState]),
                     [{Term, Step}]
             end;
         _ ->
@@ -90,6 +92,8 @@ run(Module, Options, FeatureState, ScenarioState, _PreviousPhase, [Step = #step{
         {Flag, State} when Flag == ok; Flag == true ->
             [{ok, Step} | run(Module, Options, FeatureState, State, scenario, Steps)];
         Term ->
+            apply(Module, Options, teardown_scenario, [ScenarioState]),
+            apply(Module, Options, teardown_feature, [FeatureState]),
             [{Term, Step}]
     end;