So it's bad form to reply to my own question, but I figured out my mistake: On Tue, Jun 05, 2007 at 11:15:08AM +0100, Tom Hukins wrote: > push @elems, SOAP::Data->name($key => $in{$key}) > ->type($type{$key}); Replacing $in{$key} with SOAP::Data->value($in{$key}) does the cleverness I was after. I blame the caffeine. Tom