Initial commit of timeout controller
Add TimerController.Restart
Use only one timer to avoid race conditions