porting changes from master