adapted to ruby 1.9 &3