Lots of stuff added and rewrited