redesigning plugin API