diff --git a/src/systems/nonlinear/nonlinearsystem.jl b/src/systems/nonlinear/nonlinearsystem.jl
index b5256ca4ca..c211d02780 100644
--- a/src/systems/nonlinear/nonlinearsystem.jl
+++ b/src/systems/nonlinear/nonlinearsystem.jl
@@ -712,6 +712,9 @@ function SciMLBase.SCCNonlinearProblem{iip}(sys::NonlinearSystem, u0map,
             k = unwrap(k)
             v = unwrap(v)
             T = symtype(k)
+            while T isa Union
+                T = promote_type(T.a, T.b)
+            end
             buf = get!(() -> Any[], cachevars, T)
             push!(buf, v)
             buf = get!(() -> Any[], cacheexprs, T)