Union test with bigger cardinality.
diff --git a/src/hyper.erl b/src/hyper.erl
index 9ce1f27..efd02a0 100644
--- a/src/hyper.erl
+++ b/src/hyper.erl
@@ -58,10 +58,13 @@
 
 -spec union([filter()]) -> filter().
 union(Filters) when is_list(Filters) ->
-    %% Must have the same P
-    case lists:usort(lists:map(fun (H) -> H#hyper.p end, Filters)) of
-        [P] ->
-            lists:foldl(fun union/2, hyper:new(P), Filters)
+    %% Must have the same P and backend
+    case lists:usort(lists:map(fun (#hyper{p = P, registers = {Mod, _}}) ->
+                                       {P, Mod}
+                               end, Filters)) of
+        [{_P, _Mod}] ->
+            [First | Rest] = Filters,
+            lists:foldl(fun union/2, First, Rest)
     end.
 
 union(#hyper{registers = {Mod, LeftRegisters}} = Left,
@@ -273,12 +276,14 @@
 
 many_union_test() ->
     random:seed(1, 2, 3),
-    Card = 100,
+    Card = 100000,
     NumSets = 3,
 
     Sets = [sets:from_list(generate_unique(Card)) || _ <- lists:seq(1, NumSets)],
-    Filters = lists:map(fun (S) -> insert_many(sets:to_list(S), new(14)) end,
-                        Sets),
+    Filters = lists:map(fun (S) ->
+                                insert_many(sets:to_list(S),
+                                            new(10, hyper_bisect))
+                        end, Sets),
 
     ?assert(abs(sets:size(sets:union(Sets)) - card(union(Filters)))
             < (Card * NumSets) * 0.1).
diff --git a/src/hyper_bisect.erl b/src/hyper_bisect.erl
index 578978f..e9b4cf0 100644
--- a/src/hyper_bisect.erl
+++ b/src/hyper_bisect.erl
@@ -68,7 +68,14 @@
     {sparse, bisect:merge(fun (_Index, L, R) -> max(L, R) end, Left, Right), P, T};
 
 max_merge({dense, Left}, {dense, Right}) ->
-    {dense, iolist_to_binary(lists:reverse(do_dense_merge(Left, Right)))}.
+    {dense, iolist_to_binary(
+              lists:reverse(
+                do_dense_merge(Left, Right)))};
+
+max_merge({dense, Left}, {sparse, Right, P, _}) ->
+    {dense, iolist_to_binary(
+              lists:reverse(
+                do_dense_merge(Left, bisect2dense(Right, P))))}.
 
 
 %%