backported to work with ruby 1.8