Updated to use virtual DOM only