added plug-in architecture