lots of changes / improvements