more flexible callback types
fix route watching