You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jclouds.apache.org by de...@apache.org on 2016/02/19 16:33:38 UTC

[28/35] jclouds git commit: JCLOUDS-951: Remove inheritance in ProfitBrick's AutoValue classes

http://git-wip-us.apache.org/repos/asf/jclouds/blob/5e82bbfa/providers/profitbricks/src/main/java/org/jclouds/profitbricks/domain/Server.java
----------------------------------------------------------------------
diff --git a/providers/profitbricks/src/main/java/org/jclouds/profitbricks/domain/Server.java b/providers/profitbricks/src/main/java/org/jclouds/profitbricks/domain/Server.java
index 027e016..a36112d 100644
--- a/providers/profitbricks/src/main/java/org/jclouds/profitbricks/domain/Server.java
+++ b/providers/profitbricks/src/main/java/org/jclouds/profitbricks/domain/Server.java
@@ -16,24 +16,20 @@
  */
 package org.jclouds.profitbricks.domain;
 
-import org.jclouds.profitbricks.domain.internal.ServerCommonProperties;
-
-import com.google.auto.value.AutoValue;
-
-import static com.google.common.base.Preconditions.checkArgument;
-import static com.google.common.base.Preconditions.checkNotNull;
+import static org.jclouds.profitbricks.util.Preconditions.checkCores;
+import static org.jclouds.profitbricks.util.Preconditions.checkRam;
 
 import java.util.Date;
 import java.util.List;
 
-import org.jclouds.javax.annotation.Nullable;
-import org.jclouds.profitbricks.domain.internal.HotPluggable;
-
+import com.google.auto.value.AutoValue;
+import com.google.common.base.Enums;
 import com.google.common.collect.ImmutableList;
-import com.google.common.collect.Lists;
+
+import org.jclouds.javax.annotation.Nullable;
 
 @AutoValue
