updated for ruby > 1.8