abstract plugin