pull in changes from #71 except for list.rb

thanks to @Nucc, close #71