On the subject of Ruby, I started out thinking I wanted to port MARC::Record directly to Ruby but as I worked on it I found myself using some Ruby idioms that I ended up really liking. In particular the Enumerable mixin is really useful for where you want to allow people to iterate through MARC::Field objects in a MARC::Record: for field in record ... end Likewise MARC::Subfield objects in a MARC::Field for subfield in field ... end When you mixin Enumerable you also get find() and find_all() automatically which means you can do this to pull out all the subject fields for example: subjects = record.find_all {|f| ('600'..'699' === f.tag)} This block usage is a bit hard to get used to at first, but is an extremely powerful tool (I believe borrowed from Smalltalk) once you get used to it. Another nice thing in Ruby is that you can define a method like =~ which allows you to implement your own pattern matching for a class. if record =~ /Gravity's Rainbow/ print "Slothrop" end I guess what I'm really trying to say is that it's pretty interesting porting APIs from one language to another since it highlights the strenths of the source and target languages. The tighter you can melt your libraries into the host language the better. //Ed