doesn't it belong to a concrete application? So think it's better to have document logic encapsulated within AppEventRouter?