lots of changes ;)