diff --git a/lib/sympto/index.js b/lib/sympto/index.js
index 575b608ea0a28f4235053d93839b607a9df5b737..96e2b49151ab9ae68130d1d969571694bce3a689 100644
--- a/lib/sympto/index.js
+++ b/lib/sympto/index.js
@@ -23,7 +23,8 @@ export default function getSymptoThermalStatus(cycleInfo) {
     if (statusForLast.temperatureShift) {
       const preOvuPhase = getPreOvulatoryPhase(
         cycle,
-        [previousCycle, ...earlierCycles]
+        [previousCycle, ...earlierCycles],
+        secondarySymptom
       )
       if (preOvuPhase) {
         status.phases.preOvulatory = preOvuPhase
diff --git a/lib/sympto/minus-8-day-rule.js b/lib/sympto/minus-8-day-rule.js
index 2964b373b518fcbe5030d38558d601e73ce3cbe8..5a07d765b9a0852e725f0b06c58f621698f83d52 100644
--- a/lib/sympto/minus-8-day-rule.js
+++ b/lib/sympto/minus-8-day-rule.js
@@ -1,10 +1,10 @@
 import { LocalDate } from 'js-joda'
 import getNfpStatus from './index'
 
-export default function (previousCycles) {
+export default function (previousCycles, secondarySymptom) {
   const fhms = previousCycles
     .map(cycle => {
-      const status = getNfpStatus({ cycle })
+      const status = getNfpStatus({ cycle, secondarySymptom })
       if (status.temperatureShift) {
         const day = status.temperatureShift.firstHighMeasurementDay
         const firstCycleDayDate = LocalDate.parse(cycle[0].date)
diff --git a/lib/sympto/pre-ovulatory.js b/lib/sympto/pre-ovulatory.js
index 874e2bc911958ca72137ebac1319866991c623ce..236eefdc0a283e604dde03e410c4a17ff91e67d0 100644
--- a/lib/sympto/pre-ovulatory.js
+++ b/lib/sympto/pre-ovulatory.js
@@ -1,10 +1,10 @@
 import { LocalDate } from "js-joda"
 import apply8DayRule from './minus-8-day-rule'
 
-export default function(cycle, previousCycles) {
+export default function(cycle, previousCycles, secondarySymptom) {
   let preOvuPhaseLength = 5
 
-  const minus8DayRuleResult = apply8DayRule(previousCycles)
+  const minus8DayRuleResult = apply8DayRule(previousCycles, secondarySymptom)
   if (minus8DayRuleResult) preOvuPhaseLength = minus8DayRuleResult
 
   const startDate = LocalDate.parse(cycle[0].date)
@@ -12,7 +12,7 @@ export default function(cycle, previousCycles) {
   const maybePreOvuDays = cycle.slice(0, preOvuPhaseLength).filter(d => {
     return d.date <= preOvuEndDate
   })
-  const preOvulatoryDays = getDaysUntilFertileSecondarySymptom(maybePreOvuDays)
+  const preOvulatoryDays = getDaysUntilFertileSecondarySymptom(maybePreOvuDays, secondarySymptom)
   // if fertile mucus or cervix occurs on the 1st cycle day, there is no pre-ovu phase
   if (!preOvulatoryDays.length) return null
 
@@ -39,7 +39,8 @@ function getDaysUntilFertileSecondarySymptom(days, secondarySymptom = 'mucus') {
     if (secondarySymptom === 'mucus') {
       return day.mucus && day.mucus.value > 1
     } else if (secondarySymptom === 'cervix') {
-      return day.cervix && !day.cervix.isClosedAndHard
+      return day.cervix && day.cervix.opening > 0
+        || day.cervix && day.cervix.firmness > 0
     }
   })