Core: router protocol -> pure functions