closes #5 - Introduces factories and emit (type-safe) events for all actions.