some backports from trunk (untested)