diff --git a/src/lfd/failure_analyzer_utils.cpp b/src/lfd/failure_analyzer_utils.cpp
index 09b9591c7ead78bdc44e8ba0bd9755af69e5a21d..c12b461858dfe5a9d372c758ee05d675920f143b 100644
--- a/src/lfd/failure_analyzer_utils.cpp
+++ b/src/lfd/failure_analyzer_utils.cpp
@@ -26,6 +26,8 @@ std::vector<RuleSet> FailureAnalyzerUtils::get_rules_that_overcome_planning_fail
 
         RuleSet new_rules = create_new_rule_candidates_with_planning_failure(*rule_it, symbolic_planning_failure, transitions);
         CINFO("excuses") << "Checking " << new_rules.size() << " new rules for action " << (*rule_it)->name << " with score ( " << orig_score << " ): " << NOENDL;
+        if (DEBUG > 1)
+            CINFO("excuses") << "Original rule was " << **rule_it;
         for ( RuleList::iterator new_rule_it=new_rules.begin() ; new_rule_it != new_rules.end(); ++new_rule_it ) {
             RuleSet new_generated_rules(rules_copy);
             new_generated_rules.push_back(*new_rule_it);
diff --git a/src/rexd/high_level_planner.cpp b/src/rexd/high_level_planner.cpp
index 3c67e5f68404b1416385a6c49cf42719b4aa9fcf..da89cab012c111f663875a4606911d008a4d220f 100644
--- a/src/rexd/high_level_planner.cpp
+++ b/src/rexd/high_level_planner.cpp
@@ -197,6 +197,7 @@ bool HighLevelPlanner::replan_without_dangerous_actions(const Scenario& scenario
     check_teacher_demonstration_requested(new_planning_res);
     if (new_planning_res) {
         LOG(INFO) << START_COLOR_CYAN << "Replanning without dangerous rules was successful" << END_COLOR;
+        *logging_file_ptr << "Replan without dangerous rule: " << *new_planning_res << std::endl;
         planning_res = new_planning_res;
         return true; // found new plan, not dangerous any more
         // TODO Make a recursive loop until no dangerous action is planned
@@ -262,6 +263,18 @@ SymbolOptional HighLevelPlanner::planning_with_alternative_rules(Scenario& scena
     }
     if (!extra_rulesets.empty())
         CINFO("excuses");
+    
+    // don't select dangerous actions with rule alternatives
+    if (planning_res &&
+        scenario.config_reader.get_variable<bool>("confirm_dangerous_actions")
+        && scenario.get_rules().is_dangerous(*planning_res, scenario.get_state()) ) {
+        float prob_success = planner->get_expected_action_success_probability(scenario, *planning_res, true);
+        if (prob_success < 1.0) {
+            (*logging_file_ptr) << "Ignoring dangerous alternative due to possible dead end: " << *planning_res << std::endl;
+            CINFO("excuses") << "Ignoring dangerous alternative due to possible dead end: " << *planning_res;
+            planning_res = SymbolOptional();
+        } 
+    }
 
     // if found good rules -> save them
     if (planning_res) {