lots of changes here