lots of changes ^)