Ported to ruby 1.9.3 with simple testing