*much* improved API