function and union overhaul