         }
     }
     
+    func startAnnouncementTimer() {
+        announcementTimer = Timer.scheduledTimer(timeInterval: bufferBetweenAnnouncements, target: self, selector: #selector(resetAnnouncementTimer), userInfo: nil, repeats: false)
+    }
+    
+    func resetAnnouncementTimer() {
+        recentlyAnnouncedRouteStep = nil
+        announcementTimer.invalidate()
+    }
+    
     func alertLevelDidChange(notification: NSNotification) {
         guard isEnabled == true else { return }
         

        } else {
            speakWithPolly(speechString(notification: notification, markUpWithSSML: true))
        }
    }
    
    func speechString(notification: NSNotification, markUpWithSSML: Bool) -> String {

    var fallbackText: String!
    // Use default speech synthesizer if identityPool is unset
    var useDefaultVoice: Bool { return identityPoolId == nil }
    var announcementTimer: Timer!
    
    /**
     A boolean value indicating whether instructions should be announced by voice or not.
