[recycling] add UnionFactory