Numerous addition and changes