Add EndPointReference#selector_names and EndPointReference#clone
diff --git a/bindings/ruby/tests/epr.rb b/bindings/ruby/tests/epr.rb
index 4971fcc..706bc1c 100644
--- a/bindings/ruby/tests/epr.rb
+++ b/bindings/ruby/tests/epr.rb
@@ -67,9 +67,12 @@
     assert_equal "Microsoft", epr1.selector("Vendor")
     assert_equal "Microsoft", epr1.selector(:Vendor)
 
+    # Check selector_names
+    expected = { "Name" => "Windows", "Vendor" => "Microsoft" }
+    assert_equal expected.keys.sort, epr1.selector_names.sort
+
     # Check iterator
     count = 0
-    expected = { "Name" => "Windows", "Vendor" => "Microsoft" }
     epr1.each do |k,v|
       count += 1;
       expected.delete(k) if expected[k] == v
diff --git a/bindings/wsman-epr.i b/bindings/wsman-epr.i
index ed59503..e879ce5 100644
--- a/bindings/wsman-epr.i
+++ b/bindings/wsman-epr.i
@@ -68,6 +68,14 @@
     epr_destroy( $self );
   }
 
+#if defined(SWIGRUBY)
+  %newobject clone;
+  /* clone the EndPointReference instance */
+  epr_t *clone(epr_t *epr) {
+    return epr_copy(epr);
+  }
+#endif
+
   /*
    * Add selector as key/value pair
    *
@@ -144,6 +152,22 @@
     return wsman_epr_selector_by_name($self, name);
   }
 
+  /*
+   * Return list of selector names
+   */
+#if defined(SWIGRUBY)
+  VALUE selector_names(void) {
+    int i;
+    VALUE ary = rb_ary_new2($self->refparams.selectorset.count);
+    Selector *p = $self->refparams.selectorset.selectors;
+    for (i = 0; i < $self->refparams.selectorset.count; i++) {
+      rb_ary_store(ary, i, SWIG_FromCharPtr(p->name));
+      ++p;
+    }
+    return ary;
+  }
+#endif
+
 #if defined(SWIGRUBY)
   /* enumerate over selectors as key,value pairs */
   void each() {