many many updates to make this work flawlessly