diff --git a/default b/default
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/django_pg_rrule/managers.py b/django_pg_rrule/managers.py
index 0b7f34676a27156ec5d0d60c81ef5898a5978332..17e8a09ed20b3f8f5d1533ff35ea34936ec56372 100644
--- a/django_pg_rrule/managers.py
+++ b/django_pg_rrule/managers.py
@@ -18,8 +18,8 @@ class RecurrenceManager(CTEManager):
 
     def with_occurrences(
         self,
-        start: datetime | None = None,
-        end: datetime | None = None,
+        start: datetime,
+        end: datetime,
         start_qs: Q | None = None,
         additional_filter: Q | None = None,
         select_related: Sequence | None = None,
@@ -81,7 +81,7 @@ class RecurrenceManager(CTEManager):
                                 function="get_occurrences",
                                 output_field=DateTimeField(),
                             ),
-                            F("rdates"),
+                            Cast("rdates", output_field=ArrayField(DateTimeField())),
                             function="ARRAY_CAT",
                             output_field=ArrayField(DateTimeField()),
                         ),
@@ -100,7 +100,7 @@ class RecurrenceManager(CTEManager):
             with_qs.only("id"),
             name="qodatetimes",
         )
-        cte_query = (  # Join WITH clause with actual data
+        qs = (  # Join WITH clause with actual data
             cte.join(self.model, id=cte.col.id)
             .with_cte(cte)
             # Annotate WITH clause
@@ -117,40 +117,14 @@ class RecurrenceManager(CTEManager):
             )
         )
 
-        # single_events_qs = start_qs.filter(
-        #     rrule__isnull=True,
-        # )
-        #
-        # if additional_filter:
-        #     single_events_qs = single_events_qs.filter(additional_filter)
-        #
-        # single_events_qs = single_events_qs.filter(
-        #     Q(
-        #         **{
-        #             f"{self.datetime_start_field}__lte": end,
-        #             f"{self.datetime_end_field}__gte": start,
-        #         }
-        #     )
-        #     | Q(
-        #         **{
-        #             f"{self.date_start_field}__lte": end.date(),
-        #             f"{self.date_end_field}__gte": start.date(),
-        #         }
-        #     )
-        # ).annotate(
-        #     odatetime=F(self.datetime_start_field), odate=F(self.date_start_field)
-        # )
-
         if select_related:
-            cte_query = cte_query.select_related(*select_related)
-            # single_events_qs = single_events_qs.select_related(*select_related)
+            qs = qs.select_related(*select_related)
 
         if prefetch_related:
-            cte_query = cte_query.prefetch_related(*prefetch_related)
-            # single_events_qs = single_events_qs.prefetch_related(*prefetch_related)
+            qs = qs.prefetch_related(*prefetch_related)
 
-        # qs = (cte_query).union(single_events_qs)
-        qs = cte_query
+        # Hacky way to enforce RIGHT OUTER JOIN
+        # Otherwise, Django always will rewrite the join_type to LEFT OUTER JOIN/INNER JOIN
         qs.query.alias_map["qodatetimes"].join_type = "RIGHT OUTER JOIN"
 
         return qs