-public abstract class Server implements ServerCommonProperties {
+public abstract class Server {
 
    public enum Status {
 
@@ -44,11 +40,7 @@ public abstract class Server implements ServerCommonProperties {
       }
 
       public static Status fromValue(String v) {
-         try {
-            return valueOf(v);
-         } catch (IllegalArgumentException ex) {
-            return UNRECOGNIZED;
-         }
+         return Enums.getIfPresent(Status.class, v).or(UNRECOGNIZED);
       }
    }
 
@@ -59,10 +51,15 @@ public abstract class Server implements ServerCommonProperties {
    public abstract String id();
 
    @Nullable
-   @Override
    public abstract String name();
 
    @Nullable
+   public abstract Integer cores();
+
+   @Nullable
+   public abstract Integer ram();
+
+   @Nullable
    public abstract Boolean hasInternetAccess();
 
    @Nullable
@@ -96,178 +93,129 @@ public abstract class Server implements ServerCommonProperties {
    public abstract Boolean loadBalanced();
 
    @Nullable
+   public abstract Boolean isCpuHotPlug();
+
+   @Nullable
+   public abstract Boolean isCpuHotUnPlug();
+
+   @Nullable
+   public abstract Boolean isRamHotPlug();
+
+   @Nullable
+   public abstract Boolean isRamHotUnPlug();
+
+   @Nullable
+   public abstract Boolean isNicHotPlug();
+
+   @Nullable
+   public abstract Boolean isNicHotUnPlug();
+
+   @Nullable
+   public abstract Boolean isDiscVirtioHotPlug();
+
+   @Nullable
+   public abstract Boolean isDiscVirtioHotUnPlug();
+
+   @Nullable
    public abstract String hostname(); // Non-profitbricks property; Added to hold hostname parsed from image temporarily
 
-   public static Server create(DataCenter dataCenter, String id, String name, int cores, int ram,
-           Boolean hasInternetAccess, ProvisioningState state, Status status, OsType osType,
-           AvailabilityZone availabilityZone, Date creationTime, Date lastModificationTime, List<Storage> storages,
-           List<Nic> nics, Boolean isCpuHotPlug, Boolean isRamHotPlug, Boolean isNicHotPlug, Boolean isNicHotUnPlug,
-           Boolean isDiscVirtioHotPlug, Boolean isDiscVirtioHotUnPlug, String balancedNicId, Boolean loadBalanced,
-           String hostname) {
-      return new AutoValue_Server(isCpuHotPlug, null, isRamHotPlug, null, isNicHotPlug, isNicHotUnPlug, isDiscVirtioHotPlug,
-              isDiscVirtioHotUnPlug, cores, ram, dataCenter, id, name, hasInternetAccess, state, status, osType,
-              availabilityZone, creationTime, lastModificationTime,
-              storages != null ? ImmutableList.copyOf(storages) : Lists.<Storage>newArrayList(),
-              nics != null ? ImmutableList.copyOf(nics) : Lists.<Nic>newArrayList(),
-              balancedNicId, loadBalanced, hostname);
+   public static Builder builder() {
+      return new AutoValue_Server.Builder()
+              .storages(ImmutableList.<Storage>of())
+              .nics(ImmutableList.<Nic>of());
    }
 
-   public static DescribingBuilder builder() {
-      return new DescribingBuilder();
-   }
+   public abstract Builder toBuilder();
 
-   public DescribingBuilder toBuilder() {
-      return builder().fromServer(this);
-   }
+   @AutoValue.Builder
+   public abstract static class Builder {
 
-   public abstract static class Builder<B extends Builder, D extends ServerCommonProperties> extends HotPluggable.Builder<B, D> {
+      public abstract Builder dataCenter(DataCenter dataCenter);
 
-      protected String name;
-      protected int cores;
-      protected int ram;
+      public abstract Builder id(String id);
 
-      public B name(String name) {
-         this.name = name;
-         return self();
-      }
+      public abstract Builder name(String name);
 
-      public B cores(int cores) {
-         this.cores = cores;
-         return self();
-      }
+      public abstract Builder cores(Integer cores);
 
-      public B ram(int ram) {
-         this.ram = ram;
-         return self();
-      }
-   }
+      public abstract Builder ram(Integer ram);
 
-   public static class DescribingBuilder extends Builder<DescribingBuilder, Server> {
-
-      private DataCenter dataCenter;
-      private String id;
-      private ProvisioningState state;
-      private Status status;
-      private OsType osType;
-      private AvailabilityZone zone;
-      private Date creationTime;
-      private Date lastModificationTime;
-      private Boolean hasInternetAccess;
-      private List<Storage> storages;
-      private List<Nic> nics;
-      private Boolean loadBalanced;
-      private String balancedNicId;
-      private String hostname;
-
-      public DescribingBuilder dataCenter(DataCenter dataCenter) {
-         this.dataCenter = dataCenter;
-         return this;
-      }
+      public abstract Builder hasInternetAccess(Boolean internetAccess);
 
-      public DescribingBuilder id(String id) {
-         this.id = id;
-         return this;
-      }
+      public abstract Builder state(ProvisioningState state);
 
-      public DescribingBuilder state(ProvisioningState state) {
-         this.state = state;
-         return this;
-      }
+      public abstract Builder status(Status status);
 
-      public DescribingBuilder status(Status status) {
-         this.status = status;
-         return this;
-      }
+      public abstract Builder osType(OsType osType);
 
-      public DescribingBuilder osType(OsType osType) {
-         this.osType = osType;
-         return this;
-      }
+      public abstract Builder availabilityZone(AvailabilityZone availabilityZone);
 
-      public DescribingBuilder availabilityZone(AvailabilityZone zone) {
-         this.zone = zone;
-         return this;
-      }
+      public abstract Builder creationTime(Date creationTime);
 
-      public DescribingBuilder creationTime(Date creationTime) {
-         this.creationTime = creationTime;
-         return this;
-      }
+      public abstract Builder lastModificationTime(Date lastModificationTime);
 
-      public DescribingBuilder lastModificationTime(Date lastModificationTime) {
-         this.lastModificationTime = lastModificationTime;
-         return this;
-      }
+      public abstract Builder storages(List<Storage> storages);
 
-      public DescribingBuilder hasInternetAccess(Boolean hasInternetAccess) {
-         this.hasInternetAccess = hasInternetAccess;
-         return this;
-      }
+      public abstract Builder nics(List<Nic> nics);
 
-      public DescribingBuilder storages(List<Storage> storages) {
-         this.storages = storages;
-         return this;
-      }
+      public abstract Builder balancedNicId(String balancedNicIds);
 
-      public DescribingBuilder nics(List<Nic> nics) {
-         this.nics = nics;
-         return this;
-      }
+      public abstract Builder loadBalanced(Boolean isLoadBalanced);
 
-      public DescribingBuilder balancedNicId(String balancedNicId) {
-         this.balancedNicId = balancedNicId;
-         return this;
-      }
+      public abstract Builder isCpuHotPlug(Boolean isCpuHotPlug);
 
-      public DescribingBuilder loadBalanced(Boolean loadBalanced) {
-         this.loadBalanced = loadBalanced;
-         return this;
-      }
+      public abstract Builder isCpuHotUnPlug(Boolean isCpuHotUnPlug);
 
-      public DescribingBuilder hostname(String hostname) {
-         this.hostname = hostname;
-         return this;
-      }
+      public abstract Builder isRamHotPlug(Boolean isRamHotPlug);
 
-      @Override
-      public Server build() {
-         return Server.create(dataCenter, id, name, cores, ram, hasInternetAccess, state, status, osType, zone, creationTime,
-                 lastModificationTime, storages, nics, cpuHotPlug, ramHotPlug, nicHotPlug, nicHotUnPlug,
-                 discVirtioHotPlug, discVirtioHotUnPlug, balancedNicId, loadBalanced, hostname);
-      }
+      public abstract Builder isRamHotUnPlug(Boolean isRamHotUnPlug);
 
-      private DescribingBuilder fromServer(Server in) {
-         return this.id(in.id()).cores(in.cores()).creationTime(in.creationTime()).hasInternetAccess(in.hasInternetAccess())
-                 .isCpuHotPlug(in.isCpuHotPlug()).isDiscVirtioHotPlug(in.isDiscVirtioHotPlug())
-                 .isDiscVirtioHotUnPlug(in.isDiscVirtioHotUnPlug()).isNicHotPlug(in.isNicHotPlug())
-                 .isNicHotUnPlug(in.isNicHotUnPlug()).isRamHotPlug(in.isRamHotPlug())
-                 .lastModificationTime(in.lastModificationTime()).name(in.name()).osType(in.osType()).ram(in.ram())
-                 .state(in.state()).status(in.status()).storages(in.storages()).nics(in.nics()).dataCenter(in.dataCenter())
-                 .balancedNicId(balancedNicId).loadBalanced(loadBalanced).hostname(hostname);
-      }
+      public abstract Builder isNicHotPlug(Boolean isNicHotPlug);
 
-      @Override
-      public DescribingBuilder self() {
-         return this;
-      }
+      public abstract Builder isNicHotUnPlug(Boolean isNicHotUnPlug);
+
+      public abstract Builder isDiscVirtioHotPlug(Boolean isDiscVirtioHotPlug);
 
+      public abstract Builder isDiscVirtioHotUnPlug(Boolean isDiscVirtioHotUnPlug);
+
+      public abstract Builder hostname(String hostname);
+
+      abstract Server autoBuild();
+
+      public Server build() {
+         Server server = autoBuild();
+         if (server.cores() != null)
+            checkCores(server.cores());
+         if (server.ram() != null)
+            checkRam(server.ram(), server.isRamHotUnPlug());
+         return server.toBuilder()
+                 .storages(ImmutableList.copyOf(server.storages()))
+                 .nics(ImmutableList.copyOf(server.nics()))
+                 .autoBuild();
+      }
    }
 
    public static final class Request {
 
       public static CreatePayload.Builder creatingBuilder() {
-         return new CreatePayload.Builder();
+         return new AutoValue_Server_Request_CreatePayload.Builder();
       }
 
       public static UpdatePayload.Builder updatingBuilder() {
-         return new UpdatePayload.Builder();
+         return new AutoValue_Server_Request_UpdatePayload.Builder();
       }
 
       @AutoValue
-      public abstract static class CreatePayload implements ServerCommonProperties {
+      public abstract static class CreatePayload {
+
+         public abstract int cores();
+
+         public abstract int ram();
 
          public abstract String dataCenterId();
 
+         public abstract String name();
+
          @Nullable
          public abstract String bootFromStorageId();
 
@@ -286,93 +234,94 @@ public abstract class Server implements ServerCommonProperties {
          @Nullable
          public abstract OsType osType();
 
-         public static CreatePayload create(String dataCenterId, String name, int core, int ram) {
-            return create(dataCenterId, name, core, ram, "", "", null, false, null, null, null, null, null, null, null, null);
-         }
+         @Nullable
+         public abstract Boolean isCpuHotPlug();
 
-         public static CreatePayload create(String dataCenterId, String name, int cores, int ram, String bootFromStorageId,
-                 String bootFromImageId, Integer lanId, Boolean hasInternetAccess, AvailabilityZone availabilityZone,
-                 OsType osType, Boolean isCpuHotPlug, Boolean isRamHotPlug, Boolean isNicHotPlug, Boolean isNicHotUnPlug,
-                 Boolean isDiscVirtioHotPlug, Boolean isDiscVirtioHotUnPlug) {
-            validateCores(cores);
-            validateRam(ram, isRamHotPlug);
-            return new AutoValue_Server_Request_CreatePayload(isCpuHotPlug, null, isRamHotPlug, null, isNicHotPlug,
-                    isNicHotUnPlug, isDiscVirtioHotPlug, isDiscVirtioHotUnPlug, name, cores, ram, dataCenterId,
-                    bootFromStorageId, bootFromImageId, lanId, hasInternetAccess, availabilityZone, osType);
-         }
+         @Nullable
+         public abstract Boolean isCpuHotUnPlug();
 
-         public static class Builder extends Server.Builder<Builder, CreatePayload> {
+         @Nullable
+         public abstract Boolean isRamHotPlug();
 
-            private String dataCenterId;
-            private String bootFromStorageId;
-            private String bootFromImageId;
-            private Integer lanId;
-            private Boolean hasInternetAccess;
-            private AvailabilityZone availabilityZone;
-            private OsType osType;
+         @Nullable
+         public abstract Boolean isRamHotUnPlug();
 
-            public Builder dataCenterId(String dataCenterId) {
-               this.dataCenterId = dataCenterId;
-               return this;
-            }
+         @Nullable
+         public abstract Boolean isNicHotPlug();
 
-            public Builder dataCenterId(DataCenter dataCenter) {
-               this.dataCenterId = checkNotNull(dataCenter, "Cannot pass null datacenter").id();
-               return this;
-            }
+         @Nullable
+         public abstract Boolean isNicHotUnPlug();
 
-            public Builder bootFromStorageId(String storageId) {
-               this.bootFromStorageId = storageId;
-               return this;
-            }
+         @Nullable
+         public abstract Boolean isDiscVirtioHotPlug();
 
-            public Builder bootFromImageId(String image) {
-               this.bootFromImageId = image;
-               return this;
-            }
+         @Nullable
+         public abstract Boolean isDiscVirtioHotUnPlug();
 
-            public Builder lanId(Integer lanId) {
-               this.lanId = lanId;
-               return this;
-            }
+         @AutoValue.Builder
+         public abstract static class Builder {
 
-            public Builder availabilityZone(AvailabilityZone zone) {
-               this.availabilityZone = zone;
-               return this;
-            }
+            public abstract Builder cores(int cores);
 
-            public Builder osType(OsType osType) {
-               this.osType = osType;
-               return this;
-            }
+            public abstract Builder ram(int ram);
 
-            public Builder hasInternetAccess(Boolean hasInternetAccess) {
-               this.hasInternetAccess = hasInternetAccess;
-               return this;
-            }
+            public abstract Builder dataCenterId(String dataCenterId);
 
-            @Override
-            public Builder self() {
-               return this;
-            }
+            public abstract Builder name(String name);
+
+            public abstract Builder bootFromStorageId(String bootFromStorageId);
+
+            public abstract Builder bootFromImageId(String bootFromImageId);
+
+            public abstract Builder lanId(Integer lanId);
+
+            public abstract Builder hasInternetAccess(Boolean hasInternetAccess);
+
+            public abstract Builder availabilityZone(AvailabilityZone availabilityZone);
+
+            public abstract Builder osType(OsType osType);
+
+            public abstract Builder isCpuHotPlug(Boolean isCpuHotPlug);
+
+            public abstract Builder isCpuHotUnPlug(Boolean isCpuHotUnPlug);
+
+            public abstract Builder isRamHotPlug(Boolean isRamHotPlug);
+
+            public abstract Builder isRamHotUnPlug(Boolean isRamHotUnPlug);
+
+            public abstract Builder isNicHotPlug(Boolean isNicHotPlug);
+
+            public abstract Builder isNicHotUnPlug(Boolean isNicHotUnPlug);
+
+            public abstract Builder isDiscVirtioHotPlug(Boolean isDiscVirtioHotPlug);
+
+            public abstract Builder isDiscVirtioHotUnPlug(Boolean isDiscVirtioHotUnPlug);
+
+            abstract CreatePayload autoBuild();
 
-            @Override
             public CreatePayload build() {
-               return CreatePayload.create(dataCenterId, name, cores, ram, bootFromStorageId, bootFromImageId, lanId, hasInternetAccess,
-                       availabilityZone, osType, cpuHotPlug, ramHotPlug, nicHotPlug, nicHotUnPlug, discVirtioHotPlug, discVirtioHotUnPlug);
+               CreatePayload payload = autoBuild();
+               checkCores(payload.cores());
+               checkRam(payload.ram(), payload.isRamHotUnPlug());
+               return payload;
             }
-
          }
+
       }
 
       @AutoValue
-      public abstract static class UpdatePayload implements ServerCommonProperties {
+      public abstract static class UpdatePayload {
+
+         public abstract String id();
 
          @Nullable
-         @Override
-         public abstract String name();
+         public abstract Integer cores();
 
-         public abstract String id();
+         @Nullable
+         public abstract Integer ram();
+
+         @Nullable
+         public abstract String name();
 
          @Nullable
          public abstract String bootFromStorageId();
@@ -386,71 +335,76 @@ public abstract class Server implements ServerCommonProperties {
          @Nullable
          public abstract OsType osType();
 
-         public static UpdatePayload create(String id, String name, int cores, int ram, String bootFromStorageId, String bootFromImageId,
-                 AvailabilityZone availabilityZone, OsType osType, Boolean isCpuHotPlug, Boolean isRamHotPlug, Boolean isNicHotPlug,
-                 Boolean isNicHotUnPlug, Boolean isDiscVirtioHotPlug, Boolean isDiscVirtioHotUnPlug) {
-            return new AutoValue_Server_Request_UpdatePayload(isCpuHotPlug, null, isRamHotPlug, null, isNicHotPlug,
-                    isNicHotUnPlug, isDiscVirtioHotPlug, isDiscVirtioHotUnPlug, cores, ram, name, id, bootFromStorageId,
-                    bootFromImageId, availabilityZone, osType);
-         }
+         @Nullable
+         public abstract Boolean isCpuHotPlug();
 
-         public static class Builder extends Server.Builder<Builder, UpdatePayload> {
+         @Nullable
+         public abstract Boolean isCpuHotUnPlug();
 
-            private String id;
-            private String bootFromStorageId;
-            private String bootFromImageId;
-            private AvailabilityZone availabilityZone;
-            private OsType osType;
+         @Nullable
+         public abstract Boolean isRamHotPlug();
 
-            public Builder id(String id) {
-               this.id = id;
-               return this;
-            }
+         @Nullable
+         public abstract Boolean isRamHotUnPlug();
 
-            public Builder bootFromStorageId(String storageId) {
-               this.bootFromStorageId = storageId;
-               return this;
-            }
+         @Nullable
+         public abstract Boolean isNicHotPlug();
 
-            public Builder bootFromImageId(String image) {
-               this.bootFromImageId = image;
-               return this;
-            }
+         @Nullable
+         public abstract Boolean isNicHotUnPlug();
 
-            public Builder availabilityZone(AvailabilityZone zone) {
-               this.availabilityZone = zone;
-               return this;
-            }
+         @Nullable
+         public abstract Boolean isDiscVirtioHotPlug();
 
-            public Builder osType(OsType osType) {
-               this.osType = osType;
-               return this;
-            }
+         @Nullable
+         public abstract Boolean isDiscVirtioHotUnPlug();
 
-            @Override
-            public Builder self() {
-               return this;
-            }
+         @AutoValue.Builder
+         public abstract static class Builder {
 
-            @Override
-            public UpdatePayload build() {
-               return UpdatePayload.create(id, name, cores, ram, bootFromStorageId, bootFromImageId, availabilityZone, osType,
-                       cpuHotPlug, ramHotPlug, nicHotPlug, nicHotUnPlug, discVirtioHotPlug, discVirtioHotUnPlug);
+            public abstract Builder id(String id);
 
-            }
+            public abstract Builder cores(Integer cores);
 
-         }
-      }
+            public abstract Builder ram(Integer ram);
 
-   }
+            public abstract Builder name(String name);
 
-   private static void validateCores(int cores) {
-      checkArgument(cores > 0, "Core must be atleast 1.");
-   }
+            public abstract Builder bootFromStorageId(String bootFromStorageId);
+
+            public abstract Builder bootFromImageId(String bootFromImageId);
+
+            public abstract Builder availabilityZone(AvailabilityZone availabilityZone);
+
+            public abstract Builder osType(OsType osType);
+
+            public abstract Builder isCpuHotPlug(Boolean isCpuHotPlug);
+
+            public abstract Builder isCpuHotUnPlug(Boolean isCpuHotUnPlug);
+
+            public abstract Builder isRamHotPlug(Boolean isRamHotPlug);
+
+            public abstract Builder isRamHotUnPlug(Boolean isRamHotUnPlug);
 
-   private static void validateRam(int ram, Boolean isRamHotPlug) {
-      int minRam = (isRamHotPlug == null || !isRamHotPlug) ? 256 : 1024;
-      checkArgument(ram >= minRam && ram % 256 == 0, "RAM must be multiples of 256 with minimum of 256 MB (1024 MB if ramHotPlug is enabled)");
+            public abstract Builder isNicHotPlug(Boolean isNicHotPlug);
 
+            public abstract Builder isNicHotUnPlug(Boolean isNicHotUnPlug);
+
+            public abstract Builder isDiscVirtioHotPlug(Boolean isDiscVirtioHotPlug);
+
+            public abstract Builder isDiscVirtioHotUnPlug(Boolean isDiscVirtioHotUnPlug);
+
+            abstract UpdatePayload autoBuild();
+
+            public UpdatePayload build() {
+               UpdatePayload payload = autoBuild();
+               if (payload.cores() != null)
+                  checkCores(payload.cores());
+               if (payload.ram() != null)
+                  checkRam(payload.ram(), payload.isRamHotUnPlug());
+               return payload;
+            }
+         }
+      }
    }
 }

http://git-wip-us.apache.org/repos/asf/jclouds/blob/5e82bbfa/providers/profitbricks/src/main/java/org/jclouds/profitbricks/domain/ServiceFault.java
----------------------------------------------------------------------
diff --git a/providers/profitbricks/src/main/java/org/jclouds/profitbricks/domain/ServiceFault.java b/providers/profitbricks/src/main/java/org/jclouds/profitbricks/domain/ServiceFault.java
index dac8f0b..bcf9774 100644
--- a/providers/profitbricks/src/main/java/org/jclouds/profitbricks/domain/ServiceFault.java
+++ b/providers/profitbricks/src/main/java/org/jclouds/profitbricks/domain/ServiceFault.java
@@ -17,6 +17,7 @@
 package org.jclouds.profitbricks.domain;
 
 import com.google.auto.value.AutoValue;
+import com.google.common.base.Enums;
 
 @AutoValue
 public abstract class ServiceFault {
@@ -36,11 +37,7 @@ public abstract class ServiceFault {
       UNRECOGNIZED;
 
       public static FaultCode fromValue(String v) {
-         try {
-            return valueOf(v);
-         } catch (IllegalArgumentException ex) {
-            return UNRECOGNIZED;
-         }
+         return Enums.getIfPresent(FaultCode.class, v).or(UNRECOGNIZED);
       }
    }
 
@@ -52,44 +49,22 @@ public abstract class ServiceFault {
 
    public abstract int requestId();
 
-   public static ServiceFault create(FaultCode faultCode, int httpCode, String message, int requestId) {
-      return new AutoValue_ServiceFault(faultCode, httpCode, message, requestId);
-   }
-
    public static Builder builder() {
-      return new Builder();
+      return new AutoValue_ServiceFault.Builder();
    }
 
-   public static final class Builder {
+   @AutoValue.Builder
+   public abstract static class Builder {
 
-      private FaultCode faultCode;
-      private int httpCode;
-      private String message;
-      private int requestId;
-
-      public Builder faultCode(FaultCode code) {
-         this.faultCode = code;
-         return this;
-      }
+      public abstract Builder faultCode(FaultCode faultCode);
 
-      public Builder httpCode(int httpCode) {
-         this.httpCode = httpCode;
-         return this;
-      }
+      public abstract Builder httpCode(int httpCode);
 
-      public Builder message(String message) {
-         this.message = message;
-         return this;
-      }
+      public abstract Builder message(String message);
 
-      public Builder requestId(int requestId) {
-         this.requestId = requestId;
-         return this;
-      }
+      public abstract Builder requestId(int requestId);
 
-      public ServiceFault build() {
-         return create(faultCode, httpCode, message, requestId);
-      }
+      public abstract ServiceFault build();
 
    }
 }

http://git-wip-us.apache.org/repos/asf/jclouds/blob/5e82bbfa/providers/profitbricks/src/main/java/org/jclouds/profitbricks/domain/Snapshot.java
----------------------------------------------------------------------
diff --git a/providers/profitbricks/src/main/java/org/jclouds/profitbricks/domain/Snapshot.java b/providers/profitbricks/src/main/java/org/jclouds/profitbricks/domain/Snapshot.java
index 60738d0..7f0be59 100644
--- a/providers/profitbricks/src/main/java/org/jclouds/profitbricks/domain/Snapshot.java
+++ b/providers/profitbricks/src/main/java/org/jclouds/profitbricks/domain/Snapshot.java
@@ -16,36 +16,37 @@
  */
 package org.jclouds.profitbricks.domain;
 
+import java.util.Date;
+
 import com.google.auto.value.AutoValue;
 
 import org.jclouds.javax.annotation.Nullable;
 
-import java.util.Date;
-
-import org.jclouds.profitbricks.domain.internal.HotPluggable;
-import org.jclouds.profitbricks.domain.internal.Provisionable;
-
 @AutoValue
 public abstract class Snapshot implements Provisionable {
 
    @Nullable
-   @Override
    public abstract String id();
 
    @Nullable
-   @Override
    public abstract String name();
 
-   public abstract boolean bootable();
+   @Nullable
+   public abstract Float size();
 
    @Nullable
-   public abstract String description();
+   public abstract Location location();
 
    @Nullable
-   @Override
    public abstract OsType osType();
 
    @Nullable
+   public abstract Boolean isBootable();
+
+   @Nullable
+   public abstract String description();
+
+   @Nullable
    public abstract Date creationTime();
 
    @Nullable
@@ -55,89 +56,89 @@ public abstract class Snapshot implements Provisionable {
    public abstract ProvisioningState state();
 
    @Nullable
-   @Override
-   public abstract Location location();
+   public abstract Boolean isCpuHotPlug();
 
-   public static Snapshot create(String id, String name, float size, boolean bootable, String description, OsType osType,
-           Boolean cpuHotPlug, Boolean cpuHotUnPlug, Boolean discVirtioHotPlug, Boolean discVirtioHotUnPlug,
-           Boolean ramHotPlug, Boolean ramHotUnPlug, Boolean nicHotPlug, Boolean nicHotUnPlug, Date creationTime,
-           Date lastModificationTime, ProvisioningState state, Location location) {
-      return new AutoValue_Snapshot(cpuHotPlug, cpuHotUnPlug, discVirtioHotPlug, discVirtioHotUnPlug, ramHotPlug,
-              ramHotUnPlug, nicHotPlug, nicHotUnPlug, size, id, name, bootable, description, osType, creationTime,
-              lastModificationTime, state, location);
-   }
+   @Nullable
+   public abstract Boolean isCpuHotUnPlug();
+
+   @Nullable
+   public abstract Boolean isRamHotPlug();
+
+   @Nullable
+   public abstract Boolean isRamHotUnPlug();
+
+   @Nullable
+   public abstract Boolean isNicHotPlug();
+
+   @Nullable
+   public abstract Boolean isNicHotUnPlug();
+
+   @Nullable
+   public abstract Boolean isDiscVirtioHotPlug();
+
+   @Nullable
+   public abstract Boolean isDiscVirtioHotUnPlug();
 
    public static Builder builder() {
-      return new Builder();
+      return new AutoValue_Snapshot.Builder();
    }
 
-   public static class Builder extends Provisionable.Builder<Builder, Snapshot> {
+   public abstract Builder toBuilder();
 
-      private Date creationTime;
-      private Date lastModificationTime;
-      private ProvisioningState state;
-      private boolean bootable;
-      private String description;
+   @AutoValue.Builder
+   public abstract static class Builder {
 
-      public Builder creationTime(Date creationTime) {
-         this.creationTime = creationTime;
-         return this;
-      }
+      public abstract Builder id(String id);
 
-      public Builder lastModificationTime(Date lastModificationTime) {
-         this.lastModificationTime = lastModificationTime;
-         return this;
-      }
+      public abstract Builder name(String name);
 
-      public Builder state(ProvisioningState state) {
-         this.state = state;
-         return this;
-      }
+      public abstract Builder size(Float size);
 
-      public Builder description(String description) {
-         this.description = description;
-         return this;
-      }
+      public abstract Builder location(Location location);
 
-      public Builder isBootable(boolean bootable) {
-         this.bootable = bootable;
-         return this;
-      }
+      public abstract Builder osType(OsType osType);
 
-      private Builder fromSnapshot(Snapshot in) {
-         return this.id(in.id()).name(in.name()).size(in.size()).creationTime(in.creationTime())
-                 .lastModificationTime(in.lastModificationTime()).state(in.state()).isBootable(in.bootable())
-                 .description(in.description()).isCpuHotPlug(in.isCpuHotPlug()).isCpuHotUnPlug(in.isCpuHotUnPlug())
-                 .isDiscVirtioHotPlug(in.isDiscVirtioHotPlug()).isDiscVirtioHotUnPlug(in.isDiscVirtioHotUnPlug())
-                 .isRamHotPlug(in.isRamHotPlug()).isRamHotUnPlug(in.isRamHotUnPlug())
-                 .isNicHotPlug(in.isNicHotPlug()).isNicHotUnPlug(in.isNicHotUnPlug());
-      }
+      public abstract Builder isBootable(Boolean bootable);
 
-      @Override
-      public Snapshot build() {
-         return Snapshot.create(id, name, size, bootable, description, osType, cpuHotPlug, cpuHotUnPlug,
-                 discVirtioHotPlug, discVirtioHotUnPlug, ramHotPlug, ramHotUnPlug, nicHotPlug, nicHotUnPlug,
-                 creationTime, lastModificationTime, state, location);
-      }
+      public abstract Builder description(String description);
 
-      @Override
-      public Builder self() {
-         return this;
-      }
+      public abstract Builder creationTime(Date creationTime);
+
+      public abstract Builder lastModificationTime(Date lastModificationTime);
+
+      public abstract Builder state(ProvisioningState state);
+
+      public abstract Builder isCpuHotPlug(Boolean isCpuHotPlug);
+
+      public abstract Builder isCpuHotUnPlug(Boolean isCpuHotUnPlug);
+
+      public abstract Builder isRamHotPlug(Boolean isRamHotPlug);
+
+      public abstract Builder isRamHotUnPlug(Boolean isRamHotUnPlug);
+
+      public abstract Builder isNicHotPlug(Boolean isNicHotPlug);
+
+      public abstract Builder isNicHotUnPlug(Boolean isNicHotUnPlug);
+
+      public abstract Builder isDiscVirtioHotPlug(Boolean isDiscVirtioHotPlug);
+
+      public abstract Builder isDiscVirtioHotUnPlug(Boolean isDiscVirtioHotUnPlug);
+
+      public abstract Snapshot build();
    }
 
    public static final class Request {
 
       public static CreatePayload.Builder creatingBuilder() {
-         return new CreatePayload.Builder();
+         return new AutoValue_Snapshot_Request_CreatePayload.Builder();
       }
 
       public static UpdatePayload.Builder updatingBuilder() {
-         return new UpdatePayload.Builder();
+         return new AutoValue_Snapshot_Request_UpdatePayload.Builder();
       }
 
-      public static RollbackPayload.Builder rollbackBuilder() {
-         return new RollbackPayload.Builder();
+      public static RollbackPayload createRollbackPayload(String snapshotId, String storageId) {
+         return new AutoValue_Snapshot_Request_RollbackPayload(snapshotId, storageId);
       }
 
       @AutoValue
@@ -145,147 +146,106 @@ public abstract class Snapshot implements Provisionable {
 
          public abstract String storageId();
 
-         public abstract String description();
-
          public abstract String name();
 
-         public static CreatePayload create(String storageId, String description, String name) {
-            return new AutoValue_Snapshot_Request_CreatePayload(storageId, description, name);
-         }
-
-         public static class Builder {
+         @Nullable
+         public abstract String description();
 
-            private String storageId;
-            private String description;
-            private String name;
+         @AutoValue.Builder
+         public abstract static class Builder {
 
-            public Builder storageId(String storageId) {
-               this.storageId = storageId;
-               return this;
-            }
+            public abstract Builder storageId(String storageId);
 
-            public Builder description(String description) {
-               this.description = description;
-               return this;
-            }
+            public abstract Builder name(String name);
 
-            public Builder name(String name) {
-               this.name = name;
-               return this;
-            }
+            public abstract Builder description(String description);
 
-            public CreatePayload build() {
-               return CreatePayload.create(storageId, description, name);
-            }
+            public abstract CreatePayload build();
          }
       }
 
       @AutoValue
-      public abstract static class UpdatePayload implements HotPluggable {
+      public abstract static class UpdatePayload {
 
-         public abstract String snapshotId();
+         public abstract String id();
 
+         @Nullable
          public abstract String description();
 
+         @Nullable
          public abstract String name();
 
-         public abstract boolean bootable();
+         @Nullable
+         public abstract Boolean bootable();
 
          @Nullable
          public abstract OsType osType();
 
-         public static UpdatePayload create(String snapshotId, String description, String name, boolean bootable,
-                 OsType osType, Boolean cpuHotplug, Boolean cpuHotunplug, Boolean ramHotplug, Boolean ramHotunplug,
-                 Boolean nicHotplug, Boolean nicHotunplug, Boolean discVirtioHotplug, Boolean discVirtioHotunplug) {
-            return new AutoValue_Snapshot_Request_UpdatePayload(
-                    cpuHotplug, cpuHotunplug, ramHotplug, ramHotunplug, nicHotplug, nicHotunplug, discVirtioHotplug,
-                    discVirtioHotunplug, snapshotId, description, name, bootable, osType);
-         }
+         @Nullable
+         public abstract Boolean isCpuHotPlug();
 
-         public static class Builder extends HotPluggable.Builder<Builder, UpdatePayload> {
+         @Nullable
+         public abstract Boolean isCpuHotUnPlug();
 
-            private String snapshotId;
+         @Nullable
+         public abstract Boolean isRamHotPlug();
 
-            @Nullable
-            private String description;
+         @Nullable
+         public abstract Boolean isRamHotUnPlug();
 
-            @Nullable
-            private String name;
+         @Nullable
+         public abstract Boolean isNicHotPlug();
 
-            private boolean bootable;
+         @Nullable
+         public abstract Boolean isNicHotUnPlug();
 
-            private OsType osType;
+         @Nullable
+         public abstract Boolean isDiscVirtioHotPlug();
 
-            public Builder snapshotId(String snapshotId) {
-               this.snapshotId = snapshotId;
-               return this;
-            }
+         @Nullable
+         public abstract Boolean isDiscVirtioHotUnPlug();
 
-            public Builder description(String description) {
-               this.description = description;
-               return this;
-            }
+         @AutoValue.Builder
+         public abstract static class Builder {
 
-            public Builder name(String name) {
-               this.name = name;
-               return this;
-            }
+            public abstract Builder id(String snapshotId);
 
-            public Builder bootable(boolean bootable) {
-               this.bootable = bootable;
-               return this;
-            }
+            public abstract Builder description(String description);
 
-            public Builder osType(OsType osType) {
-               this.osType = osType;
-               return this;
-            }
+            public abstract Builder name(String name);
 
-            @Override
-            public UpdatePayload build() {
-               return UpdatePayload.create(snapshotId, description, name, bootable, osType, cpuHotPlug, cpuHotUnPlug,
-                       ramHotPlug, ramHotUnPlug, nicHotUnPlug, nicHotUnPlug, discVirtioHotPlug, discVirtioHotUnPlug);
-            }
+            public abstract Builder bootable(Boolean bootable);
 
-            @Override
-            public Builder self() {
-               return this;
-            }
-         }
+            public abstract Builder osType(OsType osType);
 
-      }
+            public abstract Builder isCpuHotPlug(Boolean isCpuHotPlug);
 
-      @AutoValue
-      public abstract static class RollbackPayload {
+            public abstract Builder isCpuHotUnPlug(Boolean isCpuHotUnPlug);
 
-         public abstract String snapshotId();
+            public abstract Builder isRamHotPlug(Boolean isRamHotPlug);
 
-         public abstract String storageId();
+            public abstract Builder isRamHotUnPlug(Boolean isRamHotUnPlug);
 
-         public static RollbackPayload create(String snapshotId, String storageId) {
-            return new AutoValue_Snapshot_Request_RollbackPayload(snapshotId, storageId);
-         }
+            public abstract Builder isNicHotPlug(Boolean isNicHotPlug);
 
-         public static class Builder {
+            public abstract Builder isNicHotUnPlug(Boolean isNicHotUnPlug);
 
-            private String snapshotId;
+            public abstract Builder isDiscVirtioHotPlug(Boolean isDiscVirtioHotPlug);
 
-            private String storageId;
+            public abstract Builder isDiscVirtioHotUnPlug(Boolean isDiscVirtioHotUnPlug);
 
-            public Builder snapshotId(String snapshotId) {
-               this.snapshotId = snapshotId;
-               return this;
-            }
+            public abstract UpdatePayload build();
+         }
 
-            public Builder storageId(String storageId) {
-               this.storageId = storageId;
-               return this;
-            }
+      }
+
+      @AutoValue
+      public abstract static class RollbackPayload {
+
+         public abstract String snapshotId();
+
+         public abstract String storageId();
 
-            public RollbackPayload build() {
-               return RollbackPayload.create(snapshotId, storageId);
-            }
-         }
       }
    }
 }

http://git-wip-us.apache.org/repos/asf/jclouds/blob/5e82bbfa/providers/profitbricks/src/main/java/org/jclouds/profitbricks/domain/Storage.java
----------------------------------------------------------------------
diff --git a/providers/profitbricks/src/main/java/org/jclouds/profitbricks/domain/Storage.java b/providers/profitbricks/src/main/java/org/jclouds/profitbricks/domain/Storage.java
index 21664a5..6a0e8a9 100644
--- a/providers/profitbricks/src/main/java/org/jclouds/profitbricks/domain/Storage.java
+++ b/providers/profitbricks/src/main/java/org/jclouds/profitbricks/domain/Storage.java
@@ -16,19 +16,17 @@
  */
 package org.jclouds.profitbricks.domain;
 
-import com.google.auto.value.AutoValue;
-
-import static com.google.common.base.Preconditions.checkArgument;
-import static com.google.common.base.Preconditions.checkNotNull;
+import static org.jclouds.profitbricks.util.Preconditions.checkPassword;
+import static org.jclouds.profitbricks.util.Preconditions.checkSize;
 
 import java.util.Date;
 import java.util.List;
 
+import com.google.auto.value.AutoValue;
+import com.google.common.base.Enums;
+import com.google.common.collect.ImmutableList;
 import org.jclouds.javax.annotation.Nullable;
 
-import com.google.common.collect.ImmutableList;
-import com.google.common.collect.Lists;
-import static org.jclouds.profitbricks.util.Passwords.isValidPassword;
 
 @AutoValue
 public abstract class Storage {
@@ -38,11 +36,7 @@ public abstract class Storage {
       IDE, SCSI, VIRTIO, UNRECOGNIZED;
 
       public static BusType fromValue(String value) {
-         try {
-            return valueOf(value);
-         } catch (IllegalArgumentException ex) {
-            return UNRECOGNIZED;
-         }
+         return Enums.getIfPresent(BusType.class, value).or(UNRECOGNIZED);
       }
    }
 
@@ -74,92 +68,43 @@ public abstract class Storage {
    @Nullable
    public abstract Integer deviceNumber();
 
-   public static Storage create(String id, String name, float size, Date creationTime, Date lastModificationTime,
-           ProvisioningState state, List<String> serverIds, Boolean bootDevice, BusType busType, Integer deviceNumber) {
-      return new AutoValue_Storage(id, name, size, creationTime, lastModificationTime, state,
-              serverIds != null ? ImmutableList.copyOf(serverIds) : Lists.<String>newArrayList(),
-              bootDevice, busType, deviceNumber);
-   }
-
    public static Builder builder() {
-      return new Builder();
+      return new AutoValue_Storage.Builder()
+              .serverIds(ImmutableList.<String>of());
    }
 
-   public Builder toBuilder() {
-      return builder().fromStorage(this);
-   }
+   public abstract Builder toBuilder();
 
-   public static class Builder {
-
-      private String id;
-      private String name;
-      private float size;
-      private Date creationTime;
-      private Date lastModificationTime;
-      private ProvisioningState state;
-      private List<String> serverIds;
-      private Boolean bootDevice;
-      private BusType busType;
-      private Integer deviceNumber;
-
-      public Builder id(String id) {
-         this.id = id;
-         return this;
-      }
+   @AutoValue.Builder
+   public abstract static class Builder {
 
-      public Builder name(String name) {
-         this.name = name;
-         return this;
-      }
+      public abstract Builder id(String id);
 
-      public Builder size(float size) {
-         this.size = size;
-         return this;
-      }
+      public abstract Builder name(String name);
 
-      public Builder creationTime(Date creationTime) {
-         this.creationTime = creationTime;
-         return this;
-      }
+      public abstract Builder size(float size);
 
-      public Builder lastModificationTime(Date lastModificationTime) {
-         this.lastModificationTime = lastModificationTime;
-         return this;
-      }
+      public abstract Builder creationTime(Date creationTime);
 
-      public Builder state(ProvisioningState state) {
-         this.state = state;
-         return this;
-      }
+      public abstract Builder lastModificationTime(Date lastModificationTime);
 
-      public Builder serverIds(List<String> serverIds) {
-         this.serverIds = serverIds;
-         return this;
-      }
+      public abstract Builder state(ProvisioningState state);
 
-      public Builder bootDevice(Boolean bootDevice) {
-         this.bootDevice = bootDevice;
-         return this;
-      }
+      public abstract Builder serverIds(List<String> serverIds);
 
-      public Builder busType(BusType busType) {
-         this.busType = busType;
-         return this;
-      }
+      public abstract Builder bootDevice(Boolean bootDevice);
 
-      public Builder deviceNumber(Integer deviceNumber) {
-         this.deviceNumber = deviceNumber;
-         return this;
-      }
+      public abstract Builder busType(BusType busType);
 
-      private Builder fromStorage(Storage in) {
-         return this.id(in.id()).name(in.name()).size(in.size()).creationTime(in.creationTime())
-                 .lastModificationTime(in.lastModificationTime()).state(in.state()).serverIds(in.serverIds())
-                 .bootDevice(in.bootDevice()).busType(in.busType()).deviceNumber(in.deviceNumber());
-      }
+      public abstract Builder deviceNumber(Integer deviceNumber);
 
-      public Storage build() {
-         return Storage.create(id, name, size, creationTime, lastModificationTime, state, serverIds, bootDevice, busType, deviceNumber);
+      abstract Storage autoBuild();
+      
+      public Storage build(){
+         Storage built = autoBuild();
+         return built.toBuilder()
+                 .serverIds(ImmutableList.copyOf(built.serverIds()))
+                 .autoBuild();
       }
 
    }
@@ -167,15 +112,15 @@ public abstract class Storage {
    public static final class Request {
 
       public static CreatePayload.Builder creatingBuilder() {
-         return new CreatePayload.Builder();
+         return new AutoValue_Storage_Request_CreatePayload.Builder();
       }
 
       public static UpdatePayload.Builder updatingBuilder() {
-         return new UpdatePayload.Builder();
+         return new AutoValue_Storage_Request_UpdatePayload.Builder();
       }
 
       public static ConnectPayload.Builder connectingBuilder() {
-         return new ConnectPayload.Builder();
+         return new AutoValue_Storage_Request_ConnectPayload.Builder();
       }
 
       @AutoValue
@@ -192,57 +137,32 @@ public abstract class Storage {
          public abstract String mountImageId();
 
          @Nullable
-         public abstract String profitBricksImagePassword();
+         public abstract String imagePassword();
 
-         public static CreatePayload create(String dataCenterId, float size, String name, String mountImageId, String imagePassword) {
-            checkSize(size);
-            checkPassword(imagePassword);
-            return new AutoValue_Storage_Request_CreatePayload(dataCenterId, size, name, mountImageId, imagePassword);
-         }
+         @AutoValue.Builder
+         public abstract static class Builder {
 
-         public static class Builder {
+            public abstract Builder dataCenterId(String dataCenterId);
 
-            private String dataCenterId;
-            private float size;
-            private String name;
-            private String mountImageId;
-            private String profitBricksImagePassword;
+            public abstract Builder size(float size);
 
-            public Builder dataCenterId(String dataCenterId) {
-               this.dataCenterId = dataCenterId;
-               return this;
-            }
+            public abstract Builder name(String name);
 
-            public Builder dataCenterId(DataCenter dataCenter) {
-               this.dataCenterId = checkNotNull(dataCenter, "Cannot pass null datacenter").id();
-               return this;
-            }
+            public abstract Builder mountImageId(String mountImageId);
 
-            public Builder size(float size) {
-               this.size = size;
-               return this;
-            }
+            public abstract Builder imagePassword(String profitBricksImagePassword);
 
-            public Builder mountImageId(String mountImageId) {
-               this.mountImageId = mountImageId;
-               return this;
-            }
-
-            public Builder name(String name) {
-               this.name = name;
-               return this;
-            }
-
-            public Builder imagePassword(String password) {
-               this.profitBricksImagePassword = password;
-               return this;
-            }
+            abstract CreatePayload autoBuild();
 
             public CreatePayload build() {
-               return CreatePayload.create(dataCenterId, size, name, mountImageId, profitBricksImagePassword);
+               CreatePayload payload = autoBuild();
+               if (payload.imagePassword() != null)
+                  checkPassword(payload.imagePassword());
+               checkSize(payload.size());
+
+               return payload;
             }
          }
-
       }
 
       @AutoValue
@@ -259,40 +179,25 @@ public abstract class Storage {
          @Nullable
          public abstract String mountImageId();
 
-         public static UpdatePayload create(String id, Float size, String name, String mountImageId) {
-            checkSize(size);
-            return new AutoValue_Storage_Request_UpdatePayload(id, size, name, mountImageId);
-         }
+         @AutoValue.Builder
+         public abstract static class Builder {
 
-         public static class Builder {
+            public abstract Builder id(String id);
 
-            private String id;
-            private Float size;
-            private String name;
-            private String mountImageId;
+            public abstract Builder size(Float size);
 
-            public Builder id(String id) {
-               this.id = id;
-               return this;
-            }
+            public abstract Builder name(String name);
 
-            public Builder size(float size) {
-               this.size = size;
-               return this;
-            }
-
-            public Builder name(String name) {
-               this.name = name;
-               return this;
-            }
+            public abstract Builder mountImageId(String mountImageId);
 
-            public Builder mountImageId(String mountImageId) {
-               this.mountImageId = mountImageId;
-               return this;
-            }
+            abstract UpdatePayload autoBuild();
 
             public UpdatePayload build() {
-               return UpdatePayload.create(id, size, name, mountImageId);
+               UpdatePayload payload = autoBuild();
+               if (payload.size() != null)
+                  checkSize(payload.size());
+
+               return payload;
             }
          }
       }
@@ -310,54 +215,20 @@ public abstract class Storage {
          @Nullable
          public abstract Integer deviceNumber();
 
-         public static ConnectPayload create(String storageId, String serverId, BusType busType, Integer deviceNumber) {
-            return new AutoValue_Storage_Request_ConnectPayload(storageId, serverId, busType, deviceNumber);
-         }
+         @AutoValue.Builder
+         public abstract static class Builder {
 
-         public static class Builder {
+            public abstract Builder storageId(String storageId);
 
-            private String storageId;
-            private String serverId;
-            private BusType busType;
-            private Integer deviceNumber;
+            public abstract Builder serverId(String serverId);
 
-            public Builder storageId(String storageId) {
-               this.storageId = storageId;
-               return this;
-            }
-
-            public Builder serverId(String serverId) {
-               this.serverId = serverId;
-               return this;
-            }
-
-            public Builder busType(BusType busType) {
-               this.busType = busType;
-               return this;
-            }
-
-            public Builder deviceNumber(Integer deviceNumber) {
-               this.deviceNumber = deviceNumber;
-               return this;
-            }
+            public abstract Builder busType(BusType busType);
 
-            public ConnectPayload build() {
-               return ConnectPayload.create(storageId, serverId, busType, deviceNumber);
-            }
+            public abstract Builder deviceNumber(Integer deviceNumber);
 
+            public abstract ConnectPayload build();
          }
       }
 
-      private static void checkSize(Float size) {
-         if (size != null)
-            checkArgument(size > 1, "Storage size must be > 1GB");
-      }
-
-      private static void checkPassword(String password) {
-         if (password != null)
-            checkArgument(isValidPassword(password), "Password must be between 8 and 50 characters, "
-                    + "only a-z, A-Z, 0-9 without  characters i, I, l, o, O, w, W, y, Y, z, Z and 1, 0");
-      }
    }
-
 }

http://git-wip-us.apache.org/repos/asf/jclouds/blob/5e82bbfa/providers/profitbricks/src/main/java/org/jclouds/profitbricks/http/parser/ipblock/BaseIpBlockResponseHandler.java
----------------------------------------------------------------------
diff --git a/providers/profitbricks/src/main/java/org/jclouds/profitbricks/http/parser/ipblock/BaseIpBlockResponseHandler.java b/providers/profitbricks/src/main/java/org/jclouds/profitbricks/http/parser/ipblock/BaseIpBlockResponseHandler.java
index a4af29f..50adfe4 100644
--- a/providers/profitbricks/src/main/java/org/jclouds/profitbricks/http/parser/ipblock/BaseIpBlockResponseHandler.java
+++ b/providers/profitbricks/src/main/java/org/jclouds/profitbricks/http/parser/ipblock/BaseIpBlockResponseHandler.java
@@ -16,8 +16,10 @@
  */
 package org.jclouds.profitbricks.http.parser.ipblock;
 
-import com.google.common.collect.Lists;
 import java.util.List;
+
+import com.google.common.collect.Lists;
+
 import org.jclouds.profitbricks.domain.IpBlock;
 import org.jclouds.profitbricks.domain.Location;
 import org.jclouds.profitbricks.http.parser.BaseProfitBricksResponseHandler;
@@ -28,7 +30,6 @@ import org.xml.sax.SAXException;
 public abstract class BaseIpBlockResponseHandler<T> extends BaseProfitBricksResponseHandler<T> {
 
    protected final PublicIpListResponseHandler publicIpListResponseHandler;
-   protected final List<IpBlock.PublicIp> publicIps = Lists.newArrayList();
    protected List<String> ips;
 
    protected IpBlock.Builder builder;
@@ -37,7 +38,7 @@ public abstract class BaseIpBlockResponseHandler<T> extends BaseProfitBricksResp
    BaseIpBlockResponseHandler(PublicIpListResponseHandler publicIpListResponseHandler) {
       this.builder = IpBlock.builder();
       this.publicIpListResponseHandler = publicIpListResponseHandler;
-      ips = Lists.newArrayList();
+      this.ips = Lists.newArrayList();
    }
 
    @Override

http://git-wip-us.apache.org/repos/asf/jclouds/blob/5e82bbfa/providers/profitbricks/src/main/java/org/jclouds/profitbricks/http/parser/ipblock/IpBlockResponseHandler.java
----------------------------------------------------------------------
diff --git a/providers/profitbricks/src/main/java/org/jclouds/profitbricks/http/parser/ipblock/IpBlockResponseHandler.java b/providers/profitbricks/src/main/java/org/jclouds/profitbricks/http/parser/ipblock/IpBlockResponseHandler.java
index 307db14..95bc81a 100644
--- a/providers/profitbricks/src/main/java/org/jclouds/profitbricks/http/parser/ipblock/IpBlockResponseHandler.java
+++ b/providers/profitbricks/src/main/java/org/jclouds/profitbricks/http/parser/ipblock/IpBlockResponseHandler.java
@@ -41,8 +41,8 @@ public class IpBlockResponseHandler extends BaseIpBlockResponseHandler<IpBlock>
          setPropertyOnEndTag(qName);
          if ("return".equals(qName)) {
             done = true;
-            builder.publicIps(publicIpListResponseHandler.getResult());
-            builder.ips(ips);
+            builder.publicIps(publicIpListResponseHandler.getResult())
+                    .ips(ips);
          }
          clearTextBuffer();
       }

http://git-wip-us.apache.org/repos/asf/jclouds/blob/5e82bbfa/providers/profitbricks/src/main/java/org/jclouds/profitbricks/http/parser/loadbalancer/BaseLoadBalancerResponseHandler.java
----------------------------------------------------------------------
diff --git a/providers/profitbricks/src/main/java/org/jclouds/profitbricks/http/parser/loadbalancer/BaseLoadBalancerResponseHandler.java b/providers/profitbricks/src/main/java/org/jclouds/profitbricks/http/parser/loadbalancer/BaseLoadBalancerResponseHandler.java
index 96256bb..b796125 100644
--- a/providers/profitbricks/src/main/java/org/jclouds/profitbricks/http/parser/loadbalancer/BaseLoadBalancerResponseHandler.java
+++ b/providers/profitbricks/src/main/java/org/jclouds/profitbricks/http/parser/loadbalancer/BaseLoadBalancerResponseHandler.java
@@ -103,7 +103,7 @@ public abstract class BaseLoadBalancerResponseHandler<T> extends BaseProfitBrick
       else if ("ip".equals(qName))
          builder.ip(textToStringValue());
       else if ("lanId".equals(qName))
-         builder.lanId(textToStringValue());
+         builder.lanId(textToIntValue());
       else if ("provisioningState".equals(qName))
          builder.state(ProvisioningState.fromValue(textToStringValue()));
       else if ("creationTime".equals(qName))

http://git-wip-us.apache.org/repos/asf/jclouds/blob/5e82bbfa/providers/profitbricks/src/main/java/org/jclouds/profitbricks/http/parser/nic/BaseNicResponseHandler.java
----------------------------------------------------------------------
diff --git a/providers/profitbricks/src/main/java/org/jclouds/profitbricks/http/parser/nic/BaseNicResponseHandler.java b/providers/profitbricks/src/main/java/org/jclouds/profitbricks/http/parser/nic/BaseNicResponseHandler.java
index 83efca3..0b4b537 100644
--- a/providers/profitbricks/src/main/java/org/jclouds/profitbricks/http/parser/nic/BaseNicResponseHandler.java
+++ b/providers/profitbricks/src/main/java/org/jclouds/profitbricks/http/parser/nic/BaseNicResponseHandler.java
@@ -16,6 +16,9 @@
  */
 package org.jclouds.profitbricks.http.parser.nic;
 
+import java.util.ArrayList;
+import java.util.List;
+
 import com.google.inject.Inject;
 
 import org.jclouds.profitbricks.domain.Nic;
@@ -31,11 +34,13 @@ public abstract class BaseNicResponseHandler<T> extends BaseProfitBricksResponse
 
    protected boolean useFirewallParser = false;
    protected Nic.Builder builder;
+   protected List<String> ips;
 
    @Inject
    BaseNicResponseHandler(FirewallResponseHandler firewallResponseHandler) {
       this.builder = Nic.builder();
       this.firewallResponseHandler = firewallResponseHandler;
+      this.ips = new ArrayList<String>();
    }
 
    @Override
@@ -69,7 +74,7 @@ public abstract class BaseNicResponseHandler<T> extends BaseProfitBricksResponse
       else if ("serverId".equals(qName))
          builder.serverId(textToStringValue());
       else if ("ips".equals(qName))
-         builder.ip(textToStringValue());
+         ips.add(textToStringValue());
       else if ("macAddress".equals(qName))
          builder.macAddress(textToStringValue());
       else if ("dhcpActive".equals(qName))

http://git-wip-us.apache.org/repos/asf/jclouds/blob/5e82bbfa/providers/profitbricks/src/main/java/org/jclouds/profitbricks/http/parser/nic/NicListResponseHandler.java
----------------------------------------------------------------------
diff --git a/providers/profitbricks/src/main/java/org/jclouds/profitbricks/http/parser/nic/NicListResponseHandler.java b/providers/profitbricks/src/main/java/org/jclouds/profitbricks/http/parser/nic/NicListResponseHandler.java
index 4a3ab66..87e7f43 100644
--- a/providers/profitbricks/src/main/java/org/jclouds/profitbricks/http/parser/nic/NicListResponseHandler.java
+++ b/providers/profitbricks/src/main/java/org/jclouds/profitbricks/http/parser/nic/NicListResponseHandler.java
@@ -16,6 +16,8 @@
  */
 package org.jclouds.profitbricks.http.parser.nic;
 
+import java.util.ArrayList;
+
 import com.google.common.collect.Lists;
 import com.google.inject.Inject;
 
@@ -44,9 +46,12 @@ public class NicListResponseHandler extends BaseNicResponseHandler<List<Nic>> {
          setPropertyOnEndTag(qName);
          if ("return".equals(qName) || "nics".equals(qName)) {
             nics.add(builder
+                    .ips(ips)
                     .firewall(firewallResponseHandler.getResult())
                     .build());
             builder = Nic.builder();
+            ips = new ArrayList<String>();
+            firewallResponseHandler.reset();
          }
          clearTextBuffer();
       }
@@ -57,6 +62,7 @@ public class NicListResponseHandler extends BaseNicResponseHandler<List<Nic>> {
 
    @Override
    public void reset() {
+      this.ips = new ArrayList<String>();
       this.nics = Lists.newArrayList();
    }
 

http://git-wip-us.apache.org/repos/asf/jclouds/blob/5e82bbfa/providers/profitbricks/src/main/java/org/jclouds/profitbricks/http/parser/nic/NicResponseHandler.java
----------------------------------------------------------------------
diff --git a/providers/profitbricks/src/main/java/org/jclouds/profitbricks/http/parser/nic/NicResponseHandler.java b/providers/profitbricks/src/main/java/org/jclouds/profitbricks/http/parser/nic/NicResponseHandler.java
index 690ecc1..ec4dd10 100644
--- a/providers/profitbricks/src/main/java/org/jclouds/profitbricks/http/parser/nic/NicResponseHandler.java
+++ b/providers/profitbricks/src/main/java/org/jclouds/profitbricks/http/parser/nic/NicResponseHandler.java
@@ -16,7 +16,10 @@
  */
 package org.jclouds.profitbricks.http.parser.nic;
 
+import java.util.ArrayList;
+
 import com.google.inject.Inject;
+
 import org.jclouds.profitbricks.domain.Nic;
 import org.jclouds.profitbricks.http.parser.firewall.FirewallResponseHandler;
 import org.xml.sax.SAXException;
@@ -41,7 +44,9 @@ public class NicResponseHandler extends BaseNicResponseHandler<Nic> {
          setPropertyOnEndTag(qName);
          if ("return".equals(qName)) {
             done = true;
-            builder.firewall(firewallResponseHandler.getResult());
+            builder.ips(ips)
+                    .firewall(firewallResponseHandler.getResult());
+            ips = new ArrayList<String>();
             firewallResponseHandler.reset();
          }
          clearTextBuffer();

http://git-wip-us.apache.org/repos/asf/jclouds/blob/5e82bbfa/providers/profitbricks/src/main/java/org/jclouds/profitbricks/http/parser/publicip/PublicIpListResponseHandler.java
----------------------------------------------------------------------
diff --git a/providers/profitbricks/src/main/java/org/jclouds/profitbricks/http/parser/publicip/PublicIpListResponseHandler.java b/providers/profitbricks/src/main/java/org/jclouds/profitbricks/http/parser/publicip/PublicIpListResponseHandler.java
index c68e7e6..8b01be9 100644
--- a/providers/profitbricks/src/main/java/org/jclouds/profitbricks/http/parser/publicip/PublicIpListResponseHandler.java
+++ b/providers/profitbricks/src/main/java/org/jclouds/profitbricks/http/parser/publicip/PublicIpListResponseHandler.java
@@ -33,8 +33,10 @@ public class PublicIpListResponseHandler extends BasePublicIpResponseHandler<Lis
    public void endElement(String uri, String localName, String qName) throws SAXException {
       setPropertyOnEndTag(qName);
 
-      if ("publicIps".equals(qName))
+      if ("publicIps".equals(qName)){
          publicIps.add(builder.build());
+         this.builder = PublicIp.builder();
+      }
       clearTextBuffer();
    }
 

http://git-wip-us.apache.org/repos/asf/jclouds/blob/5e82bbfa/providers/profitbricks/src/main/java/org/jclouds/profitbricks/http/parser/server/BaseServerResponseHandler.java
----------------------------------------------------------------------
diff --git a/providers/profitbricks/src/main/java/org/jclouds/profitbricks/http/parser/server/BaseServerResponseHandler.java b/providers/profitbricks/src/main/java/org/jclouds/profitbricks/http/parser/server/BaseServerResponseHandler.java
index 37aabd5..2185aed 100644
--- a/providers/profitbricks/src/main/java/org/jclouds/profitbricks/http/parser/server/BaseServerResponseHandler.java
+++ b/providers/profitbricks/src/main/java/org/jclouds/profitbricks/http/parser/server/BaseServerResponseHandler.java
@@ -38,7 +38,7 @@ public abstract class BaseServerResponseHandler<T> extends BaseProfitBricksRespo
    protected final NicListResponseHandler nicListResponseHandler;
 
    protected DataCenter.Builder dataCenterBuilder;
-   protected Server.DescribingBuilder builder;
+   protected Server.Builder builder;
 
    protected final DateService dateService;
 

http://git-wip-us.apache.org/repos/asf/jclouds/blob/5e82bbfa/providers/profitbricks/src/main/java/org/jclouds/profitbricks/http/parser/server/ServerListResponseHandler.java
----------------------------------------------------------------------
diff --git a/providers/profitbricks/src/main/java/org/jclouds/profitbricks/http/parser/server/ServerListResponseHandler.java b/providers/profitbricks/src/main/java/org/jclouds/profitbricks/http/parser/server/ServerListResponseHandler.java
index 24a5daa..d39fbad 100644
--- a/providers/profitbricks/src/main/java/org/jclouds/profitbricks/http/parser/server/ServerListResponseHandler.java
+++ b/providers/profitbricks/src/main/java/org/jclouds/profitbricks/http/parser/server/ServerListResponseHandler.java
@@ -49,7 +49,7 @@ public class ServerListResponseHandler extends BaseServerResponseHandler<List<Se
       else {
          setPropertyOnEndTag(qName);
          if ("return".equals(qName) || "servers".equals(qName) || "balancedServers".equals(qName)) {
-            Server.DescribingBuilder sdb = null;
+            Server.Builder sdb = null;
             try {
                sdb = builder
                        .storages(storageListResponseHandler.getResult())
@@ -58,7 +58,7 @@ public class ServerListResponseHandler extends BaseServerResponseHandler<List<Se
                        // For LoadBalancer's case, there's no DataCenter (may throw NPE on #build()). 
                        .dataCenter(dataCenterBuilder.build())
                        .build());
-            } catch (NullPointerException ex) {
+            } catch (Exception ex) {
                servers.add(sdb.build());
             }
             storageListResponseHandler.reset();

http://git-wip-us.apache.org/repos/asf/jclouds/blob/5e82bbfa/providers/profitbricks/src/main/java/org/jclouds/profitbricks/util/Preconditions.java
----------------------------------------------------------------------
diff --git a/providers/profitbricks/src/main/java/org/jclouds/profitbricks/util/Preconditions.java b/providers/profitbricks/src/main/java/org/jclouds/profitbricks/util/Preconditions.java
new file mode 100644
index 0000000..b15689d
--- /dev/null
+++ b/providers/profitbricks/src/main/java/org/jclouds/profitbricks/util/Preconditions.java
@@ -0,0 +1,100 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.jclouds.profitbricks.util;
+
+import static com.google.common.base.Preconditions.checkArgument;
+import static com.google.common.base.Preconditions.checkNotNull;
+import static com.google.common.base.Strings.isNullOrEmpty;
+import static com.google.common.net.InetAddresses.isInetAddress;
+import static org.jclouds.profitbricks.util.MacAddresses.isMacAddress;
+import static org.jclouds.profitbricks.util.Passwords.isValidPassword;
+
+import java.util.List;
+import java.util.regex.Pattern;
+
+import org.jclouds.profitbricks.domain.Firewall;
+import org.jclouds.profitbricks.domain.Firewall.Protocol;
+
+/**
+ * Static convenience methods for validating various ProfitBricks domain preconditions
+ */
+public final class Preconditions {
+
+   private static final Pattern INVALID_CHARS = Pattern.compile("^.*[@/\\|'`’^].*$");
+
+   public static void checkInvalidChars(String name) {
+      checkArgument(!isNullOrEmpty(name), "Name is required.");
+      checkArgument(!INVALID_CHARS.matcher(name).matches(), "Name must not contain any of: @ / \\ | ' ` ’ ^");
+   }
+
+   public static void checkIp(String ip) {
+      checkArgument(isInetAddress(ip), "IP '%s' is invalid", ip);
+   }
+
+   public static void checkIps(List<String> ips) {
+      checkNotNull(ips, "Null ip list");
+      for (String ip : ips)
+         checkIp(ip);
+   }
+
+   public static void checkPortRange(Integer portRangeStart, Integer portRangeEnd, Firewall.Protocol protocol) {
+      checkArgument(!(portRangeEnd == null ^ portRangeStart == null), "Port range must be both present or null");
+      if (portRangeEnd != null) {
+         checkArgument(protocol == Firewall.Protocol.TCP || protocol == Firewall.Protocol.UDP, "Port range can only be set for TCP or UDP");
+         checkArgument(portRangeEnd > portRangeStart, "portRangeEnd must be greater than portRangeStart");
+         checkArgument(portRangeEnd >= 1 && portRangeEnd <= 65534, "Port range end must be 1 to 65534");
+         checkArgument(portRangeStart >= 1 && portRangeStart <= 65534, "Port range start must be 1 to 65534");
+      }
+   }
+
+   public static void checkMacAddress(String macAddress) {
+      checkArgument(isMacAddress(macAddress), "MAC must match pattern 'aa:bb:cc:dd:ee:ff'");
+   }
+
+   public static void checkIcmp(Integer icmpType, Integer icmpCode, Protocol protocol) {
+      checkNotNull(protocol, "Protocol can't be null");
+      if (protocol == Protocol.ICMP) {
+         if (icmpType != null)
+            checkArgument(icmpType >= 1 && icmpType <= 254, "ICMP type must be 1 to 254");
+         if (icmpCode != null)
+            checkArgument(icmpCode >= 1 && icmpCode <= 254, "ICMP code must be 1 to 254");
+      }
+   }
+
+   public static void checkLanId(Integer id) {
+      checkArgument(id >= 0, "LAN ID must be non-negative");
+   }
+
+   public static void checkCores(Integer cores) {
+      checkArgument(cores > 0, "Number of cores must be atleast 1.");
+   }
+
+   public static void checkRam(Integer ram, Boolean isRamHotPlug) {
+      int minRam = (isRamHotPlug == null || !isRamHotPlug) ? 256 : 1024;
+      checkArgument(ram >= minRam && ram % 256 == 0, "RAM must be multiples of 256 with minimum of 256 MB "
+              + "(1024 MB if ramHotPlug is enabled)");
+   }
+
+   public static void checkSize(Float size) {
+      checkArgument(size > 1, "Storage size must be > 1GB");
+   }
+
+   public static void checkPassword(String password) {
+      checkArgument(isValidPassword(password), "Password must be between 8 and 50 characters, "
+              + "only a-z, A-Z, 0-9 without  characters i, I, l, o, O, w, W, y, Y, z, Z and 1, 0");
+   }
+}

http://git-wip-us.apache.org/repos/asf/jclouds/blob/5e82bbfa/providers/profitbricks/src/test/java/org/jclouds/profitbricks/binder/datacenter/CreateDataCenterRequestBinderTest.java
----------------------------------------------------------------------
diff --git a/providers/profitbricks/src/test/java/org/jclouds/profitbricks/binder/datacenter/CreateDataCenterRequestBinderTest.java b/providers/profitbricks/src/test/java/org/jclouds/profitbricks/binder/datacenter/CreateDataCenterRequestBinderTest.java
index 6c4815f..5190d6f 100644
--- a/providers/profitbricks/src/test/java/org/jclouds/profitbricks/binder/datacenter/CreateDataCenterRequestBinderTest.java
+++ b/providers/profitbricks/src/test/java/org/jclouds/profitbricks/binder/datacenter/CreateDataCenterRequestBinderTest.java
@@ -30,7 +30,7 @@ public class CreateDataCenterRequestBinderTest {
    public void testCreatePayload() {
       CreateDataCenterRequestBinder binder = new CreateDataCenterRequestBinder();
 
-      DataCenter.Request.CreatePayload payload = DataCenter.Request.CreatePayload.create("JClouds-DC", Location.DE_FKB);
+      DataCenter.Request.CreatePayload payload = DataCenter.Request.creatingPayload("JClouds-DC", Location.DE_FKB);
 
       String actual = binder.createPayload(payload);
       assertNotNull(actual, "Binder returned null payload");

http://git-wip-us.apache.org/repos/asf/jclouds/blob/5e82bbfa/providers/profitbricks/src/test/java/org/jclouds/profitbricks/binder/datacenter/UpdateDataCenterRequestBinderTest.java
----------------------------------------------------------------------
diff --git a/providers/profitbricks/src/test/java/org/jclouds/profitbricks/binder/datacenter/UpdateDataCenterRequestBinderTest.java b/providers/profitbricks/src/test/java/org/jclouds/profitbricks/binder/datacenter/UpdateDataCenterRequestBinderTest.java
index 3f989ce..589fc69 100644
--- a/providers/profitbricks/src/test/java/org/jclouds/profitbricks/binder/datacenter/UpdateDataCenterRequestBinderTest.java
+++ b/providers/profitbricks/src/test/java/org/jclouds/profitbricks/binder/datacenter/UpdateDataCenterRequestBinderTest.java
@@ -29,7 +29,7 @@ public class UpdateDataCenterRequestBinderTest {
    public void testCreatePayload() {
       UpdateDataCenterRequestBinder binder = new UpdateDataCenterRequestBinder();
 
-      DataCenter.Request.UpdatePayload payload = DataCenter.Request.UpdatePayload.create("aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee", "Apache-DC");
+      DataCenter.Request.UpdatePayload payload = DataCenter.Request.updatingPayload("aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee", "Apache-DC");
 
       String actual = binder.createPayload(payload);
       assertNotNull(actual, "Binder returned null payload");

http://git-wip-us.apache.org/repos/asf/jclouds/blob/5e82bbfa/providers/profitbricks/src/test/java/org/jclouds/profitbricks/binder/drive/AddRomDriveToServerRequestBinderTest.java
----------------------------------------------------------------------
diff --git a/providers/profitbricks/src/test/java/org/jclouds/profitbricks/binder/drive/AddRomDriveToServerRequestBinderTest.java b/providers/profitbricks/src/test/java/org/jclouds/profitbricks/binder/drive/AddRomDriveToServerRequestBinderTest.java
index 13fb7f1..134b62f 100644
--- a/providers/profitbricks/src/test/java/org/jclouds/profitbricks/binder/drive/AddRomDriveToServerRequestBinderTest.java
+++ b/providers/profitbricks/src/test/java/org/jclouds/profitbricks/binder/drive/AddRomDriveToServerRequestBinderTest.java
@@ -29,7 +29,7 @@ public class AddRomDriveToServerRequestBinderTest {
 
       Drive.Request.AddRomDriveToServerPayload payload = Drive.Request.AddRomDriveToServerPayload.builder()
               .serverId("server-id")
-              .storageId("image-id")
+              .imageId("image-id")
               .deviceNumber("device-number")
               .build();
 

http://git-wip-us.apache.org/repos/asf/jclouds/blob/5e82bbfa/providers/profitbricks/src/test/java/org/jclouds/profitbricks/binder/firewall/AddFirewallRuleToNicRequestBinderTest.java
----------------------------------------------------------------------
diff --git a/providers/profitbricks/src/test/java/org/jclouds/profitbricks/binder/firewall/AddFirewallRuleToNicRequestBinderTest.java b/providers/profitbricks/src/test/java/org/jclouds/profitbricks/binder/firewall/AddFirewallRuleToNicRequestBinderTest.java
index daedc36..0e074a6 100644
--- a/providers/profitbricks/src/test/java/org/jclouds/profitbricks/binder/firewall/AddFirewallRuleToNicRequestBinderTest.java
+++ b/providers/profitbricks/src/test/java/org/jclouds/profitbricks/binder/firewall/AddFirewallRuleToNicRequestBinderTest.java
@@ -21,7 +21,8 @@ import org.jclouds.profitbricks.domain.Firewall;
 import static org.testng.Assert.assertEquals;
 import static org.testng.Assert.assertNotNull;
 
-import org.jclouds.profitbricks.domain.Firewall.Protocol;
+import com.google.common.collect.ImmutableList;
+
 import org.testng.annotations.Test;
 
 @Test(groups = "unit", testName = "AddFirewallRuleToNicRequestBinderTest")
@@ -31,18 +32,18 @@ public class AddFirewallRuleToNicRequestBinderTest {
    public void testCreatePayload() {
       AddFirewallRuleToNicRequestBinder binder = new AddFirewallRuleToNicRequestBinder();
 
-      Firewall.Request.AddRulePayload payload = Firewall.Request.ruleAddingBuilder()
-              .nicId("nic-id")
-              .newRule()
-              .name("name")
-              .portRangeEnd(45678)
-              .portRangeStart(12345)
-              .protocol(Protocol.TCP)
-              .sourceIp("192.168.0.1")
-              .sourceMac("aa:bb:cc:dd:ee:ff")
-              .targetIp("192.168.0.2")
-              .endRule()
-              .build();
+      Firewall.Request.AddRulePayload payload = Firewall.Request.createAddRulePayload(
+              "nic-id", ImmutableList.of(
+                      Firewall.Rule.builder()
+                      .name("name")
+                      .portRangeEnd(45678)
+                      .portRangeStart(12345)
+                      .protocol(Firewall.Protocol.TCP)
+                      .sourceIp("192.168.0.1")
+                      .sourceMac("aa:bb:cc:dd:ee:ff")
+                      .targetIp("192.168.0.2")
+                      .build()
+              ));
 
       String actual = binder.createPayload(payload);
       assertNotNull(actual, "Binder returned null payload");

http://git-wip-us.apache.org/repos/asf/jclouds/blob/5e82bbfa/providers/profitbricks/src/test/java/org/jclouds/profitbricks/binder/loadbalancer/CreateLoadBalancerRequestBinderTest.java
----------------------------------------------------------------------
diff --git a/providers/profitbricks/src/test/java/org/jclouds/profitbricks/binder/loadbalancer/CreateLoadBalancerRequestBinderTest.java b/providers/profitbricks/src/test/java/org/jclouds/profitbricks/binder/loadbalancer/CreateLoadBalancerRequestBinderTest.java
index f959be1..4744986 100644
--- a/providers/profitbricks/src/test/java/org/jclouds/profitbricks/binder/loadbalancer/CreateLoadBalancerRequestBinderTest.java
+++ b/providers/profitbricks/src/test/java/org/jclouds/profitbricks/binder/loadbalancer/CreateLoadBalancerRequestBinderTest.java
@@ -16,13 +16,17 @@
  */
 package org.jclouds.profitbricks.binder.loadbalancer;
 
-import com.google.common.collect.Lists;
+import static org.testng.Assert.assertEquals;
+import static org.testng.Assert.assertNotNull;
+
 import java.util.List;
+
+import com.google.common.collect.Lists;
+import com.google.common.collect.ImmutableList;
+
 import org.testng.annotations.Test;
 import org.jclouds.profitbricks.domain.LoadBalancer;
 import org.jclouds.profitbricks.domain.LoadBalancer.Algorithm;
-import static org.testng.Assert.assertEquals;
-import static org.testng.Assert.assertNotNull;
 
 @Test(groups = "unit", testName = "CreateLoadBalancerRequestBinderTest")
 public class CreateLoadBalancerRequestBinderTest {
@@ -34,7 +38,16 @@ public class CreateLoadBalancerRequestBinderTest {
       List<String> serverIds = Lists.newArrayList();
       serverIds.add("server-ids");
 
-      String actual = binder.createPayload(LoadBalancer.Request.CreatePayload.create("datacenter-id", "load-balancer-name", Algorithm.ROUND_ROBIN, "-ip", "lan-id", serverIds));
+      String actual = binder.createPayload(
+              LoadBalancer.Request.creatingBuilder()
+              .dataCenterId("datacenter-id")
+              .name("load-balancer-name")
+              .algorithm(Algorithm.ROUND_ROBIN)
+              .ip("10.0.0.1")
+              .lanId(2)
+              .serverIds(ImmutableList.<String>of(
+                              "server-id-1", "server-id-2"))
+              .build());
 
       assertNotNull(actual, "Binder returned null payload");
       assertEquals(expectedPayload, actual);
@@ -46,9 +59,10 @@ public class CreateLoadBalancerRequestBinderTest {
            + "                <dataCenterId>datacenter-id</dataCenterId>\n"
            + "                <loadBalancerName>load-balancer-name</loadBalancerName>\n"
            + "                <loadBalancerAlgorithm>ROUND_ROBIN</loadBalancerAlgorithm>\n"
-           + "                <ip>-ip</ip>\n"
-           + "                <lanId>lan-id</lanId>\n"
-           + "                <serverIds>server-ids</serverIds>\n"
+           + "                <ip>10.0.0.1</ip>\n"
+           + "                <lanId>2</lanId>\n"
+           + "                <serverIds>server-id-1</serverIds>\n"
+           + "                <serverIds>server-id-2</serverIds>\n"
            + "            </request>\n"
            + "        </ws:createLoadBalancer>").replaceAll("\\s+", "");
 }

http://git-wip-us.apache.org/repos/asf/jclouds/blob/5e82bbfa/providers/profitbricks/src/test/java/org/jclouds/profitbricks/binder/loadbalancer/DeregisterLoadBalancerRequestBinderTest.java
----------------------------------------------------------------------
diff --git a/providers/profitbricks/src/test/java/org/jclouds/profitbricks/binder/loadbalancer/DeregisterLoadBalancerRequestBinderTest.java b/providers/profitbricks/src/test/java/org/jclouds/profitbricks/binder/loadbalancer/DeregisterLoadBalancerRequestBinderTest.java
index dbf0271..b1fa5c3 100644
--- a/providers/profitbricks/src/test/java/org/jclouds/profitbricks/binder/loadbalancer/DeregisterLoadBalancerRequestBinderTest.java
+++ b/providers/profitbricks/src/test/java/org/jclouds/profitbricks/binder/loadbalancer/DeregisterLoadBalancerRequestBinderTest.java
@@ -33,7 +33,7 @@ public class DeregisterLoadBalancerRequestBinderTest {
       serverIds.add("1");
       serverIds.add("2");
 
-      LoadBalancer.Request.DeregisterPayload payload = LoadBalancer.Request.DeregisterPayload.create(serverIds, "load-balancer-id");
+      LoadBalancer.Request.DeregisterPayload payload = LoadBalancer.Request.createDeregisteringPayload("load-balancer-id", serverIds);
 
       String actual = binder.createPayload(payload);
 

http://git-wip-us.apache.org/repos/asf/jclouds/blob/5e82bbfa/providers/profitbricks/src/test/java/org/jclouds/profitbricks/binder/loadbalancer/RegisterLoadBalancerRequestBinderTest.java
----------------------------------------------------------------------
diff --git a/providers/profitbricks/src/test/java/org/jclouds/profitbricks/binder/loadbalancer/RegisterLoadBalancerRequestBinderTest.java b/providers/profitbricks/src/test/java/org/jclouds/profitbricks/binder/loadbalancer/RegisterLoadBalancerRequestBinderTest.java
index 2bbf6fd..db42403 100644
--- a/providers/profitbricks/src/test/java/org/jclouds/profitbricks/binder/loadbalancer/RegisterLoadBalancerRequestBinderTest.java
+++ b/providers/profitbricks/src/test/java/org/jclouds/profitbricks/binder/loadbalancer/RegisterLoadBalancerRequestBinderTest.java
@@ -33,7 +33,7 @@ public class RegisterLoadBalancerRequestBinderTest {
       serverIds.add("1");
       serverIds.add("2");
 
-      LoadBalancer.Request.RegisterPayload payload = LoadBalancer.Request.RegisterPayload.create(serverIds, "load-balancer-id");
+      LoadBalancer.Request.RegisterPayload payload = LoadBalancer.Request.createRegisteringPaylod("load-balancer-id", serverIds);
 
       String actual = binder.createPayload(payload);
 

http://git-wip-us.apache.org/repos/asf/jclouds/blob/5e82bbfa/providers/profitbricks/src/test/java/org/jclouds/profitbricks/binder/loadbalancer/UpdateLoadBalancerRequestBinderTest.java
----------------------------------------------------------------------
diff --git a/providers/profitbricks/src/test/java/org/jclouds/profitbricks/binder/loadbalancer/UpdateLoadBalancerRequestBinderTest.java b/providers/profitbricks/src/test/java/org/jclouds/profitbricks/binder/loadbalancer/UpdateLoadBalancerRequestBinderTest.java
index 21c08d0..b638c89 100644
--- a/providers/profitbricks/src/test/java/org/jclouds/profitbricks/binder/loadbalancer/UpdateLoadBalancerRequestBinderTest.java
+++ b/providers/profitbricks/src/test/java/org/jclouds/profitbricks/binder/loadbalancer/UpdateLoadBalancerRequestBinderTest.java
@@ -16,11 +16,14 @@
  */
 package org.jclouds.profitbricks.binder.loadbalancer;
 
-import com.google.common.collect.Lists;
-import java.util.List;
-import org.jclouds.profitbricks.domain.LoadBalancer;
 import static org.testng.Assert.assertEquals;
 import static org.testng.Assert.assertNotNull;
+
+import java.util.List;
+
+import com.google.common.collect.Lists;
+
+import org.jclouds.profitbricks.domain.LoadBalancer;
 import org.testng.annotations.Test;
 
 @Test(groups = "unit", testName = "UpdateLoadBalancerRequestBinderTest")
@@ -33,8 +36,12 @@ public class UpdateLoadBalancerRequestBinderTest {
       serverIds.add("1");
       serverIds.add("2");
 
-      LoadBalancer.Request.UpdatePayload payload = LoadBalancer.Request.UpdatePayload.create("aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee", "load-balancer-name",
-              LoadBalancer.Algorithm.ROUND_ROBIN, "ip");
+      LoadBalancer.Request.UpdatePayload payload = LoadBalancer.Request.updatingBuilder()
+              .id("aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee")
+              .name("load-balancer-name")
+              .algorithm(LoadBalancer.Algorithm.ROUND_ROBIN)
+              .ip("10.0.0.2")
+              .build();
 
       String actual = binder.createPayload(payload);
 
@@ -48,7 +55,7 @@ public class UpdateLoadBalancerRequestBinderTest {
            + "                <loadBalancerId>aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee</loadBalancerId>\n"
            + "                <loadBalancerName>load-balancer-name</loadBalancerName>\n"
            + "                <loadBalancerAlgorithm>ROUND_ROBIN</loadBalancerAlgorithm>\n"
-           + "                <ip>ip</ip>              \n"
+           + "                <ip>10.0.0.2</ip>              \n"
            + "            </request>\n"
            + "        </ws:updateLoadBalancer>").replaceAll("\\s+", "");
 }

http://git-wip-us.apache.org/repos/asf/jclouds/blob/5e82bbfa/providers/profitbricks/src/test/java/org/jclouds/profitbricks/binder/snapshot/CreateSnapshotRequestBinderTest.java
----------------------------------------------------------------------
diff --git a/providers/profitbricks/src/test/java/org/jclouds/profitbricks/binder/snapshot/CreateSnapshotRequestBinderTest.java b/providers/profitbricks/src/test/java/org/jclouds/profitbricks/binder/snapshot/CreateSnapshotRequestBinderTest.java
index 42a1ad9..8a9c581 100644
--- a/providers/profitbricks/src/test/java/org/jclouds/profitbricks/binder/snapshot/CreateSnapshotRequestBinderTest.java
+++ b/providers/profitbricks/src/test/java/org/jclouds/profitbricks/binder/snapshot/CreateSnapshotRequestBinderTest.java
@@ -29,7 +29,11 @@ public class CreateSnapshotRequestBinderTest {
    public void testCreatePayload() {
       CreateSnapshotRequestBinder binder = new CreateSnapshotRequestBinder();
 
-      Snapshot.Request.CreatePayload payload = Snapshot.Request.CreatePayload.create("123-1233-1324", "describingthesnapshot", "snapshotname");
+      Snapshot.Request.CreatePayload payload = Snapshot.Request.creatingBuilder()
+              .storageId("123-1233-1324")
+              .name("snapshot-name")
+              .description("describing-the-snapshot")
+              .build();
 
       String actual = binder.createPayload(payload);
       assertNotNull(actual, "Binder returned null payload");
@@ -40,8 +44,8 @@ public class CreateSnapshotRequestBinderTest {
            = ("      <ws:createSnapshot>\n"
            + "<request>\n"
            + "<storageId>123-1233-1324</storageId>\n"
-           + "<description>describing the snapshot</description>\n"
-           + "<snapshotName>snapshot name</snapshotName>\n"
+           + "<description>describing-the-snapshot</description>\n"
+           + "<snapshotName>snapshot-name</snapshotName>\n"
            + "</request>\n"
            + "</ws:createSnapshot>").replaceAll("\\s+", "");
 }