protected function processRecurringEvents(\DateTime $fromDate, \DateTime $toDate, $limit = null)
	{
		if ($this->recurrenceFactory) {
			foreach ($this->recurrenceFactory->getRecurrenceTypes() as $recurrence) {
				$recurrenceType = new $recurrence();

				$occurrences = $recurrenceType->generateOccurrences($this->recurrentEvents, $fromDate, $toDate, $limit);

				$this->recurrentEvents = array_merge($this->recurrentEvents, $occurrences);
			}
		}

		// Remove recurring events that do not occur within the date range
		$this->recurrentEvents = array_filter($this->recurrentEvents, function ($event) use ($fromDate, $toDate) {

			if (! $event->getRecurrenceType()) {
				return true;
			} elseif ($event->getStartDate() <= $toDate  && $event->getEndDate() >= $fromDate) {
				return true;
			}

			return false;
		});

		$this->allEvents = array_merge($this->allEvents, $this->recurrentEvents);
	}