refactoring api:
remove abstract declarations

refactoring messaging:
using class cast exceptions instead of instanceof checks