added lots of changes