updated to use XML::Hash