diff --git a/providers/ultradns-ws/src/main/java/org/jclouds/ultradns/ws/domain/ResourceRecord.java b/providers/ultradns-ws/src/main/java/org/jclouds/ultradns/ws/domain/ResourceRecord.java
index ea4d97c..3ade4b9 100644
--- a/providers/ultradns-ws/src/main/java/org/jclouds/ultradns/ws/domain/ResourceRecord.java
+++ b/providers/ultradns-ws/src/main/java/org/jclouds/ultradns/ws/domain/ResourceRecord.java
@@ -135,18 +135,32 @@
       }
 
       /**
+       * adds to current values
+       * 
        * @see ResourceRecord#getRData()
        */
-      public Builder rdata(Object infoValue) {
+      public Builder infoValue(Object infoValue) {
          this.infoValues.add(infoValue.toString());
          return this;
       }
 
       /**
+       * replaces current values
+       * 
+       * @see ResourceRecord#getRData()
+       */
+      public Builder rdata(Object infoValue) {
+         this.infoValues = ImmutableList.<String> builder().add(infoValue.toString());
+         return this;
+      }
+
+      /**
+       * replaces current values
+       * 
        * @see ResourceRecord#getRData()
        */
       public Builder rdata(Iterable<?> infoValues) {
-         this.infoValues.addAll(transform(infoValues, toStringFunction()));
+         this.infoValues = ImmutableList.<String> builder().addAll(transform(infoValues, toStringFunction()));
          return this;
       }
 
diff --git a/providers/ultradns-ws/src/test/java/org/jclouds/ultradns/ws/binders/ZoneAndResourceRecordToXMLTest.java b/providers/ultradns-ws/src/test/java/org/jclouds/ultradns/ws/binders/ZoneAndResourceRecordToXMLTest.java
index bc1f227..24b7b4b 100644
--- a/providers/ultradns-ws/src/test/java/org/jclouds/ultradns/ws/binders/ZoneAndResourceRecordToXMLTest.java
+++ b/providers/ultradns-ws/src/test/java/org/jclouds/ultradns/ws/binders/ZoneAndResourceRecordToXMLTest.java
@@ -33,17 +33,22 @@
    String A = "<v01:createResourceRecord><transactionID /><resourceRecord ZoneName=\"jclouds.org.\" Type=\"1\" DName=\"www.jclouds.org.\" TTL=\"3600\"><InfoValues Info1Value=\"1.1.1.1\" /></resourceRecord></v01:createResourceRecord>";
 
    public void testA() {
-      assertEquals(
-            ZoneAndResourceRecordToXML.toXML("jclouds.org.", ResourceRecord.rrBuilder().name("www.jclouds.org.")
-                  .type(1).ttl(3600).rdata("1.1.1.1").build()), A);
+      assertEquals(ZoneAndResourceRecordToXML.toXML("jclouds.org.", ResourceRecord.rrBuilder()
+                                                                                  .name("www.jclouds.org.")
+                                                                                  .type(1)
+                                                                                  .ttl(3600)
+                                                                                  .rdata("1.1.1.1").build()), A);
    }
 
    String MX = "<v01:createResourceRecord><transactionID /><resourceRecord ZoneName=\"jclouds.org.\" Type=\"15\" DName=\"mail.jclouds.org.\" TTL=\"1800\"><InfoValues Info1Value=\"10\" Info2Value=\"maileast.jclouds.org.\" /></resourceRecord></v01:createResourceRecord>";
 
    public void testMX() {
-      assertEquals(
-            ZoneAndResourceRecordToXML.toXML("jclouds.org.", ResourceRecord.rrBuilder().name("mail.jclouds.org.")
-                  .type(15).ttl(1800).rdata(10).rdata("maileast.jclouds.org.").build()), MX);
+      assertEquals(ZoneAndResourceRecordToXML.toXML("jclouds.org.", ResourceRecord.rrBuilder()
+                                                                                  .name("mail.jclouds.org.")
+                                                                                  .type(15)
+                                                                                  .ttl(1800)
+                                                                                  .infoValue(10)
+                                                                                  .infoValue("maileast.jclouds.org.").build()), MX);
    }
 
    String A_UPDATE = "<v01:updateResourceRecord><transactionID /><resourceRecord Guid=\"ABCDEF\" ZoneName=\"jclouds.org.\" Type=\"1\" DName=\"www.jclouds.org.\" TTL=\"3600\"><InfoValues Info1Value=\"1.1.1.1\" /></resourceRecord></v01:updateResourceRecord>";
diff --git a/providers/ultradns-ws/src/test/java/org/jclouds/ultradns/ws/features/ResourceRecordApiExpectTest.java b/providers/ultradns-ws/src/test/java/org/jclouds/ultradns/ws/features/ResourceRecordApiExpectTest.java
index 8bc1a96..7423114 100644
--- a/providers/ultradns-ws/src/test/java/org/jclouds/ultradns/ws/features/ResourceRecordApiExpectTest.java
+++ b/providers/ultradns-ws/src/test/java/org/jclouds/ultradns/ws/features/ResourceRecordApiExpectTest.java
@@ -45,8 +45,11 @@
    HttpResponse createResponse = HttpResponse.builder().statusCode(200)
          .payload(payloadFromResourceWithContentType("/rr_created.xml", "application/xml")).build();
 
-   ResourceRecord record = rrBuilder().name("mail.jclouds.org.").type(15).ttl(1800).rdata(10)
-         .rdata("maileast.jclouds.org.").build();
+   ResourceRecord record = rrBuilder().name("mail.jclouds.org.")
+                                      .type(15)
+                                      .ttl(1800)
+                                      .infoValue(10)
+                                      .infoValue("maileast.jclouds.org.").build();
 
    public void testCreateWhenResponseIs2xx() {
       UltraDNSWSApi success = requestSendsResponse(create, createResponse);
diff --git a/providers/ultradns-ws/src/test/java/org/jclouds/ultradns/ws/features/ResourceRecordApiLiveTest.java b/providers/ultradns-ws/src/test/java/org/jclouds/ultradns/ws/features/ResourceRecordApiLiveTest.java
index 18920a2..c4e0c01 100644
--- a/providers/ultradns-ws/src/test/java/org/jclouds/ultradns/ws/features/ResourceRecordApiLiveTest.java
+++ b/providers/ultradns-ws/src/test/java/org/jclouds/ultradns/ws/features/ResourceRecordApiLiveTest.java
@@ -124,8 +124,7 @@
 
    @Test(expectedExceptions = ResourceNotFoundException.class, expectedExceptionsMessageRegExp = "No Resource Record with GUID found in the system")
    public void testUpdateWhenNotFound() {
-      api(zoneName).update("AAAAAAAAAAAAAAAA",
-            rrBuilder().name("mail." + zoneName).type(15).ttl(1800).rdata(10).rdata("maileast.jclouds.org.").build());
+      api(zoneName).update("AAAAAAAAAAAAAAAA", mx);
    }
 
    @Test
@@ -134,8 +133,11 @@
    }
 
    String guid;
-   ResourceRecord mx = rrBuilder().name("mail." + zoneName).type(15).ttl(1800).rdata(10)
-         .rdata("maileast.jclouds.org.").build();
+   ResourceRecord mx = rrBuilder().name("mail." + zoneName)
+                                  .type(15)
+                                  .ttl(1800)
+                                  .infoValue(10)
+                                  .infoValue("maileast.jclouds.org.").build();
 
    @Test
    public void testCreateRecord() {
diff --git a/providers/ultradns-ws/src/test/java/org/jclouds/ultradns/ws/features/RoundRobinPoolApiLiveTest.java b/providers/ultradns-ws/src/test/java/org/jclouds/ultradns/ws/features/RoundRobinPoolApiLiveTest.java
index 651b86a..8423ed9 100644
--- a/providers/ultradns-ws/src/test/java/org/jclouds/ultradns/ws/features/RoundRobinPoolApiLiveTest.java
+++ b/providers/ultradns-ws/src/test/java/org/jclouds/ultradns/ws/features/RoundRobinPoolApiLiveTest.java
@@ -195,15 +195,21 @@
       getAnonymousLogger().info("created AAAA record: " + aaaaRecord1);
 
       assertTrue(listRRs(aaaaPoolId).anyMatch(
-            equalTo(rrBuilder().name(hostname).type(28).ttl(1).rdata("2001:0DB8:85A3:0000:0000:8A2E:0370:7334")
-                  .build())));
+            equalTo(rrBuilder().name(hostname)
+                               .type(28)
+                               .ttl(1)
+                               .rdata("2001:0DB8:85A3:0000:0000:8A2E:0370:7334")
+                               .build())));
 
       aaaaRecord2 = api(zoneName).addAAAARecordWithAddressAndTTL(aaaaPoolId, "2002:0DB8:85A3:0000:0000:8A2E:0370:7334",
             1);
 
       assertTrue(listRRs(aaaaPoolId).anyMatch(
-            equalTo(rrBuilder().name(hostname).type(28).ttl(1).rdata("2002:0DB8:85A3:0000:0000:8A2E:0370:7334")
-                  .build())));
+            equalTo(rrBuilder().name(hostname)
+                               .type(28)
+                               .ttl(1)
+                               .rdata("2002:0DB8:85A3:0000:0000:8A2E:0370:7334")
+                               .build())));
 
       getAnonymousLogger().info("created AAAA record: " + aaaaRecord1);
       try {
diff --git a/providers/ultradns-ws/src/test/java/org/jclouds/ultradns/ws/parse/GetResourceRecordsOfDNameByTypeResponseTest.java b/providers/ultradns-ws/src/test/java/org/jclouds/ultradns/ws/parse/GetResourceRecordsOfDNameByTypeResponseTest.java
index 7a04f66..64483a1 100644
--- a/providers/ultradns-ws/src/test/java/org/jclouds/ultradns/ws/parse/GetResourceRecordsOfDNameByTypeResponseTest.java
+++ b/providers/ultradns-ws/src/test/java/org/jclouds/ultradns/ws/parse/GetResourceRecordsOfDNameByTypeResponseTest.java
@@ -58,14 +58,16 @@
             .zoneName("adrianc.rr.ultradnstest.jclouds.org.")
             .created(dateService.iso8601DateParse("2013-02-22T08:22:48.000Z"))
             .modified(dateService.iso8601DateParse("2013-02-22T08:22:49.000Z"))
-            .record(rrBuilder().type(6).name("adrianc.rr.ultradnstest.jclouds.org.").ttl(86400)
-                               .rdata("pdns75.ultradns.com.")
-                               .rdata("adrianc.netflix.com.")
-                               .rdata("2013022200")
-                               .rdata("86400")
-                               .rdata("86400")
-                               .rdata("86400")
-                               .rdata("86400").build()).build();
+            .record(rrBuilder().name("adrianc.rr.ultradnstest.jclouds.org.")
+                               .type(6)
+                               .ttl(86400)
+                               .infoValue("pdns75.ultradns.com.")
+                               .infoValue("adrianc.netflix.com.")
+                               .infoValue("2013022200")
+                               .infoValue("86400")
+                               .infoValue("86400")
+                               .infoValue("86400")
+                               .infoValue("86400").build()).build();
       return FluentIterable.from(ImmutableList.of(record));
    }
 }
