merge from trunk

merge from trunk