Complete rewrite using Angular