merge from original thread

merge from original thread