bringing in all changes

from upstream