refactored app plugin interface