add router: modulized idea is still brillient. One shining thing is that denpendency injection is actually done though passing functions around. More will be found in the comments.