huge API overhaul