new event-based extensibility layer; closes #71