Update to use Shadow DOM