Make EndPointReference constructor more robust
diff --git a/bindings/openwsman.i b/bindings/openwsman.i
index 03a6e8d..783b260 100644
--- a/bindings/openwsman.i
+++ b/bindings/openwsman.i
@@ -272,6 +272,17 @@
 }
 
 
+static epr_t *my_epr_deserialize(WsXmlNodeH node);
+static epr_t *my_epr_deserialize(WsXmlNodeH node) {
+  fprintf(stderr, "my_epr_deserialize(%s)\n", ws_xml_get_node_local_name(node));
+  if (strcmp(WSA_EPR, ws_xml_get_node_local_name(node)) == 0) {
+    /* Use node as-is if its already a WSA_EPR */
+    return epr_deserialize(node, NULL, NULL, 1);
+  }
+  /* else search the WSA_EPR node */
+  return epr_deserialize(node, XML_NS_ADDRESSING, WSA_EPR, 1);
+}
+
 
 static char *epr_prefix(const char *uri);
 /* Get prefix from a EPR uri */
diff --git a/bindings/ruby/tests/epr.rb b/bindings/ruby/tests/epr.rb
index 706bc1c..7270c34 100644
--- a/bindings/ruby/tests/epr.rb
+++ b/bindings/ruby/tests/epr.rb
@@ -58,6 +58,8 @@
   
   def test_epr_compare
     epr1 = Openwsman::EndPointReference.new "http://schemas.microsoft.com/wbem/wsman/1/wmi/root/cimv2/Win32_Service?Name=Windows&Vendor=Microsoft"
+    assert epr1
+puts "EPR1 #{epr1}"
     # check namespace
     assert_equal "root/cimv2", epr1.namespace
 
@@ -87,8 +89,11 @@
     # convert epr1 to xml-string and parse this string
     doc = Openwsman::create_doc_from_string epr1.to_xml
     # generate epr2 from parsed xml
+    puts "DOC #{doc.to_xml}"
     epr2 = Openwsman::EndPointReference.new doc
-    
+    assert epr2
+puts "EPR2 #{epr2}"
+
     # must be true
     assert epr1.cmp(epr2)
   end
diff --git a/bindings/wsman-epr.i b/bindings/wsman-epr.i
index e879ce5..09ddb69 100644
--- a/bindings/wsman-epr.i
+++ b/bindings/wsman-epr.i
@@ -43,7 +43,7 @@
     else if (CLASS_OF(uri) == SwigClassXmlNode.klass) {
       WsXmlNodeH node;
       SWIG_ConvertPtr(uri, (void **)&node, SWIGTYPE_p___WsXmlNode, 0);
-      return epr_deserialize(node, XML_NS_ADDRESSING, WSA_EPR, 1);
+      return my_epr_deserialize(node);
     }
     else if (CLASS_OF(uri) == SwigClassXmlDoc.klass) {
       WsXmlDocH doc;
@@ -52,7 +52,7 @@
       node = ws_xml_get_soap_body(doc);
       if (node == NULL)
         node = ws_xml_get_doc_root(doc);
-      return epr_deserialize(node, NULL, NULL, 1);
+      return my_epr_deserialize(node);
     }
     else {
       return epr_from_string(as_string(uri));
@@ -102,6 +102,7 @@
     "$result = ($1 == 0) ? Qtrue : Qfalse;";
 #endif
   int cmp(epr_t *epr2) {
+    fprintf(stderr, "%p.cmp(%p)\n", $self, epr2);
     return epr_cmp($self, epr2);
   }