Fix use of $timeout, simplify the implementation
Implement client-side workflow with customization