more general prototyping