Merge branch 'master' of github.com:jclouds/jclouds into 1.5.x

* 'master' of github.com:jclouds/jclouds: (33 commits)
  optimize imports
  reset loginpassword/privatekey when explicitly set
  revised tests that AdminAccess change recently broke
  Issue 1028:vCloud Director 1.5: require x-vcloud-authorization header on vcloud api
  Add SYSTEM scope from DMTF CIMI. FGCP provider needs it.
  Issue-1020 Add full name option for AdminUser and UserAdd
  Add missing @Override in TransientStorageStrategy
  format and imports
  Ensure that EventBus is a singleton
  Introduce LocalAsyncBlobStore
  Miscellaneous local blobstore cleanups
  Prefer valueOf over explicit object creation
  Move helper method to TransientStorageStrategy
  Move copy(MutableBlobMetadata) to BlobStoreUtils
  Cloudstack VirtualMachines can have negative cpuUsed values for some reason
  removed dead code
  corrected destroyNodes bug
  Fixed compilation failures caused by 70fa74df1a6
  Remove encodeString() and encodeString(String)
  Shuffle blobstore parameters to match superclass
  ...
diff --git a/README.md b/README.md
index 859bdca..4e7adae 100644
--- a/README.md
+++ b/README.md
@@ -1,7 +1,11 @@
 jclouds
 ======
-jclouds is an open source library that helps you get started in the cloud and reuse your java and clojure development skills. Our api allows you freedom to use portable abstractions or cloud-specific features. We test support of 30 cloud providers and cloud software stacks, including Amazon, GoGrid, Ninefold, vCloud, OpenStack, and Azure.
-We offer several API abstractions as java and clojure libraries. The following are the most mature:
+jclouds allows provisioning and control of cloud resources, including blobstore
+and compute, from Java and Clojure.  Our API gives allows developers to use
+both portable abstractions and cloud-specific features.  We test support of 30
+cloud providers and cloud software stacks, including Amazon, Azure, GoGrid,
+Ninefold, OpenStack, and vCloud.  jclouds is licensed under the Apache License,
+Version 2.0
 
 Features
 --------
diff --git a/README.txt b/README.txt
index 2bb3cce..296958e 100644
--- a/README.txt
+++ b/README.txt
@@ -1,11 +1,11 @@
 Overview:
  
-jclouds is an open source library that helps you get started in the cloud
-and reuse your java and clojure development skills. Our api allows you to 
-freedom to use portable abstractions or cloud-specific features.  We have
-two abstractions at the moment: compute and blobstore.  compute helps you
-bootstrap machines in the cloud.  blobstore helps you manage key-value
-data.
+jclouds allows provisioning and control of cloud resources, including blobstore
+and compute, from Java and Clojure.  Our API gives allows developers to use
+both portable abstractions and cloud-specific features.  We test support of 30
+cloud providers and cloud software stacks, including Amazon, Azure, GoGrid,
+Ninefold, OpenStack, and vCloud.  jclouds is licensed under the Apache License,
+Version 2.0
  
 our current version is 1.4.2
 our next maintenance version is 1.4.2-SNAPSHOT
diff --git a/apis/atmos/src/main/java/org/jclouds/atmos/handlers/ParseAtmosErrorFromXmlContent.java b/apis/atmos/src/main/java/org/jclouds/atmos/handlers/ParseAtmosErrorFromXmlContent.java
index 07d854d..9c69e07 100644
--- a/apis/atmos/src/main/java/org/jclouds/atmos/handlers/ParseAtmosErrorFromXmlContent.java
+++ b/apis/atmos/src/main/java/org/jclouds/atmos/handlers/ParseAtmosErrorFromXmlContent.java
@@ -71,7 +71,7 @@
          AtmosError error = null;
          if (response.getPayload() != null) {
             try {
-               String content = Strings2.toStringAndClose(response.getPayload().getInput());
+               String content = Strings2.toString(response.getPayload());
                if (content != null && content.indexOf('<') >= 0) {
                   error = utils.parseAtmosErrorFromContent(command, response, Strings2.toInputStream(content));
                } else {
diff --git a/apis/atmos/src/main/java/org/jclouds/atmos/options/ListOptions.java b/apis/atmos/src/main/java/org/jclouds/atmos/options/ListOptions.java
index 7b2f6fc..6ec8a61 100644
--- a/apis/atmos/src/main/java/org/jclouds/atmos/options/ListOptions.java
+++ b/apis/atmos/src/main/java/org/jclouds/atmos/options/ListOptions.java
@@ -72,7 +72,7 @@
 
    public Integer getLimit() {
       String maxresults = getFirstHeaderOrNull("x-emc-limit");
-      return (maxresults != null) ? new Integer(maxresults) : null;
+      return (maxresults != null) ? Integer.valueOf(maxresults) : null;
    }
 
    public static class Builder {
diff --git a/apis/atmos/src/test/java/org/jclouds/atmos/AtmosClientLiveTest.java b/apis/atmos/src/test/java/org/jclouds/atmos/AtmosClientLiveTest.java
index 04e9675..d54c061 100644
--- a/apis/atmos/src/test/java/org/jclouds/atmos/AtmosClientLiveTest.java
+++ b/apis/atmos/src/test/java/org/jclouds/atmos/AtmosClientLiveTest.java
@@ -239,19 +239,19 @@
    private static void verifyHeadObject(AtmosClient connection, String path, String metadataValue)
             throws InterruptedException, ExecutionException, TimeoutException, IOException {
       AtmosObject getBlob = connection.headFile(path);
-      assertEquals(Strings2.toStringAndClose(getBlob.getPayload().getInput()), "");
+      assertEquals(Strings2.toString(getBlob.getPayload()), "");
       verifyMetadata(metadataValue, getBlob);
    }
 
    private static void verifyObject(AtmosClient connection, String path, String compare, String metadataValue)
             throws InterruptedException, ExecutionException, TimeoutException, IOException {
       AtmosObject getBlob = connection.readFile(path);
-      assertEquals(Strings2.toStringAndClose(getBlob.getPayload().getInput()), compare);
+      assertEquals(Strings2.toString(getBlob.getPayload()), compare);
       verifyMetadata(metadataValue, getBlob);
    }
 
    private static void verifyMetadata(String metadataValue, AtmosObject getBlob) {
-      assertEquals(getBlob.getContentMetadata().getContentLength(), new Long(16));
+      assertEquals(getBlob.getContentMetadata().getContentLength(), Long.valueOf(16));
       assert getBlob.getContentMetadata().getContentType().startsWith("text/plain");
       assertEquals(getBlob.getUserMetadata().getMetadata().get("Metadata"), metadataValue);
       SystemMetadata md = getBlob.getSystemMetadata();
diff --git a/apis/atmos/src/test/java/org/jclouds/atmos/internal/StubAtmosAsyncClient.java b/apis/atmos/src/test/java/org/jclouds/atmos/internal/StubAtmosAsyncClient.java
index 7e67622..c4bd2c0 100644
--- a/apis/atmos/src/test/java/org/jclouds/atmos/internal/StubAtmosAsyncClient.java
+++ b/apis/atmos/src/test/java/org/jclouds/atmos/internal/StubAtmosAsyncClient.java
@@ -43,7 +43,7 @@
 import org.jclouds.atmos.domain.UserMetadata;
 import org.jclouds.atmos.options.ListOptions;
 import org.jclouds.atmos.options.PutOptions;
-import org.jclouds.blobstore.TransientAsyncBlobStore;
+import org.jclouds.blobstore.LocalAsyncBlobStore;
 import org.jclouds.blobstore.domain.Blob;
 import org.jclouds.blobstore.domain.BlobMetadata;
 import org.jclouds.blobstore.functions.HttpGetOptionsListToGetOptions;
@@ -61,7 +61,7 @@
  */
 public class StubAtmosAsyncClient implements AtmosAsyncClient {
    private final HttpGetOptionsListToGetOptions httpGetOptionsConverter;
-   private final TransientAsyncBlobStore blobStore;
+   private final LocalAsyncBlobStore blobStore;
    private final AtmosObject.Factory objectProvider;
    private final ObjectToBlob object2Blob;
    private final BlobToObject blob2Object;
@@ -71,7 +71,7 @@
    private final ExecutorService service;
 
    @Inject
-   private StubAtmosAsyncClient(TransientAsyncBlobStore blobStore, AtmosObject.Factory objectProvider,
+   private StubAtmosAsyncClient(LocalAsyncBlobStore blobStore, AtmosObject.Factory objectProvider,
             HttpGetOptionsListToGetOptions httpGetOptionsConverter, ObjectToBlob object2Blob, BlobToObject blob2Object,
             BlobMetadataToObject blob2ObjectInfo, ListOptionsToBlobStoreListOptions container2ContainerListOptions,
             @Named(Constants.PROPERTY_USER_THREADS) ExecutorService service,
diff --git a/apis/cloudloadbalancers/src/main/java/org/jclouds/cloudloadbalancers/handlers/ParseCloudLoadBalancersErrorFromHttpResponse.java b/apis/cloudloadbalancers/src/main/java/org/jclouds/cloudloadbalancers/handlers/ParseCloudLoadBalancersErrorFromHttpResponse.java
index 52dfbd2..e494bb6 100644
--- a/apis/cloudloadbalancers/src/main/java/org/jclouds/cloudloadbalancers/handlers/ParseCloudLoadBalancersErrorFromHttpResponse.java
+++ b/apis/cloudloadbalancers/src/main/java/org/jclouds/cloudloadbalancers/handlers/ParseCloudLoadBalancersErrorFromHttpResponse.java
@@ -85,7 +85,7 @@
    String parseErrorFromContentOrNull(HttpCommand command, HttpResponse response) {
       if (response.getPayload() != null) {
          try {
-            return Strings2.toStringAndClose(response.getPayload().getInput());
+            return Strings2.toString(response.getPayload());
          } catch (IOException e) {
             logger.warn(e, "exception reading error from response", response);
          }
diff --git a/apis/cloudloadbalancers/src/test/java/org/jclouds/cloudloadbalancers/features/LoadBalancerClientLiveTest.java b/apis/cloudloadbalancers/src/test/java/org/jclouds/cloudloadbalancers/features/LoadBalancerClientLiveTest.java
index 2b67216..3cd80da 100644
--- a/apis/cloudloadbalancers/src/test/java/org/jclouds/cloudloadbalancers/features/LoadBalancerClientLiveTest.java
+++ b/apis/cloudloadbalancers/src/test/java/org/jclouds/cloudloadbalancers/features/LoadBalancerClientLiveTest.java
@@ -136,7 +136,7 @@
       assertEquals(lb.getRegion(), region);
       assertEquals(lb.getName(), name);
       assertEquals(lb.getProtocol(), "HTTP");
-      assertEquals(lb.getPort(), new Integer(80));
+      assertEquals(lb.getPort(), Integer.valueOf(80));
       assertEquals(Iterables.get(lb.getVirtualIPs(), 0).getType(), Type.PUBLIC);
    }
 
diff --git a/apis/cloudservers/src/main/java/org/jclouds/cloudservers/handlers/ParseCloudServersErrorFromHttpResponse.java b/apis/cloudservers/src/main/java/org/jclouds/cloudservers/handlers/ParseCloudServersErrorFromHttpResponse.java
index 9fdaaa2..6675d84 100644
--- a/apis/cloudservers/src/main/java/org/jclouds/cloudservers/handlers/ParseCloudServersErrorFromHttpResponse.java
+++ b/apis/cloudservers/src/main/java/org/jclouds/cloudservers/handlers/ParseCloudServersErrorFromHttpResponse.java
@@ -85,7 +85,7 @@
    String parseErrorFromContentOrNull(HttpCommand command, HttpResponse response) {
       if (response.getPayload() != null) {
          try {
-            return Strings2.toStringAndClose(response.getPayload().getInput());
+            return Strings2.toString(response.getPayload());
          } catch (IOException e) {
             logger.warn(e, "exception reading error from response", response);
          }
diff --git a/apis/cloudservers/src/test/java/org/jclouds/cloudservers/CloudServersClientLiveTest.java b/apis/cloudservers/src/test/java/org/jclouds/cloudservers/CloudServersClientLiveTest.java
index 453db3b..0b4457e 100644
--- a/apis/cloudservers/src/test/java/org/jclouds/cloudservers/CloudServersClientLiveTest.java
+++ b/apis/cloudservers/src/test/java/org/jclouds/cloudservers/CloudServersClientLiveTest.java
@@ -344,8 +344,8 @@
       assertNotNull(server.getHostId());
       assertEquals(server.getStatus(), ServerStatus.ACTIVE);
       assert server.getProgress() >= 0 : "newDetails.getProgress()" + server.getProgress();
-      assertEquals(new Integer(14362), server.getImageId());
-      assertEquals(new Integer(1), server.getFlavorId());
+      assertEquals(Integer.valueOf(14362), server.getImageId());
+      assertEquals(Integer.valueOf(1), server.getFlavorId());
       assertNotNull(server.getAddresses());
       // listAddresses tests..
       assertEquals(client.getAddresses(serverId), server.getAddresses());
@@ -383,7 +383,7 @@
       try {
          client.connect();
          Payload etcPasswd = client.get("/etc/jclouds.txt");
-         String etcPasswdContents = Strings2.toStringAndClose(etcPasswd.getInput());
+         String etcPasswdContents = Strings2.toString(etcPasswd);
          assertEquals("rackspace", etcPasswdContents.trim());
       } finally {
          if (client != null)
@@ -445,7 +445,7 @@
       blockUntilServerActive(serverId2);
       assertIpConfigured(server, adminPass2);
       assert server.getAddresses().getPublicAddresses().contains(ip) : server.getAddresses() + " doesn't contain " + ip;
-      assertEquals(server.getSharedIpGroupId(), new Integer(sharedIpGroupId));
+      assertEquals(server.getSharedIpGroupId(), Integer.valueOf(sharedIpGroupId));
    }
 
    private void assertIpConfigured(Server server, String password) {
@@ -518,7 +518,7 @@
    public void testCreateImage() throws Exception {
       Image image = client.createImageFromServer("hoofie", serverId);
       assertEquals("hoofie", image.getName());
-      assertEquals(new Integer(serverId), image.getServerId());
+      assertEquals(Integer.valueOf(serverId), image.getServerId());
       imageId = image.getId();
       blockUntilImageActive(imageId);
    }
@@ -528,7 +528,7 @@
       client.rebuildServer(serverId, new RebuildServerOptions().withImage(imageId));
       blockUntilServerActive(serverId);
       // issue Web Hosting #119580 imageId comes back incorrect after rebuild
-      assert !new Integer(imageId).equals(client.getServer(serverId).getImageId());
+      assert !Integer.valueOf(imageId).equals(client.getServer(serverId).getImageId());
    }
 
    @Test(timeOut = 10 * 60 * 1000, dependsOnMethods = "testRebuildServer")
@@ -549,7 +549,7 @@
       blockUntilServerVerifyResize(serverId);
       client.revertResizeServer(serverId);
       blockUntilServerActive(serverId);
-      assertEquals(new Integer(1), client.getServer(serverId).getFlavorId());
+      assertEquals(Integer.valueOf(1), client.getServer(serverId).getFlavorId());
    }
 
    @Test(timeOut = 10 * 60 * 1000, dependsOnMethods = "testRebootSoft")
@@ -558,7 +558,7 @@
       blockUntilServerVerifyResize(serverId2);
       client.confirmResizeServer(serverId2);
       blockUntilServerActive(serverId2);
-      assertEquals(new Integer(2), client.getServer(serverId2).getFlavorId());
+      assertEquals(Integer.valueOf(2), client.getServer(serverId2).getFlavorId());
    }
 
    @Test(timeOut = 10 * 60 * 1000, dependsOnMethods = { "testRebootSoft", "testRevertResize", "testConfirmResize" })
diff --git a/apis/cloudservers/src/test/java/org/jclouds/cloudservers/functions/ParseFlavorListFromJsonResponseTest.java b/apis/cloudservers/src/test/java/org/jclouds/cloudservers/functions/ParseFlavorListFromJsonResponseTest.java
index 85884d2..2f6b839 100644
--- a/apis/cloudservers/src/test/java/org/jclouds/cloudservers/functions/ParseFlavorListFromJsonResponseTest.java
+++ b/apis/cloudservers/src/test/java/org/jclouds/cloudservers/functions/ParseFlavorListFromJsonResponseTest.java
@@ -67,13 +67,13 @@
       List<Flavor> response = parser.apply(HttpResponse.builder().statusCode(200).message("ok").payload(is).build());
       assertEquals(response.get(0).getId(), 1);
       assertEquals(response.get(0).getName(), "256 MB Server");
-      assertEquals(response.get(0).getDisk(), new Integer(10));
-      assertEquals(response.get(0).getRam(), new Integer(256));
+      assertEquals(response.get(0).getDisk(), Integer.valueOf(10));
+      assertEquals(response.get(0).getRam(), Integer.valueOf(256));
 
       assertEquals(response.get(1).getId(), 2);
       assertEquals(response.get(1).getName(), "512 MB Server");
-      assertEquals(response.get(1).getDisk(), new Integer(20));
-      assertEquals(response.get(1).getRam(), new Integer(512));
+      assertEquals(response.get(1).getDisk(), Integer.valueOf(20));
+      assertEquals(response.get(1).getRam(), Integer.valueOf(512));
 
    }
 
diff --git a/apis/cloudservers/src/test/java/org/jclouds/cloudservers/functions/ParseImageFromJsonResponseTest.java b/apis/cloudservers/src/test/java/org/jclouds/cloudservers/functions/ParseImageFromJsonResponseTest.java
index 66598ad..f5d95ab 100644
--- a/apis/cloudservers/src/test/java/org/jclouds/cloudservers/functions/ParseImageFromJsonResponseTest.java
+++ b/apis/cloudservers/src/test/java/org/jclouds/cloudservers/functions/ParseImageFromJsonResponseTest.java
@@ -63,8 +63,8 @@
       assertEquals(response.getId(), 2);
       assertEquals(response.getName(), "CentOS 5.2");
       assertEquals(response.getCreated(), dateService.iso8601SecondsDateParse("2010-08-10T12:00:00Z"));
-      assertEquals(response.getProgress(), new Integer(80));
-      assertEquals(response.getServerId(), new Integer(12));
+      assertEquals(response.getProgress(), Integer.valueOf(80));
+      assertEquals(response.getServerId(), Integer.valueOf(12));
       assertEquals(response.getStatus(), ImageStatus.SAVING);
       assertEquals(response.getUpdated(), dateService.iso8601SecondsDateParse(("2010-10-10T12:00:00Z")));
 
diff --git a/apis/cloudservers/src/test/java/org/jclouds/cloudservers/functions/ParseImageListFromJsonResponseTest.java b/apis/cloudservers/src/test/java/org/jclouds/cloudservers/functions/ParseImageListFromJsonResponseTest.java
index 89f716f..4eb3c4a 100644
--- a/apis/cloudservers/src/test/java/org/jclouds/cloudservers/functions/ParseImageListFromJsonResponseTest.java
+++ b/apis/cloudservers/src/test/java/org/jclouds/cloudservers/functions/ParseImageListFromJsonResponseTest.java
@@ -91,8 +91,8 @@
       assertEquals(response.get(1).getName(), "My Server Backup");
       assertEquals(response.get(1).getCreated(), dateService.iso8601SecondsDateParse("2009-07-07T09:56:16-05:00"));
       ;
-      assertEquals(response.get(1).getProgress(), new Integer(80));
-      assertEquals(response.get(1).getServerId(), new Integer(12));
+      assertEquals(response.get(1).getProgress(), Integer.valueOf(80));
+      assertEquals(response.get(1).getServerId(), Integer.valueOf(12));
       assertEquals(response.get(1).getStatus(), ImageStatus.SAVING);
       assertEquals(response.get(1).getUpdated(), dateService.iso8601SecondsDateParse("2010-10-10T12:00:00Z"));
    }
diff --git a/apis/cloudservers/src/test/java/org/jclouds/cloudservers/functions/ParseServerFromJsonResponseTest.java b/apis/cloudservers/src/test/java/org/jclouds/cloudservers/functions/ParseServerFromJsonResponseTest.java
index fbdaf1b..f3983d7 100644
--- a/apis/cloudservers/src/test/java/org/jclouds/cloudservers/functions/ParseServerFromJsonResponseTest.java
+++ b/apis/cloudservers/src/test/java/org/jclouds/cloudservers/functions/ParseServerFromJsonResponseTest.java
@@ -52,11 +52,11 @@
 
       assertEquals(response.getId(), 1234);
       assertEquals(response.getName(), "sample-server");
-      assertEquals(response.getImageId(), new Integer(2));
-      assertEquals(response.getFlavorId(), new Integer(1));
+      assertEquals(response.getImageId(), Integer.valueOf(2));
+      assertEquals(response.getFlavorId(), Integer.valueOf(1));
       assertEquals(response.getHostId(), "e4d909c290d0fb1ca068ffaddf22cbd0");
       assertEquals(response.getStatus(), ServerStatus.BUILD);
-      assertEquals(response.getProgress(), new Integer(60));
+      assertEquals(response.getProgress(), Integer.valueOf(60));
       List<String> publicAddresses = Lists.newArrayList("67.23.10.132", "67.23.10.131");
       List<String> privateAddresses = Lists.newArrayList("10.176.42.16");
       Addresses addresses1 = new Addresses();
diff --git a/apis/cloudservers/src/test/java/org/jclouds/cloudservers/functions/ParseServerListFromJsonResponseTest.java b/apis/cloudservers/src/test/java/org/jclouds/cloudservers/functions/ParseServerListFromJsonResponseTest.java
index de4a989..8733cab 100644
--- a/apis/cloudservers/src/test/java/org/jclouds/cloudservers/functions/ParseServerListFromJsonResponseTest.java
+++ b/apis/cloudservers/src/test/java/org/jclouds/cloudservers/functions/ParseServerListFromJsonResponseTest.java
@@ -73,11 +73,11 @@
 
       assertEquals(response.get(0).getId(), 1234);
       assertEquals(response.get(0).getName(), "sample-server");
-      assertEquals(response.get(0).getImageId(), new Integer(2));
-      assertEquals(response.get(0).getFlavorId(), new Integer(1));
+      assertEquals(response.get(0).getImageId(), Integer.valueOf(2));
+      assertEquals(response.get(0).getFlavorId(), Integer.valueOf(1));
       assertEquals(response.get(0).getHostId(), "e4d909c290d0fb1ca068ffaddf22cbd0");
       assertEquals(response.get(0).getStatus(), ServerStatus.BUILD);
-      assertEquals(response.get(0).getProgress(), new Integer(60));
+      assertEquals(response.get(0).getProgress(), Integer.valueOf(60));
       List<String> publicAddresses = Lists.newArrayList("67.23.10.132", "67.23.10.131");
       List<String> privateAddresses = Lists.newArrayList("10.176.42.16");
       Addresses addresses1 = new Addresses();
@@ -87,8 +87,8 @@
       assertEquals(response.get(0).getMetadata(), ImmutableMap.of("Server Label", "Web Head 1", "Image Version", "2.1"));
       assertEquals(response.get(1).getId(), 5678);
       assertEquals(response.get(1).getName(), "sample-server2");
-      assertEquals(response.get(1).getImageId(), new Integer(2));
-      assertEquals(response.get(1).getFlavorId(), new Integer(1));
+      assertEquals(response.get(1).getImageId(), Integer.valueOf(2));
+      assertEquals(response.get(1).getFlavorId(), Integer.valueOf(1));
       assertEquals(response.get(1).getHostId(), "9e107d9d372bb6826bd81d3542a419d6");
       assertEquals(response.get(1).getStatus(), ServerStatus.ACTIVE);
       assertEquals(response.get(1).getProgress(), null);
diff --git a/apis/cloudsigma/src/main/java/org/jclouds/cloudsigma/functions/MapToDriveInfo.java b/apis/cloudsigma/src/main/java/org/jclouds/cloudsigma/functions/MapToDriveInfo.java
index 9f9c371..ee3d529 100644
--- a/apis/cloudsigma/src/main/java/org/jclouds/cloudsigma/functions/MapToDriveInfo.java
+++ b/apis/cloudsigma/src/main/java/org/jclouds/cloudsigma/functions/MapToDriveInfo.java
@@ -69,7 +69,7 @@
       if (from.containsKey("readers"))
          builder.readers(Splitter.on(' ').split(from.get("readers")));
       if (from.containsKey("size"))
-         builder.size(new Long(from.get("size")));
+         builder.size(Long.valueOf(from.get("size")));
       Map<String, String> metadata = Maps.newLinkedHashMap();
       for (Entry<String, String> entry : from.entrySet()) {
          if (entry.getKey().startsWith("user:"))
@@ -78,7 +78,7 @@
       if (from.containsKey("use"))
          builder.use(Splitter.on(' ').split(from.get("use")));
       if (from.containsKey("bits"))
-         builder.bits(new Integer(from.get("bits")));
+         builder.bits(Integer.valueOf(from.get("bits")));
       if (from.containsKey("url"))
          builder.url(URI.create(from.get("url")));
       builder.encryptionKey(from.get("encryption:key"));
@@ -88,9 +88,9 @@
       if (from.containsKey("drive_type"))
          builder.driveType(Splitter.on(',').split(from.get("drive_type")));
       if (from.containsKey("autoexpanding"))
-         builder.autoexpanding(new Boolean(from.get("autoexpanding")));
+         builder.autoexpanding(Boolean.valueOf(from.get("autoexpanding")));
       if (from.containsKey("free"))
-         builder.free(new Boolean(from.get("free")));
+         builder.free(Boolean.valueOf(from.get("free")));
       if (from.containsKey("type"))
          builder.type(DriveType.fromValue(from.get("type")));
       try {
@@ -104,13 +104,13 @@
    protected DriveMetrics buildMetrics(Map<String, String> from) {
       DriveMetrics.Builder metricsBuilder = new DriveMetrics.Builder();
       if (from.containsKey("read:bytes"))
-         metricsBuilder.readBytes(new Long(from.get("read:bytes")));
+         metricsBuilder.readBytes(Long.valueOf(from.get("read:bytes")));
       if (from.containsKey("read:requests"))
-         metricsBuilder.readRequests(new Long(from.get("read:requests")));
+         metricsBuilder.readRequests(Long.valueOf(from.get("read:requests")));
       if (from.containsKey("write:bytes"))
-         metricsBuilder.writeBytes(new Long(from.get("write:bytes")));
+         metricsBuilder.writeBytes(Long.valueOf(from.get("write:bytes")));
       if (from.containsKey("write:requests"))
-         metricsBuilder.writeRequests(new Long(from.get("write:requests")));
+         metricsBuilder.writeRequests(Long.valueOf(from.get("write:requests")));
       return metricsBuilder.build();
    }
 }
\ No newline at end of file
diff --git a/apis/cloudsigma/src/main/java/org/jclouds/cloudsigma/functions/MapToDriveMetrics.java b/apis/cloudsigma/src/main/java/org/jclouds/cloudsigma/functions/MapToDriveMetrics.java
index 8aff913..8ab6bdc 100644
--- a/apis/cloudsigma/src/main/java/org/jclouds/cloudsigma/functions/MapToDriveMetrics.java
+++ b/apis/cloudsigma/src/main/java/org/jclouds/cloudsigma/functions/MapToDriveMetrics.java
@@ -74,13 +74,13 @@
    protected DriveMetrics buildMetrics(String key, Map<String, String> from) {
       DriveMetrics.Builder builder = new DriveMetrics.Builder();
       if (from.containsKey(key + ":read:bytes"))
-         builder.readBytes(new Long(from.get(key + ":read:bytes")));
+         builder.readBytes(Long.valueOf(from.get(key + ":read:bytes")));
       if (from.containsKey(key + ":read:requests"))
-         builder.readRequests(new Long(from.get(key + ":read:requests")));
+         builder.readRequests(Long.valueOf(from.get(key + ":read:requests")));
       if (from.containsKey(key + ":write:bytes"))
-         builder.writeBytes(new Long(from.get(key + ":write:bytes")));
+         builder.writeBytes(Long.valueOf(from.get(key + ":write:bytes")));
       if (from.containsKey(key + ":write:requests"))
-         builder.writeRequests(new Long(from.get(key + ":write:requests")));
+         builder.writeRequests(Long.valueOf(from.get(key + ":write:requests")));
       return builder.build();
    }
 }
\ No newline at end of file
diff --git a/apis/cloudsigma/src/main/java/org/jclouds/cloudsigma/functions/MapToServerInfo.java b/apis/cloudsigma/src/main/java/org/jclouds/cloudsigma/functions/MapToServerInfo.java
index 3359518..859783a 100644
--- a/apis/cloudsigma/src/main/java/org/jclouds/cloudsigma/functions/MapToServerInfo.java
+++ b/apis/cloudsigma/src/main/java/org/jclouds/cloudsigma/functions/MapToServerInfo.java
@@ -68,12 +68,12 @@
       if (from.containsKey("status"))
          builder.status(ServerStatus.fromValue(from.get("status")));
       if (from.containsKey("smp") && !"auto".equals(from.get("smp")))
-         builder.smp(new Integer(from.get("smp")));
+         builder.smp(Integer.valueOf(from.get("smp")));
       builder.cpu(Integer.parseInt(from.get("cpu")));
       builder.mem(Integer.parseInt(from.get("mem")));
       builder.user(from.get("user"));
       if (from.containsKey("started"))
-         builder.started(new Date(new Long(from.get("started"))));
+         builder.started(new Date(Long.valueOf(from.get("started"))));
       builder.uuid(from.get("server"));
       builder.vnc(new VNC(from.get("vnc:ip"), from.get("vnc:password"), from.containsKey("vnc:tls")
             && Boolean.valueOf(from.get("vnc:tls"))));
diff --git a/apis/cloudsigma/src/main/java/org/jclouds/cloudsigma/functions/MapToServerMetrics.java b/apis/cloudsigma/src/main/java/org/jclouds/cloudsigma/functions/MapToServerMetrics.java
index c74a0de..b4375ca 100644
--- a/apis/cloudsigma/src/main/java/org/jclouds/cloudsigma/functions/MapToServerMetrics.java
+++ b/apis/cloudsigma/src/main/java/org/jclouds/cloudsigma/functions/MapToServerMetrics.java
@@ -44,13 +44,13 @@
    public ServerMetrics apply(Map<String, String> from) {
       ServerMetrics.Builder metricsBuilder = new ServerMetrics.Builder();
       if (from.containsKey("tx:packets"))
-         metricsBuilder.txPackets(new Long(from.get("tx:packets")));
+         metricsBuilder.txPackets(Long.valueOf(from.get("tx:packets")));
       if (from.containsKey("tx"))
-         metricsBuilder.tx(new Long(from.get("tx")));
+         metricsBuilder.tx(Long.valueOf(from.get("tx")));
       if (from.containsKey("rx:packets"))
-         metricsBuilder.rxPackets(new Long(from.get("rx:packets")));
+         metricsBuilder.rxPackets(Long.valueOf(from.get("rx:packets")));
       if (from.containsKey("rx"))
-         metricsBuilder.rx(new Long(from.get("rx")));
+         metricsBuilder.rx(Long.valueOf(from.get("rx")));
       metricsBuilder.driveMetrics(mapToDriveMetrics.apply(from));
 
       ServerMetrics metrics = metricsBuilder.build();
diff --git a/apis/cloudsigma/src/main/java/org/jclouds/cloudsigma/handlers/CloudSigmaErrorHandler.java b/apis/cloudsigma/src/main/java/org/jclouds/cloudsigma/handlers/CloudSigmaErrorHandler.java
index 7c78409..8c7f999 100644
--- a/apis/cloudsigma/src/main/java/org/jclouds/cloudsigma/handlers/CloudSigmaErrorHandler.java
+++ b/apis/cloudsigma/src/main/java/org/jclouds/cloudsigma/handlers/CloudSigmaErrorHandler.java
@@ -94,7 +94,7 @@
       if (response.getPayload() == null)
          return null;
       try {
-         return Strings2.toStringAndClose(response.getPayload().getInput());
+         return Strings2.toString(response.getPayload());
       } catch (IOException e) {
          throw new RuntimeException(e);
       } finally {
diff --git a/apis/cloudstack/src/main/java/org/jclouds/cloudstack/domain/Account.java b/apis/cloudstack/src/main/java/org/jclouds/cloudstack/domain/Account.java
index e967115..c592cdf 100644
--- a/apis/cloudstack/src/main/java/org/jclouds/cloudstack/domain/Account.java
+++ b/apis/cloudstack/src/main/java/org/jclouds/cloudstack/domain/Account.java
@@ -103,7 +103,7 @@
       }
 
       public static Type fromValue(String type) {
-         Integer code = new Integer(checkNotNull(type, "type"));
+         Integer code = Integer.valueOf(checkNotNull(type, "type"));
          return INDEX.containsKey(code) ? INDEX.get(code) : UNRECOGNIZED;
       }
 
@@ -473,7 +473,7 @@
    }
 
    private static Long toLongNullIfUnlimited(String in) {
-      return in == null || "Unlimited".equals(in) ? null : new Long(in);
+      return in == null || "Unlimited".equals(in) ? null : Long.valueOf(in);
    }
 
    protected Account(String id, @Nullable Account.Type type, @Nullable String networkDomain, @Nullable String domain,
diff --git a/apis/cloudstack/src/main/java/org/jclouds/cloudstack/domain/Capacity.java b/apis/cloudstack/src/main/java/org/jclouds/cloudstack/domain/Capacity.java
index 712f63e..e975e01 100644
--- a/apis/cloudstack/src/main/java/org/jclouds/cloudstack/domain/Capacity.java
+++ b/apis/cloudstack/src/main/java/org/jclouds/cloudstack/domain/Capacity.java
@@ -75,7 +75,7 @@
       }
 
       public static Type fromValue(String type) {
-         Integer code = new Integer(checkNotNull(type, "type"));
+         Integer code = Integer.valueOf(checkNotNull(type, "type"));
          return INDEX.containsKey(code) ? INDEX.get(code) : UNRECOGNIZED;
       }
    }
diff --git a/apis/cloudstack/src/main/java/org/jclouds/cloudstack/domain/ResourceLimit.java b/apis/cloudstack/src/main/java/org/jclouds/cloudstack/domain/ResourceLimit.java
index 6066556..2c6fe0e 100644
--- a/apis/cloudstack/src/main/java/org/jclouds/cloudstack/domain/ResourceLimit.java
+++ b/apis/cloudstack/src/main/java/org/jclouds/cloudstack/domain/ResourceLimit.java
@@ -91,7 +91,7 @@
       }
 
       public static ResourceType fromValue(String resourceType) {
-         Integer code = new Integer(checkNotNull(resourceType, "resourcetype"));
+         Integer code = Integer.valueOf(checkNotNull(resourceType, "resourcetype"));
          return INDEX.containsKey(code) ? INDEX.get(code) : UNRECOGNIZED;
       }
    }
diff --git a/apis/cloudstack/src/main/java/org/jclouds/cloudstack/domain/UsageRecord.java b/apis/cloudstack/src/main/java/org/jclouds/cloudstack/domain/UsageRecord.java
index 8b6f192..6c07a6b 100644
--- a/apis/cloudstack/src/main/java/org/jclouds/cloudstack/domain/UsageRecord.java
+++ b/apis/cloudstack/src/main/java/org/jclouds/cloudstack/domain/UsageRecord.java
@@ -80,7 +80,7 @@
       }
 
       public static UsageType fromValue(String usageType) {
-         Integer code = new Integer(checkNotNull(usageType, "usageType"));
+         Integer code = Integer.valueOf(checkNotNull(usageType, "usageType"));
          return INDEX.containsKey(code) ? INDEX.get(code) : UNRECOGNIZED;
       }
 
diff --git a/apis/cloudstack/src/main/java/org/jclouds/cloudstack/domain/VirtualMachine.java b/apis/cloudstack/src/main/java/org/jclouds/cloudstack/domain/VirtualMachine.java
index 675114c..5e5fee9 100644
--- a/apis/cloudstack/src/main/java/org/jclouds/cloudstack/domain/VirtualMachine.java
+++ b/apis/cloudstack/src/main/java/org/jclouds/cloudstack/domain/VirtualMachine.java
@@ -588,7 +588,7 @@
                             @Nullable VirtualMachine.State state, @Nullable String templateDisplayText, @Nullable String templateId,
                             @Nullable String templateName, @Nullable String zoneId, @Nullable String zoneName, @Nullable Set<NIC> nics,
                             @Nullable String hypervisor, @Nullable Set<SecurityGroup> securityGroups) {
-      Preconditions.checkArgument(Strings.isNullOrEmpty(cpuUsed) || cpuUsed.matches("^[0-9\\.]+%$"), "cpuUsed value should be a decimal number followed by %");
+      Preconditions.checkArgument(Strings.isNullOrEmpty(cpuUsed) || cpuUsed.matches("^[0-9\\.\\-]+%$"), "cpuUsed value should be a decimal number followed by %");
       this.id = checkNotNull(id, "id");
       this.account = account;
       this.cpuCount = cpuCount;
diff --git a/apis/cloudstack/src/main/java/org/jclouds/cloudstack/domain/Volume.java b/apis/cloudstack/src/main/java/org/jclouds/cloudstack/domain/Volume.java
index e7e73ba..e96a10f 100644
--- a/apis/cloudstack/src/main/java/org/jclouds/cloudstack/domain/Volume.java
+++ b/apis/cloudstack/src/main/java/org/jclouds/cloudstack/domain/Volume.java
@@ -108,7 +108,7 @@
       }
 
       public static Type fromValue(String resourceType) {
-         Integer code = new Integer(checkNotNull(resourceType, "resourcetype"));
+         Integer code = Integer.valueOf(checkNotNull(resourceType, "resourcetype"));
          return INDEX.containsKey(code) ? INDEX.get(code) : UNRECOGNIZED;
       }
 
diff --git a/apis/cloudstack/src/main/java/org/jclouds/cloudstack/handlers/CloudStackErrorHandler.java b/apis/cloudstack/src/main/java/org/jclouds/cloudstack/handlers/CloudStackErrorHandler.java
index 7c051ec..b2c7e98 100644
--- a/apis/cloudstack/src/main/java/org/jclouds/cloudstack/handlers/CloudStackErrorHandler.java
+++ b/apis/cloudstack/src/main/java/org/jclouds/cloudstack/handlers/CloudStackErrorHandler.java
@@ -92,7 +92,7 @@
       if (response.getPayload() == null)
          return null;
       try {
-         return Strings2.toStringAndClose(response.getPayload().getInput());
+         return Strings2.toString(response.getPayload());
       } catch (IOException e) {
          throw new RuntimeException(e);
       } finally {
diff --git a/apis/deltacloud/src/main/java/org/jclouds/deltacloud/handlers/DeltacloudErrorHandler.java b/apis/deltacloud/src/main/java/org/jclouds/deltacloud/handlers/DeltacloudErrorHandler.java
index 011bc0f..73b5b7d 100644
--- a/apis/deltacloud/src/main/java/org/jclouds/deltacloud/handlers/DeltacloudErrorHandler.java
+++ b/apis/deltacloud/src/main/java/org/jclouds/deltacloud/handlers/DeltacloudErrorHandler.java
@@ -87,7 +87,7 @@
       if (response.getPayload() == null)
          return null;
       try {
-         return Strings2.toStringAndClose(response.getPayload().getInput());
+         return Strings2.toString(response.getPayload());
       } catch (IOException e) {
          throw new RuntimeException(e);
       } finally {
diff --git a/apis/deltacloud/src/main/java/org/jclouds/deltacloud/xml/HardwarePropertyHandler.java b/apis/deltacloud/src/main/java/org/jclouds/deltacloud/xml/HardwarePropertyHandler.java
index c7c392e..dba96e3 100644
--- a/apis/deltacloud/src/main/java/org/jclouds/deltacloud/xml/HardwarePropertyHandler.java
+++ b/apis/deltacloud/src/main/java/org/jclouds/deltacloud/xml/HardwarePropertyHandler.java
@@ -87,7 +87,7 @@
       if (DOUBLE.matcher(in).matches())
          return new Double(in);
       else if (LONG.matcher(in).matches())
-         return new Long(in);
+         return Long.valueOf(in);
       return null;
    }
 
diff --git a/apis/deltacloud/src/test/java/org/jclouds/deltacloud/xml/HardwareProfileHandlerTest.java b/apis/deltacloud/src/test/java/org/jclouds/deltacloud/xml/HardwareProfileHandlerTest.java
index ae945b5..8ff48a4 100644
--- a/apis/deltacloud/src/test/java/org/jclouds/deltacloud/xml/HardwareProfileHandlerTest.java
+++ b/apis/deltacloud/src/test/java/org/jclouds/deltacloud/xml/HardwareProfileHandlerTest.java
@@ -65,13 +65,13 @@
       HardwareProfile expects = new HardwareProfile(
             URI.create("http://localhost:3001/api/hardware_profiles/m1-xlarge"), "m1-xlarge", "m1-xlarge",
             ImmutableSet.<HardwareProperty> of(
-                  new FixedHardwareProperty("cpu", "count", new Long(4)),
-                  new RangeHardwareProperty("memory", "MB", new Long(12288), new HardwareParameter(URI
+                  new FixedHardwareProperty("cpu", "count", Long.valueOf(4)),
+                  new RangeHardwareProperty("memory", "MB", Long.valueOf(12288), new HardwareParameter(URI
                         .create("http://localhost:3001/api/instances"), "post", "hwp_memory", "create"),
-                        new Long(12288), new Long(32768)),
-                  new EnumHardwareProperty("storage", "GB", new Long(1024), new HardwareParameter(URI
+                        Long.valueOf(12288), Long.valueOf(32768)),
+                  new EnumHardwareProperty("storage", "GB", Long.valueOf(1024), new HardwareParameter(URI
                         .create("http://localhost:3001/api/instances"), "post", "hwp_storage", "create"),
-                        ImmutableSet.<Object> of(new Long(1024), new Long(2048), new Long(4096))),
+                        ImmutableSet.<Object> of(Long.valueOf(1024), Long.valueOf(2048), Long.valueOf(4096))),
                   new FixedHardwareProperty("architecture", "label", "x86_64"))
       );
       assertEquals(parseHardwareProfile(), expects);
diff --git a/apis/deltacloud/src/test/java/org/jclouds/deltacloud/xml/HardwareProfilesHandlerTest.java b/apis/deltacloud/src/test/java/org/jclouds/deltacloud/xml/HardwareProfilesHandlerTest.java
index 25eab51..a3cd0b7 100644
--- a/apis/deltacloud/src/test/java/org/jclouds/deltacloud/xml/HardwareProfilesHandlerTest.java
+++ b/apis/deltacloud/src/test/java/org/jclouds/deltacloud/xml/HardwareProfilesHandlerTest.java
@@ -50,27 +50,27 @@
       Set<? extends HardwareProfile> expects = ImmutableSet.of(
             new HardwareProfile(URI.create("http://localhost:3001/api/hardware_profiles/m1-small"), "m1-small",
                   "m1-small", ImmutableSet.<HardwareProperty> of(
-                        new FixedHardwareProperty("cpu", "count", new Long(1)), new FixedHardwareProperty("memory",
-                              "MB", new Double(1740.8)), new FixedHardwareProperty("storage", "GB", new Long(160)),
+                        new FixedHardwareProperty("cpu", "count", Long.valueOf(1)), new FixedHardwareProperty("memory",
+                              "MB", new Double(1740.8)), new FixedHardwareProperty("storage", "GB", Long.valueOf(160)),
                         new FixedHardwareProperty("architecture", "label", "i386"))),
             new HardwareProfile(URI.create("http://localhost:3001/api/hardware_profiles/m1-large"), "m1-large",
                   "m1-large", ImmutableSet.<HardwareProperty> of(
-                        new FixedHardwareProperty("cpu", "count", new Long(2)),
-                        new RangeHardwareProperty("memory", "MB", new Long(10240), new HardwareParameter(URI
+                        new FixedHardwareProperty("cpu", "count", Long.valueOf(2)),
+                        new RangeHardwareProperty("memory", "MB", Long.valueOf(10240), new HardwareParameter(URI
                               .create("http://localhost:3001/api/instances"), "post", "hwp_memory", "create"),
-                              new Double(7680.0), new Long(15360)), new EnumHardwareProperty("storage", "GB", new Long(
+                              new Double(7680.0), Long.valueOf(15360)), new EnumHardwareProperty("storage", "GB", Long.valueOf(
                               850), new HardwareParameter(URI.create("http://localhost:3001/api/instances"), "post",
-                              "hwp_storage", "create"), ImmutableSet.<Object> of(new Long(850), new Long(1024))),
+                              "hwp_storage", "create"), ImmutableSet.<Object> of(Long.valueOf(850), Long.valueOf(1024))),
                         new FixedHardwareProperty("architecture", "label", "x86_64"))),
             new HardwareProfile(URI.create("http://localhost:3001/api/hardware_profiles/m1-xlarge"), "m1-xlarge",
                   "m1-xlarge", ImmutableSet.<HardwareProperty> of(
-                        new FixedHardwareProperty("cpu", "count", new Long(4)),
-                        new RangeHardwareProperty("memory", "MB", new Long(12288), new HardwareParameter(URI
+                        new FixedHardwareProperty("cpu", "count", Long.valueOf(4)),
+                        new RangeHardwareProperty("memory", "MB", Long.valueOf(12288), new HardwareParameter(URI
                               .create("http://localhost:3001/api/instances"), "post", "hwp_memory", "create"),
-                              new Long(12288), new Long(32768)),
-                        new EnumHardwareProperty("storage", "GB", new Long(1024), new HardwareParameter(URI
+                              Long.valueOf(12288), Long.valueOf(32768)),
+                        new EnumHardwareProperty("storage", "GB", Long.valueOf(1024), new HardwareParameter(URI
                               .create("http://localhost:3001/api/instances"), "post", "hwp_storage", "create"),
-                              ImmutableSet.<Object> of(new Long(1024), new Long(2048), new Long(4096))),
+                              ImmutableSet.<Object> of(Long.valueOf(1024), Long.valueOf(2048), Long.valueOf(4096))),
                         new FixedHardwareProperty("architecture", "label", "x86_64"))),
             new HardwareProfile(URI.create("http://localhost:3001/api/hardware_profiles/opaque"), "opaque", "opaque",
                   ImmutableSet.<HardwareProperty> of()));
diff --git a/apis/elasticstack/src/main/java/org/jclouds/elasticstack/functions/MapToDriveInfo.java b/apis/elasticstack/src/main/java/org/jclouds/elasticstack/functions/MapToDriveInfo.java
index effbd07..c72f9ba 100644
--- a/apis/elasticstack/src/main/java/org/jclouds/elasticstack/functions/MapToDriveInfo.java
+++ b/apis/elasticstack/src/main/java/org/jclouds/elasticstack/functions/MapToDriveInfo.java
@@ -65,7 +65,7 @@
       if (from.containsKey("readers"))
          builder.readers(Splitter.on(' ').split(from.get("readers")));
       if (from.containsKey("size"))
-         builder.size(new Long(from.get("size")));
+         builder.size(Long.valueOf(from.get("size")));
       Map<String, String> metadata = Maps.newLinkedHashMap();
       for (Entry<String, String> entry : from.entrySet()) {
          if (entry.getKey().startsWith("user:"))
@@ -83,13 +83,13 @@
    protected DriveMetrics buildMetrics(Map<String, String> from) {
       DriveMetrics.Builder metricsBuilder = new DriveMetrics.Builder();
       if (from.containsKey("read:bytes"))
-         metricsBuilder.readBytes(new Long(from.get("read:bytes")));
+         metricsBuilder.readBytes(Long.valueOf(from.get("read:bytes")));
       if (from.containsKey("read:requests"))
-         metricsBuilder.readRequests(new Long(from.get("read:requests")));
+         metricsBuilder.readRequests(Long.valueOf(from.get("read:requests")));
       if (from.containsKey("write:bytes"))
-         metricsBuilder.writeBytes(new Long(from.get("write:bytes")));
+         metricsBuilder.writeBytes(Long.valueOf(from.get("write:bytes")));
       if (from.containsKey("write:requests"))
-         metricsBuilder.writeRequests(new Long(from.get("write:requests")));
+         metricsBuilder.writeRequests(Long.valueOf(from.get("write:requests")));
       return metricsBuilder.build();
    }
 }
\ No newline at end of file
diff --git a/apis/elasticstack/src/main/java/org/jclouds/elasticstack/functions/MapToDriveMetrics.java b/apis/elasticstack/src/main/java/org/jclouds/elasticstack/functions/MapToDriveMetrics.java
index ba30714..6de7a9e 100644
--- a/apis/elasticstack/src/main/java/org/jclouds/elasticstack/functions/MapToDriveMetrics.java
+++ b/apis/elasticstack/src/main/java/org/jclouds/elasticstack/functions/MapToDriveMetrics.java
@@ -74,13 +74,13 @@
    protected DriveMetrics buildMetrics(String key, Map<String, String> from) {
       DriveMetrics.Builder builder = new DriveMetrics.Builder();
       if (from.containsKey(key + ":read:bytes"))
-         builder.readBytes(new Long(from.get(key + ":read:bytes")));
+         builder.readBytes(Long.valueOf(from.get(key + ":read:bytes")));
       if (from.containsKey(key + ":read:requests"))
-         builder.readRequests(new Long(from.get(key + ":read:requests")));
+         builder.readRequests(Long.valueOf(from.get(key + ":read:requests")));
       if (from.containsKey(key + ":write:bytes"))
-         builder.writeBytes(new Long(from.get(key + ":write:bytes")));
+         builder.writeBytes(Long.valueOf(from.get(key + ":write:bytes")));
       if (from.containsKey(key + ":write:requests"))
-         builder.writeRequests(new Long(from.get(key + ":write:requests")));
+         builder.writeRequests(Long.valueOf(from.get(key + ":write:requests")));
       return builder.build();
    }
 }
\ No newline at end of file
diff --git a/apis/elasticstack/src/main/java/org/jclouds/elasticstack/functions/MapToServerInfo.java b/apis/elasticstack/src/main/java/org/jclouds/elasticstack/functions/MapToServerInfo.java
index 98b6f98..e5307ab 100644
--- a/apis/elasticstack/src/main/java/org/jclouds/elasticstack/functions/MapToServerInfo.java
+++ b/apis/elasticstack/src/main/java/org/jclouds/elasticstack/functions/MapToServerInfo.java
@@ -68,16 +68,16 @@
 
 
       if (from.containsKey("smp:cores")) {
-            builder.smp(new Integer(from.get("smp:cores")));
+            builder.smp(Integer.valueOf(from.get("smp:cores")));
       } else if (from.containsKey("smp") && !"auto".equals(from.get("smp"))) {
-            builder.smp(new Integer(from.get("smp")));
+            builder.smp(Integer.valueOf(from.get("smp")));
       }
 
       builder.cpu(Integer.parseInt(from.get("cpu")));
       builder.mem(Integer.parseInt(from.get("mem")));
       builder.user(from.get("user"));
       if (from.containsKey("started"))
-         builder.started(new Date(new Long(from.get("started"))));
+         builder.started(new Date(Long.valueOf(from.get("started"))));
       builder.uuid(from.get("server"));
       if (from.containsKey("boot"))
          builder.bootDeviceIds(Splitter.on(' ').split(from.get("boot")));
diff --git a/apis/elasticstack/src/main/java/org/jclouds/elasticstack/functions/MapToServerMetrics.java b/apis/elasticstack/src/main/java/org/jclouds/elasticstack/functions/MapToServerMetrics.java
index a8b38b5..2c2ff6f 100644
--- a/apis/elasticstack/src/main/java/org/jclouds/elasticstack/functions/MapToServerMetrics.java
+++ b/apis/elasticstack/src/main/java/org/jclouds/elasticstack/functions/MapToServerMetrics.java
@@ -44,13 +44,13 @@
    public ServerMetrics apply(Map<String, String> from) {
       ServerMetrics.Builder metricsBuilder = new ServerMetrics.Builder();
       if (from.containsKey("tx:packets"))
-         metricsBuilder.txPackets(new Long(from.get("tx:packets")));
+         metricsBuilder.txPackets(Long.valueOf(from.get("tx:packets")));
       if (from.containsKey("tx"))
-         metricsBuilder.tx(new Long(from.get("tx")));
+         metricsBuilder.tx(Long.valueOf(from.get("tx")));
       if (from.containsKey("rx:packets"))
-         metricsBuilder.rxPackets(new Long(from.get("rx:packets")));
+         metricsBuilder.rxPackets(Long.valueOf(from.get("rx:packets")));
       if (from.containsKey("rx"))
-         metricsBuilder.rx(new Long(from.get("rx")));
+         metricsBuilder.rx(Long.valueOf(from.get("rx")));
       metricsBuilder.driveMetrics(mapToDriveMetrics.apply(from));
 
       ServerMetrics metrics = metricsBuilder.build();
diff --git a/apis/elasticstack/src/main/java/org/jclouds/elasticstack/handlers/ElasticStackErrorHandler.java b/apis/elasticstack/src/main/java/org/jclouds/elasticstack/handlers/ElasticStackErrorHandler.java
index b55bb32..4ebc647 100644
--- a/apis/elasticstack/src/main/java/org/jclouds/elasticstack/handlers/ElasticStackErrorHandler.java
+++ b/apis/elasticstack/src/main/java/org/jclouds/elasticstack/handlers/ElasticStackErrorHandler.java
@@ -92,7 +92,7 @@
       if (response.getPayload() == null)
          return null;
       try {
-         return Strings2.toStringAndClose(response.getPayload().getInput());
+         return Strings2.toString(response.getPayload());
       } catch (IOException e) {
          throw new RuntimeException(e);
       } finally {
diff --git a/apis/elasticstack/src/test/java/org/jclouds/elasticstack/ElasticStackClientLiveTest.java b/apis/elasticstack/src/test/java/org/jclouds/elasticstack/ElasticStackClientLiveTest.java
index 1eea179..badcb39 100644
--- a/apis/elasticstack/src/test/java/org/jclouds/elasticstack/ElasticStackClientLiveTest.java
+++ b/apis/elasticstack/src/test/java/org/jclouds/elasticstack/ElasticStackClientLiveTest.java
@@ -326,7 +326,7 @@
    public void testWeCanReadAndWriteToDrive() throws IOException {
       drive2 = client.createDrive(new CreateDriveRequest.Builder().name(prefix + "2").size(1 * 1024 * 1024l).build());
       client.writeDrive(drive2.getUuid(), Payloads.newStringPayload("foo"));
-      assertEquals(Strings2.toStringAndClose(client.readDrive(drive2.getUuid(), 0, 3).getInput()), "foo");
+      assertEquals(Strings2.toString(client.readDrive(drive2.getUuid(), 0, 3)), "foo");
    }
 
    @Test(dependsOnMethods = "testWeCanReadAndWriteToDrive")
@@ -341,7 +341,7 @@
          assert driveNotClaimed.apply(drive2) : client.getDriveInfo(drive2.getUuid());
          System.err.println("after image; drive 2" + client.getDriveInfo(drive2.getUuid()));
          System.err.println("after image; drive 3" + client.getDriveInfo(drive3.getUuid()));
-         assertEquals(Strings2.toStringAndClose(client.readDrive(drive3.getUuid(), 0, 3).getInput()), "foo");
+         assertEquals(Strings2.toString(client.readDrive(drive3.getUuid(), 0, 3)), "foo");
       } finally {
          client.destroyDrive(drive2.getUuid());
          client.destroyDrive(drive3.getUuid());
diff --git a/apis/filesystem/src/main/java/org/jclouds/filesystem/FilesystemBlobStore.java b/apis/filesystem/src/main/java/org/jclouds/filesystem/FilesystemBlobStore.java
deleted file mode 100644
index e21c3c0..0000000
--- a/apis/filesystem/src/main/java/org/jclouds/filesystem/FilesystemBlobStore.java
+++ /dev/null
@@ -1,31 +0,0 @@
-/**
- * Licensed to jclouds, Inc. (jclouds) under one or more
- * contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  jclouds 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.filesystem;
-
-import java.util.concurrent.TimeUnit;
-
-import org.jclouds.blobstore.BlobStore;
-import org.jclouds.concurrent.Timeout;
-
-/**
- *
- * @author Alfredo "Rainbowbreeze" Morresi
- */
-@Timeout(duration = 2, timeUnit = TimeUnit.MINUTES) public interface FilesystemBlobStore  extends BlobStore {
-}
diff --git a/apis/filesystem/src/main/java/org/jclouds/filesystem/config/FilesystemBlobStoreContextModule.java b/apis/filesystem/src/main/java/org/jclouds/filesystem/config/FilesystemBlobStoreContextModule.java
index 4560bd5..1eb4079 100644
--- a/apis/filesystem/src/main/java/org/jclouds/filesystem/config/FilesystemBlobStoreContextModule.java
+++ b/apis/filesystem/src/main/java/org/jclouds/filesystem/config/FilesystemBlobStoreContextModule.java
@@ -21,18 +21,18 @@
 import org.jclouds.blobstore.AsyncBlobStore;
 import org.jclouds.blobstore.BlobRequestSigner;
 import org.jclouds.blobstore.BlobStore;
+import org.jclouds.blobstore.LocalAsyncBlobStore;
+import org.jclouds.blobstore.LocalStorageStrategy;
 import org.jclouds.blobstore.TransientBlobRequestSigner;
 import org.jclouds.blobstore.attr.ConsistencyModel;
 import org.jclouds.blobstore.config.BlobStoreMapModule;
 import org.jclouds.blobstore.config.BlobStoreObjectModule;
+import org.jclouds.blobstore.config.LocalBlobStore;
 import org.jclouds.blobstore.util.BlobUtils;
-import org.jclouds.filesystem.FilesystemAsyncBlobStore;
-import org.jclouds.filesystem.FilesystemBlobStore;
 import org.jclouds.filesystem.predicates.validators.FilesystemBlobKeyValidator;
 import org.jclouds.filesystem.predicates.validators.FilesystemContainerNameValidator;
 import org.jclouds.filesystem.predicates.validators.internal.FilesystemBlobKeyValidatorImpl;
 import org.jclouds.filesystem.predicates.validators.internal.FilesystemContainerNameValidatorImpl;
-import org.jclouds.filesystem.strategy.FilesystemStorageStrategy;
 import org.jclouds.filesystem.strategy.internal.FilesystemStorageStrategyImpl;
 import org.jclouds.filesystem.util.internal.FileSystemBlobUtilsImpl;
 import org.jclouds.rest.config.BinderUtils;
@@ -48,15 +48,15 @@
 
    @Override
    protected void configure() {
-      bind(AsyncBlobStore.class).to(FilesystemAsyncBlobStore.class).asEagerSingleton();
+      bind(AsyncBlobStore.class).to(LocalAsyncBlobStore.class).asEagerSingleton();
       // forward all requests from TransientBlobStore to TransientAsyncBlobStore.  needs above binding as cannot proxy a class
-      BinderUtils.bindClient(binder(), FilesystemBlobStore.class, AsyncBlobStore.class, ImmutableMap.<Class<?>, Class<?>>of());
-      bind(BlobStore.class).to(FilesystemBlobStore.class);
+      BinderUtils.bindClient(binder(), LocalBlobStore.class, AsyncBlobStore.class, ImmutableMap.<Class<?>, Class<?>>of());
+      bind(BlobStore.class).to(LocalBlobStore.class);
 
       install(new BlobStoreObjectModule());
       install(new BlobStoreMapModule());
       bind(ConsistencyModel.class).toInstance(ConsistencyModel.STRICT);
-      bind(FilesystemStorageStrategy.class).to(FilesystemStorageStrategyImpl.class);
+      bind(LocalStorageStrategy.class).to(FilesystemStorageStrategyImpl.class);
       bind(BlobUtils.class).to(FileSystemBlobUtilsImpl.class);
       bind(FilesystemBlobKeyValidator.class).to(FilesystemBlobKeyValidatorImpl.class);
       bind(FilesystemContainerNameValidator.class).to(FilesystemContainerNameValidatorImpl.class);
diff --git a/apis/filesystem/src/main/java/org/jclouds/filesystem/strategy/FilesystemStorageStrategy.java b/apis/filesystem/src/main/java/org/jclouds/filesystem/strategy/FilesystemStorageStrategy.java
deleted file mode 100644
index fc648f1..0000000
--- a/apis/filesystem/src/main/java/org/jclouds/filesystem/strategy/FilesystemStorageStrategy.java
+++ /dev/null
@@ -1,179 +0,0 @@
-/**
- * Licensed to jclouds, Inc. (jclouds) under one or more
- * contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  jclouds 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.filesystem.strategy;
-
-import java.io.File;
-import java.io.IOException;
-
-import org.jclouds.blobstore.domain.Blob;
-import org.jclouds.blobstore.options.ListContainerOptions;
-import org.jclouds.io.Payload;
-
-/**
- * Strategy for filesystem operations related to container and blob
- *
- * @author Alfredo "Rainbowbreeze" Morresi
- */
-public interface FilesystemStorageStrategy {
-
-    /**
-     * Creates a new container
-     *
-     * @param container
-     * @return
-     */
-    boolean createContainer(String container);
-
-    /**
-     * Deletes a container and all its content
-     * @param container
-     */
-    void deleteContainer(String container);
-
-    /**
-     * Checks if a container exists
-     * @param container
-     * @return
-     */
-    boolean containerExists(String container);
-
-    /**
-     * Empty the container of its content (files and subdirectories), but doesn't
-     * delete the container itself
-     * @param container
-     */
-    void clearContainer(final String container);
-
-    /**
-    * Like {@link #clearContainer(String)} except you can use options to do things like recursive
-    * deletes, or clear at a different path than root.
-    *
-    * @param container
-    *           what to clear
-    * @param options
-    *           recursion and path to clear
-    */
-    void clearContainer(String container, ListContainerOptions options);
-
-    /**
-     * Return an iterator that reports all the containers under base path
-     * @return
-     */
-    Iterable<String> getAllContainerNames();
-
-    /**
-    * Determines if a directory exists
-    *
-    * @param container
-    *           container where the directory resides
-    * @param directory
-    *           full path to the directory
-    */
-    boolean directoryExists(String container, String directory);
-
-    /**
-    * Creates a folder or a directory marker depending on the service
-    *
-    * @param container
-    *           container to create the directory in
-    * @param directory
-    *           full path to the directory
-    */
-    void createDirectory(String container, String directory);
-
-    /**
-    * Deletes a folder or a directory marker depending on the service
-    *
-    * @param container
-    *           container to delete the directory from
-    * @param directory
-    *           full path to the directory to delete
-    */
-    void deleteDirectory(String container, String directory);
-
-    
-    /**
-     * Creates a new blob
-     * @param name
-     * @return
-     */
-    Blob newBlob(String name);
-
-    /**
-     *
-     * @param container
-     * @param key
-     * @return
-     */
-    boolean blobExists(String container, String key);
-
-   /**
-    * Load the blob with the given key belonging to the container with the given
-    * name. There must exist a resource on the file system whose complete name
-    * is given concatenating the container name and the key
-    *
-    * @param container
-    *           it's the name of the container the blob belongs to
-    * @param key
-    *           it's the key of the blob
-    *
-    * @return the blob belonging to the given container with the given key
-    */
-    Blob getBlob(final String containerName, final String blobName);
-
-    /**
-     * Returns all the blobs key inside a container
-     * @param container
-     * @return
-     * @throws IOException
-     */
-    Iterable<String> getBlobKeysInsideContainer(String container) throws IOException;
-
-    /**
-     * Counts number of blobs inside a container
-     * @param container
-     * @param options
-     * @return
-     */
-    long countBlobs(String container, ListContainerOptions options);
-
-    /**
-     * Returns a {@link File} object that links to the blob
-     * @param container
-     * @param key
-     * @return
-     */
-    File getFileForBlobKey(String container, String key);
-
-    /**
-     *
-     * @param container
-     * @param key
-     */
-    void removeBlob(String container, String key);
-
-    /**
-     * Write a {@link Blob} into a file
-     * @param container
-     * @param blob
-     * @throws IOException
-     */
-    void putBlob(String containerName, Blob blob) throws IOException;
-
-}
diff --git a/apis/filesystem/src/main/java/org/jclouds/filesystem/strategy/internal/FilesystemStorageStrategyImpl.java b/apis/filesystem/src/main/java/org/jclouds/filesystem/strategy/internal/FilesystemStorageStrategyImpl.java
index 918f9d2..c652dd7 100644
--- a/apis/filesystem/src/main/java/org/jclouds/filesystem/strategy/internal/FilesystemStorageStrategyImpl.java
+++ b/apis/filesystem/src/main/java/org/jclouds/filesystem/strategy/internal/FilesystemStorageStrategyImpl.java
@@ -35,15 +35,18 @@
 
 import org.apache.commons.io.FileUtils;
 import org.apache.commons.io.filefilter.DirectoryFileFilter;
+import org.jclouds.blobstore.LocalStorageStrategy;
 import org.jclouds.blobstore.domain.Blob;
 import org.jclouds.blobstore.domain.BlobBuilder;
 import org.jclouds.blobstore.options.ListContainerOptions;
+import org.jclouds.crypto.Crypto;
 import org.jclouds.crypto.CryptoStreams;
+import org.jclouds.domain.Location;
 import org.jclouds.filesystem.predicates.validators.FilesystemBlobKeyValidator;
 import org.jclouds.filesystem.predicates.validators.FilesystemContainerNameValidator;
 import org.jclouds.filesystem.reference.FilesystemConstants;
-import org.jclouds.filesystem.strategy.FilesystemStorageStrategy;
 import org.jclouds.io.Payload;
+import org.jclouds.io.Payloads;
 import org.jclouds.logging.Logger;
 import org.jclouds.rest.annotations.ParamValidators;
 
@@ -55,7 +58,7 @@
  * 
  * @author Alfredo "Rainbowbreeze" Morresi
  */
-public class FilesystemStorageStrategyImpl implements FilesystemStorageStrategy {
+public class FilesystemStorageStrategyImpl implements LocalStorageStrategy {
 
    private static final String BACK_SLASH = "\\";
 
@@ -66,17 +69,20 @@
    protected final String baseDirectory;
    protected final FilesystemContainerNameValidator filesystemContainerNameValidator;
    protected final FilesystemBlobKeyValidator filesystemBlobKeyValidator;
+   private final Crypto crypto;
 
    @Inject
    protected FilesystemStorageStrategyImpl(Provider<BlobBuilder> blobBuilders,
          @Named(FilesystemConstants.PROPERTY_BASEDIR) String baseDir,
          FilesystemContainerNameValidator filesystemContainerNameValidator,
-         FilesystemBlobKeyValidator filesystemBlobKeyValidator) {
+         FilesystemBlobKeyValidator filesystemBlobKeyValidator,
+         Crypto crypto) {
       this.blobBuilders = checkNotNull(blobBuilders, "filesystem storage strategy blobBuilders");
       this.baseDirectory = checkNotNull(baseDir, "filesystem storage strategy base directory");
       this.filesystemContainerNameValidator = checkNotNull(filesystemContainerNameValidator,
             "filesystem container name validator");
       this.filesystemBlobKeyValidator = checkNotNull(filesystemBlobKeyValidator, "filesystem blob key validator");
+      this.crypto = crypto;
    }
 
    @Override
@@ -109,8 +115,14 @@
       return blob;
    }
 
-   @Override
    public boolean createContainer(String container) {
+      filesystemContainerNameValidator.validate(container);
+      return createContainerInLocation(container, null);
+   }
+
+   @Override
+   public boolean createContainerInLocation(String container, Location location) {
+      // TODO: implement location
       logger.debug("Creating container %s", container);
       filesystemContainerNameValidator.validate(container);
       return createDirectoryWithResult(container, null);
@@ -151,7 +163,6 @@
       }
    }
 
-   @Override
    public Blob newBlob(@ParamValidators({ FilesystemBlobKeyValidator.class }) String name) {
       filesystemBlobKeyValidator.validate(name);
       return blobBuilders.get().name(name).build();
@@ -195,7 +206,6 @@
     * @param blobKey
     * @return
     */
-   @Override
    public File getFileForBlobKey(String container, String blobKey) {
       filesystemContainerNameValidator.validate(container);
       filesystemBlobKeyValidator.validate(blobKey);
@@ -205,7 +215,7 @@
    }
 
    @Override
-   public void putBlob(final String containerName, final Blob blob) throws IOException {
+   public String putBlob(final String containerName, final Blob blob) throws IOException {
       String blobKey = blob.getMetadata().getName();
       Payload payload = blob.getPayload();
       filesystemContainerNameValidator.validate(containerName);
@@ -220,6 +230,9 @@
             output = new FileOutputStream(outputFile);
             payload.writeTo(output);
          }
+         Payloads.calculateMD5(payload, crypto.md5());
+         String eTag = CryptoStreams.hex(payload.getContentMetadata().getContentMD5());
+         return eTag;
       } catch (IOException ex) {
          if (outputFile != null) {
             outputFile.delete();
@@ -263,16 +276,23 @@
    }
 
    @Override
+   public Location getLocation(final String containerName) {
+      return null;
+   }
+
+   @Override
+   public String getSeparator() {
+      return File.separator;
+   }
+
    public boolean directoryExists(String container, String directory) {
       return buildPathAndChecksIfDirectoryExists(container, directory);
    }
 
-   @Override
    public void createDirectory(String container, String directory) {
       createDirectoryWithResult(container, directory);
    }
 
-   @Override
    public void deleteDirectory(String container, String directory) {
       // create complete dir path
       String fullDirPath = buildPathStartingFromBaseDir(container, directory);
@@ -284,7 +304,6 @@
       }
    }
 
-   @Override
    public long countBlobs(String container, ListContainerOptions options) {
       // TODO
       throw new UnsupportedOperationException("Not supported yet.");
diff --git a/apis/filesystem/src/main/java/org/jclouds/filesystem/util/internal/FileSystemBlobUtilsImpl.java b/apis/filesystem/src/main/java/org/jclouds/filesystem/util/internal/FileSystemBlobUtilsImpl.java
index b24a54d..87ff1cd 100644
--- a/apis/filesystem/src/main/java/org/jclouds/filesystem/util/internal/FileSystemBlobUtilsImpl.java
+++ b/apis/filesystem/src/main/java/org/jclouds/filesystem/util/internal/FileSystemBlobUtilsImpl.java
@@ -23,27 +23,28 @@
 import javax.inject.Provider;
 
 import org.jclouds.blobstore.AsyncBlobStore;
+import org.jclouds.blobstore.LocalStorageStrategy;
 import org.jclouds.blobstore.domain.BlobBuilder;
 import org.jclouds.blobstore.options.ListContainerOptions;
 import org.jclouds.blobstore.util.BlobUtils;
-import org.jclouds.filesystem.strategy.FilesystemStorageStrategy;
+import org.jclouds.filesystem.strategy.internal.FilesystemStorageStrategyImpl;
 
 import com.google.inject.Inject;
 
 /**
  * Implements the {@link BlobUtils} interfaced and act as a bridge to
- * {@link FilesystemStorageStrategy} when used inside {@link AsyncBlobStore}
+ * {@link LocalStorageStrategy} when used inside {@link AsyncBlobStore}
  * 
  * @author Alfredo "Rainbowbreeze" Morresi
  */
 public class FileSystemBlobUtilsImpl implements BlobUtils {
 
-   protected final FilesystemStorageStrategy storageStrategy;
+   protected final FilesystemStorageStrategyImpl storageStrategy;
    protected final Provider<BlobBuilder> blobBuilders;
 
    @Inject
-   public FileSystemBlobUtilsImpl(FilesystemStorageStrategy storageStrategy, Provider<BlobBuilder> blobBuilders) {
-      this.storageStrategy = checkNotNull(storageStrategy, "Filesystem Storage Strategy");
+   public FileSystemBlobUtilsImpl(LocalStorageStrategy storageStrategy, Provider<BlobBuilder> blobBuilders) {
+      this.storageStrategy = (FilesystemStorageStrategyImpl) checkNotNull(storageStrategy, "Filesystem Storage Strategy");
       this.blobBuilders = checkNotNull(blobBuilders, "Filesystem  blobBuilders");
    }
 
diff --git a/apis/filesystem/src/test/java/org/jclouds/filesystem/FilesystemAsyncBlobStoreTest.java b/apis/filesystem/src/test/java/org/jclouds/filesystem/FilesystemAsyncBlobStoreTest.java
index aa6bbab..7eeaad5 100644
--- a/apis/filesystem/src/test/java/org/jclouds/filesystem/FilesystemAsyncBlobStoreTest.java
+++ b/apis/filesystem/src/test/java/org/jclouds/filesystem/FilesystemAsyncBlobStoreTest.java
@@ -656,7 +656,7 @@
         assertEquals(metadata.getUserMetadata().size(), 0, "Wrong blob UserMetadata");
         // metadata.getLastModified()
         File file = new File(TARGET_CONTAINER_NAME + File.separator + BLOB_KEY);
-        assertEquals(metadata.getContentMetadata().getContentLength(), new Long(file.length()), "Wrong blob size");
+        assertEquals(metadata.getContentMetadata().getContentLength(), Long.valueOf(file.length()), "Wrong blob size");
     }
 
     public void testDeleteContainer_NotExistingContainer() {
diff --git a/apis/filesystem/src/test/java/org/jclouds/filesystem/strategy/internal/FilesystemStorageStrategyImplTest.java b/apis/filesystem/src/test/java/org/jclouds/filesystem/strategy/internal/FilesystemStorageStrategyImplTest.java
index 69c6ce1..203cce7 100644
--- a/apis/filesystem/src/test/java/org/jclouds/filesystem/strategy/internal/FilesystemStorageStrategyImplTest.java
+++ b/apis/filesystem/src/test/java/org/jclouds/filesystem/strategy/internal/FilesystemStorageStrategyImplTest.java
@@ -42,7 +42,6 @@
 import org.jclouds.encryption.internal.JCECrypto;
 import org.jclouds.filesystem.predicates.validators.internal.FilesystemBlobKeyValidatorImpl;
 import org.jclouds.filesystem.predicates.validators.internal.FilesystemContainerNameValidatorImpl;
-import org.jclouds.filesystem.strategy.FilesystemStorageStrategy;
 import org.jclouds.filesystem.utils.TestUtils;
 import org.jclouds.io.payloads.FilePayload;
 import org.testng.annotations.AfterMethod;
@@ -73,7 +72,7 @@
       System.setProperty(LOGGING_CONFIG_KEY, LOGGING_CONFIG_VALUE);
    }
 
-   private FilesystemStorageStrategy storageStrategy;
+   private FilesystemStorageStrategyImpl storageStrategy;
 
    @BeforeMethod
    protected void setUp() throws Exception {
@@ -87,7 +86,7 @@
             }
          }
 
-      }, TestUtils.TARGET_BASE_DIR, new FilesystemContainerNameValidatorImpl(), new FilesystemBlobKeyValidatorImpl());
+      }, TestUtils.TARGET_BASE_DIR, new FilesystemContainerNameValidatorImpl(), new FilesystemBlobKeyValidatorImpl(), new JCECrypto());
       TestUtils.cleanDirectoryContent(TestUtils.TARGET_BASE_DIR);
    }
 
@@ -409,12 +408,12 @@
       assertEquals(fileForPayload.getAbsolutePath(), fullPath + blobKey, "Wrong file path");
    }
 
-   public void testGetFileForBlobKey_AbsolutePath() throws IOException {
+   public void testGetFileForBlobKey_AbsolutePath() throws Exception {
       String absoluteBasePath = (new File(getAbsoluteDirectory(), "basedir")).getAbsolutePath() + FS;
       String absoluteContainerPath = absoluteBasePath + CONTAINER_NAME + FS;
 
       // create storageStrategy with an absolute path
-      FilesystemStorageStrategy storageStrategyAbsolute = new FilesystemStorageStrategyImpl(
+      FilesystemStorageStrategyImpl storageStrategyAbsolute = new FilesystemStorageStrategyImpl(
                new Provider<BlobBuilder>() {
                   @Override
                   public BlobBuilder get() {
@@ -424,7 +423,7 @@
                         return null;
                      }
                   }
-               }, absoluteBasePath, new FilesystemContainerNameValidatorImpl(), new FilesystemBlobKeyValidatorImpl());
+               }, absoluteBasePath, new FilesystemContainerNameValidatorImpl(), new FilesystemBlobKeyValidatorImpl(), new JCECrypto());
       TestUtils.cleanDirectoryContent(absoluteContainerPath);
 
       String blobKey;
diff --git a/apis/nova/src/main/java/org/jclouds/openstack/nova/handlers/ParseNovaErrorFromHttpResponse.java b/apis/nova/src/main/java/org/jclouds/openstack/nova/handlers/ParseNovaErrorFromHttpResponse.java
index 8f3d083..496d832 100644
--- a/apis/nova/src/main/java/org/jclouds/openstack/nova/handlers/ParseNovaErrorFromHttpResponse.java
+++ b/apis/nova/src/main/java/org/jclouds/openstack/nova/handlers/ParseNovaErrorFromHttpResponse.java
@@ -85,7 +85,7 @@
    String parseErrorFromContentOrNull(HttpCommand command, HttpResponse response) {
       if (response.getPayload() != null) {
          try {
-            return Strings2.toStringAndClose(response.getPayload().getInput());
+            return Strings2.toString(response.getPayload());
          } catch (IOException e) {
             logger.warn(e, "exception reading error from response", response);
          }
diff --git a/apis/nova/src/test/java/org/jclouds/openstack/nova/NovaClientLiveTest.java b/apis/nova/src/test/java/org/jclouds/openstack/nova/NovaClientLiveTest.java
index 397ee7e..bde2f87 100644
--- a/apis/nova/src/test/java/org/jclouds/openstack/nova/NovaClientLiveTest.java
+++ b/apis/nova/src/test/java/org/jclouds/openstack/nova/NovaClientLiveTest.java
@@ -264,8 +264,8 @@
       assertNotNull(server.getHostId());
       assertEquals(server.getStatus(), ServerStatus.ACTIVE);
       assert server.getProgress() >= 0 : "newDetails.getProgress()" + server.getProgress();
-      assertEquals(new Integer(14362), server.getImage());
-      assertEquals(new Integer(1), server.getFlavor());
+      assertEquals(Integer.valueOf(14362), server.getImage());
+      assertEquals(Integer.valueOf(1), server.getFlavor());
       assertNotNull(server.getAddresses());
       // listAddresses tests..
       assertEquals(client.getAddresses(serverId), server.getAddresses());
@@ -303,7 +303,7 @@
       try {
          client.connect();
          Payload etcPasswd = client.get("/etc/jclouds.txt");
-         String etcPasswdContents = Strings2.toStringAndClose(etcPasswd.getInput());
+         String etcPasswdContents = Strings2.toString(etcPasswd);
          assertEquals("nova", etcPasswdContents.trim());
       } finally {
          if (client != null)
@@ -332,7 +332,7 @@
    public void testCreateImage() throws Exception {
       Image image = client.createImageFromServer("hoofie", serverId);
       assertEquals("hoofie", image.getName());
-      assertEquals(new Integer(serverId), image.getServerRef());
+      assertEquals(Integer.valueOf(serverId), image.getServerRef());
       createdImageRef = image.getId()+"";
       blockUntilImageActive(createdImageRef);
    }
@@ -341,7 +341,7 @@
    public void testRebuildServer() throws Exception {
       client.rebuildServer(serverId, new RebuildServerOptions().withImage(createdImageRef));
       blockUntilServerActive(serverId);
-      assertEquals(new Integer(createdImageRef).intValue(),client.getServer(serverId).getImage().getId());
+      assertEquals(Integer.valueOf(createdImageRef).intValue(),client.getServer(serverId).getImage().getId());
    }
 
    @Test(timeOut = 10 * 60 * 1000, dependsOnMethods = "testRebuildServer")
@@ -362,7 +362,7 @@
       blockUntilServerVerifyResize(serverId);
       client.revertResizeServer(serverId);
       blockUntilServerActive(serverId);
-      assertEquals(new Integer(1), client.getServer(serverId).getFlavorRef());
+      assertEquals(Integer.valueOf(1), client.getServer(serverId).getFlavorRef());
    }
 
    @Test(timeOut = 10 * 60 * 1000, dependsOnMethods = "testRebootSoft")
@@ -371,7 +371,7 @@
       blockUntilServerVerifyResize(serverId2);
       client.confirmResizeServer(serverId2);
       blockUntilServerActive(serverId2);
-      assertEquals(new Integer(2), client.getServer(serverId2).getFlavorRef());
+      assertEquals(Integer.valueOf(2), client.getServer(serverId2).getFlavorRef());
    }
 
    @Test(timeOut = 10 * 60 * 1000, dependsOnMethods = { "testRebootSoft", "testRevertResize", "testConfirmResize" })
diff --git a/apis/nova/src/test/java/org/jclouds/openstack/nova/functions/ParseImageFromJsonResponseTest.java b/apis/nova/src/test/java/org/jclouds/openstack/nova/functions/ParseImageFromJsonResponseTest.java
index 90db416..b127379 100644
--- a/apis/nova/src/test/java/org/jclouds/openstack/nova/functions/ParseImageFromJsonResponseTest.java
+++ b/apis/nova/src/test/java/org/jclouds/openstack/nova/functions/ParseImageFromJsonResponseTest.java
@@ -64,7 +64,7 @@
       assertEquals(response.getId(), 2);
       assertEquals(response.getName(), "CentOS 5.2");
       assertEquals(response.getCreated(), dateService.iso8601SecondsDateParse("2010-08-10T12:00:00Z"));
-      assertEquals(response.getProgress(), new Integer(80));
+      assertEquals(response.getProgress(), Integer.valueOf(80));
       assertEquals(response.getStatus(), ImageStatus.SAVING);
       assertEquals(response.getUpdated(), dateService.iso8601SecondsDateParse(("2010-10-10T12:00:00Z")));
       assertEquals(response.getServerRef(), "http://servers.api.openstack.org/v1.1/1234/servers/12");
diff --git a/apis/nova/src/test/java/org/jclouds/openstack/nova/functions/ParseImageListFromJsonResponseTest.java b/apis/nova/src/test/java/org/jclouds/openstack/nova/functions/ParseImageListFromJsonResponseTest.java
index 5da9c57..95233c2 100644
--- a/apis/nova/src/test/java/org/jclouds/openstack/nova/functions/ParseImageListFromJsonResponseTest.java
+++ b/apis/nova/src/test/java/org/jclouds/openstack/nova/functions/ParseImageListFromJsonResponseTest.java
@@ -96,7 +96,7 @@
       assertEquals(response.get(1).getName(), "My Server Backup");
       assertEquals(response.get(1).getCreated(), dateService.iso8601SecondsDateParse("2009-07-07T09:56:16Z"));
 
-      assertEquals(response.get(1).getProgress(), new Integer(80));
+      assertEquals(response.get(1).getProgress(), Integer.valueOf(80));
       assertEquals(response.get(1).getStatus(), ImageStatus.SAVING);
       assertEquals(response.get(1).getUpdated(), dateService.iso8601SecondsDateParse("2010-10-10T12:00:00Z"));
       assertEquals(response.get(1).getServerRef(), "http://servers.api.openstack.org/v1.1/1234/servers/12");
diff --git a/apis/nova/src/test/java/org/jclouds/openstack/nova/functions/ParseServerFromJsonResponseDiabloTest.java b/apis/nova/src/test/java/org/jclouds/openstack/nova/functions/ParseServerFromJsonResponseDiabloTest.java
index 2d94c79..baf95cc 100644
--- a/apis/nova/src/test/java/org/jclouds/openstack/nova/functions/ParseServerFromJsonResponseDiabloTest.java
+++ b/apis/nova/src/test/java/org/jclouds/openstack/nova/functions/ParseServerFromJsonResponseDiabloTest.java
@@ -64,7 +64,7 @@
       assertEquals(response.getFlavor().getURI(), new URI("http://servers.api.openstack.org/1234/flavors/1"));

       assertEquals(response.getHostId(), "e4d909c290d0fb1ca068ffaddf22cbd0");

       assertEquals(response.getStatus(), ServerStatus.BUILD);

-      assertEquals(response.getProgress(), new Integer(60));

+      assertEquals(response.getProgress(), Integer.valueOf(60));

       SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'", Locale.US);

       dateFormat.setTimeZone(new SimpleTimeZone(0, "GMT"));

       assertEquals(response.getCreated(), dateFormat.parse("2010-08-10T12:00:00Z"));

diff --git a/apis/nova/src/test/java/org/jclouds/openstack/nova/functions/ParseServerFromJsonResponseTest.java b/apis/nova/src/test/java/org/jclouds/openstack/nova/functions/ParseServerFromJsonResponseTest.java
index 6f282f8..3821b23 100644
--- a/apis/nova/src/test/java/org/jclouds/openstack/nova/functions/ParseServerFromJsonResponseTest.java
+++ b/apis/nova/src/test/java/org/jclouds/openstack/nova/functions/ParseServerFromJsonResponseTest.java
@@ -65,7 +65,7 @@
       assertEquals(response.getFlavorRef(), "http://servers.api.openstack.org/1234/flavors/1");

       assertEquals(response.getHostId(), "e4d909c290d0fb1ca068ffaddf22cbd0");

       assertEquals(response.getStatus(), ServerStatus.BUILD);

-      assertEquals(response.getProgress(), new Integer(60));

+      assertEquals(response.getProgress(), Integer.valueOf(60));

       SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'", Locale.US);

       dateFormat.setTimeZone(new SimpleTimeZone(0, "GMT"));

       assertEquals(response.getCreated(), dateFormat.parse("2010-08-10T12:00:00Z"));

diff --git a/apis/nova/src/test/java/org/jclouds/openstack/nova/functions/ParseServerListFromJsonResponseTest.java b/apis/nova/src/test/java/org/jclouds/openstack/nova/functions/ParseServerListFromJsonResponseTest.java
index d5f45c0..e9f255b 100644
--- a/apis/nova/src/test/java/org/jclouds/openstack/nova/functions/ParseServerListFromJsonResponseTest.java
+++ b/apis/nova/src/test/java/org/jclouds/openstack/nova/functions/ParseServerListFromJsonResponseTest.java
@@ -88,7 +88,7 @@
       assertEquals(response.get(0).getHostId(), "e4d909c290d0fb1ca068ffaddf22cbd0");
       assertEquals(response.get(0).getUuid(), "d84e2086-fc0d-11e0-8e08-2837371c69ae");
       assertEquals(response.get(0).getStatus(), ServerStatus.BUILD);
-      assertEquals(response.get(0).getProgress(), new Integer(60));
+      assertEquals(response.get(0).getProgress(), Integer.valueOf(60));
 
       List<Address> publicAddresses = ImmutableList.copyOf(Iterables.transform(
                ImmutableList.of("67.23.10.132", "::babe:67.23.10.132", "67.23.10.131", "::babe:4317:0A83"),
diff --git a/apis/s3/src/main/java/org/jclouds/s3/options/ListBucketOptions.java b/apis/s3/src/main/java/org/jclouds/s3/options/ListBucketOptions.java
index d7da77c..53f48c7 100644
--- a/apis/s3/src/main/java/org/jclouds/s3/options/ListBucketOptions.java
+++ b/apis/s3/src/main/java/org/jclouds/s3/options/ListBucketOptions.java
@@ -85,7 +85,7 @@
 
    public Integer getMaxResults() {
       String returnVal = getFirstQueryOrNull("max-keys");
-      return (returnVal != null) ? new Integer(returnVal) : null;
+      return (returnVal != null) ? Integer.valueOf(returnVal) : null;
    }
 
    /**
diff --git a/apis/s3/src/main/java/org/jclouds/s3/xml/ListBucketHandler.java b/apis/s3/src/main/java/org/jclouds/s3/xml/ListBucketHandler.java
index 95e8eef..ef902bd 100644
--- a/apis/s3/src/main/java/org/jclouds/s3/xml/ListBucketHandler.java
+++ b/apis/s3/src/main/java/org/jclouds/s3/xml/ListBucketHandler.java
@@ -104,7 +104,7 @@
          builder.eTag(currentETag);
          builder.contentMD5(CryptoStreams.hex(Strings2.replaceAll(currentETag, '"', "")));
       } else if (qName.equals("Size")) {
-         builder.contentLength(new Long(currentOrNull(currentText)));
+         builder.contentLength(Long.valueOf(currentOrNull(currentText)));
       } else if (qName.equals("Owner")) {
          builder.owner(currentOwner);
          currentOwner = null;
diff --git a/apis/s3/src/test/java/org/jclouds/s3/S3ClientLiveTest.java b/apis/s3/src/test/java/org/jclouds/s3/S3ClientLiveTest.java
index 774871e..b06413e 100644
--- a/apis/s3/src/test/java/org/jclouds/s3/S3ClientLiveTest.java
+++ b/apis/s3/src/test/java/org/jclouds/s3/S3ClientLiveTest.java
@@ -284,7 +284,7 @@
       assertConsistencyAwareContainerSize(sourceContainer, 1);
       S3Object newObject = getApi().getObject(sourceContainer, key);
       assert newObject != null;
-      assertEquals(Strings2.toStringAndClose(newObject.getPayload().getInput()), TEST_STRING);
+      assertEquals(Strings2.toString(newObject.getPayload()), TEST_STRING);
       return newObject;
    }
 
diff --git a/apis/s3/src/test/java/org/jclouds/s3/internal/StubS3AsyncClient.java b/apis/s3/src/test/java/org/jclouds/s3/internal/StubS3AsyncClient.java
index 1f80a5e..85a5952 100644
--- a/apis/s3/src/test/java/org/jclouds/s3/internal/StubS3AsyncClient.java
+++ b/apis/s3/src/test/java/org/jclouds/s3/internal/StubS3AsyncClient.java
@@ -37,12 +37,13 @@
 import org.jclouds.aws.domain.Region;
 import org.jclouds.blobstore.AsyncBlobStore;
 import org.jclouds.blobstore.KeyNotFoundException;
-import org.jclouds.blobstore.TransientAsyncBlobStore;
+import org.jclouds.blobstore.LocalAsyncBlobStore;
 import org.jclouds.blobstore.domain.Blob;
 import org.jclouds.blobstore.domain.BlobMetadata;
 import org.jclouds.blobstore.domain.MutableBlobMetadata;
 import org.jclouds.blobstore.functions.HttpGetOptionsListToGetOptions;
 import org.jclouds.blobstore.options.ListContainerOptions;
+import org.jclouds.blobstore.util.BlobStoreUtils;
 import org.jclouds.concurrent.Futures;
 import org.jclouds.date.DateService;
 import org.jclouds.domain.Location;
@@ -102,7 +103,7 @@
 
    @Inject
    private StubS3AsyncClient(@Named(Constants.PROPERTY_USER_THREADS) ExecutorService service,
-            TransientAsyncBlobStore blobStore, ConcurrentMap<String, ConcurrentMap<String, Blob>> containerToBlobs,
+            LocalAsyncBlobStore blobStore, ConcurrentMap<String, ConcurrentMap<String, Blob>> containerToBlobs,
             ConcurrentMap<String, Location> containerToLocation, DateService dateService,
             S3Object.Factory objectProvider, Blob.Factory blobProvider,
             HttpGetOptionsListToGetOptions httpGetOptionsConverter, ObjectToBlob object2Blob, BlobToObject blob2Object,
@@ -157,25 +158,25 @@
          Blob object = source.get(sourceObject);
          if (options.getIfMatch() != null) {
             if (!object.getMetadata().getETag().equals(options.getIfMatch()))
-               return immediateFailedFuture(TransientAsyncBlobStore.returnResponseException(412));
+               return immediateFailedFuture(LocalAsyncBlobStore.returnResponseException(412));
          }
          if (options.getIfNoneMatch() != null) {
             if (object.getMetadata().getETag().equals(options.getIfNoneMatch()))
-               return immediateFailedFuture(TransientAsyncBlobStore.returnResponseException(412));
+               return immediateFailedFuture(LocalAsyncBlobStore.returnResponseException(412));
          }
          if (options.getIfModifiedSince() != null) {
             Date modifiedSince = dateService.rfc822DateParse(options.getIfModifiedSince());
             if (modifiedSince.after(object.getMetadata().getLastModified()))
-               return immediateFailedFuture(TransientAsyncBlobStore.returnResponseException(412));
+               return immediateFailedFuture(LocalAsyncBlobStore.returnResponseException(412));
 
          }
          if (options.getIfUnmodifiedSince() != null) {
             Date unmodifiedSince = dateService.rfc822DateParse(options.getIfUnmodifiedSince());
             if (unmodifiedSince.before(object.getMetadata().getLastModified()))
-               return immediateFailedFuture(TransientAsyncBlobStore.returnResponseException(412));
+               return immediateFailedFuture(LocalAsyncBlobStore.returnResponseException(412));
          }
          Blob sourceS3 = source.get(sourceObject);
-         MutableBlobMetadata newMd = TransientAsyncBlobStore.copy(sourceS3.getMetadata(), destinationObject);
+         MutableBlobMetadata newMd = BlobStoreUtils.copy(sourceS3.getMetadata(), destinationObject);
          if (options.getAcl() != null)
             keyToAcl.put(destinationBucket + "/" + destinationObject, options.getAcl());
 
@@ -183,7 +184,7 @@
          Blob newBlob = blobProvider.create(newMd);
          newBlob.setPayload(sourceS3.getPayload());
          dest.put(destinationObject, newBlob);
-         return immediateFuture((ObjectMetadata) blob2ObjectMetadata.apply(TransientAsyncBlobStore.copy(newMd)));
+         return immediateFuture((ObjectMetadata) blob2ObjectMetadata.apply(BlobStoreUtils.copy(newMd)));
       }
       return immediateFailedFuture(new KeyNotFoundException(sourceBucket, sourceObject, sourceBucket + "/"
                + sourceObject));
diff --git a/apis/swift/src/main/java/org/jclouds/openstack/swift/blobstore/strategy/internal/ParallelMultipartUploadStrategy.java b/apis/swift/src/main/java/org/jclouds/openstack/swift/blobstore/strategy/internal/ParallelMultipartUploadStrategy.java
index 12481c2..f546f4d 100644
--- a/apis/swift/src/main/java/org/jclouds/openstack/swift/blobstore/strategy/internal/ParallelMultipartUploadStrategy.java
+++ b/apis/swift/src/main/java/org/jclouds/openstack/swift/blobstore/strategy/internal/ParallelMultipartUploadStrategy.java
@@ -164,7 +164,7 @@
                                 CountDownLatch latch = new CountDownLatch(effectiveParts);
                                 int part;
                                 while ((part = algorithm.getNextPart()) <= parts) {
-                                    Integer partKey = new Integer(part);
+                                    Integer partKey = Integer.valueOf(part);
                                     activeParts.put(partKey);
 
                                     prepareUploadPart(container, blob, key, partKey, payload,
@@ -173,7 +173,7 @@
                                             blob2Object);
                                 }
                                 if (remaining > 0) {
-                                    Integer partKey = new Integer(part);
+                                    Integer partKey = Integer.valueOf(part);
                                     activeParts.put(partKey);
                                     prepareUploadPart(container, blob, key, partKey, payload,
                                             algorithm.getNextChunkOffset(), remaining, etags,
@@ -187,7 +187,7 @@
                                     CountDownLatch retryLatch = new CountDownLatch(atOnce);
                                     for (int i = 0; i < atOnce; i++) {
                                         Part failedPart = toRetry.poll();
-                                        Integer partKey = new Integer(failedPart.getPart());
+                                        Integer partKey = Integer.valueOf(failedPart.getPart());
                                         activeParts.put(partKey);
                                         prepareUploadPart(container, blob, key, partKey, payload,
                                                 failedPart.getOffset(), failedPart.getSize(), etags,
diff --git a/apis/swift/src/main/java/org/jclouds/openstack/swift/options/ListContainerOptions.java b/apis/swift/src/main/java/org/jclouds/openstack/swift/options/ListContainerOptions.java
index 28f88a5..c6dfd07 100644
--- a/apis/swift/src/main/java/org/jclouds/openstack/swift/options/ListContainerOptions.java
+++ b/apis/swift/src/main/java/org/jclouds/openstack/swift/options/ListContainerOptions.java
@@ -57,7 +57,7 @@
 
    public int getMaxResults() {
       String val = getFirstQueryOrNull("limit");
-      return val != null ? new Integer(val) : 10000;
+      return val != null ? Integer.valueOf(val) : 10000;
    }
 
    /**
diff --git a/apis/swift/src/test/java/org/jclouds/openstack/swift/CommonSwiftClientLiveTest.java b/apis/swift/src/test/java/org/jclouds/openstack/swift/CommonSwiftClientLiveTest.java
index fb11ec3..504b833 100644
--- a/apis/swift/src/test/java/org/jclouds/openstack/swift/CommonSwiftClientLiveTest.java
+++ b/apis/swift/src/test/java/org/jclouds/openstack/swift/CommonSwiftClientLiveTest.java
@@ -204,7 +204,7 @@
          MutableObjectInfoWithMetadata metadata = getApi().getObjectInfo(containerName, object.getInfo().getName());
          assertEquals(metadata.getName(), object.getInfo().getName());
 
-         assertEquals(metadata.getBytes(), new Long(data.length()));
+         assertEquals(metadata.getBytes(), Long.valueOf(data.length()));
          assert metadata.getContentType().startsWith("text/plain") : metadata.getContentType();
 
          assertEquals(CryptoStreams.hex(md5), CryptoStreams.hex(metadata.getHash()));
@@ -222,10 +222,10 @@
          assert getApi().getObject(containerName, "non-existent-object") == null;
          // Test GET of object (including updated metadata)
          SwiftObject getBlob = getApi().getObject(containerName, object.getInfo().getName());
-         assertEquals(Strings2.toStringAndClose(getBlob.getPayload().getInput()), data);
+         assertEquals(Strings2.toString(getBlob.getPayload()), data);
          // TODO assertEquals(getBlob.getName(),
          // object.getMetadata().getName());
-         assertEquals(getBlob.getInfo().getBytes(), new Long(data.length()));
+         assertEquals(getBlob.getInfo().getBytes(), Long.valueOf(data.length()));
          testGetObjectContentType(getBlob);
          assertEquals(CryptoStreams.hex(md5), CryptoStreams.hex(getBlob.getInfo().getHash()));
          assertEquals(CryptoStreams.hex(newEtag), getBlob.getInfo().getHash());
@@ -267,7 +267,7 @@
                   GetOptions.Builder.ifETagMatches(newEtag));
          assertEquals(getBlob.getInfo().getHash(), CryptoStreams.hex(newEtag));
          getBlob = getApi().getObject(containerName, object.getInfo().getName(), GetOptions.Builder.startAt(8));
-         assertEquals(Strings2.toStringAndClose(getBlob.getPayload().getInput()), data.substring(8));
+         assertEquals(Strings2.toString(getBlob.getPayload()), data.substring(8));
 
       } finally {
          returnContainer(containerName);
diff --git a/apis/swift/src/test/java/org/jclouds/openstack/swift/internal/StubSwiftAsyncClient.java b/apis/swift/src/test/java/org/jclouds/openstack/swift/internal/StubSwiftAsyncClient.java
index 00a889a..354ffee 100644
--- a/apis/swift/src/test/java/org/jclouds/openstack/swift/internal/StubSwiftAsyncClient.java
+++ b/apis/swift/src/test/java/org/jclouds/openstack/swift/internal/StubSwiftAsyncClient.java
@@ -33,7 +33,7 @@
 import javax.inject.Singleton;
 
 import org.jclouds.Constants;
-import org.jclouds.blobstore.TransientAsyncBlobStore;
+import org.jclouds.blobstore.LocalAsyncBlobStore;
 import org.jclouds.blobstore.domain.BlobMetadata;
 import org.jclouds.blobstore.domain.PageSet;
 import org.jclouds.blobstore.domain.StorageMetadata;
@@ -68,7 +68,7 @@
 @Singleton
 public class StubSwiftAsyncClient implements CommonSwiftAsyncClient {
    private final HttpGetOptionsListToGetOptions httpGetOptionsConverter;
-   private final TransientAsyncBlobStore blobStore;
+   private final LocalAsyncBlobStore blobStore;
    private final SwiftObject.Factory objectProvider;
    private final ObjectToBlob object2Blob;
    private final BlobToObject blob2Object;
@@ -79,7 +79,7 @@
 
    @Inject
    private StubSwiftAsyncClient(@Named(Constants.PROPERTY_USER_THREADS) ExecutorService service,
-            TransientAsyncBlobStore blobStore,
+            LocalAsyncBlobStore blobStore,
             SwiftObject.Factory objectProvider, HttpGetOptionsListToGetOptions httpGetOptionsConverter,
             ObjectToBlob object2Blob, BlobToObject blob2Object, ResourceToObjectInfo blob2ObjectInfo,
             ListContainerOptionsToBlobStoreListContainerOptions container2ContainerListOptions,
diff --git a/apis/vcloud/src/main/java/org/jclouds/vcloud/VCloudAsyncClient.java b/apis/vcloud/src/main/java/org/jclouds/vcloud/VCloudAsyncClient.java
index de290b8..7fb5498 100644
--- a/apis/vcloud/src/main/java/org/jclouds/vcloud/VCloudAsyncClient.java
+++ b/apis/vcloud/src/main/java/org/jclouds/vcloud/VCloudAsyncClient.java
@@ -28,7 +28,7 @@
 import org.jclouds.vcloud.features.VAppTemplateAsyncClient;
 import org.jclouds.vcloud.features.VDCAsyncClient;
 import org.jclouds.vcloud.features.VmAsyncClient;
-import org.jclouds.vcloud.filters.SetVCloudTokenCookie;
+import org.jclouds.vcloud.filters.AddVCloudAuthorizationAndCookieToRequest;
 
 /**
  * Provides access to VCloud resources via their REST API.
@@ -38,7 +38,7 @@
  *      />
  * @author Adrian Cole
  */
-@RequestFilters(SetVCloudTokenCookie.class)
+@RequestFilters(AddVCloudAuthorizationAndCookieToRequest.class)
 public interface VCloudAsyncClient {
 
    /**
diff --git a/apis/vcloud/src/main/java/org/jclouds/vcloud/features/CatalogAsyncClient.java b/apis/vcloud/src/main/java/org/jclouds/vcloud/features/CatalogAsyncClient.java
index dc1bf0d..0f4b233 100644
--- a/apis/vcloud/src/main/java/org/jclouds/vcloud/features/CatalogAsyncClient.java
+++ b/apis/vcloud/src/main/java/org/jclouds/vcloud/features/CatalogAsyncClient.java
@@ -42,7 +42,7 @@
 import org.jclouds.vcloud.binders.BindCatalogItemToXmlPayload;
 import org.jclouds.vcloud.domain.Catalog;
 import org.jclouds.vcloud.domain.CatalogItem;
-import org.jclouds.vcloud.filters.SetVCloudTokenCookie;
+import org.jclouds.vcloud.filters.AddVCloudAuthorizationAndCookieToRequest;
 import org.jclouds.vcloud.functions.OrgNameAndCatalogNameToEndpoint;
 import org.jclouds.vcloud.functions.OrgNameCatalogNameItemNameToEndpoint;
 import org.jclouds.vcloud.options.CatalogItemOptions;
@@ -57,7 +57,7 @@
  * 
  * @author Adrian Cole
  */
-@RequestFilters(SetVCloudTokenCookie.class)
+@RequestFilters(AddVCloudAuthorizationAndCookieToRequest.class)
 public interface CatalogAsyncClient {
 
    /**
diff --git a/apis/vcloud/src/main/java/org/jclouds/vcloud/features/NetworkAsyncClient.java b/apis/vcloud/src/main/java/org/jclouds/vcloud/features/NetworkAsyncClient.java
index 9834f50..e57c1a8 100644
--- a/apis/vcloud/src/main/java/org/jclouds/vcloud/features/NetworkAsyncClient.java
+++ b/apis/vcloud/src/main/java/org/jclouds/vcloud/features/NetworkAsyncClient.java
@@ -32,7 +32,7 @@
 import org.jclouds.rest.annotations.XMLResponseParser;
 import org.jclouds.rest.functions.ReturnNullOnNotFoundOr404;
 import org.jclouds.vcloud.domain.network.OrgNetwork;
-import org.jclouds.vcloud.filters.SetVCloudTokenCookie;
+import org.jclouds.vcloud.filters.AddVCloudAuthorizationAndCookieToRequest;
 import org.jclouds.vcloud.functions.OrgNameVDCNameResourceEntityNameToEndpoint;
 import org.jclouds.vcloud.xml.OrgNetworkHandler;
 
@@ -44,7 +44,7 @@
  * 
  * @author Adrian Cole
  */
-@RequestFilters(SetVCloudTokenCookie.class)
+@RequestFilters(AddVCloudAuthorizationAndCookieToRequest.class)
 public interface NetworkAsyncClient {
 
    /**
diff --git a/apis/vcloud/src/main/java/org/jclouds/vcloud/features/OrgAsyncClient.java b/apis/vcloud/src/main/java/org/jclouds/vcloud/features/OrgAsyncClient.java
index 688b322..792dc73 100644
--- a/apis/vcloud/src/main/java/org/jclouds/vcloud/features/OrgAsyncClient.java
+++ b/apis/vcloud/src/main/java/org/jclouds/vcloud/features/OrgAsyncClient.java
@@ -37,7 +37,7 @@
 import org.jclouds.vcloud.domain.Org;
 import org.jclouds.vcloud.domain.ReferenceType;
 import org.jclouds.vcloud.endpoints.OrgList;
-import org.jclouds.vcloud.filters.SetVCloudTokenCookie;
+import org.jclouds.vcloud.filters.AddVCloudAuthorizationAndCookieToRequest;
 import org.jclouds.vcloud.functions.OrgNameToEndpoint;
 import org.jclouds.vcloud.xml.OrgHandler;
 import org.jclouds.vcloud.xml.OrgListHandler;
@@ -50,7 +50,7 @@
  * 
  * @author Adrian Cole
  */
-@RequestFilters(SetVCloudTokenCookie.class)
+@RequestFilters(AddVCloudAuthorizationAndCookieToRequest.class)
 public interface OrgAsyncClient {
 
    /**
diff --git a/apis/vcloud/src/main/java/org/jclouds/vcloud/features/TaskAsyncClient.java b/apis/vcloud/src/main/java/org/jclouds/vcloud/features/TaskAsyncClient.java
index 3b2d0e5..dbbf5dd 100644
--- a/apis/vcloud/src/main/java/org/jclouds/vcloud/features/TaskAsyncClient.java
+++ b/apis/vcloud/src/main/java/org/jclouds/vcloud/features/TaskAsyncClient.java
@@ -36,7 +36,7 @@
 import org.jclouds.rest.functions.ReturnNullOnNotFoundOr404;
 import org.jclouds.vcloud.domain.Task;
 import org.jclouds.vcloud.domain.TasksList;
-import org.jclouds.vcloud.filters.SetVCloudTokenCookie;
+import org.jclouds.vcloud.filters.AddVCloudAuthorizationAndCookieToRequest;
 import org.jclouds.vcloud.functions.OrgNameToTasksListEndpoint;
 import org.jclouds.vcloud.xml.TaskHandler;
 import org.jclouds.vcloud.xml.TasksListHandler;
@@ -49,7 +49,7 @@
  * 
  * @author Adrian Cole
  */
-@RequestFilters(SetVCloudTokenCookie.class)
+@RequestFilters(AddVCloudAuthorizationAndCookieToRequest.class)
 public interface TaskAsyncClient {
 
    /**
diff --git a/apis/vcloud/src/main/java/org/jclouds/vcloud/features/VAppAsyncClient.java b/apis/vcloud/src/main/java/org/jclouds/vcloud/features/VAppAsyncClient.java
index fa35cad..523cb8c 100644
--- a/apis/vcloud/src/main/java/org/jclouds/vcloud/features/VAppAsyncClient.java
+++ b/apis/vcloud/src/main/java/org/jclouds/vcloud/features/VAppAsyncClient.java
@@ -49,7 +49,7 @@
 import org.jclouds.vcloud.binders.BindUndeployVAppParamsToXmlPayload;
 import org.jclouds.vcloud.domain.Task;
 import org.jclouds.vcloud.domain.VApp;
-import org.jclouds.vcloud.filters.SetVCloudTokenCookie;
+import org.jclouds.vcloud.filters.AddVCloudAuthorizationAndCookieToRequest;
 import org.jclouds.vcloud.functions.OrgNameVDCNameResourceEntityNameToEndpoint;
 import org.jclouds.vcloud.options.CloneVAppOptions;
 import org.jclouds.vcloud.xml.TaskHandler;
@@ -63,7 +63,7 @@
  * 
  * @author Adrian Cole
  */
-@RequestFilters(SetVCloudTokenCookie.class)
+@RequestFilters(AddVCloudAuthorizationAndCookieToRequest.class)
 public interface VAppAsyncClient {
 
    /**
diff --git a/apis/vcloud/src/main/java/org/jclouds/vcloud/features/VAppTemplateAsyncClient.java b/apis/vcloud/src/main/java/org/jclouds/vcloud/features/VAppTemplateAsyncClient.java
index 664952e..5859888 100644
--- a/apis/vcloud/src/main/java/org/jclouds/vcloud/features/VAppTemplateAsyncClient.java
+++ b/apis/vcloud/src/main/java/org/jclouds/vcloud/features/VAppTemplateAsyncClient.java
@@ -52,7 +52,7 @@
 import org.jclouds.vcloud.domain.Task;
 import org.jclouds.vcloud.domain.VApp;
 import org.jclouds.vcloud.domain.VAppTemplate;
-import org.jclouds.vcloud.filters.SetVCloudTokenCookie;
+import org.jclouds.vcloud.filters.AddVCloudAuthorizationAndCookieToRequest;
 import org.jclouds.vcloud.functions.OrgNameCatalogNameVAppTemplateNameToEndpoint;
 import org.jclouds.vcloud.options.CaptureVAppOptions;
 import org.jclouds.vcloud.options.CloneVAppTemplateOptions;
@@ -69,7 +69,7 @@
  * 
  * @author Adrian Cole
  */
-@RequestFilters(SetVCloudTokenCookie.class)
+@RequestFilters(AddVCloudAuthorizationAndCookieToRequest.class)
 public interface VAppTemplateAsyncClient {
 
    /**
diff --git a/apis/vcloud/src/main/java/org/jclouds/vcloud/features/VDCAsyncClient.java b/apis/vcloud/src/main/java/org/jclouds/vcloud/features/VDCAsyncClient.java
index f2228d8..365455b 100644
--- a/apis/vcloud/src/main/java/org/jclouds/vcloud/features/VDCAsyncClient.java
+++ b/apis/vcloud/src/main/java/org/jclouds/vcloud/features/VDCAsyncClient.java
@@ -32,7 +32,7 @@
 import org.jclouds.rest.annotations.XMLResponseParser;
 import org.jclouds.rest.functions.ReturnNullOnNotFoundOr404;
 import org.jclouds.vcloud.domain.VDC;
-import org.jclouds.vcloud.filters.SetVCloudTokenCookie;
+import org.jclouds.vcloud.filters.AddVCloudAuthorizationAndCookieToRequest;
 import org.jclouds.vcloud.functions.OrgNameAndVDCNameToEndpoint;
 import org.jclouds.vcloud.xml.VDCHandler;
 
@@ -44,7 +44,7 @@
  * 
  * @author Adrian Cole
  */
-@RequestFilters(SetVCloudTokenCookie.class)
+@RequestFilters(AddVCloudAuthorizationAndCookieToRequest.class)
 public interface VDCAsyncClient {
 
    /**
diff --git a/apis/vcloud/src/main/java/org/jclouds/vcloud/features/VmAsyncClient.java b/apis/vcloud/src/main/java/org/jclouds/vcloud/features/VmAsyncClient.java
index 9227a69..2239ac8 100644
--- a/apis/vcloud/src/main/java/org/jclouds/vcloud/features/VmAsyncClient.java
+++ b/apis/vcloud/src/main/java/org/jclouds/vcloud/features/VmAsyncClient.java
@@ -54,7 +54,7 @@
 import org.jclouds.vcloud.domain.NetworkConnectionSection;
 import org.jclouds.vcloud.domain.Task;
 import org.jclouds.vcloud.domain.Vm;
-import org.jclouds.vcloud.filters.SetVCloudTokenCookie;
+import org.jclouds.vcloud.filters.AddVCloudAuthorizationAndCookieToRequest;
 import org.jclouds.vcloud.xml.TaskHandler;
 import org.jclouds.vcloud.xml.VmHandler;
 
@@ -66,7 +66,7 @@
  * 
  * @author Adrian Cole
  */
-@RequestFilters(SetVCloudTokenCookie.class)
+@RequestFilters(AddVCloudAuthorizationAndCookieToRequest.class)
 public interface VmAsyncClient {
 
    /**
diff --git a/apis/vcloud/src/main/java/org/jclouds/vcloud/filters/SetVCloudTokenCookie.java b/apis/vcloud/src/main/java/org/jclouds/vcloud/filters/AddVCloudAuthorizationAndCookieToRequest.java
similarity index 72%
rename from apis/vcloud/src/main/java/org/jclouds/vcloud/filters/SetVCloudTokenCookie.java
rename to apis/vcloud/src/main/java/org/jclouds/vcloud/filters/AddVCloudAuthorizationAndCookieToRequest.java
index 18dd5cb..aa4380e 100644
--- a/apis/vcloud/src/main/java/org/jclouds/vcloud/filters/SetVCloudTokenCookie.java
+++ b/apis/vcloud/src/main/java/org/jclouds/vcloud/filters/AddVCloudAuthorizationAndCookieToRequest.java
@@ -28,6 +28,7 @@
 import org.jclouds.vcloud.VCloudToken;
 
 import com.google.common.base.Supplier;
+import com.google.common.collect.ImmutableMultimap;
 
 /**
  * Adds the VCloud Token to the request as a cookie
@@ -36,17 +37,21 @@
  * 
  */
 @Singleton
-public class SetVCloudTokenCookie implements HttpRequestFilter {
+public class AddVCloudAuthorizationAndCookieToRequest implements HttpRequestFilter {
    private Supplier<String> vcloudTokenProvider;
 
    @Inject
-   public SetVCloudTokenCookie(@VCloudToken Supplier<String> authTokenProvider) {
+   public AddVCloudAuthorizationAndCookieToRequest(@VCloudToken Supplier<String> authTokenProvider) {
       this.vcloudTokenProvider = authTokenProvider;
    }
 
    @Override
    public HttpRequest filter(HttpRequest request) throws HttpException {
-      return request.toBuilder().replaceHeader(HttpHeaders.COOKIE, "vcloud-token=" + vcloudTokenProvider.get()).build();
+      String token = vcloudTokenProvider.get();
+      return request
+               .toBuilder()
+               .replaceHeaders(
+                        ImmutableMultimap.of("x-vcloud-authorization", token, HttpHeaders.COOKIE, "vcloud-token="
+                                 + token)).build();
    }
-
 }
\ No newline at end of file
diff --git a/apis/vcloud/src/main/java/org/jclouds/vcloud/handlers/ParseVCloudErrorFromHttpResponse.java b/apis/vcloud/src/main/java/org/jclouds/vcloud/handlers/ParseVCloudErrorFromHttpResponse.java
index d67e911..3f20649 100644
--- a/apis/vcloud/src/main/java/org/jclouds/vcloud/handlers/ParseVCloudErrorFromHttpResponse.java
+++ b/apis/vcloud/src/main/java/org/jclouds/vcloud/handlers/ParseVCloudErrorFromHttpResponse.java
@@ -73,7 +73,7 @@
                   message = error.getMessage();
                   exception = new VCloudResponseException(command, response, error);
                } else {
-                  message = Strings2.toStringAndClose(response.getPayload().getInput());
+                  message = Strings2.toString(response.getPayload());
                   exception = message != null ? new HttpResponseException(command, response, message) : exception;
                }
             } catch (IOException e) {
diff --git a/apis/vcloud/src/main/java/org/jclouds/vcloud/xml/NetworkConnectionSectionHandler.java b/apis/vcloud/src/main/java/org/jclouds/vcloud/xml/NetworkConnectionSectionHandler.java
index a4601c8..487fd87 100644
--- a/apis/vcloud/src/main/java/org/jclouds/vcloud/xml/NetworkConnectionSectionHandler.java
+++ b/apis/vcloud/src/main/java/org/jclouds/vcloud/xml/NetworkConnectionSectionHandler.java
@@ -85,7 +85,7 @@
       } else if (qName.endsWith("Info")) {
          this.info = currentOrNull();
       } else if (qName.endsWith("PrimaryNetworkConnectionIndex")) {
-         this.primaryNetworkConnectionIndex = new Integer(currentOrNull());
+         this.primaryNetworkConnectionIndex = Integer.valueOf(currentOrNull());
       }
       currentText = new StringBuilder();
    }
diff --git a/apis/vcloud/src/test/java/org/jclouds/vcloud/compute/BaseVCloudComputeServiceExpectTest.java b/apis/vcloud/src/test/java/org/jclouds/vcloud/compute/BaseVCloudComputeServiceExpectTest.java
index 73ac7b9..142bdec 100644
--- a/apis/vcloud/src/test/java/org/jclouds/vcloud/compute/BaseVCloudComputeServiceExpectTest.java
+++ b/apis/vcloud/src/test/java/org/jclouds/vcloud/compute/BaseVCloudComputeServiceExpectTest.java
@@ -32,7 +32,6 @@
 import org.jclouds.vcloud.VCloudMediaType;
 
 import com.google.common.base.Function;
-import com.google.common.collect.ImmutableMultimap;
 import com.google.common.net.HttpHeaders;
 import com.google.inject.Module;
 
@@ -52,11 +51,9 @@
             .build();
 
    // initial auth is using basic
-   protected HttpRequest version1_0LoginRequest = HttpRequest.builder().method("POST").endpoint(
-            URI.create(ENDPOINT + "/v1.0/login"))
-            .headers(ImmutableMultimap.<String, String> builder()
-            .put(HttpHeaders.ACCEPT, VCloudMediaType.ORGLIST_XML)
-            .put(HttpHeaders.AUTHORIZATION, "Basic aWRlbnRpdHk6Y3JlZGVudGlhbA==").build()).build();
+   protected HttpRequest version1_0LoginRequest = HttpRequest.builder().method("POST").endpoint(ENDPOINT + "/v1.0/login")
+            .addHeader(HttpHeaders.ACCEPT, VCloudMediaType.ORGLIST_XML)
+            .addHeader(HttpHeaders.AUTHORIZATION, "Basic aWRlbnRpdHk6Y3JlZGVudGlhbA==").build();
 
    protected String sessionToken = "AtatAgvJMrwOc9pDQq4RRCRLazThpnTKJDxSVH9oB2I=";
    
@@ -64,18 +61,16 @@
    // NOTE: vCloud Director 1.5 returns ;version=1.0 on responses to requests made in 1.0 format.
    protected HttpResponse successfulVersion1_0LoginResponseFromVCD1_5WithSingleOrg = HttpResponse.builder().statusCode(200)
             .message("HTTP/1.1 200 OK").payload(payloadFromResourceWithContentType("/orgList1.0-vcd15.xml",  VCloudMediaType.ORGLIST_XML +";version=1.0"))
-            .headers(ImmutableMultimap.<String, String> builder()
-            .put("x-vcloud-authorization", sessionToken)
-            .put(HttpHeaders.SET_COOKIE, String.format("vcloud-token=%s; Secure; Path=/", sessionToken)).build()).build();
+            .addHeader("x-vcloud-authorization", sessionToken)
+            .addHeader(HttpHeaders.SET_COOKIE, String.format("vcloud-token=%s; Secure; Path=/", sessionToken)).build();
 
    // objects are looked up by id and the format of the id is hex-hyphen
    protected String orgId = "c076f90a-397a-49fa-89b8-b294c1599cd0";
    
-   protected HttpRequest version1_0GetOrgRequest = HttpRequest.builder().method("GET").endpoint(
-            URI.create(ENDPOINT + "/v1.0/org/" + orgId))
-            .headers(ImmutableMultimap.<String, String> builder()
-            .put(HttpHeaders.ACCEPT, VCloudMediaType.ORG_XML)
-            .put(HttpHeaders.COOKIE, "vcloud-token=" + sessionToken).build()).build();
+   protected HttpRequest version1_0GetOrgRequest = HttpRequest.builder().method("GET").endpoint(ENDPOINT + "/v1.0/org/" + orgId)
+            .addHeader(HttpHeaders.ACCEPT, VCloudMediaType.ORG_XML)
+            .addHeader("x-vcloud-authorization", sessionToken)
+            .addHeader(HttpHeaders.COOKIE, "vcloud-token=" + sessionToken).build();
    
    protected HttpResponse successfulVersion1_0GetOrgResponseFromVCD1_5WithSingleTasksListVDCAndNetwork = HttpResponse.builder().statusCode(200)
             .message("HTTP/1.1 200 OK").payload(payloadFromResourceWithContentType("/org1.0-vcd15.xml",  VCloudMediaType.ORG_XML +";version=1.0"))
@@ -84,11 +79,10 @@
    protected String catalogId = "3155f393-1e1d-4572-8c9c-d76f72ddb658";
    protected String vdcId = "e9cd3387-ac57-4d27-a481-9bee75e0690f";
 
-   protected HttpRequest version1_0GetCatalogRequest = HttpRequest.builder().method("GET").endpoint(
-            URI.create(ENDPOINT + "/v1.0/catalog/" + catalogId))
-            .headers(ImmutableMultimap.<String, String> builder()
-            .put(HttpHeaders.ACCEPT, VCloudMediaType.CATALOG_XML)
-            .put(HttpHeaders.COOKIE, "vcloud-token=" + sessionToken).build()).build();
+   protected HttpRequest version1_0GetCatalogRequest = HttpRequest.builder().method("GET").endpoint(ENDPOINT + "/v1.0/catalog/" + catalogId)
+            .addHeader(HttpHeaders.ACCEPT, VCloudMediaType.CATALOG_XML)
+            .addHeader("x-vcloud-authorization", sessionToken)
+            .addHeader(HttpHeaders.COOKIE, "vcloud-token=" + sessionToken).build();
    
    protected HttpResponse successfulVersion1_0GetCatalogResponseFromVCD1_5WithSingleTemplate = HttpResponse.builder().statusCode(200)
             .message("HTTP/1.1 200 OK").payload(payloadFromResourceWithContentType("/catalog1.0-vcd15.xml",  VCloudMediaType.CATALOG_XML +";version=1.0"))
@@ -96,11 +90,10 @@
    
    protected String catalogItemId = "ceb369f7-1d07-4e32-9dbd-ebb5aa6ca55c";
    
-   protected HttpRequest version1_0GetCatalogItemRequest = HttpRequest.builder().method("GET").endpoint(
-            URI.create(ENDPOINT + "/v1.0/catalogItem/" + catalogItemId))
-            .headers(ImmutableMultimap.<String, String> builder()
-            .put(HttpHeaders.ACCEPT, VCloudMediaType.CATALOGITEM_XML)
-            .put(HttpHeaders.COOKIE, "vcloud-token=" + sessionToken).build()).build();
+   protected HttpRequest version1_0GetCatalogItemRequest = HttpRequest.builder().method("GET").endpoint(ENDPOINT + "/v1.0/catalogItem/" + catalogItemId)
+            .addHeader(HttpHeaders.ACCEPT, VCloudMediaType.CATALOGITEM_XML)
+            .addHeader("x-vcloud-authorization", sessionToken)
+            .addHeader(HttpHeaders.COOKIE, "vcloud-token=" + sessionToken).build();
    
    protected HttpResponse successfulVersion1_0GetCatalogItemResponseFromVCD1_5ForTemplate = HttpResponse.builder().statusCode(200)
             .message("HTTP/1.1 200 OK").payload(payloadFromResourceWithContentType("/catalogItem1.0-vcd15.xml",  VCloudMediaType.CATALOGITEM_XML +";version=1.0"))
@@ -109,23 +102,21 @@
    // note vAppTemplate has a prefix in its id
    protected String templateId = "vappTemplate-51891b97-c5dd-47dc-a687-aabae354f728";
 
-   protected HttpRequest version1_0GetVDCRequest = HttpRequest.builder().method("GET").endpoint(
-            URI.create(ENDPOINT + "/v1.0/vdc/" + vdcId))
-            .headers(ImmutableMultimap.<String, String> builder()
-            .put(HttpHeaders.ACCEPT, VCloudMediaType.VDC_XML)
-            .put(HttpHeaders.COOKIE, "vcloud-token=" + sessionToken).build()).build();
-   
+   protected HttpRequest version1_0GetVDCRequest = HttpRequest.builder().method("GET").endpoint(ENDPOINT + "/v1.0/vdc/" + vdcId)
+            .addHeader(HttpHeaders.ACCEPT, VCloudMediaType.VDC_XML)
+            .addHeader("x-vcloud-authorization", sessionToken)
+            .addHeader(HttpHeaders.COOKIE, "vcloud-token=" + sessionToken).build();
+            
    protected HttpResponse successfulVersion1_0GetVDCResponseFromVCD1_5WithSingleTemplateAndNetwork = HttpResponse.builder().statusCode(200)
             .message("HTTP/1.1 200 OK").payload(payloadFromResourceWithContentType("/vdc1.0-vcd15.xml",  VCloudMediaType.VDC_XML +";version=1.0"))
             .build();   
    
    protected String networkId = "b466c0c5-8a5c-4335-b703-a2e2e6b5f3e1";
    
-   protected HttpRequest version1_0GetVAppTemplateRequest = HttpRequest.builder().method("GET").endpoint(
-            URI.create(ENDPOINT + "/v1.0/vAppTemplate/" + templateId))
-            .headers(ImmutableMultimap.<String, String> builder()
-            .put(HttpHeaders.ACCEPT, VCloudMediaType.VAPPTEMPLATE_XML)
-            .put(HttpHeaders.COOKIE, "vcloud-token=" + sessionToken).build()).build();
+   protected HttpRequest version1_0GetVAppTemplateRequest = HttpRequest.builder().method("GET").endpoint(ENDPOINT + "/v1.0/vAppTemplate/" + templateId)
+            .addHeader(HttpHeaders.ACCEPT, VCloudMediaType.VAPPTEMPLATE_XML)
+            .addHeader("x-vcloud-authorization", sessionToken)
+            .addHeader(HttpHeaders.COOKIE, "vcloud-token=" + sessionToken).build();
    
    protected HttpResponse successfulVersion1_0GetVAppTemplateResponseFromVCD1_5WithSingleVMAndVDCParent = HttpResponse.builder().statusCode(200)
             .message("HTTP/1.1 200 OK").payload(payloadFromResourceWithContentType("/template1.0-vcd15.xml",  VCloudMediaType.VAPPTEMPLATE_XML +";version=1.0"))
@@ -135,11 +126,10 @@
             .message("HTTP/1.1 200 OK").payload(payloadFromResourceWithContentType("/template1.0-vcd15-multi-vm.xml",  VCloudMediaType.VAPPTEMPLATE_XML +";version=1.0"))
             .build();   
 
-   protected HttpRequest version1_0GetOVFForVAppTemplateRequest = HttpRequest.builder().method("GET").endpoint(
-            URI.create(ENDPOINT + "/v1.0/vAppTemplate/" + templateId + "/ovf"))
-            .headers(ImmutableMultimap.<String, String> builder()
-            .put(HttpHeaders.ACCEPT, MediaType.TEXT_XML)
-            .put(HttpHeaders.COOKIE, "vcloud-token=" + sessionToken).build()).build();
+   protected HttpRequest version1_0GetOVFForVAppTemplateRequest = HttpRequest.builder().method("GET").endpoint(ENDPOINT + "/v1.0/vAppTemplate/" + templateId + "/ovf")
+            .addHeader(HttpHeaders.ACCEPT, MediaType.TEXT_XML)
+            .addHeader("x-vcloud-authorization", sessionToken)
+            .addHeader(HttpHeaders.COOKIE, "vcloud-token=" + sessionToken).build();
    
    protected HttpResponse successfulVersion1_0GetOVFForVAppTemplateResponseFromVCD1_5WithSingleVM = HttpResponse.builder().statusCode(200)
             .message("HTTP/1.1 200 OK").payload(payloadFromResourceWithContentType("/ovf-ubuntu64.xml",  MediaType.TEXT_XML +";version=1.0"))
diff --git a/apis/vcloud/src/test/java/org/jclouds/vcloud/compute/strategy/InstantiateVAppTemplateWithGroupEncodedIntoNameThenCustomizeDeployAndPowerOnExpectTest.java b/apis/vcloud/src/test/java/org/jclouds/vcloud/compute/strategy/InstantiateVAppTemplateWithGroupEncodedIntoNameThenCustomizeDeployAndPowerOnExpectTest.java
index 42b16bf..176e82a 100644
--- a/apis/vcloud/src/test/java/org/jclouds/vcloud/compute/strategy/InstantiateVAppTemplateWithGroupEncodedIntoNameThenCustomizeDeployAndPowerOnExpectTest.java
+++ b/apis/vcloud/src/test/java/org/jclouds/vcloud/compute/strategy/InstantiateVAppTemplateWithGroupEncodedIntoNameThenCustomizeDeployAndPowerOnExpectTest.java
@@ -86,10 +86,10 @@
                                         .e("AllEULAsAccepted").t("true").up()
                                         .asString(outputProperties);
      
-      HttpRequest version1_0InstantiateWithNetworkNamedSameAsOrgNetwork = HttpRequest.builder()
-                                                                           .method("POST")
+      HttpRequest version1_0InstantiateWithNetworkNamedSameAsOrgNetwork = HttpRequest.builder().method("POST")
                                                                            .endpoint(ENDPOINT + "/v1.0/vdc/" + vdcId + "/action/instantiateVAppTemplate")
                                                                            .addHeader(HttpHeaders.ACCEPT, "application/vnd.vmware.vcloud.vApp+xml")
+                                                                           .addHeader("x-vcloud-authorization", sessionToken)
                                                                            .addHeader(HttpHeaders.COOKIE, "vcloud-token=" + sessionToken)
                                                                            .payload(payloadFromStringWithContentType(instantiateXML, "application/vnd.vmware.vcloud.instantiateVAppTemplateParams+xml")).build();
                                                                         
@@ -143,12 +143,12 @@
                                         .e("AllEULAsAccepted").t("true").up()
                                         .asString(outputProperties);
      
-      HttpRequest version1_0InstantiateWithCustomizedNetwork = HttpRequest.builder()
-                                                                           .method("POST")
-                                                                           .endpoint(ENDPOINT + "/v1.0/vdc/" + vdcId + "/action/instantiateVAppTemplate")
-                                                                           .addHeader(HttpHeaders.ACCEPT, "application/vnd.vmware.vcloud.vApp+xml")
-                                                                            .addHeader(HttpHeaders.COOKIE, "vcloud-token=" + sessionToken)
-                                                                           .payload(payloadFromStringWithContentType(instantiateXML, "application/vnd.vmware.vcloud.instantiateVAppTemplateParams+xml")).build();
+      HttpRequest version1_0InstantiateWithCustomizedNetwork = HttpRequest.builder().method("POST")
+                                                                          .endpoint(ENDPOINT + "/v1.0/vdc/" + vdcId + "/action/instantiateVAppTemplate")
+                                                                          .addHeader(HttpHeaders.ACCEPT, "application/vnd.vmware.vcloud.vApp+xml")
+                                                                          .addHeader("x-vcloud-authorization", sessionToken)
+                                                                          .addHeader(HttpHeaders.COOKIE, "vcloud-token=" + sessionToken)
+                                                                          .payload(payloadFromStringWithContentType(instantiateXML, "application/vnd.vmware.vcloud.instantiateVAppTemplateParams+xml")).build();
                                                                         
       ComputeService compute = requestsSendResponses(ImmutableMap.<HttpRequest, HttpResponse> builder()
               .put(versionsRequest, versionsResponseFromVCD1_5)
diff --git a/apis/vcloud/src/test/java/org/jclouds/vcloud/filters/SetVCloudTokenCookieTest.java b/apis/vcloud/src/test/java/org/jclouds/vcloud/filters/AddVCloudAuthorizationAndCookieToRequestTest.java
similarity index 78%
rename from apis/vcloud/src/test/java/org/jclouds/vcloud/filters/SetVCloudTokenCookieTest.java
rename to apis/vcloud/src/test/java/org/jclouds/vcloud/filters/AddVCloudAuthorizationAndCookieToRequestTest.java
index 818b6a6..298e1ac 100644
--- a/apis/vcloud/src/test/java/org/jclouds/vcloud/filters/SetVCloudTokenCookieTest.java
+++ b/apis/vcloud/src/test/java/org/jclouds/vcloud/filters/AddVCloudAuthorizationAndCookieToRequestTest.java
@@ -31,14 +31,14 @@
 /**
  * @author Adrian Cole
  */
-@Test
-public class SetVCloudTokenCookieTest {
+@Test(testName = "AddVCloudAuthorizationAndCookieToRequestTest")
+public class AddVCloudAuthorizationAndCookieToRequestTest {
 
-   private SetVCloudTokenCookie filter;
+   private AddVCloudAuthorizationAndCookieToRequest filter;
 
    @BeforeTest
    void setUp() {
-      filter = new SetVCloudTokenCookie(new Supplier<String>() {
+      filter = new AddVCloudAuthorizationAndCookieToRequest(new Supplier<String>() {
          public String get() {
             return "token";
          }
@@ -49,9 +49,9 @@
    public void testApply() {
       HttpRequest request = HttpRequest.builder().method("GET").endpoint("http://localhost").build();
       request = filter.filter(request);
-      assertEquals(request.getHeaders().size(), 1);
+      assertEquals(request.getHeaders().size(), 2);
       assertEquals(request.getFirstHeaderOrNull(HttpHeaders.COOKIE), "vcloud-token=token");
-
+      assertEquals(request.getFirstHeaderOrNull("x-vcloud-authorization"), "token");
    }
 
 }
diff --git a/apis/vcloud/src/test/java/org/jclouds/vcloud/internal/BaseVCloudAsyncClientTest.java b/apis/vcloud/src/test/java/org/jclouds/vcloud/internal/BaseVCloudAsyncClientTest.java
index 920d5c9..22fb8a0 100644
--- a/apis/vcloud/src/test/java/org/jclouds/vcloud/internal/BaseVCloudAsyncClientTest.java
+++ b/apis/vcloud/src/test/java/org/jclouds/vcloud/internal/BaseVCloudAsyncClientTest.java
@@ -55,7 +55,7 @@
 import org.jclouds.vcloud.domain.internal.OrgImpl;
 import org.jclouds.vcloud.domain.internal.ReferenceTypeImpl;
 import org.jclouds.vcloud.domain.internal.VDCImpl;
-import org.jclouds.vcloud.filters.SetVCloudTokenCookie;
+import org.jclouds.vcloud.filters.AddVCloudAuthorizationAndCookieToRequest;
 import org.jclouds.vcloud.xml.VAppTemplateHandlerTest;
 import org.testng.annotations.Test;
 
@@ -82,7 +82,7 @@
    @Override
    protected void checkFilters(HttpRequest request) {
       assertEquals(request.getFilters().size(), 1);
-      assertEquals(request.getFilters().get(0).getClass(), SetVCloudTokenCookie.class);
+      assertEquals(request.getFilters().get(0).getClass(), AddVCloudAuthorizationAndCookieToRequest.class);
    }
 
    @Override
diff --git a/apis/vcloud/src/test/java/org/jclouds/vcloud/xml/GuestCustomizationSectionHandlerTest.java b/apis/vcloud/src/test/java/org/jclouds/vcloud/xml/GuestCustomizationSectionHandlerTest.java
index 073b0c2..977e8f2 100644
--- a/apis/vcloud/src/test/java/org/jclouds/vcloud/xml/GuestCustomizationSectionHandlerTest.java
+++ b/apis/vcloud/src/test/java/org/jclouds/vcloud/xml/GuestCustomizationSectionHandlerTest.java
@@ -55,18 +55,18 @@
       assertEquals(result.getHref(),
             URI.create("https://vcenterprise.bluelock.com/api/v1.0/vApp/vm-2087535248/guestCustomizationSection/"));
       assertEquals(result.getInfo(), "Specifies Guest OS Customization Settings");
-      assertEquals(result.isEnabled(), new Boolean(true));
-      assertEquals(result.shouldChangeSid(), new Boolean(false));
+      assertEquals(result.isEnabled(), Boolean.TRUE);
+      assertEquals(result.shouldChangeSid(), Boolean.FALSE);
       assertEquals(result.getVirtualMachineId(), "2087535248");
-      assertEquals(result.isJoinDomainEnabled(), new Boolean(false));
-      assertEquals(result.useOrgSettings(), new Boolean(false));
+      assertEquals(result.isJoinDomainEnabled(), Boolean.FALSE);
+      assertEquals(result.useOrgSettings(), Boolean.FALSE);
       assertEquals(result.getDomainName(), null);
       assertEquals(result.getDomainUserName(), null);
       assertEquals(result.getDomainUserPassword(), null);
-      assertEquals(result.isAdminPasswordEnabled(), new Boolean(true));
-      assertEquals(result.isAdminPasswordAuto(), new Boolean(true));
+      assertEquals(result.isAdminPasswordEnabled(), Boolean.TRUE);
+      assertEquals(result.isAdminPasswordAuto(), Boolean.TRUE);
       assertEquals(result.getAdminPassword(), null);
-      assertEquals(result.isResetPasswordRequired(), new Boolean(false));
+      assertEquals(result.isResetPasswordRequired(), Boolean.FALSE);
       assertEquals(result.getCustomizationScript(), "cat > /root/foo.txt<<EOF\nI '\"love\"' {asc|!}*&\nEOF\n");
       assertEquals(result.getComputerName(), "RHEL5");
       assertEquals(
diff --git a/apis/vcloud/src/test/java/org/jclouds/vcloud/xml/NetworkConnectionSectionHandlerTest.java b/apis/vcloud/src/test/java/org/jclouds/vcloud/xml/NetworkConnectionSectionHandlerTest.java
index ab5a7d9..2a7226a 100644
--- a/apis/vcloud/src/test/java/org/jclouds/vcloud/xml/NetworkConnectionSectionHandlerTest.java
+++ b/apis/vcloud/src/test/java/org/jclouds/vcloud/xml/NetworkConnectionSectionHandlerTest.java
@@ -57,7 +57,7 @@
                .create("https://vcenterprise.bluelock.com/api/v1.0/vApp/vm-2087535248/networkConnectionSection/"));
       assertEquals(result.getType(), VCloudMediaType.NETWORKCONNECTIONSECTION_XML);
       assertEquals(result.getInfo(), "Specifies the available VM network connections");
-      assertEquals(result.getPrimaryNetworkConnectionIndex(), new Integer(0));
+      assertEquals(result.getPrimaryNetworkConnectionIndex(), Integer.valueOf(0));
       assertEquals(result.getEdit(), new ReferenceTypeImpl(null, VCloudMediaType.NETWORKCONNECTIONSECTION_XML, URI
                .create("https://vcenterprise.bluelock.com/api/v1.0/vApp/vm-2087535248/networkConnectionSection/")));
       NetworkConnectionHandlerTest.checkNetworkConnection(Iterables.getOnlyElement(result.getConnections()));
diff --git a/apis/vcloud/src/test/java/org/jclouds/vcloud/xml/VAppTemplateHandlerTest.java b/apis/vcloud/src/test/java/org/jclouds/vcloud/xml/VAppTemplateHandlerTest.java
index 9bfe3b8..9bffc70 100644
--- a/apis/vcloud/src/test/java/org/jclouds/vcloud/xml/VAppTemplateHandlerTest.java
+++ b/apis/vcloud/src/test/java/org/jclouds/vcloud/xml/VAppTemplateHandlerTest.java
@@ -86,18 +86,18 @@
                URI
                         .create("https://vcenterprise.bluelock.com/api/v1.0/vAppTemplate/vm-172837194/guestCustomizationSection/"));
       assertEquals(guestC.getInfo(), "Specifies Guest OS Customization Settings");
-      assertEquals(guestC.isEnabled(), new Boolean(true));
-      assertEquals(guestC.shouldChangeSid(), new Boolean(false));
+      assertEquals(guestC.isEnabled(), Boolean.TRUE);
+      assertEquals(guestC.shouldChangeSid(), Boolean.FALSE);
       assertEquals(guestC.getVirtualMachineId(), "172837194");
-      assertEquals(guestC.isJoinDomainEnabled(), new Boolean(false));
-      assertEquals(guestC.useOrgSettings(), new Boolean(false));
+      assertEquals(guestC.isJoinDomainEnabled(), Boolean.FALSE);
+      assertEquals(guestC.useOrgSettings(), Boolean.FALSE);
       assertEquals(guestC.getDomainName(), null);
       assertEquals(guestC.getDomainUserName(), null);
       assertEquals(guestC.getDomainUserPassword(), null);
-      assertEquals(guestC.isAdminPasswordEnabled(), new Boolean(true));
-      assertEquals(guestC.isAdminPasswordAuto(), new Boolean(true));
+      assertEquals(guestC.isAdminPasswordEnabled(), Boolean.TRUE);
+      assertEquals(guestC.isAdminPasswordAuto(), Boolean.TRUE);
       assertEquals(guestC.getAdminPassword(), "%3eD%gmF");
-      assertEquals(guestC.isResetPasswordRequired(), new Boolean(false));
+      assertEquals(guestC.isResetPasswordRequired(), Boolean.FALSE);
       assertEquals(
                guestC.getCustomizationScript(),
                "#!/bin/bash if [ \"$1\" = \"postcustomization\" ]; then echo \"post customization\" touch /root/.postcustomization sleep 30 #regenerate keys /bin/rm /etc/ssh/ssh_host_* /usr/sbin/dpkg-reconfigure openssh-server echo \"completed\" fi");
diff --git a/apis/vcloud/src/test/java/org/jclouds/vcloud/xml/ovf/VCloudOperatingSystemSectionHandlerTest.java b/apis/vcloud/src/test/java/org/jclouds/vcloud/xml/ovf/VCloudOperatingSystemSectionHandlerTest.java
index 1b9e07b..9420493 100644
--- a/apis/vcloud/src/test/java/org/jclouds/vcloud/xml/ovf/VCloudOperatingSystemSectionHandlerTest.java
+++ b/apis/vcloud/src/test/java/org/jclouds/vcloud/xml/ovf/VCloudOperatingSystemSectionHandlerTest.java
@@ -55,7 +55,7 @@
       assertEquals(result.getEdit(), new ReferenceTypeImpl(null,
                "application/vnd.vmware.vcloud.operatingSystemSection+xml",
                URI.create("https://vcenterprise.bluelock.com/api/v1.0/vApp/vm-2087535248/operatingSystemSection/")));
-      assertEquals(result.getId(), new Integer(80));
+      assertEquals(result.getId(), Integer.valueOf(80));
       assertEquals(result.getVmwOsType(), "rhel5_64Guest");
       assertEquals(result.getType(), "application/vnd.vmware.vcloud.operatingSystemSection+xml");
       assertEquals(result.getInfo(), "Specifies the operating system installed");
diff --git a/apis/filesystem/src/main/java/org/jclouds/filesystem/FilesystemAsyncBlobStore.java b/blobstore/src/main/java/org/jclouds/blobstore/LocalAsyncBlobStore.java
similarity index 82%
rename from apis/filesystem/src/main/java/org/jclouds/filesystem/FilesystemAsyncBlobStore.java
rename to blobstore/src/main/java/org/jclouds/blobstore/LocalAsyncBlobStore.java
index 813feb7..16fc21b 100644
--- a/apis/filesystem/src/main/java/org/jclouds/filesystem/FilesystemAsyncBlobStore.java
+++ b/blobstore/src/main/java/org/jclouds/blobstore/LocalAsyncBlobStore.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.jclouds.filesystem;
+package org.jclouds.blobstore;
 
 import static com.google.common.base.Preconditions.checkNotNull;
 import static com.google.common.base.Preconditions.checkState;
@@ -26,24 +26,15 @@
 import static com.google.common.collect.Iterables.find;
 import static com.google.common.collect.Iterables.size;
 import static com.google.common.collect.Iterables.transform;
-import static com.google.common.collect.Maps.newHashMap;
 import static com.google.common.collect.Sets.filter;
 import static com.google.common.collect.Sets.newTreeSet;
 import static com.google.common.io.ByteStreams.toByteArray;
 import static com.google.common.util.concurrent.Futures.immediateFailedFuture;
 import static com.google.common.util.concurrent.Futures.immediateFuture;
 
-import java.io.ByteArrayInputStream;
 import java.io.ByteArrayOutputStream;
-import java.io.File;
 import java.io.IOException;
-import java.io.ObjectInput;
-import java.io.ObjectInputStream;
-import java.io.ObjectOutput;
-import java.io.ObjectOutputStream;
 import java.util.Date;
-import java.util.Map;
-import java.util.Map.Entry;
 import java.util.Set;
 import java.util.SortedSet;
 import java.util.concurrent.ExecutorService;
@@ -51,13 +42,8 @@
 import javax.annotation.Resource;
 import javax.inject.Inject;
 import javax.inject.Named;
-import javax.ws.rs.Path;
-import javax.ws.rs.PathParam;
 
 import org.jclouds.Constants;
-import org.jclouds.blobstore.BlobStoreContext;
-import org.jclouds.blobstore.ContainerNotFoundException;
-import org.jclouds.blobstore.KeyNotFoundException;
 import org.jclouds.blobstore.domain.Blob;
 import org.jclouds.blobstore.domain.Blob.Factory;
 import org.jclouds.blobstore.domain.BlobMetadata;
@@ -68,21 +54,16 @@
 import org.jclouds.blobstore.domain.StorageType;
 import org.jclouds.blobstore.domain.internal.MutableStorageMetadataImpl;
 import org.jclouds.blobstore.domain.internal.PageSetImpl;
-import org.jclouds.blobstore.functions.HttpGetOptionsListToGetOptions;
 import org.jclouds.blobstore.internal.BaseAsyncBlobStore;
 import org.jclouds.blobstore.options.CreateContainerOptions;
 import org.jclouds.blobstore.options.GetOptions;
 import org.jclouds.blobstore.options.ListContainerOptions;
 import org.jclouds.blobstore.options.PutOptions;
 import org.jclouds.blobstore.strategy.IfDirectoryReturnNameStrategy;
+import org.jclouds.blobstore.util.BlobStoreUtils;
 import org.jclouds.blobstore.util.BlobUtils;
 import org.jclouds.collect.Memoized;
-import org.jclouds.crypto.Crypto;
-import org.jclouds.crypto.CryptoStreams;
-import org.jclouds.date.DateService;
 import org.jclouds.domain.Location;
-import org.jclouds.filesystem.predicates.validators.FilesystemContainerNameValidator;
-import org.jclouds.filesystem.strategy.FilesystemStorageStrategy;
 import org.jclouds.http.HttpCommand;
 import org.jclouds.http.HttpRequest;
 import org.jclouds.http.HttpResponse;
@@ -91,10 +72,7 @@
 import org.jclouds.io.ContentMetadata;
 import org.jclouds.io.ContentMetadataCodec;
 import org.jclouds.io.Payload;
-import org.jclouds.io.Payloads;
-import org.jclouds.io.payloads.BaseMutableContentMetadata;
 import org.jclouds.logging.Logger;
-import org.jclouds.rest.annotations.ParamValidators;
 
 import com.google.common.base.Function;
 import com.google.common.base.Predicate;
@@ -105,43 +83,38 @@
 import com.google.common.util.concurrent.ListenableFuture;
 
 /**
- * 
- * Preconditions: Blob name cannot start with / char (or \ under windows)
- * 
+ * Implementation of {@link BaseAsyncBlobStore} which uses a pluggable
+ * LocalStorageStrategy.
+ *
+ * @author Adrian Cole
  * @author Alfredo "Rainbowbreeze" Morresi
+ * @author Andrew Gaul
+ * @author James Murty
  */
-public class FilesystemAsyncBlobStore extends BaseAsyncBlobStore {
+public class LocalAsyncBlobStore extends BaseAsyncBlobStore {
 
    @Resource
    protected Logger logger = Logger.NULL;
 
-   protected final DateService dateService;
-   protected final Crypto crypto;
-   protected final HttpGetOptionsListToGetOptions httpGetOptionsConverter;
    protected final ContentMetadataCodec contentMetadataCodec;
    protected final IfDirectoryReturnNameStrategy ifDirectoryReturnName;
    protected final Factory blobFactory;
-   protected final FilesystemStorageStrategy storageStrategy;
+   protected final LocalStorageStrategy storageStrategy;
 
    @Inject
-   protected FilesystemAsyncBlobStore(BlobStoreContext context,
-         DateService dateService, Crypto crypto,
-         HttpGetOptionsListToGetOptions httpGetOptionsConverter,
-         ContentMetadataCodec contentMetadataCodec,
-         IfDirectoryReturnNameStrategy ifDirectoryReturnName,
+   protected LocalAsyncBlobStore(BlobStoreContext context,
          BlobUtils blobUtils,
          @Named(Constants.PROPERTY_USER_THREADS) ExecutorService service,
          Supplier<Location> defaultLocation,
          @Memoized Supplier<Set<? extends Location>> locations,
-         Factory blobFactory, FilesystemStorageStrategy storageStrategy) {
+         ContentMetadataCodec contentMetadataCodec,
+         IfDirectoryReturnNameStrategy ifDirectoryReturnName,
+         Factory blobFactory, LocalStorageStrategy storageStrategy) {
       super(context, blobUtils, service, defaultLocation, locations);
       this.blobFactory = blobFactory;
-      this.dateService = dateService;
-      this.crypto = crypto;
-      this.httpGetOptionsConverter = httpGetOptionsConverter;
       this.contentMetadataCodec = contentMetadataCodec;
       this.ifDirectoryReturnName = ifDirectoryReturnName;
-      this.storageStrategy = checkNotNull(storageStrategy, "Storage strategy");
+      this.storageStrategy = storageStrategy;
    }
 
    /**
@@ -170,7 +143,7 @@
                   checkState(oldBlob != null, "blob " + key + " is not present although it was in the list of "
                         + container);
                   checkState(oldBlob.getMetadata() != null, "blob " + container + "/" + key + " has no metadata");
-                  MutableBlobMetadata md = copy(oldBlob.getMetadata());
+                  MutableBlobMetadata md = BlobStoreUtils.copy(oldBlob.getMetadata());
                   String directoryName = ifDirectoryReturnName.execute(md);
                   if (directoryName != null) {
                      md.setName(directoryName);
@@ -211,7 +184,7 @@
             }
          }
 
-         final String delimiter = options.isRecursive() ? null : File.separator;
+         final String delimiter = options.isRecursive() ? null : storageStrategy.getSeparator();
          if (delimiter != null) {
             SortedSet<String> commonPrefixes = newTreeSet(
                    transform(contents, new CommonPrefixes(prefix, delimiter)));
@@ -249,37 +222,6 @@
             storageStrategy.getAllContainerNames()));
    }
 
-   public static MutableBlobMetadata copy(MutableBlobMetadata in) {
-      ByteArrayOutputStream bout = new ByteArrayOutputStream();
-      ObjectOutput os;
-      try {
-         os = new ObjectOutputStream(bout);
-         os.writeObject(in);
-         ObjectInput is = new ObjectInputStream(new ByteArrayInputStream(bout.toByteArray()));
-         MutableBlobMetadata metadata = (MutableBlobMetadata) is.readObject();
-         convertUserMetadataKeysToLowercase(metadata);
-         metadata.setContentMetadata(BaseMutableContentMetadata.fromContentMetadata(in.getContentMetadata().toBuilder()
-               .build()));
-         return metadata;
-      } catch (Exception e) {
-         throw propagate(e);
-      }
-   }
-
-   private static void convertUserMetadataKeysToLowercase(MutableBlobMetadata metadata) {
-      Map<String, String> lowerCaseUserMetadata = newHashMap();
-      for (Entry<String, String> entry : metadata.getUserMetadata().entrySet()) {
-         lowerCaseUserMetadata.put(entry.getKey().toLowerCase(), entry.getValue());
-      }
-      metadata.setUserMetadata(lowerCaseUserMetadata);
-   }
-
-   public static MutableBlobMetadata copy(MutableBlobMetadata in, String newKey) {
-      MutableBlobMetadata newMd = copy(in);
-      newMd.setName(newKey);
-      return newMd;
-   }
-
    /**
     * {@inheritDoc}
     */
@@ -290,6 +232,15 @@
    }
 
    /**
+    * {@inheritDoc}
+    */
+   @Override
+   public ListenableFuture<Void> clearContainer(final String container) {
+      storageStrategy.clearContainer(container);
+      return immediateFuture(null);
+   }
+
+   /**
     * Override parent method because it uses strange futures and listenables
     * that creates problem in the test if more than one test that deletes the
     * container is executed
@@ -303,6 +254,22 @@
       return immediateFuture(null);
    }
 
+   public ListenableFuture<Boolean> deleteContainerIfEmpty(final String container) {
+      Boolean returnVal = true;
+      if (storageStrategy.containerExists(container)) {
+         try {
+            if (Iterables.isEmpty(storageStrategy.getBlobKeysInsideContainer(container)))
+               storageStrategy.deleteContainer(container);
+            else
+               returnVal = false;
+         } catch (IOException e) {
+            logger.error(e, "An error occurred loading blobs contained into container %s", container);
+            Throwables.propagate(e);
+         }
+      }
+      return immediateFuture(returnVal);
+   }
+
    /**
     * {@inheritDoc}
     */
@@ -324,6 +291,7 @@
                   MutableStorageMetadata cmd = create();
                   cmd.setName(name);
                   cmd.setType(StorageType.CONTAINER);
+                  cmd.setLocation(storageStrategy.getLocation(name));
                   return cmd;
                }
             }), null));
@@ -336,11 +304,10 @@
    /**
     * {@inheritDoc}
     */
-   @Path("{container}")
    @Override
    public ListenableFuture<Boolean> createContainerInLocation(final Location location,
-         @PathParam("container") @ParamValidators({ FilesystemContainerNameValidator.class }) String name) {
-      boolean result = storageStrategy.createContainer(name);
+         final String name) {
+      boolean result = storageStrategy.createContainerInLocation(name, location);
       return immediateFuture(result);
    }
 
@@ -461,18 +428,12 @@
       }
 
       try {
-         // TODO
-         // must override existing file?
-
-         storageStrategy.putBlob(containerName, blob);
+         return immediateFuture(storageStrategy.putBlob(containerName, blob));
       } catch (IOException e) {
          logger.error(e, "An error occurred storing the new blob with name [%s] to container [%s].", blobKey,
                containerName);
-         Throwables.propagate(e);
+         throw Throwables.propagate(e);
       }
-
-      String eTag = getEtag(blob);
-      return immediateFuture(eTag);
    }
 
    private void copyPayloadHeadersToBlob(Payload payload, Blob blob) {
@@ -573,7 +534,7 @@
             byte[] byteArray = out.toByteArray();
             blob.setPayload(byteArray);
             HttpUtils.copy(cmd, blob.getPayload().getContentMetadata());
-            blob.getPayload().getContentMetadata().setContentLength(new Long(byteArray.length));
+            blob.getPayload().getContentMetadata().setContentLength(Long.valueOf(byteArray.length));
          }
       }
       checkNotNull(blob.getPayload(), "payload " + blob);
@@ -587,7 +548,7 @@
    public ListenableFuture<BlobMetadata> blobMetadata(final String container, final String key) {
       try {
          Blob blob = getBlob(container, key).get();
-         return immediateFuture(blob != null ? (BlobMetadata) copy(blob.getMetadata()) : null);
+         return immediateFuture(blob != null ? (BlobMetadata) BlobStoreUtils.copy(blob.getMetadata()) : null);
       } catch (Exception e) {
          if (size(filter(getCausalChain(e), KeyNotFoundException.class)) >= 1)
             return immediateFuture(null);
@@ -595,26 +556,8 @@
       }
    }
 
-   /**
-    * Calculates the object MD5 and returns it as eTag
-    * 
-    * @param object
-    * @return
-    */
-   private String getEtag(Blob object) {
-      try {
-         Payloads.calculateMD5(object, crypto.md5());
-      } catch (IOException ex) {
-         logger.error(ex, "An error occurred calculating MD5 for object with name %s.", object.getMetadata().getName());
-         Throwables.propagate(ex);
-      }
-
-      String eTag = CryptoStreams.hex(object.getPayload().getContentMetadata().getContentMD5());
-      return eTag;
-   }
-
    private Blob copyBlob(Blob blob) {
-      Blob returnVal = blobFactory.create(copy(blob.getMetadata()));
+      Blob returnVal = blobFactory.create(BlobStoreUtils.copy(blob.getMetadata()));
       returnVal.setPayload(blob.getPayload());
       copyPayloadHeadersToBlob(blob.getPayload(), returnVal);
       return returnVal;
diff --git a/blobstore/src/main/java/org/jclouds/blobstore/LocalStorageStrategy.java b/blobstore/src/main/java/org/jclouds/blobstore/LocalStorageStrategy.java
new file mode 100644
index 0000000..a6a6ec7
--- /dev/null
+++ b/blobstore/src/main/java/org/jclouds/blobstore/LocalStorageStrategy.java
@@ -0,0 +1,133 @@
+/**
+ * Licensed to jclouds, Inc. (jclouds) under one or more
+ * contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  jclouds 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.blobstore;
+
+import java.io.IOException;
+
+import org.jclouds.blobstore.domain.Blob;
+import org.jclouds.blobstore.options.ListContainerOptions;
+import org.jclouds.domain.Location;
+
+/**
+ * Strategy for local operations related to container and blob
+ *
+ * @author Alfredo "Rainbowbreeze" Morresi
+ */
+public interface LocalStorageStrategy {
+
+    /**
+     * Creates a new container
+     *
+     * @param container
+     * @return
+     */
+    boolean createContainerInLocation(String container, Location location);
+
+    /**
+     * Deletes a container and all its content
+     * @param container
+     */
+    void deleteContainer(String container);
+
+    /**
+     * Checks if a container exists
+     * @param container
+     * @return
+     */
+    boolean containerExists(String container);
+
+    /**
+     * Empty the container of its content (files and subdirectories), but doesn't
+     * delete the container itself
+     * @param container
+     */
+    void clearContainer(String container);
+
+    /**
+     * Like {@link #clearContainer(String)} except you can use options to do things like recursive
+     * deletes, or clear at a different path than root.
+     *
+     * @param container
+     *           what to clear
+     * @param options
+     *           recursion and path to clear
+     */
+    void clearContainer(String container, ListContainerOptions options);
+
+    /**
+     * Return an iterator that reports all the containers under base path
+     * @return
+     */
+    Iterable<String> getAllContainerNames();
+
+    /**
+     * Return true if a blob named by key exists
+     * @param container
+     * @param key
+     * @return
+     */
+    boolean blobExists(String container, String key);
+
+    /**
+     * Load the blob with the given key belonging to the container with the given
+     * name. There must exist a resource on the file system whose complete name
+     * is given concatenating the container name and the key
+     *
+     * @param container
+     *           it's the name of the container the blob belongs to
+     * @param key
+     *           it's the key of the blob
+     *
+     * @return the blob belonging to the given container with the given key
+     */
+    Blob getBlob(String containerName, String blobName);
+
+    /**
+     * Returns all the blobs key inside a container
+     * @param container
+     * @return
+     * @throws IOException
+     */
+    Iterable<String> getBlobKeysInsideContainer(String container) throws IOException;
+
+    /**
+     * Remove blob named by the given key
+     * @param container
+     * @param key
+     */
+    void removeBlob(String container, String key);
+
+    /**
+     * Write a {@link Blob} into a file
+     * @param container
+     * @param blob
+     * @return etag of blob
+     * @throws IOException
+     */
+    String putBlob(String containerName, Blob blob) throws IOException;
+
+    /**
+     * @param containerName name of container
+     * @return Location of container or null
+     */
+    Location getLocation(String containerName);
+
+    /** @return path separator, either / or \ */
+    String getSeparator();
+}
diff --git a/blobstore/src/main/java/org/jclouds/blobstore/TransientAsyncBlobStore.java b/blobstore/src/main/java/org/jclouds/blobstore/TransientAsyncBlobStore.java
deleted file mode 100644
index 4e6074a..0000000
--- a/blobstore/src/main/java/org/jclouds/blobstore/TransientAsyncBlobStore.java
+++ /dev/null
@@ -1,683 +0,0 @@
-/**
- * Licensed to jclouds, Inc. (jclouds) under one or more
- * contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  jclouds 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.blobstore;
-
-import static com.google.common.base.Preconditions.checkNotNull;
-import static com.google.common.base.Preconditions.checkState;
-import static com.google.common.base.Throwables.getCausalChain;
-import static com.google.common.base.Throwables.propagate;
-import static com.google.common.collect.Iterables.filter;
-import static com.google.common.collect.Iterables.find;
-import static com.google.common.collect.Iterables.size;
-import static com.google.common.collect.Iterables.transform;
-import static com.google.common.collect.Maps.newHashMap;
-import static com.google.common.collect.Sets.filter;
-import static com.google.common.collect.Sets.newTreeSet;
-import static com.google.common.io.ByteStreams.toByteArray;
-import static com.google.common.util.concurrent.Futures.immediateFailedFuture;
-import static com.google.common.util.concurrent.Futures.immediateFuture;
-
-import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
-import java.io.IOException;
-import java.io.ObjectInput;
-import java.io.ObjectInputStream;
-import java.io.ObjectOutput;
-import java.io.ObjectOutputStream;
-import java.util.Collections;
-import java.util.Date;
-import java.util.Map;
-import java.util.Map.Entry;
-import java.util.Set;
-import java.util.SortedSet;
-import java.util.concurrent.ExecutorService;
-
-import javax.annotation.Resource;
-import javax.inject.Inject;
-import javax.inject.Named;
-import javax.inject.Provider;
-import javax.ws.rs.core.HttpHeaders;
-import javax.ws.rs.core.UriBuilder;
-
-import org.jclouds.Constants;
-import org.jclouds.blobstore.domain.Blob;
-import org.jclouds.blobstore.domain.Blob.Factory;
-import org.jclouds.blobstore.domain.BlobMetadata;
-import org.jclouds.blobstore.domain.MutableBlobMetadata;
-import org.jclouds.blobstore.domain.MutableStorageMetadata;
-import org.jclouds.blobstore.domain.PageSet;
-import org.jclouds.blobstore.domain.StorageMetadata;
-import org.jclouds.blobstore.domain.StorageType;
-import org.jclouds.blobstore.domain.internal.MutableStorageMetadataImpl;
-import org.jclouds.blobstore.domain.internal.PageSetImpl;
-import org.jclouds.blobstore.functions.HttpGetOptionsListToGetOptions;
-import org.jclouds.blobstore.internal.BaseAsyncBlobStore;
-import org.jclouds.blobstore.options.CreateContainerOptions;
-import org.jclouds.blobstore.options.GetOptions;
-import org.jclouds.blobstore.options.ListContainerOptions;
-import org.jclouds.blobstore.options.PutOptions;
-import org.jclouds.blobstore.strategy.IfDirectoryReturnNameStrategy;
-import org.jclouds.blobstore.util.BlobUtils;
-import org.jclouds.collect.Memoized;
-import org.jclouds.crypto.Crypto;
-import org.jclouds.crypto.CryptoStreams;
-import org.jclouds.date.DateService;
-import org.jclouds.domain.Location;
-import org.jclouds.http.HttpCommand;
-import org.jclouds.http.HttpRequest;
-import org.jclouds.http.HttpResponse;
-import org.jclouds.http.HttpResponseException;
-import org.jclouds.http.HttpUtils;
-import org.jclouds.io.ContentMetadata;
-import org.jclouds.io.ContentMetadataCodec;
-import org.jclouds.io.MutableContentMetadata;
-import org.jclouds.io.Payload;
-import org.jclouds.io.Payloads;
-import org.jclouds.io.payloads.ByteArrayPayload;
-import org.jclouds.io.payloads.DelegatingPayload;
-import org.jclouds.logging.Logger;
-
-import com.google.common.base.Function;
-import com.google.common.base.Predicate;
-import com.google.common.base.Supplier;
-import com.google.common.base.Throwables;
-import com.google.common.collect.Iterables;
-import com.google.common.collect.Multimaps;
-import com.google.common.util.concurrent.Futures;
-import com.google.common.util.concurrent.ListenableFuture;
-
-/**
- * Implementation of {@link BaseAsyncBlobStore} which keeps all data in a local Map object.
- * 
- * @author Adrian Cole
- * @author James Murty
- */
-public class TransientAsyncBlobStore extends BaseAsyncBlobStore {
-
-   @Resource
-   protected Logger logger = Logger.NULL;
-
-   protected final DateService dateService;
-   protected final Crypto crypto;
-   protected final HttpGetOptionsListToGetOptions httpGetOptionsConverter;
-   protected final ContentMetadataCodec contentMetadataCodec;
-   protected final IfDirectoryReturnNameStrategy ifDirectoryReturnName;
-   protected final Factory blobFactory;
-   protected final TransientStorageStrategy storageStrategy;
-   protected final Provider<UriBuilder> uriBuilders;
-
-   @Inject
-   protected TransientAsyncBlobStore(BlobStoreContext context,
-         DateService dateService, Crypto crypto,
-         HttpGetOptionsListToGetOptions httpGetOptionsConverter,
-         ContentMetadataCodec contentMetadataCodec,
-         IfDirectoryReturnNameStrategy ifDirectoryReturnName,
-         BlobUtils blobUtils,
-         @Named(Constants.PROPERTY_USER_THREADS) ExecutorService service,
-         Supplier<Location> defaultLocation,
-         @Memoized Supplier<Set<? extends Location>> locations,
-         Factory blobFactory, Provider<UriBuilder> uriBuilders) {
-      super(context, blobUtils, service, defaultLocation, locations);
-      this.blobFactory = blobFactory;
-      this.dateService = dateService;
-      this.crypto = crypto;
-      this.httpGetOptionsConverter = httpGetOptionsConverter;
-      this.contentMetadataCodec = contentMetadataCodec;
-      this.ifDirectoryReturnName = ifDirectoryReturnName;
-      this.storageStrategy = new TransientStorageStrategy(defaultLocation);
-      this.uriBuilders = uriBuilders;
-   }
-
-   /**
-    * default maxResults is 1000
-    */
-   @Override
-   public ListenableFuture<PageSet<? extends StorageMetadata>> list(final String container, ListContainerOptions options) {
-
-      // Check if the container exists
-      if (!storageStrategy.containerExists(container))
-         return immediateFailedFuture(cnfe(container));
-
-      // Loading blobs from container
-      Iterable<String> blobBelongingToContainer = storageStrategy.getBlobKeysInsideContainer(container);
-
-      SortedSet<StorageMetadata> contents = newTreeSet(transform(blobBelongingToContainer,
-            new Function<String, StorageMetadata>() {
-               public StorageMetadata apply(String key) {
-                  Blob oldBlob = loadBlob(container, key);
-                  checkState(oldBlob != null, "blob " + key + " is not present although it was in the list of "
-                        + container);
-                  checkState(oldBlob.getMetadata() != null, "blob " + container + "/" + key + " has no metadata");
-                  MutableBlobMetadata md = copy(oldBlob.getMetadata());
-                  String directoryName = ifDirectoryReturnName.execute(md);
-                  if (directoryName != null) {
-                     md.setName(directoryName);
-                     md.setType(StorageType.RELATIVE_PATH);
-                  }
-                  return md;
-               }
-            }));
-
-      String marker = null;
-      if (options != null) {
-         if (options.getMarker() != null) {
-            final String finalMarker = options.getMarker();
-            StorageMetadata lastMarkerMetadata = find(contents, new Predicate<StorageMetadata>() {
-               public boolean apply(StorageMetadata metadata) {
-                  return metadata.getName().compareTo(finalMarker) > 0;
-               }
-            });
-            contents = contents.tailSet(lastMarkerMetadata);
-         }
-
-         final String prefix = options.getDir();
-         if (prefix != null) {
-            contents = newTreeSet(filter(contents, new Predicate<StorageMetadata>() {
-               public boolean apply(StorageMetadata o) {
-                  return (o != null && o.getName().startsWith(prefix) && !o.getName().equals(prefix));
-               }
-            }));
-         }
-
-         int maxResults = options.getMaxResults() != null ? options.getMaxResults() : 1000;
-         if (!contents.isEmpty()) {
-            StorageMetadata lastElement = contents.last();
-            contents = newTreeSet(Iterables.limit(contents, maxResults));
-            if (!contents.contains(lastElement)) {
-               // Partial listing
-               marker = contents.last().getName();
-            }
-         }
-
-         final String delimiter = options.isRecursive() ? null : "/";
-         if (delimiter != null) {
-            SortedSet<String> commonPrefixes = newTreeSet(
-                   transform(contents, new CommonPrefixes(prefix, delimiter)));
-            commonPrefixes.remove(CommonPrefixes.NO_PREFIX);
-
-            contents = newTreeSet(filter(contents, new DelimiterFilter(prefix, delimiter)));
-
-            Iterables.<StorageMetadata> addAll(contents, transform(commonPrefixes,
-                  new Function<String, StorageMetadata>() {
-                     public StorageMetadata apply(String o) {
-                        MutableStorageMetadata md = new MutableStorageMetadataImpl();
-                        md.setType(StorageType.RELATIVE_PATH);
-                        md.setName(o);
-                        return md;
-                     }
-                  }));
-         }
-
-         // trim metadata, if the response isn't supposed to be detailed.
-         if (!options.isDetailed()) {
-            for (StorageMetadata md : contents) {
-               md.getUserMetadata().clear();
-            }
-         }
-      }
-
-      return Futures.<PageSet<? extends StorageMetadata>> immediateFuture(new PageSetImpl<StorageMetadata>(contents,
-            marker));
-
-   }
-
-   private ContainerNotFoundException cnfe(final String name) {
-      return new ContainerNotFoundException(name, String.format(
-            "container %s not in %s", name,
-            storageStrategy.getAllContainerNames()));
-   }
-
-   public static MutableBlobMetadata copy(MutableBlobMetadata in) {
-      ByteArrayOutputStream bout = new ByteArrayOutputStream();
-      ObjectOutput os;
-      try {
-         os = new ObjectOutputStream(bout);
-         os.writeObject(in);
-         ObjectInput is = new ObjectInputStream(new ByteArrayInputStream(bout.toByteArray()));
-         MutableBlobMetadata metadata = (MutableBlobMetadata) is.readObject();
-         convertUserMetadataKeysToLowercase(metadata);
-         HttpUtils.copy(in.getContentMetadata(), metadata.getContentMetadata());
-         return metadata;
-      } catch (Exception e) {
-         throw propagate(e);
-      }
-   }
-
-   private static void convertUserMetadataKeysToLowercase(MutableBlobMetadata metadata) {
-      Map<String, String> lowerCaseUserMetadata = newHashMap();
-      for (Entry<String, String> entry : metadata.getUserMetadata().entrySet()) {
-         lowerCaseUserMetadata.put(entry.getKey().toLowerCase(), entry.getValue());
-      }
-      metadata.setUserMetadata(lowerCaseUserMetadata);
-   }
-
-   public static MutableBlobMetadata copy(MutableBlobMetadata in, String newKey) {
-      MutableBlobMetadata newMd = copy(in);
-      newMd.setName(newKey);
-      return newMd;
-   }
-
-   /**
-    * {@inheritDoc}
-    */
-   @Override
-   public ListenableFuture<Void> removeBlob(final String container, final String key) {
-      storageStrategy.removeBlob(container, key);
-      return immediateFuture(null);
-   }
-
-   /**
-    * {@inheritDoc}
-    */
-   @Override
-   public ListenableFuture<Void> clearContainer(final String container) {
-      storageStrategy.clearContainer(container);
-      return immediateFuture(null);
-   }
-
-   /**
-    * {@inheritDoc}
-    */
-   @Override
-   public ListenableFuture<Void> deleteContainer(final String container) {
-      deleteAndVerifyContainerGone(container);
-      return immediateFuture(null);
-   }
-
-   public ListenableFuture<Boolean> deleteContainerIfEmpty(final String container) {
-      Boolean returnVal = true;
-      if (storageStrategy.containerExists(container)) {
-         if (Iterables.isEmpty(storageStrategy.getBlobKeysInsideContainer(container)))
-            storageStrategy.deleteContainer(container);
-         else
-            returnVal = false;
-      }
-      return immediateFuture(returnVal);
-   }
-
-   /**
-    * {@inheritDoc}
-    */
-   @Override
-   public ListenableFuture<Boolean> containerExists(final String containerName) {
-      return immediateFuture(storageStrategy.containerExists(containerName));
-   }
-
-   /**
-    * {@inheritDoc}
-    */
-   @Override
-   public ListenableFuture<PageSet<? extends StorageMetadata>> list() {
-      Iterable<String> containers = storageStrategy.getAllContainerNames();
-
-      return Futures.<PageSet<? extends StorageMetadata>> immediateFuture(new PageSetImpl<StorageMetadata>(transform(
-            containers, new Function<String, StorageMetadata>() {
-               public StorageMetadata apply(String name) {
-                  MutableStorageMetadata cmd = create();
-                  cmd.setName(name);
-                  cmd.setType(StorageType.CONTAINER);
-                  cmd.setLocation(storageStrategy.getLocation(name));
-                  return cmd;
-               }
-            }), null));
-   }
-
-   protected MutableStorageMetadata create() {
-      return new MutableStorageMetadataImpl();
-   }
-
-   /**
-    * {@inheritDoc}
-    */
-   @Override
-   public ListenableFuture<Boolean> createContainerInLocation(final Location location,
-         final String name) {
-      boolean result = storageStrategy.createContainerInLocation(name, location);
-      return immediateFuture(result);
-   }
-
-   private Blob loadBlob(final String container, final String key) {
-      logger.debug("Opening blob in container: %s - %s", container, key);
-      return storageStrategy.getBlob(container, key);
-   }
-
-   protected static class DelimiterFilter implements Predicate<StorageMetadata> {
-      private final String prefix;
-      private final String delimiter;
-
-      public DelimiterFilter(String prefix, String delimiter) {
-         this.prefix = prefix;
-         this.delimiter = delimiter;
-      }
-
-      public boolean apply(StorageMetadata metadata) {
-         if (prefix == null)
-            return metadata.getName().indexOf(delimiter) == -1;
-         // ensure we don't accidentally append twice
-         String toMatch = prefix.endsWith("/") ? prefix : prefix + delimiter;
-         if (metadata.getName().startsWith(toMatch)) {
-            String unprefixedName = metadata.getName().replaceFirst(toMatch, "");
-            if (unprefixedName.equals("")) {
-               // we are the prefix in this case, return false
-               return false;
-            }
-            return unprefixedName.indexOf(delimiter) == -1;
-         }
-         return false;
-      }
-   }
-
-   protected static class CommonPrefixes implements Function<StorageMetadata, String> {
-      private final String prefix;
-      private final String delimiter;
-      public static final String NO_PREFIX = "NO_PREFIX";
-
-      public CommonPrefixes(String prefix, String delimiter) {
-         this.prefix = prefix;
-         this.delimiter = delimiter;
-      }
-
-      public String apply(StorageMetadata metadata) {
-         String working = metadata.getName();
-         if (prefix != null) {
-            // ensure we don't accidentally append twice
-            String toMatch = prefix.endsWith("/") ? prefix : prefix + delimiter;
-            if (working.startsWith(toMatch)) {
-               working = working.replaceFirst(toMatch, "");
-            }
-         }
-         if (working.contains(delimiter)) {
-            return working.substring(0, working.indexOf(delimiter));
-         }
-         return NO_PREFIX;
-      }
-   }
-
-   public static HttpResponseException returnResponseException(int code) {
-      HttpResponse response = HttpResponse.builder().statusCode(code).build();
-      return new HttpResponseException(new HttpCommand() {
-
-         public int getRedirectCount() {
-            return 0;
-         }
-
-         public int incrementRedirectCount() {
-            return 0;
-         }
-
-         public boolean isReplayable() {
-            return false;
-         }
-
-         public Exception getException() {
-            return null;
-         }
-
-         public int getFailureCount() {
-            return 0;
-         }
-
-         public int incrementFailureCount() {
-            return 0;
-         }
-
-         public void setException(Exception exception) {
-
-         }
-
-         @Override
-         public HttpRequest getCurrentRequest() {
-            return HttpRequest.builder().method("GET").endpoint("http://stub").build();
-         }
-
-         @Override
-         public void setCurrentRequest(HttpRequest request) {
-
-         }
-
-      }, response);
-   }
-
-   /**
-    * {@inheritDoc}
-    */
-   @Override
-   public ListenableFuture<String> putBlob(String containerName, Blob blob) {
-      checkNotNull(containerName, "containerName must be set");
-      checkNotNull(blob, "blob must be set");
-      String blobKey = blob.getMetadata().getName();
-
-      logger.debug("Put blob with key [%s] to container [%s]", blobKey, containerName);
-      if (!storageStrategy.containerExists(containerName)) {
-         return Futures.immediateFailedFuture(new IllegalStateException("containerName not found: " + containerName));
-      }
-
-      blob = createUpdatedCopyOfBlobInContainer(containerName, blob);
-
-      storageStrategy.putBlob(containerName, blob);
-
-      String eTag = getEtag(blob);
-      return immediateFuture(eTag);
-   }
-
-   private Blob createUpdatedCopyOfBlobInContainer(String containerName, Blob in) {
-      checkNotNull(in, "blob");
-      checkNotNull(in.getPayload(), "blob.payload");
-      ByteArrayPayload payload = (in.getPayload() instanceof ByteArrayPayload) ? ByteArrayPayload.class.cast(in
-               .getPayload()) : null;
-      if (payload == null)
-         payload = (in.getPayload() instanceof DelegatingPayload) ? (DelegatingPayload.class.cast(in.getPayload())
-                  .getDelegate() instanceof ByteArrayPayload) ? ByteArrayPayload.class.cast(DelegatingPayload.class
-                  .cast(in.getPayload()).getDelegate()) : null : null;
-      try {
-         if (payload == null || !(payload instanceof ByteArrayPayload)) {
-            MutableContentMetadata oldMd = in.getPayload().getContentMetadata();
-            ByteArrayOutputStream out = new ByteArrayOutputStream();
-            in.getPayload().writeTo(out);
-            payload = (ByteArrayPayload) Payloads.calculateMD5(Payloads.newPayload(out.toByteArray()));
-            HttpUtils.copy(oldMd, payload.getContentMetadata());
-         } else {
-            if (payload.getContentMetadata().getContentMD5() == null)
-               Payloads.calculateMD5(in, crypto.md5());
-         }
-      } catch (IOException e) {
-         Throwables.propagate(e);
-      }
-      Blob blob = blobFactory.create(copy(in.getMetadata()));
-      blob.setPayload(payload);
-      blob.getMetadata().setContainer(containerName);
-      blob.getMetadata().setUri(
-               uriBuilders.get().scheme("mem").host(containerName).path(in.getMetadata().getName()).build());
-      blob.getMetadata().setLastModified(new Date());
-      String eTag = CryptoStreams.hex(payload.getContentMetadata().getContentMD5());
-      blob.getMetadata().setETag(eTag);
-      // Set HTTP headers to match metadata
-      blob.getAllHeaders().replaceValues(HttpHeaders.LAST_MODIFIED,
-               Collections.singleton(dateService.rfc822DateFormat(blob.getMetadata().getLastModified())));
-      blob.getAllHeaders().replaceValues(HttpHeaders.ETAG, Collections.singleton(eTag));
-      copyPayloadHeadersToBlob(payload, blob);
-      blob.getAllHeaders().putAll(Multimaps.forMap(blob.getMetadata().getUserMetadata()));
-      return blob;
-   }
-
-   private void copyPayloadHeadersToBlob(Payload payload, Blob blob) {
-      blob.getAllHeaders().putAll(contentMetadataCodec.toHeaders(payload.getContentMetadata()));
-   }
-
-   /**
-    * {@inheritDoc}
-    */
-   @Override
-   public ListenableFuture<Boolean> blobExists(final String containerName, final String key) {
-      if (!storageStrategy.containerExists(containerName))
-         return immediateFailedFuture(cnfe(containerName));
-      return immediateFuture(storageStrategy.blobExists(containerName, key));
-   }
-
-   /**
-    * {@inheritDoc}
-    */
-   @Override
-   public ListenableFuture<Blob> getBlob(final String containerName, final String key, GetOptions options) {
-      logger.debug("Retrieving blob with key %s from container %s", key, containerName);
-      // If the container doesn't exist, an exception is thrown
-      if (!storageStrategy.containerExists(containerName)) {
-         logger.debug("Container %s does not exist", containerName);
-         return immediateFailedFuture(cnfe(containerName));
-      }
-      // If the blob doesn't exist, a null object is returned
-      if (!storageStrategy.blobExists(containerName, key)) {
-         logger.debug("Item %s does not exist in container %s", key, containerName);
-         return immediateFuture(null);
-      }
-
-      Blob blob = loadBlob(containerName, key);
-
-      if (options != null) {
-         if (options.getIfMatch() != null) {
-            if (!blob.getMetadata().getETag().equals(options.getIfMatch()))
-               return immediateFailedFuture(returnResponseException(412));
-         }
-         if (options.getIfNoneMatch() != null) {
-            if (blob.getMetadata().getETag().equals(options.getIfNoneMatch()))
-               return immediateFailedFuture(returnResponseException(304));
-         }
-         if (options.getIfModifiedSince() != null) {
-            Date modifiedSince = options.getIfModifiedSince();
-            if (blob.getMetadata().getLastModified().before(modifiedSince)) {
-               HttpResponse response = HttpResponse.builder().statusCode(304).build();
-               return immediateFailedFuture(new HttpResponseException(String.format("%1$s is before %2$s", blob
-                     .getMetadata().getLastModified(), modifiedSince), null, response));
-            }
-
-         }
-         if (options.getIfUnmodifiedSince() != null) {
-            Date unmodifiedSince = options.getIfUnmodifiedSince();
-            if (blob.getMetadata().getLastModified().after(unmodifiedSince)) {
-               HttpResponse response = HttpResponse.builder().statusCode(412).build();
-               return immediateFailedFuture(new HttpResponseException(String.format("%1$s is after %2$s", blob
-                     .getMetadata().getLastModified(), unmodifiedSince), null, response));
-            }
-         }
-         blob = copyBlob(blob);
-
-         if (options.getRanges() != null && options.getRanges().size() > 0) {
-            byte[] data;
-            try {
-               data = toByteArray(blob.getPayload());
-            } catch (IOException e) {
-               return immediateFailedFuture(new RuntimeException(e));
-            }
-            ByteArrayOutputStream out = new ByteArrayOutputStream();
-            for (String s : options.getRanges()) {
-               // HTTP uses a closed interval while Java array indexing uses a
-               // half-open interval.
-               int offset = 0;
-               int last = data.length - 1;
-               if (s.startsWith("-")) {
-                  offset = last - Integer.parseInt(s.substring(1)) + 1;
-               } else if (s.endsWith("-")) {
-                  offset = Integer.parseInt(s.substring(0, s.length() - 1));
-               } else if (s.contains("-")) {
-                  String[] firstLast = s.split("\\-");
-                  offset = Integer.parseInt(firstLast[0]);
-                  last = Integer.parseInt(firstLast[1]);
-               } else {
-                  return immediateFailedFuture(new IllegalArgumentException("illegal range: " + s));
-               }
-
-               if (offset > last) {
-                  return immediateFailedFuture(new IllegalArgumentException("illegal range: " + s));
-               }
-               if (last + 1 > data.length) {
-                  last = data.length - 1;
-               }
-               out.write(data, offset, last - offset + 1);
-            }
-            ContentMetadata cmd = blob.getPayload().getContentMetadata();
-            byte[] byteArray = out.toByteArray();
-            blob.setPayload(byteArray);
-            HttpUtils.copy(cmd, blob.getPayload().getContentMetadata());
-            blob.getPayload().getContentMetadata().setContentLength(new Long(byteArray.length));
-         }
-      }
-      checkNotNull(blob.getPayload(), "payload " + blob);
-      return immediateFuture(blob);
-   }
-
-   /**
-    * {@inheritDoc}
-    */
-   @Override
-   public ListenableFuture<BlobMetadata> blobMetadata(final String container, final String key) {
-      try {
-         Blob blob = getBlob(container, key).get();
-         return immediateFuture(blob != null ? (BlobMetadata) copy(blob.getMetadata()) : null);
-      } catch (Exception e) {
-         if (size(filter(getCausalChain(e), KeyNotFoundException.class)) >= 1)
-            return immediateFuture(null);
-         return immediateFailedFuture(e);
-      }
-   }
-
-   /**
-    * Calculates the object MD5 and returns it as eTag
-    * 
-    * @param object
-    * @return
-    */
-   private String getEtag(Blob object) {
-      try {
-         Payloads.calculateMD5(object, crypto.md5());
-      } catch (IOException ex) {
-         logger.error(ex, "An error occurred calculating MD5 for object with name %s.", object.getMetadata().getName());
-         Throwables.propagate(ex);
-      }
-
-      String eTag = CryptoStreams.hex(object.getPayload().getContentMetadata().getContentMD5());
-      return eTag;
-   }
-
-   private Blob copyBlob(Blob blob) {
-      Blob returnVal = blobFactory.create(copy(blob.getMetadata()));
-      returnVal.setPayload(blob.getPayload());
-      copyPayloadHeadersToBlob(blob.getPayload(), returnVal);
-      return returnVal;
-   }
-
-   @Override
-   protected boolean deleteAndVerifyContainerGone(final String container) {
-      storageStrategy.deleteContainer(container);
-      return storageStrategy.containerExists(container);
-   }
-
-   @Override
-   public ListenableFuture<String> putBlob(String container, Blob blob, PutOptions options) {
-      // TODO implement options
-      return putBlob(container, blob);
-   }
-
-   @Override
-   public ListenableFuture<Boolean> createContainerInLocation(Location location, String container,
-         CreateContainerOptions options) {
-      if (options.isPublicRead())
-         throw new UnsupportedOperationException("publicRead");
-      return createContainerInLocation(location, container);
-   }
-}
diff --git a/blobstore/src/main/java/org/jclouds/blobstore/TransientStorageStrategy.java b/blobstore/src/main/java/org/jclouds/blobstore/TransientStorageStrategy.java
index 611e93b..54d9067 100644
--- a/blobstore/src/main/java/org/jclouds/blobstore/TransientStorageStrategy.java
+++ b/blobstore/src/main/java/org/jclouds/blobstore/TransientStorageStrategy.java
@@ -18,37 +18,87 @@
  */
 package org.jclouds.blobstore;
 
+import static com.google.common.base.Preconditions.checkNotNull;
+
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.util.Collections;
+import java.util.Date;
 import java.util.Map;
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.ConcurrentMap;
+import javax.inject.Provider;
+import javax.inject.Inject;
+import javax.ws.rs.core.HttpHeaders;
+import javax.ws.rs.core.UriBuilder;
 
 import com.google.common.base.Preconditions;
 import com.google.common.base.Supplier;
+import com.google.common.base.Throwables;
+import com.google.common.collect.Multimaps;
 
 import org.jclouds.blobstore.domain.Blob;
+import org.jclouds.blobstore.domain.Blob.Factory;
+import org.jclouds.blobstore.domain.MutableBlobMetadata;
+import org.jclouds.blobstore.options.ListContainerOptions;
+import org.jclouds.blobstore.util.BlobStoreUtils;
+import org.jclouds.crypto.Crypto;
+import org.jclouds.crypto.CryptoStreams;
+import org.jclouds.date.DateService;
 import org.jclouds.domain.Location;
+import org.jclouds.http.HttpUtils;
+import org.jclouds.io.ContentMetadataCodec;
+import org.jclouds.io.MutableContentMetadata;
+import org.jclouds.io.Payload;
+import org.jclouds.io.Payloads;
+import org.jclouds.io.payloads.ByteArrayPayload;
+import org.jclouds.io.payloads.DelegatingPayload;
 
-public class TransientStorageStrategy {
+public class TransientStorageStrategy implements LocalStorageStrategy {
    private final ConcurrentMap<String, ConcurrentMap<String, Blob>> containerToBlobs = new ConcurrentHashMap<String, ConcurrentMap<String, Blob>>();
    private final ConcurrentMap<String, Location> containerToLocation = new ConcurrentHashMap<String, Location>();
    private final Supplier<Location> defaultLocation;
+   private final DateService dateService;
+   private final Factory blobFactory;
+   private final Crypto crypto;
+   private final ContentMetadataCodec contentMetadataCodec;
+   private final Provider<UriBuilder> uriBuilders;
 
-   public TransientStorageStrategy(final Supplier<Location> defaultLocation) {
-      this.defaultLocation = Preconditions.checkNotNull(defaultLocation);
+   @Inject
+   TransientStorageStrategy(final Supplier<Location> defaultLocation,
+         DateService dateService, Factory blobFactory, Crypto crypto,
+         ContentMetadataCodec contentMetadataCodec,
+         Provider<UriBuilder> uriBuilders) {
+      this.defaultLocation = defaultLocation;
+      this.dateService = dateService;
+      this.blobFactory = blobFactory;
+      this.crypto = crypto;
+      this.contentMetadataCodec = contentMetadataCodec;
+      this.uriBuilders = uriBuilders;
    }
 
+   @Override
    public Iterable<String> getAllContainerNames() {
       return containerToBlobs.keySet();
    }
 
+   @Override
    public boolean containerExists(final String containerName) {
       return containerToBlobs.containsKey(containerName);
    }
 
+   @Override
    public void clearContainer(final String containerName) {
       containerToBlobs.get(containerName).clear();
    }
 
+   @Override
+   public void clearContainer(String container, ListContainerOptions options) {
+      // TODO implement options
+      clearContainer(container);
+   }
+
+   @Override
    public boolean createContainerInLocation(final String containerName, final Location location) {
       ConcurrentMap<String, Blob> origValue = containerToBlobs.putIfAbsent(
             containerName, new ConcurrentHashMap<String, Blob>());
@@ -59,36 +109,96 @@
       return true;
    }
 
+   @Override
    public void deleteContainer(final String containerName) {
       containerToBlobs.remove(containerName);
    }
 
+   @Override
    public boolean blobExists(final String containerName, final String blobName) {
       Map<String, Blob> map = containerToBlobs.get(containerName);
       return map != null && map.containsKey(blobName);
    }
 
+   @Override
    public Blob getBlob(final String containerName, final String blobName) {
       Map<String, Blob> map = containerToBlobs.get(containerName);
       return map == null ? null : map.get(blobName);
    }
 
-   public void putBlob(final String containerName, final Blob blob) {
+   @Override
+   public String putBlob(final String containerName, final Blob blob) throws IOException {
+      Blob newBlob = createUpdatedCopyOfBlobInContainer(containerName, blob);
       Map<String, Blob> map = containerToBlobs.get(containerName);
-      map.put(blob.getMetadata().getName(), blob);
+      map.put(newBlob.getMetadata().getName(), newBlob);
+      Payloads.calculateMD5(newBlob, crypto.md5());
+      String eTag = CryptoStreams.hex(newBlob.getPayload().getContentMetadata().getContentMD5());
+      return eTag;
    }
 
+   @Override
    public void removeBlob(final String containerName, final String blobName) {
       Map<String, Blob> map = containerToBlobs.get(containerName);
       if (map != null)
          map.remove(blobName);
    }
 
+   @Override
    public Iterable<String> getBlobKeysInsideContainer(final String containerName) {
       return containerToBlobs.get(containerName).keySet();
    }
 
+   @Override
    public Location getLocation(final String containerName) {
       return containerToLocation.get(containerName);
    }
+
+   @Override
+   public String getSeparator() {
+      return "/";
+   }
+
+   private Blob createUpdatedCopyOfBlobInContainer(String containerName, Blob in) {
+      checkNotNull(in, "blob");
+      checkNotNull(in.getPayload(), "blob.payload");
+      ByteArrayPayload payload = (in.getPayload() instanceof ByteArrayPayload) ? ByteArrayPayload.class.cast(in
+               .getPayload()) : null;
+      if (payload == null)
+         payload = (in.getPayload() instanceof DelegatingPayload) ? (DelegatingPayload.class.cast(in.getPayload())
+                  .getDelegate() instanceof ByteArrayPayload) ? ByteArrayPayload.class.cast(DelegatingPayload.class
+                  .cast(in.getPayload()).getDelegate()) : null : null;
+      try {
+         if (payload == null || !(payload instanceof ByteArrayPayload)) {
+            MutableContentMetadata oldMd = in.getPayload().getContentMetadata();
+            ByteArrayOutputStream out = new ByteArrayOutputStream();
+            in.getPayload().writeTo(out);
+            payload = (ByteArrayPayload) Payloads.calculateMD5(Payloads.newPayload(out.toByteArray()));
+            HttpUtils.copy(oldMd, payload.getContentMetadata());
+         } else {
+            if (payload.getContentMetadata().getContentMD5() == null)
+               Payloads.calculateMD5(in, crypto.md5());
+         }
+      } catch (IOException e) {
+         Throwables.propagate(e);
+      }
+      Blob blob = blobFactory.create(BlobStoreUtils.copy(in.getMetadata()));
+      blob.setPayload(payload);
+      blob.getMetadata().setContainer(containerName);
+      blob.getMetadata().setUri(
+               uriBuilders.get().scheme("mem").host(containerName).path(in.getMetadata().getName()).build());
+      blob.getMetadata().setLastModified(new Date());
+      String eTag = CryptoStreams.hex(payload.getContentMetadata().getContentMD5());
+      blob.getMetadata().setETag(eTag);
+      // Set HTTP headers to match metadata
+      blob.getAllHeaders().replaceValues(HttpHeaders.LAST_MODIFIED,
+               Collections.singleton(dateService.rfc822DateFormat(blob.getMetadata().getLastModified())));
+      blob.getAllHeaders().replaceValues(HttpHeaders.ETAG, Collections.singleton(eTag));
+      copyPayloadHeadersToBlob(payload, blob);
+      blob.getAllHeaders().putAll(Multimaps.forMap(blob.getMetadata().getUserMetadata()));
+      return blob;
+   }
+
+   private void copyPayloadHeadersToBlob(Payload payload, Blob blob) {
+      blob.getAllHeaders().putAll(contentMetadataCodec.toHeaders(payload.getContentMetadata()));
+   }
 }
diff --git a/blobstore/src/main/java/org/jclouds/blobstore/config/TransientBlobStore.java b/blobstore/src/main/java/org/jclouds/blobstore/config/LocalBlobStore.java
similarity index 94%
rename from blobstore/src/main/java/org/jclouds/blobstore/config/TransientBlobStore.java
rename to blobstore/src/main/java/org/jclouds/blobstore/config/LocalBlobStore.java
index b088d5f..3c33c23 100644
--- a/blobstore/src/main/java/org/jclouds/blobstore/config/TransientBlobStore.java
+++ b/blobstore/src/main/java/org/jclouds/blobstore/config/LocalBlobStore.java
@@ -24,6 +24,6 @@
 import org.jclouds.concurrent.Timeout;
 
 @Timeout(duration = 2, timeUnit = TimeUnit.MINUTES)
-public interface TransientBlobStore extends BlobStore {
+public interface LocalBlobStore extends BlobStore {
 
-}
\ No newline at end of file
+}
diff --git a/blobstore/src/main/java/org/jclouds/blobstore/config/TransientBlobStoreContextModule.java b/blobstore/src/main/java/org/jclouds/blobstore/config/TransientBlobStoreContextModule.java
index 659d273..e5bdb32 100644
--- a/blobstore/src/main/java/org/jclouds/blobstore/config/TransientBlobStoreContextModule.java
+++ b/blobstore/src/main/java/org/jclouds/blobstore/config/TransientBlobStoreContextModule.java
@@ -21,8 +21,10 @@
 import org.jclouds.blobstore.AsyncBlobStore;
 import org.jclouds.blobstore.BlobRequestSigner;
 import org.jclouds.blobstore.BlobStore;
-import org.jclouds.blobstore.TransientAsyncBlobStore;
+import org.jclouds.blobstore.LocalAsyncBlobStore;
+import org.jclouds.blobstore.LocalStorageStrategy;
 import org.jclouds.blobstore.TransientBlobRequestSigner;
+import org.jclouds.blobstore.TransientStorageStrategy;
 import org.jclouds.blobstore.attr.ConsistencyModel;
 import org.jclouds.rest.config.BinderUtils;
 
@@ -37,13 +39,14 @@
 public class TransientBlobStoreContextModule extends AbstractModule {
    @Override
    protected void configure() {
-      bind(AsyncBlobStore.class).to(TransientAsyncBlobStore.class).asEagerSingleton();
+      bind(AsyncBlobStore.class).to(LocalAsyncBlobStore.class).asEagerSingleton();
       // forward all requests from TransientBlobStore to TransientAsyncBlobStore.  needs above binding as cannot proxy a class
-      BinderUtils.bindClient(binder(), TransientBlobStore.class, AsyncBlobStore.class, ImmutableMap.<Class<?>, Class<?>>of());
+      BinderUtils.bindClient(binder(), LocalBlobStore.class, AsyncBlobStore.class, ImmutableMap.<Class<?>, Class<?>>of());
       install(new BlobStoreObjectModule());
       install(new BlobStoreMapModule());
-      bind(BlobStore.class).to(TransientBlobStore.class);
+      bind(BlobStore.class).to(LocalBlobStore.class);
       bind(ConsistencyModel.class).toInstance(ConsistencyModel.STRICT);
+      bind(LocalStorageStrategy.class).to(TransientStorageStrategy.class);
       bind(BlobRequestSigner.class).to(TransientBlobRequestSigner.class);
    }
 
diff --git a/blobstore/src/main/java/org/jclouds/blobstore/util/BlobStoreUtils.java b/blobstore/src/main/java/org/jclouds/blobstore/util/BlobStoreUtils.java
index 15e3554..bc1bd98 100644
--- a/blobstore/src/main/java/org/jclouds/blobstore/util/BlobStoreUtils.java
+++ b/blobstore/src/main/java/org/jclouds/blobstore/util/BlobStoreUtils.java
@@ -20,8 +20,15 @@
 
 import static com.google.common.base.Preconditions.checkNotNull;
 
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
 import java.io.IOException;
 import java.io.InputStream;
+import java.io.ObjectInput;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutput;
+import java.io.ObjectOutputStream;
+import java.util.Map;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
@@ -32,6 +39,7 @@
 import org.jclouds.blobstore.KeyNotFoundException;
 import org.jclouds.blobstore.domain.Blob;
 import org.jclouds.blobstore.domain.BlobMetadata;
+import org.jclouds.blobstore.domain.MutableBlobMetadata;
 import org.jclouds.blobstore.domain.StorageMetadata;
 import org.jclouds.blobstore.functions.BlobName;
 import org.jclouds.functions.ExceptionToValueOrPropagate;
@@ -41,6 +49,8 @@
 import org.jclouds.rest.internal.GeneratedHttpRequest;
 import org.jclouds.util.Strings2;
 
+import com.google.common.base.Throwables;
+import com.google.common.collect.Maps;
 import com.google.common.reflect.TypeToken;
 import com.google.common.util.concurrent.Futures;
 import com.google.common.util.concurrent.ListenableFuture;
@@ -159,4 +169,34 @@
    public static Iterable<String> getSupportedProviders() {
       return org.jclouds.rest.Providers.getSupportedProvidersOfType(TypeToken.of(BlobStoreContext.class));
    }
-}
\ No newline at end of file
+
+   public static MutableBlobMetadata copy(MutableBlobMetadata in) {
+      ByteArrayOutputStream bout = new ByteArrayOutputStream();
+      ObjectOutput os;
+      try {
+         os = new ObjectOutputStream(bout);
+         os.writeObject(in);
+         ObjectInput is = new ObjectInputStream(new ByteArrayInputStream(bout.toByteArray()));
+         MutableBlobMetadata metadata = (MutableBlobMetadata) is.readObject();
+         convertUserMetadataKeysToLowercase(metadata);
+         HttpUtils.copy(in.getContentMetadata(), metadata.getContentMetadata());
+         return metadata;
+      } catch (Exception e) {
+         throw Throwables.propagate(e);
+      }
+   }
+
+   public static MutableBlobMetadata copy(MutableBlobMetadata in, String newKey) {
+      MutableBlobMetadata newMd = BlobStoreUtils.copy(in);
+      newMd.setName(newKey);
+      return newMd;
+   }
+
+   private static void convertUserMetadataKeysToLowercase(MutableBlobMetadata metadata) {
+      Map<String, String> lowerCaseUserMetadata = Maps.newHashMap();
+      for (Map.Entry<String, String> entry : metadata.getUserMetadata().entrySet()) {
+         lowerCaseUserMetadata.put(entry.getKey().toLowerCase(), entry.getValue());
+      }
+      metadata.setUserMetadata(lowerCaseUserMetadata);
+   }
+}
diff --git a/blobstore/src/test/java/org/jclouds/blobstore/TransientBlobRequestSignerTest.java b/blobstore/src/test/java/org/jclouds/blobstore/TransientBlobRequestSignerTest.java
index 39a0679..445accb 100644
--- a/blobstore/src/test/java/org/jclouds/blobstore/TransientBlobRequestSignerTest.java
+++ b/blobstore/src/test/java/org/jclouds/blobstore/TransientBlobRequestSignerTest.java
@@ -42,7 +42,7 @@
  */
 // NOTE:without testName, this will not call @Before* and fail w/NPE during surefire
 @Test(groups = "unit", testName = "TransientBlobRequestSignerTest")
-public class TransientBlobRequestSignerTest extends BaseAsyncClientTest<TransientAsyncBlobStore> {
+public class TransientBlobRequestSignerTest extends BaseAsyncClientTest<LocalAsyncBlobStore> {
 
    private BlobRequestSigner signer;
    private Provider<BlobBuilder> blobFactory;
@@ -121,8 +121,8 @@
    }
 
    @Override
-   protected TypeLiteral<RestAnnotationProcessor<TransientAsyncBlobStore>> createTypeLiteral() {
-      return new TypeLiteral<RestAnnotationProcessor<TransientAsyncBlobStore>>() {
+   protected TypeLiteral<RestAnnotationProcessor<LocalAsyncBlobStore>> createTypeLiteral() {
+      return new TypeLiteral<RestAnnotationProcessor<LocalAsyncBlobStore>>() {
       };
    }
 
diff --git a/blobstore/src/test/java/org/jclouds/blobstore/binders/BindBlobToMultipartFormTest.java b/blobstore/src/test/java/org/jclouds/blobstore/binders/BindBlobToMultipartFormTest.java
index 94a37fa..f532551 100644
--- a/blobstore/src/test/java/org/jclouds/blobstore/binders/BindBlobToMultipartFormTest.java
+++ b/blobstore/src/test/java/org/jclouds/blobstore/binders/BindBlobToMultipartFormTest.java
@@ -65,8 +65,8 @@
       HttpRequest request = HttpRequest.builder().method("GET").endpoint("http://localhost:8001").build();
       binder.bindToRequest(request, TEST_BLOB);
 
-      assertEquals(Strings2.toStringAndClose(request.getPayload().getInput()), EXPECTS);
-      assertEquals(request.getPayload().getContentMetadata().getContentLength(), new Long(113));
+      assertEquals(Strings2.toString(request.getPayload()), EXPECTS);
+      assertEquals(request.getPayload().getContentMetadata().getContentLength(), Long.valueOf(113));
 
       assertEquals(request.getPayload().getContentMetadata().getContentType(), "multipart/form-data; boundary="
             + BOUNDARY);
diff --git a/blobstore/src/test/java/org/jclouds/blobstore/functions/ParseBlobFromHeadersAndHttpContentTest.java b/blobstore/src/test/java/org/jclouds/blobstore/functions/ParseBlobFromHeadersAndHttpContentTest.java
index 1cc15cd..693087b 100644
--- a/blobstore/src/test/java/org/jclouds/blobstore/functions/ParseBlobFromHeadersAndHttpContentTest.java
+++ b/blobstore/src/test/java/org/jclouds/blobstore/functions/ParseBlobFromHeadersAndHttpContentTest.java
@@ -85,7 +85,7 @@
       replay(metadataParser);
 
       Blob object = callable.apply(response);
-      assertEquals(object.getPayload().getContentMetadata().getContentLength(), new Long(10485760));
+      assertEquals(object.getPayload().getContentMetadata().getContentLength(), Long.valueOf(10485760));
       assertEquals(object.getAllHeaders().get("Content-Range"), Collections.singletonList("0-10485759/20232760"));
 
    }
diff --git a/blobstore/src/test/java/org/jclouds/blobstore/functions/ReturnFalseOnContainerNotFoundTest.java b/blobstore/src/test/java/org/jclouds/blobstore/functions/ReturnFalseOnContainerNotFoundTest.java
index 8742cc1..ae094c7 100644
--- a/blobstore/src/test/java/org/jclouds/blobstore/functions/ReturnFalseOnContainerNotFoundTest.java
+++ b/blobstore/src/test/java/org/jclouds/blobstore/functions/ReturnFalseOnContainerNotFoundTest.java
@@ -33,7 +33,7 @@
 
    @Test
    public void testFoundIsFalse() throws SecurityException, NoSuchMethodException {
-      assertEquals(fn.apply(new ContainerNotFoundException()), new Boolean(false));
+      assertEquals(fn.apply(new ContainerNotFoundException()), Boolean.FALSE);
    }
 
    @Test(expectedExceptions = { RuntimeException.class })
diff --git a/blobstore/src/test/java/org/jclouds/blobstore/functions/ReturnFalseOnKeyNotFoundTest.java b/blobstore/src/test/java/org/jclouds/blobstore/functions/ReturnFalseOnKeyNotFoundTest.java
index efd19bf..a6f02fc 100644
--- a/blobstore/src/test/java/org/jclouds/blobstore/functions/ReturnFalseOnKeyNotFoundTest.java
+++ b/blobstore/src/test/java/org/jclouds/blobstore/functions/ReturnFalseOnKeyNotFoundTest.java
@@ -33,7 +33,7 @@
 
    @Test
    public void testFoundIsFalse() throws SecurityException, NoSuchMethodException {
-      assertEquals(fn.apply(new KeyNotFoundException()), new Boolean(false));
+      assertEquals(fn.apply(new KeyNotFoundException()), Boolean.FALSE);
    }
 
    @Test(expectedExceptions = { RuntimeException.class })
diff --git a/blobstore/src/test/java/org/jclouds/blobstore/integration/internal/BaseBlobIntegrationTest.java b/blobstore/src/test/java/org/jclouds/blobstore/integration/internal/BaseBlobIntegrationTest.java
index 20616a1..68e7cc4 100644
--- a/blobstore/src/test/java/org/jclouds/blobstore/integration/internal/BaseBlobIntegrationTest.java
+++ b/blobstore/src/test/java/org/jclouds/blobstore/integration/internal/BaseBlobIntegrationTest.java
@@ -637,7 +637,7 @@
    protected void validateMetadata(BlobMetadata metadata) throws IOException {
       assert metadata.getContentMetadata().getContentType().startsWith("text/plain") : metadata.getContentMetadata()
                .getContentType();
-      assertEquals(metadata.getContentMetadata().getContentLength(), new Long(TEST_STRING.length()));
+      assertEquals(metadata.getContentMetadata().getContentLength(), Long.valueOf(TEST_STRING.length()));
       assertEquals(metadata.getUserMetadata().get("adrian"), "powderpuff");
       checkMD5(metadata);
    }
diff --git a/blobstore/src/test/java/org/jclouds/blobstore/integration/internal/BaseBlobSignerLiveTest.java b/blobstore/src/test/java/org/jclouds/blobstore/integration/internal/BaseBlobSignerLiveTest.java
index 9b9a140..200f439 100644
--- a/blobstore/src/test/java/org/jclouds/blobstore/integration/internal/BaseBlobSignerLiveTest.java
+++ b/blobstore/src/test/java/org/jclouds/blobstore/integration/internal/BaseBlobSignerLiveTest.java
@@ -67,7 +67,7 @@
          assertConsistencyAwareContainerSize(container, 1);
          HttpRequest request = view.getSigner().signGetBlob(container, name);
          assertEquals(request.getFilters().size(), 0);
-         assertEquals(Strings2.toStringAndClose(view.utils().http().invoke(request).getPayload().getInput()), text);
+         assertEquals(Strings2.toString(view.utils().http().invoke(request).getPayload()), text);
       } finally {
          returnContainer(container);
       }
@@ -85,7 +85,7 @@
          assertConsistencyAwareContainerSize(container, 1);
          HttpRequest request = view.getSigner().signGetBlob(container, name, range(0, 1));
          assertEquals(request.getFilters().size(), 0);
-         assertEquals(Strings2.toStringAndClose(view.utils().http().invoke(request).getPayload().getInput()), "fo");
+         assertEquals(Strings2.toString(view.utils().http().invoke(request).getPayload()), "fo");
       } finally {
          returnContainer(container);
       }
@@ -101,7 +101,7 @@
       try {
          HttpRequest request = view.getSigner().signPutBlob(container, blob);
          assertEquals(request.getFilters().size(), 0);
-         Strings2.toStringAndClose(view.utils().http().invoke(request).getPayload().getInput());
+         Strings2.toString(view.utils().http().invoke(request).getPayload());
          assertConsistencyAwareContainerSize(container, 1);
       } finally {
          returnContainer(container);
diff --git a/blobstore/src/test/java/org/jclouds/blobstore/integration/internal/BaseContainerIntegrationTest.java b/blobstore/src/test/java/org/jclouds/blobstore/integration/internal/BaseContainerIntegrationTest.java
index 5ed397c..6a4ec3d 100644
--- a/blobstore/src/test/java/org/jclouds/blobstore/integration/internal/BaseContainerIntegrationTest.java
+++ b/blobstore/src/test/java/org/jclouds/blobstore/integration/internal/BaseContainerIntegrationTest.java
@@ -88,7 +88,7 @@
 
          assert metadata.getContentMetadata().getContentType().startsWith("text/plain") : metadata.getContentMetadata()
                .getContentType();
-         assertEquals(metadata.getContentMetadata().getContentLength(), new Long(TEST_STRING.length()));
+         assertEquals(metadata.getContentMetadata().getContentLength(), Long.valueOf(TEST_STRING.length()));
          assertEquals(metadata.getUserMetadata().get("adrian"), "powderpuff");
          checkMD5(metadata);
       } finally {
diff --git a/blobstore/src/test/java/org/jclouds/blobstore/options/ListOptionsTest.java b/blobstore/src/test/java/org/jclouds/blobstore/options/ListOptionsTest.java
index 7965112..db2e5b0 100644
--- a/blobstore/src/test/java/org/jclouds/blobstore/options/ListOptionsTest.java
+++ b/blobstore/src/test/java/org/jclouds/blobstore/options/ListOptionsTest.java
@@ -64,7 +64,7 @@
       ListContainerOptions options = new ListContainerOptions();
       options.inDirectory("test").maxResults(1);
       assertEquals(options.getDir(), "test");
-      assertEquals(options.getMaxResults(), new Integer(1));
+      assertEquals(options.getMaxResults(), Integer.valueOf(1));
 
    }
 
@@ -108,7 +108,7 @@
    public void testMaxResults() {
       ListContainerOptions options = new ListContainerOptions();
       options.maxResults(1000);
-      assertEquals(options.getMaxResults(), new Integer(1000));
+      assertEquals(options.getMaxResults(), Integer.valueOf(1000));
    }
 
    @Test
@@ -120,7 +120,7 @@
    @Test
    public void testMaxResultsStatic() {
       ListContainerOptions options = maxResults(1000);
-      assertEquals(options.getMaxResults(), new Integer(1000));
+      assertEquals(options.getMaxResults(), Integer.valueOf(1000));
    }
 
    @Test(expectedExceptions = IllegalArgumentException.class)
diff --git a/common/aws/src/main/java/org/jclouds/aws/handlers/ParseAWSErrorFromXmlContent.java b/common/aws/src/main/java/org/jclouds/aws/handlers/ParseAWSErrorFromXmlContent.java
index 615801b..fa4b7da 100644
--- a/common/aws/src/main/java/org/jclouds/aws/handlers/ParseAWSErrorFromXmlContent.java
+++ b/common/aws/src/main/java/org/jclouds/aws/handlers/ParseAWSErrorFromXmlContent.java
@@ -81,7 +81,7 @@
                }
             } else {
                try {
-                  message = Strings2.toStringAndClose(response.getPayload().getInput());
+                  message = Strings2.toString(response.getPayload());
                   exception = new HttpResponseException(command, response, message);
                } catch (IOException e) {
                }
diff --git a/common/azure/src/main/java/org/jclouds/azure/storage/handlers/ParseAzureStorageErrorFromXmlContent.java b/common/azure/src/main/java/org/jclouds/azure/storage/handlers/ParseAzureStorageErrorFromXmlContent.java
index 017d293..6da5961 100644
--- a/common/azure/src/main/java/org/jclouds/azure/storage/handlers/ParseAzureStorageErrorFromXmlContent.java
+++ b/common/azure/src/main/java/org/jclouds/azure/storage/handlers/ParseAzureStorageErrorFromXmlContent.java
@@ -67,7 +67,7 @@
          if (response.getPayload() != null) {
             String contentType = response.getPayload().getContentMetadata().getContentType();
             if (contentType != null && (contentType.indexOf("xml") != -1 || contentType.indexOf("unknown") != -1)
-                     && !new Long(0).equals(response.getPayload().getContentMetadata().getContentLength())) {
+                     && !Long.valueOf(0).equals(response.getPayload().getContentMetadata().getContentLength())) {
                try {
                   error = utils.parseAzureStorageErrorFromContent(command, response, response.getPayload().getInput());
                   if (error != null) {
@@ -76,14 +76,14 @@
                   }
                } catch (RuntimeException e) {
                   try {
-                     message = Strings2.toStringAndClose(response.getPayload().getInput());
+                     message = Strings2.toString(response.getPayload());
                      exception = new HttpResponseException(command, response, message);
                   } catch (IOException e1) {
                   }
                }
             } else {
                try {
-                  message = Strings2.toStringAndClose(response.getPayload().getInput());
+                  message = Strings2.toString(response.getPayload());
                   exception = new HttpResponseException(command, response, message);
                } catch (IOException e) {
                }
diff --git a/common/azure/src/main/java/org/jclouds/azure/storage/options/ListOptions.java b/common/azure/src/main/java/org/jclouds/azure/storage/options/ListOptions.java
index c84edab..d58a868 100644
--- a/common/azure/src/main/java/org/jclouds/azure/storage/options/ListOptions.java
+++ b/common/azure/src/main/java/org/jclouds/azure/storage/options/ListOptions.java
@@ -94,7 +94,7 @@
 
    public Integer getMaxResults() {
       String maxresults = getFirstQueryOrNull("maxresults");
-      return (maxresults != null) ? new Integer(maxresults) : null;
+      return (maxresults != null) ? Integer.valueOf(maxresults) : null;
    }
 
    public static class Builder {
diff --git a/common/trmk/src/main/java/org/jclouds/trmk/vcloud_0_8/binders/BindVAppConfigurationToXmlPayload.java b/common/trmk/src/main/java/org/jclouds/trmk/vcloud_0_8/binders/BindVAppConfigurationToXmlPayload.java
index 9fdd47a..f551a1e 100644
--- a/common/trmk/src/main/java/org/jclouds/trmk/vcloud_0_8/binders/BindVAppConfigurationToXmlPayload.java
+++ b/common/trmk/src/main/java/org/jclouds/trmk/vcloud_0_8/binders/BindVAppConfigurationToXmlPayload.java
@@ -137,7 +137,7 @@
    private void addDiskItems(XMLBuilder sectionBuilder, VApp vApp, VAppConfiguration configuration) {
       for (ResourceAllocationSettingData disk : filter(vApp.getResourceAllocations(), CIMPredicates
                .resourceTypeIn(ResourceType.DISK_DRIVE))) {
-         if (!configuration.getDisksToDelete().contains(new Integer(disk.getAddressOnParent()))) {
+         if (!configuration.getDisksToDelete().contains(Integer.valueOf(disk.getAddressOnParent()))) {
             addDiskWithQuantity(sectionBuilder, disk);
          }
       }
diff --git a/common/trmk/src/main/java/org/jclouds/trmk/vcloud_0_8/handlers/ParseTerremarkVCloudErrorFromHttpResponse.java b/common/trmk/src/main/java/org/jclouds/trmk/vcloud_0_8/handlers/ParseTerremarkVCloudErrorFromHttpResponse.java
index bfacd23..ae8c3bc 100644
--- a/common/trmk/src/main/java/org/jclouds/trmk/vcloud_0_8/handlers/ParseTerremarkVCloudErrorFromHttpResponse.java
+++ b/common/trmk/src/main/java/org/jclouds/trmk/vcloud_0_8/handlers/ParseTerremarkVCloudErrorFromHttpResponse.java
@@ -101,7 +101,7 @@
    String parseErrorFromContentOrNull(HttpCommand command, HttpResponse response) {
       if (response.getPayload() != null) {
          try {
-            return Strings2.toStringAndClose(response.getPayload().getInput());
+            return Strings2.toString(response.getPayload());
          } catch (IOException e) {
             logger.warn(e, "exception reading error from response", response);
          }
diff --git a/common/trmk/src/main/java/org/jclouds/trmk/vcloud_0_8/xml/VAppHandler.java b/common/trmk/src/main/java/org/jclouds/trmk/vcloud_0_8/xml/VAppHandler.java
index c4283f1..f896411 100644
--- a/common/trmk/src/main/java/org/jclouds/trmk/vcloud_0_8/xml/VAppHandler.java
+++ b/common/trmk/src/main/java/org/jclouds/trmk/vcloud_0_8/xml/VAppHandler.java
@@ -91,7 +91,7 @@
          String statusString = attributes.get("status");
          status = Status.fromValue(statusString);
          if (attributes.containsKey("size"))
-            size = new Long(attributes.get("size"));
+            size = Long.valueOf(attributes.get("size"));
       } else if (qName.equals("Link")) { // type should never be missing
          if (attributes.containsKey("type")) {
             if (attributes.get("type").equals(TerremarkVCloudMediaType.VDC_XML)) {
diff --git a/common/trmk/src/test/java/org/jclouds/trmk/vcloud_0_8/options/InstantiateVAppTemplateOptionsTest.java b/common/trmk/src/test/java/org/jclouds/trmk/vcloud_0_8/options/InstantiateVAppTemplateOptionsTest.java
index 3cde149..7dd3f43 100644
--- a/common/trmk/src/test/java/org/jclouds/trmk/vcloud_0_8/options/InstantiateVAppTemplateOptionsTest.java
+++ b/common/trmk/src/test/java/org/jclouds/trmk/vcloud_0_8/options/InstantiateVAppTemplateOptionsTest.java
@@ -52,13 +52,13 @@
    public void testCustomizeOnInstantiate() {
       InstantiateVAppTemplateOptions options = new InstantiateVAppTemplateOptions();
       options.customizeOnInstantiate(true);
-      assertEquals(options.shouldCustomizeOnInstantiate(), new Boolean(true));
+      assertEquals(options.shouldCustomizeOnInstantiate(), Boolean.TRUE);
    }
 
    @Test
    public void testCustomizeOnInstantiateStatic() {
       InstantiateVAppTemplateOptions options = customizeOnInstantiate(true);
-      assertEquals(options.shouldCustomizeOnInstantiate(), new Boolean(true));
+      assertEquals(options.shouldCustomizeOnInstantiate(), Boolean.TRUE);
    }
 
    @Test
diff --git a/common/trmk/src/test/java/org/jclouds/trmk/vcloud_0_8/xml/ovf/VAppHandlerTest.java b/common/trmk/src/test/java/org/jclouds/trmk/vcloud_0_8/xml/ovf/VAppHandlerTest.java
index cabc10e..2495dab 100644
--- a/common/trmk/src/test/java/org/jclouds/trmk/vcloud_0_8/xml/ovf/VAppHandlerTest.java
+++ b/common/trmk/src/test/java/org/jclouds/trmk/vcloud_0_8/xml/ovf/VAppHandlerTest.java
@@ -119,7 +119,7 @@
                         .virtualQuantity(104857l).build());
 
       VApp expects = new VAppImpl("centos53", URI
-               .create("http://10.150.4.49/api/v0.8/vApp/10"), Status.ON, new Long(104857), new ReferenceTypeImpl(null,
+               .create("http://10.150.4.49/api/v0.8/vApp/10"), Status.ON, Long.valueOf(104857), new ReferenceTypeImpl(null,
                "application/vnd.vmware.vcloud.vdc+xml", URI.create("http://10.150.4.49/api/v0.8/vdc/4")),
                networkToAddresses, null, "Other Linux (32-bit)", system, resourceAllocations);
       assertEquals(result.getHref(), expects.getHref());
@@ -167,7 +167,7 @@
                         .virtualQuantity(10485760l).build());
 
       VApp expects = new VAppImpl("m1", URI.create("http://localhost:8000/api/v0.8/vApp/80"),
-               Status.ON, new Long(10485760), new ReferenceTypeImpl(null, "application/vnd.vmware.vcloud.vdc+xml", URI
+               Status.ON, Long.valueOf(10485760), new ReferenceTypeImpl(null, "application/vnd.vmware.vcloud.vdc+xml", URI
                         .create("http://localhost:8000/api/v0.8/vdc/28")), networkToAddresses, null,
                "Microsoft Windows XP Professional (32-bit)", system, resourceAllocations);
       assertEquals(result.getHref(), expects.getHref());
diff --git a/compute/src/main/java/org/jclouds/cim/ResourceAllocationSettingData.java b/compute/src/main/java/org/jclouds/cim/ResourceAllocationSettingData.java
index 082418e..f113f4c 100644
--- a/compute/src/main/java/org/jclouds/cim/ResourceAllocationSettingData.java
+++ b/compute/src/main/java/org/jclouds/cim/ResourceAllocationSettingData.java
@@ -345,7 +345,7 @@
             });
 
       public static ResourceType fromValue(String type) {
-         return RESOURCE_TYPE_BY_ID.get(new Integer(checkNotNull(type, "type")));
+         return RESOURCE_TYPE_BY_ID.get(Integer.valueOf(checkNotNull(type, "type")));
       }
    }
 
@@ -394,7 +394,7 @@
             });
 
       public static ConsumerVisibility fromValue(String behavior) {
-         return MAPPING_BEHAVIOR_BY_ID.get(new Integer(checkNotNull(behavior, "behavior")));
+         return MAPPING_BEHAVIOR_BY_ID.get(Integer.valueOf(checkNotNull(behavior, "behavior")));
       }
    }
 
@@ -428,7 +428,7 @@
             });
 
       public static MappingBehavior fromValue(String behavior) {
-         return MAPPING_BEHAVIOR_BY_ID.get(new Integer(checkNotNull(behavior, "behavior")));
+         return MAPPING_BEHAVIOR_BY_ID.get(Integer.valueOf(checkNotNull(behavior, "behavior")));
       }
    }
 
diff --git a/compute/src/main/java/org/jclouds/cim/VirtualSystemSettingData.java b/compute/src/main/java/org/jclouds/cim/VirtualSystemSettingData.java
index 16ad25d..81e5124 100644
--- a/compute/src/main/java/org/jclouds/cim/VirtualSystemSettingData.java
+++ b/compute/src/main/java/org/jclouds/cim/VirtualSystemSettingData.java
@@ -270,7 +270,7 @@
                });
 
       public static AutomaticRecoveryAction fromValue(String automaticRecoveryAction) {
-         return AUTOMATIC_RECOVERY_ACTION_BY_ID.get(new Integer(checkNotNull(automaticRecoveryAction,
+         return AUTOMATIC_RECOVERY_ACTION_BY_ID.get(Integer.valueOf(checkNotNull(automaticRecoveryAction,
                   "automaticRecoveryAction")));
       }
    }
@@ -307,7 +307,7 @@
                });
 
       public static AutomaticShutdownAction fromValue(String automaticShutdownAction) {
-         return AUTOMATIC_SHUTDOWN_ACTION_BY_ID.get(new Integer(checkNotNull(automaticShutdownAction,
+         return AUTOMATIC_SHUTDOWN_ACTION_BY_ID.get(Integer.valueOf(checkNotNull(automaticShutdownAction,
                   "automaticShutdownAction")));
       }
    }
@@ -344,7 +344,7 @@
                });
 
       public static AutomaticStartupAction fromValue(String automaticStartupAction) {
-         return AUTOMATIC_STARTUP_ACTION_BY_ID.get(new Integer(checkNotNull(automaticStartupAction,
+         return AUTOMATIC_STARTUP_ACTION_BY_ID.get(Integer.valueOf(checkNotNull(automaticStartupAction,
                   "automaticStartupAction")));
       }
    }
diff --git a/compute/src/main/java/org/jclouds/cim/xml/ResourceAllocationSettingDataHandler.java b/compute/src/main/java/org/jclouds/cim/xml/ResourceAllocationSettingDataHandler.java
index 5a28216..70b7dbe 100644
--- a/compute/src/main/java/org/jclouds/cim/xml/ResourceAllocationSettingDataHandler.java
+++ b/compute/src/main/java/org/jclouds/cim/xml/ResourceAllocationSettingDataHandler.java
@@ -67,13 +67,13 @@
          } else if (equalsOrSuffix(qName, "AllocationUnits")) {
             builder.allocationUnits(current);
          } else if (equalsOrSuffix(qName, "AutomaticAllocation")) {
-            builder.automaticAllocation(new Boolean(current));
+            builder.automaticAllocation(Boolean.valueOf(current));
          } else if (equalsOrSuffix(qName, "AutomaticDeallocation")) {
-            builder.automaticDeallocation(new Boolean(current));
+            builder.automaticDeallocation(Boolean.valueOf(current));
          } else if (equalsOrSuffix(qName, "ConsumerVisibility")) {
             builder.consumerVisibility(ConsumerVisibility.fromValue(current));
          } else if (equalsOrSuffix(qName, "Limit")) {
-            builder.limit(new Long(current));
+            builder.limit(Long.valueOf(current));
          } else if (equalsOrSuffix(qName, "MappingBehavior")) {
             builder.mappingBehavior(MappingBehavior.fromValue(current));
          } else if (equalsOrSuffix(qName, "OtherResourceType")) {
@@ -83,17 +83,17 @@
          } else if (equalsOrSuffix(qName, "PoolID")) {
             builder.poolID(current);
          } else if (equalsOrSuffix(qName, "Reservation")) {
-            builder.reservation(new Long(current));
+            builder.reservation(Long.valueOf(current));
          } else if (equalsOrSuffix(qName, "ResourceSubType")) {
             builder.resourceSubType(current);
          } else if (equalsOrSuffix(qName, "ResourceType")) {
             builder.resourceType(ResourceType.fromValue(current));
          } else if (equalsOrSuffix(qName, "VirtualQuantity")) {
-            builder.virtualQuantity(new Long(current));
+            builder.virtualQuantity(Long.valueOf(current));
          } else if (equalsOrSuffix(qName, "VirtualQuantityUnits")) {
             builder.virtualQuantityUnits(current);
          } else if (equalsOrSuffix(qName, "Weight")) {
-            builder.weight(new Integer(current));
+            builder.weight(Integer.valueOf(current));
          } else if (equalsOrSuffix(qName, "Connection")) {
             builder.connection(current);
          } else if (equalsOrSuffix(qName, "HostResource")) {
diff --git a/compute/src/main/java/org/jclouds/cim/xml/VirtualSystemSettingDataHandler.java b/compute/src/main/java/org/jclouds/cim/xml/VirtualSystemSettingDataHandler.java
index 2a05e79..c537722 100644
--- a/compute/src/main/java/org/jclouds/cim/xml/VirtualSystemSettingDataHandler.java
+++ b/compute/src/main/java/org/jclouds/cim/xml/VirtualSystemSettingDataHandler.java
@@ -79,7 +79,7 @@
             // TODO parse the format for intervals: ddddddddhhmmss.mmmmmm:000
             builder.automaticStartupActionDelay(null);
          } else if (equalsOrSuffix(qName, "AutomaticStartupActionSequenceNumber")) {
-            builder.automaticStartupActionSequenceNumber(new Integer(current));
+            builder.automaticStartupActionSequenceNumber(Integer.valueOf(current));
          } else if (equalsOrSuffix(qName, "ConfigurationDataRoot")) {
             builder.configurationDataRoot(URI.create(current));
          } else if (equalsOrSuffix(qName, "ConfigurationFile")) {
diff --git a/compute/src/main/java/org/jclouds/ovf/xml/DiskSectionHandler.java b/compute/src/main/java/org/jclouds/ovf/xml/DiskSectionHandler.java
index 47c863e..e7564f5 100644
--- a/compute/src/main/java/org/jclouds/ovf/xml/DiskSectionHandler.java
+++ b/compute/src/main/java/org/jclouds/ovf/xml/DiskSectionHandler.java
@@ -67,7 +67,7 @@
       Long val = null;
       if (toParse != null) {
          try {
-            val = new Long(toParse);
+            val = Long.valueOf(toParse);
          } catch (NumberFormatException e) {
             logger.warn("%s for disk %s not a number [%s]", key, diskId, toParse);
          }
diff --git a/compute/src/test/java/org/jclouds/cim/xml/VirtualSystemSettingDataHandlerTest.java b/compute/src/test/java/org/jclouds/cim/xml/VirtualSystemSettingDataHandlerTest.java
index d693593..46dca7b 100644
--- a/compute/src/test/java/org/jclouds/cim/xml/VirtualSystemSettingDataHandlerTest.java
+++ b/compute/src/test/java/org/jclouds/cim/xml/VirtualSystemSettingDataHandlerTest.java
@@ -124,7 +124,7 @@
    @Test(enabled = false)
    public static void checkOs(OperatingSystemSection result) {
       assertEquals(result.getDescription(), "Ubuntu Linux (64-bit)");
-      assertEquals(result.getId(), new Integer(94));
+      assertEquals(result.getId(), Integer.valueOf(94));
       assertEquals(result.getInfo(), "Specifies the operating system installed");
    }
 }
diff --git a/compute/src/test/java/org/jclouds/compute/StubComputeServiceIntegrationTest.java b/compute/src/test/java/org/jclouds/compute/StubComputeServiceIntegrationTest.java
index 6fab8fc..b8e71c6 100644
--- a/compute/src/test/java/org/jclouds/compute/StubComputeServiceIntegrationTest.java
+++ b/compute/src/test/java/org/jclouds/compute/StubComputeServiceIntegrationTest.java
@@ -422,7 +422,7 @@
             return actual == null;
          }
          try {
-            String real = Strings2.toStringAndClose(((Payload) actual).getInput());
+            String real = Strings2.toString(((Payload) actual));
             assertEquals(real, expected);
             return true;
          } catch (IOException e) {
diff --git a/compute/src/test/java/org/jclouds/compute/internal/BaseComputeServiceLiveTest.java b/compute/src/test/java/org/jclouds/compute/internal/BaseComputeServiceLiveTest.java
index 72d320f..c2cecc0 100644
--- a/compute/src/test/java/org/jclouds/compute/internal/BaseComputeServiceLiveTest.java
+++ b/compute/src/test/java/org/jclouds/compute/internal/BaseComputeServiceLiveTest.java
@@ -634,7 +634,7 @@
 
       Matcher matcher = parseReported.matcher(exec.getOutput());
       if (matcher.find())
-         stats.reportedStartupTimeMilliseconds = new Long(matcher.group(1));
+         stats.reportedStartupTimeMilliseconds = Long.valueOf(matcher.group(1));
 
       getAnonymousLogger().info(format("<< %s on node(%s) %s", bgProcess, node.getId(), stats));
       return stats;
diff --git a/compute/src/test/resources/initscript_with_java.sh b/compute/src/test/resources/initscript_with_java.sh
index 936b3ec..01aefb2 100644
--- a/compute/src/test/resources/initscript_with_java.sh
+++ b/compute/src/test/resources/initscript_with_java.sh
@@ -202,7 +202,7 @@
 	chmod 0440 /etc/sudoers
 	mkdir -p /home/users
 	groupadd -f wheel
-	useradd -c defaultAdminUsername -s /bin/bash -g wheel -m  -d /home/users/defaultAdminUsername -p 'crypt(randompassword)' defaultAdminUsername
+	useradd -c 'defaultAdminUsername' -s /bin/bash -g wheel -m  -d /home/users/defaultAdminUsername -p 'crypt(randompassword)' defaultAdminUsername
 	mkdir -p /home/users/defaultAdminUsername/.ssh
 	cat >> /home/users/defaultAdminUsername/.ssh/authorized_keys <<-'END_OF_JCLOUDS_FILE'
 		publicKey
diff --git a/compute/src/test/resources/initscript_with_jboss.sh b/compute/src/test/resources/initscript_with_jboss.sh
index 5101010..786fc9b 100644
--- a/compute/src/test/resources/initscript_with_jboss.sh
+++ b/compute/src/test/resources/initscript_with_jboss.sh
@@ -202,7 +202,7 @@
 	chmod 0440 /etc/sudoers
 	mkdir -p /home/users
 	groupadd -f wheel
-	useradd -c web -s /bin/bash -g wheel -m  -d /home/users/web -p 'crypt(randompassword)' web
+	useradd -c 'web' -s /bin/bash -g wheel -m  -d /home/users/web -p 'crypt(randompassword)' web
 	mkdir -p /home/users/web/.ssh
 	cat >> /home/users/web/.ssh/authorized_keys <<-'END_OF_JCLOUDS_FILE'
 		publicKey
diff --git a/compute/src/test/resources/runscript_adminUpdate.sh b/compute/src/test/resources/runscript_adminUpdate.sh
index c9c7791..f3aa82e 100644
--- a/compute/src/test/resources/runscript_adminUpdate.sh
+++ b/compute/src/test/resources/runscript_adminUpdate.sh
@@ -91,7 +91,7 @@
 	chmod 0440 /etc/sudoers
 	mkdir -p /over/ridden
 	groupadd -f wheel
-	useradd -c foo -s /bin/bash -g wheel -m  -d /over/ridden/foo -p 'crypt(randompassword)' foo
+	useradd -c 'foo' -s /bin/bash -g wheel -m  -d /over/ridden/foo -p 'crypt(randompassword)' foo
 	mkdir -p /over/ridden/foo/.ssh
 	cat >> /over/ridden/foo/.ssh/authorized_keys <<-'END_OF_JCLOUDS_FILE'
 		publicKey
diff --git a/core/src/main/java/org/jclouds/domain/LocationScope.java b/core/src/main/java/org/jclouds/domain/LocationScope.java
index eefbbe3..1ee8836 100644
--- a/core/src/main/java/org/jclouds/domain/LocationScope.java
+++ b/core/src/main/java/org/jclouds/domain/LocationScope.java
@@ -25,6 +25,18 @@
  */

 public enum LocationScope {

 

-   PROVIDER, REGION, ZONE, NETWORK, RACK, HOST;

+    PROVIDER,

+    REGION,

+    ZONE,

+    /**

+     * @see <a href="http://dmtf.org/standards/cloud">cimi system docs</a>

+     */

+    SYSTEM,

+    /**

+     * E.g. the DMZ segment, secure segment. 

+     */

+    NETWORK,

+    RACK,

+    HOST;

 

 }
\ No newline at end of file
diff --git a/core/src/main/java/org/jclouds/domain/LoginCredentials.java b/core/src/main/java/org/jclouds/domain/LoginCredentials.java
index c22f013..68866b9 100644
--- a/core/src/main/java/org/jclouds/domain/LoginCredentials.java
+++ b/core/src/main/java/org/jclouds/domain/LoginCredentials.java
@@ -64,6 +64,8 @@
 
       public Builder password(String password) {
          this.password = Optional.fromNullable(password);
+         if (privateKey == null)
+            noPrivateKey();
          return this;
       }
 
@@ -74,6 +76,8 @@
 
       public Builder privateKey(String privateKey) {
          this.privateKey = Optional.fromNullable(privateKey);
+         if (password == null)
+            noPassword();
          return this;
       }
 
diff --git a/core/src/main/java/org/jclouds/events/config/EventBusModule.java b/core/src/main/java/org/jclouds/events/config/EventBusModule.java
index d7aa3fd..6e215de 100644
--- a/core/src/main/java/org/jclouds/events/config/EventBusModule.java
+++ b/core/src/main/java/org/jclouds/events/config/EventBusModule.java
@@ -33,6 +33,7 @@
 import com.google.common.eventbus.EventBus;
 import com.google.inject.AbstractModule;
 import com.google.inject.Provides;
+import com.google.inject.Scopes;
 
 /**
  * Configures the {@link EventBus} to be used in the platform.
@@ -79,7 +80,7 @@
      */
     @Override
     protected void configure() {
-        bind(EventBus.class).annotatedWith(AsyncBus.class).to(AsyncEventBus.class);
+        bind(EventBus.class).annotatedWith(AsyncBus.class).to(AsyncEventBus.class).in(Scopes.SINGLETON);
     }
 
 }
diff --git a/core/src/main/java/org/jclouds/http/HttpResponseException.java b/core/src/main/java/org/jclouds/http/HttpResponseException.java
index b1e03d4..f717a6f 100644
--- a/core/src/main/java/org/jclouds/http/HttpResponseException.java
+++ b/core/src/main/java/org/jclouds/http/HttpResponseException.java
@@ -88,7 +88,7 @@
             && request.getPayload().getContentMetadata().getContentLength() < 1024) {
          try {
             return String.format(" [%s] ", request.getPayload() instanceof StringPayload ? request.getPayload()
-                  .getRawContent() : Strings2.toStringAndClose(request.getPayload().getInput()));
+                  .getRawContent() : Strings2.toString(request.getPayload()));
          } catch (IOException e) {
          }
       }
diff --git a/core/src/main/java/org/jclouds/http/functions/ParseURIFromListOrLocationHeaderIf20x.java b/core/src/main/java/org/jclouds/http/functions/ParseURIFromListOrLocationHeaderIf20x.java
index 64199b4..de47f00 100644
--- a/core/src/main/java/org/jclouds/http/functions/ParseURIFromListOrLocationHeaderIf20x.java
+++ b/core/src/main/java/org/jclouds/http/functions/ParseURIFromListOrLocationHeaderIf20x.java
@@ -61,7 +61,7 @@
          try {
             if (from.getPayload().getInput() == null)
                throw new HttpResponseException("no content", null, from);
-            String toParse = Strings2.toStringAndClose(from.getPayload().getInput());
+            String toParse = Strings2.toString(from.getPayload());
             return URI.create(toParse.trim());
          } catch (IOException e) {
             throw new HttpResponseException("couldn't parse uri from content", null, from, e);
diff --git a/core/src/main/java/org/jclouds/http/handlers/CloseContentAndSetExceptionErrorHandler.java b/core/src/main/java/org/jclouds/http/handlers/CloseContentAndSetExceptionErrorHandler.java
index 9dc9d56..2cefb66 100644
--- a/core/src/main/java/org/jclouds/http/handlers/CloseContentAndSetExceptionErrorHandler.java
+++ b/core/src/main/java/org/jclouds/http/handlers/CloseContentAndSetExceptionErrorHandler.java
@@ -40,7 +40,7 @@
    public void handleError(HttpCommand command, HttpResponse from) {
       String content;
       try {
-         content = from.getPayload() != null ? Strings2.toStringAndClose(from.getPayload().getInput()) : null;
+         content = from.getPayload() != null ? Strings2.toString(from.getPayload()) : null;
          command.setException(new HttpResponseException(command, from, content));
       } catch (IOException e) {
          command.setException(new HttpResponseException(command, from));
diff --git a/core/src/main/java/org/jclouds/io/ContentMetadataCodec.java b/core/src/main/java/org/jclouds/io/ContentMetadataCodec.java
index 64faacf..cb13f94 100644
--- a/core/src/main/java/org/jclouds/io/ContentMetadataCodec.java
+++ b/core/src/main/java/org/jclouds/io/ContentMetadataCodec.java
@@ -94,7 +94,7 @@
          });
          for (Entry<String, String> header : headers.entries()) {
             if (!chunked && CONTENT_LENGTH.equalsIgnoreCase(header.getKey())) {
-               contentMetadata.setContentLength(new Long(header.getValue()));
+               contentMetadata.setContentLength(Long.valueOf(header.getValue()));
             } else if ("Content-MD5".equalsIgnoreCase(header.getKey())) {
                contentMetadata.setContentMD5(CryptoStreams.base64(header.getValue()));
             } else if (CONTENT_TYPE.equalsIgnoreCase(header.getKey())) {
diff --git a/core/src/main/java/org/jclouds/io/payloads/ByteArrayPayload.java b/core/src/main/java/org/jclouds/io/payloads/ByteArrayPayload.java
index bd26bbd..3778666 100644
--- a/core/src/main/java/org/jclouds/io/payloads/ByteArrayPayload.java
+++ b/core/src/main/java/org/jclouds/io/payloads/ByteArrayPayload.java
@@ -34,7 +34,7 @@
 
    public ByteArrayPayload(byte[] content, byte[] md5) {
       super(content);
-      getContentMetadata().setContentLength(new Long(checkNotNull(content, "content").length));
+      getContentMetadata().setContentLength(Long.valueOf(checkNotNull(content, "content").length));
       getContentMetadata().setContentMD5(md5);
       checkArgument(content.length >= 0, "length cannot me negative");
    }
diff --git a/core/src/main/java/org/jclouds/io/payloads/StringPayload.java b/core/src/main/java/org/jclouds/io/payloads/StringPayload.java
index 98f03d7..272b480 100644
--- a/core/src/main/java/org/jclouds/io/payloads/StringPayload.java
+++ b/core/src/main/java/org/jclouds/io/payloads/StringPayload.java
@@ -38,7 +38,7 @@
    public StringPayload(String content) {
       super(content);
       this.bytes = content.getBytes(Charsets.UTF_8);
-      getContentMetadata().setContentLength(new Long(bytes.length));
+      getContentMetadata().setContentLength(Long.valueOf(bytes.length));
    }
 
    /**
diff --git a/core/src/main/java/org/jclouds/util/Strings2.java b/core/src/main/java/org/jclouds/util/Strings2.java
index 71dd466..49fd1d6 100644
--- a/core/src/main/java/org/jclouds/util/Strings2.java
+++ b/core/src/main/java/org/jclouds/util/Strings2.java
@@ -46,6 +46,8 @@
 import org.jclouds.logging.Logger;
 
 import com.google.common.base.Charsets;
+import com.google.common.io.CharStreams;
+import com.google.common.io.InputSupplier;
 
 /**
  * 
@@ -123,7 +125,11 @@
       return input;
    }
 
-   public static final String UTF8_ENCODING = "UTF-8";
+   public static String toString(InputSupplier<? extends InputStream> supplier)
+         throws IOException {
+      return CharStreams.toString(CharStreams.newReaderSupplier(supplier,
+         Charsets.UTF_8));
+   }
 
    public static String toStringAndClose(InputStream input) throws IOException {
       checkNotNull(input, "input");
@@ -143,44 +149,10 @@
       return new ByteArrayInputStream(in.getBytes(Charsets.UTF_8));
    }
 
-   /**
-    * Encode the given string with the given encoding, if possible. If the encoding fails with
-    * {@link UnsupportedEncodingException}, log a warning and fall back to the system's default
-    * encoding.
-    * 
-    * @param str
-    *           what to encode
-    * @param charsetName
-    *           the name of a supported {@link java.nio.charset.Charset </code>charset<code>}
-    * @return properly encoded String.
-    */
-   public static byte[] encodeString(String str, String charsetName) {
-      try {
-         return str.getBytes(charsetName);
-      } catch (UnsupportedEncodingException e) {
-         logger.warn(e, "Failed to encode string to bytes with encoding " + charsetName
-               + ". Falling back to system's default encoding");
-         return str.getBytes();
-      }
-   }
-
    @Resource
    private static Logger logger = Logger.NULL;
 
    /**
-    * Encode the given string with the UTF-8 encoding, the sane default. In the very unlikely event
-    * the encoding fails with {@link UnsupportedEncodingException}, log a warning and fall back to
-    * the system's default encoding.
-    * 
-    * @param str
-    *           what to encode
-    * @return properly encoded String.
-    */
-   public static byte[] encodeString(String str) {
-      return encodeString(str, UTF8_ENCODING);
-   }
-
-   /**
     * replaces tokens that are expressed as <code>{token}</code>
     * 
     * <p/>
diff --git a/core/src/test/java/org/jclouds/domain/LoginCredentialsTest.java b/core/src/test/java/org/jclouds/domain/LoginCredentialsTest.java
new file mode 100644
index 0000000..b22e7a4
--- /dev/null
+++ b/core/src/test/java/org/jclouds/domain/LoginCredentialsTest.java
@@ -0,0 +1,56 @@
+/**
+ * Licensed to jclouds, Inc. (jclouds) under one or more
+ * contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  jclouds 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.domain;
+
+import static org.testng.Assert.assertEquals;
+
+import org.testng.annotations.Test;
+
+import com.google.common.base.Optional;
+
+/**
+ * @author Adrian Cole
+ */
+@Test(groups = "unit", testName = "LoginCredentialsTest")
+public class LoginCredentialsTest {
+
+   public void testPasswordSetsPrivateKeyToAbsentWhenUnset() {
+      LoginCredentials toTest = LoginCredentials.builder().user("user").password("password").build();
+      assertEquals(toTest.getOptionalPassword(), Optional.of("password"));
+      assertEquals(toTest.getOptionalPrivateKey(), Optional.absent());
+   }
+
+   public void testPasswordLeavesPrivateKeyAloneWhenSet() {
+      LoginCredentials toTest = LoginCredentials.builder().user("user").privateKey("key").password("password").build();
+      assertEquals(toTest.getOptionalPassword(), Optional.of("password"));
+      assertEquals(toTest.getOptionalPrivateKey(), Optional.of("key"));
+   }
+
+   public void testPrivateKeySetsPasswordToAbsentWhenUnset() {
+      LoginCredentials toTest = LoginCredentials.builder().user("user").privateKey("key").build();
+      assertEquals(toTest.getOptionalPassword(), Optional.absent());
+      assertEquals(toTest.getOptionalPrivateKey(), Optional.of("key"));
+   }
+
+   public void testPrivateKeyLeavesPasswordAloneWhenSet() {
+      LoginCredentials toTest = LoginCredentials.builder().user("user").password("password").privateKey("key").build();
+      assertEquals(toTest.getOptionalPassword(), Optional.of("password"));
+      assertEquals(toTest.getOptionalPrivateKey(), Optional.of("key"));
+   }
+}
diff --git a/core/src/test/java/org/jclouds/io/payloads/MultipartFormTest.java b/core/src/test/java/org/jclouds/io/payloads/MultipartFormTest.java
index 71e3f11..6b6dce1 100644
--- a/core/src/test/java/org/jclouds/io/payloads/MultipartFormTest.java
+++ b/core/src/test/java/org/jclouds/io/payloads/MultipartFormTest.java
@@ -54,8 +54,8 @@
 
       MultipartForm multipartForm = new MultipartForm(boundary, newPart("hello"));
 
-      assertEquals(Strings2.toStringAndClose(multipartForm.getInput()), expects);
-      assertEquals(multipartForm.getContentMetadata().getContentLength(), new Long(199));
+      assertEquals(Strings2.toString(multipartForm), expects);
+      assertEquals(multipartForm.getContentMetadata().getContentLength(), Long.valueOf(199));
    }
 
    public static class MockFilePayload extends FilePayload {
@@ -119,12 +119,12 @@
 
       MultipartForm multipartForm = new MultipartForm(boundary, newPart("hello"), newPart("goodbye"));
 
-      assertEquals(Strings2.toStringAndClose(multipartForm.getInput()), expects);
+      assertEquals(Strings2.toString(multipartForm), expects);
 
       // test repeatable
       assert multipartForm.isRepeatable();
-      assertEquals(Strings2.toStringAndClose(multipartForm.getInput()), expects);
-      assertEquals(multipartForm.getContentMetadata().getContentLength(), new Long(352));
+      assertEquals(Strings2.toString(multipartForm), expects);
+      assertEquals(multipartForm.getContentMetadata().getContentLength(), Long.valueOf(352));
    }
 
 }
diff --git a/core/src/test/java/org/jclouds/io/payloads/StringPayloadTest.java b/core/src/test/java/org/jclouds/io/payloads/StringPayloadTest.java
index ece2faf..1cd3086 100644
--- a/core/src/test/java/org/jclouds/io/payloads/StringPayloadTest.java
+++ b/core/src/test/java/org/jclouds/io/payloads/StringPayloadTest.java
@@ -33,7 +33,7 @@
 public class StringPayloadTest {
    public void testLengthIsCorrectPerUTF8() {
       Payload stringPayload = new StringPayload("unic₪de");
-      assertEquals(stringPayload.getContentMetadata().getContentLength(), new Long(
+      assertEquals(stringPayload.getContentMetadata().getContentLength(), Long.valueOf(
             "unic₪de".getBytes(Charsets.UTF_8).length));
    }
 }
diff --git a/core/src/test/java/org/jclouds/rest/internal/BaseRestApiExpectTest.java b/core/src/test/java/org/jclouds/rest/internal/BaseRestApiExpectTest.java
index b1ad1f0..67afbf7 100644
--- a/core/src/test/java/org/jclouds/rest/internal/BaseRestApiExpectTest.java
+++ b/core/src/test/java/org/jclouds/rest/internal/BaseRestApiExpectTest.java
@@ -386,8 +386,8 @@
  
          switch (compareHttpRequestAsType(a)) {
             case XML: {
-               Diff diff = XMLUnit.compareXML(Strings2.toStringAndClose(a.getPayload().getInput()), Strings2
-                        .toStringAndClose(b.getPayload().getInput()));
+               Diff diff = XMLUnit.compareXML(Strings2.toString(a.getPayload()), Strings2
+                        .toString(b.getPayload()));
 
                // Ignoring whitespace in elements that have other children, xsi:schemaLocation and
                // differences in namespace prefixes
@@ -419,8 +419,8 @@
             }
             case JSON: {               
                JsonParser parser = new JsonParser();
-               JsonElement payloadA = parser.parse(Strings2.toStringAndClose(a.getPayload().getInput()));
-               JsonElement payloadB = parser.parse(Strings2.toStringAndClose(b.getPayload().getInput()));
+               JsonElement payloadA = parser.parse(Strings2.toString(a.getPayload()));
+               JsonElement payloadB = parser.parse(Strings2.toString(b.getPayload()));
                return Objects.equal(payloadA, payloadB);
             }
             default: {
@@ -486,7 +486,7 @@
             builder.append(header.getKey()).append(": ").append(header.getValue()).append('\n');
          }
          try {
-            builder.append('\n').append(Strings2.toStringAndClose(request.getPayload().getInput()));
+            builder.append('\n').append(Strings2.toString(request.getPayload()));
          } catch (IOException e) {
             throw Throwables.propagate(e);
          }
diff --git a/core/src/test/java/org/jclouds/rest/internal/BaseRestApiTest.java b/core/src/test/java/org/jclouds/rest/internal/BaseRestApiTest.java
index ed363f5..82ac89b 100644
--- a/core/src/test/java/org/jclouds/rest/internal/BaseRestApiTest.java
+++ b/core/src/test/java/org/jclouds/rest/internal/BaseRestApiTest.java
@@ -107,12 +107,12 @@
       } else {
          String payload = null;
          try {
-            payload = Strings2.toStringAndClose(request.getPayload().getInput());
+            payload = Strings2.toString(request.getPayload());
          } catch (IOException e) {
             propagate(e);
          }
          assertEquals(payload, toMatch);
-         Long length = new Long(payload.getBytes().length);
+         Long length = Long.valueOf(payload.getBytes().length);
          try {
             assertContentHeadersEqual(request, contentType, contentDispositon, contentEncoding, contentLanguage,
                   length, contentMD5 ? CryptoStreams.md5(request.getPayload()) : null, expires);
diff --git a/core/src/test/java/org/jclouds/rest/internal/RestAnnotationProcessorTest.java b/core/src/test/java/org/jclouds/rest/internal/RestAnnotationProcessorTest.java
index 0225820..f14de94 100644
--- a/core/src/test/java/org/jclouds/rest/internal/RestAnnotationProcessorTest.java
+++ b/core/src/test/java/org/jclouds/rest/internal/RestAnnotationProcessorTest.java
@@ -1274,7 +1274,7 @@
             .createResponseParser(parserFactory, injector, method, request);
 
       assertEquals(parser.apply(HttpResponse.builder().statusCode(200).message("ok")
-            .payload("{ \"destroyvirtualmachineresponse\" : {\"jobid\":4} }").build()), new Long(4));
+            .payload("{ \"destroyvirtualmachineresponse\" : {\"jobid\":4} }").build()), Long.valueOf(4));
    }
 
    @SuppressWarnings("unchecked")
@@ -1286,7 +1286,7 @@
             .createResponseParser(parserFactory, injector, method, request);
 
       assertEquals(parser.apply(HttpResponse.builder().statusCode(200).message("ok")
-            .payload("{ \"destroyvirtualmachineresponse\" : {\"jobid\":4} }").build()), new Long(5));
+            .payload("{ \"destroyvirtualmachineresponse\" : {\"jobid\":4} }").build()), Long.valueOf(5));
    }
    
    static class TestRequestFilter1 implements HttpRequestFilter {
diff --git a/demos/perftest/src/test/java/org/jclouds/aws/s3/BaseJCloudsPerformanceLiveTest.java b/demos/perftest/src/test/java/org/jclouds/aws/s3/BaseJCloudsPerformanceLiveTest.java
index 0a0b8fb..8d23bbd 100644
--- a/demos/perftest/src/test/java/org/jclouds/aws/s3/BaseJCloudsPerformanceLiveTest.java
+++ b/demos/perftest/src/test/java/org/jclouds/aws/s3/BaseJCloudsPerformanceLiveTest.java
@@ -77,7 +77,7 @@
       S3Object object = newObject(key);
       object.setPayload(data);
       try {
-         object.getPayload().getContentMetadata().setContentLength(new Long(data.available()));
+         object.getPayload().getContentMetadata().setContentLength(Long.valueOf(data.available()));
       } catch (IOException e) {
          Throwables.propagate(e);
       }
diff --git a/demos/tweetstore/cf-tweetstore-spring/src/main/java/org/jclouds/demo/tweetstore/functions/KeyToStoredTweetStatus.java b/demos/tweetstore/cf-tweetstore-spring/src/main/java/org/jclouds/demo/tweetstore/functions/KeyToStoredTweetStatus.java
index 2a6ea0a..f831b97 100644
--- a/demos/tweetstore/cf-tweetstore-spring/src/main/java/org/jclouds/demo/tweetstore/functions/KeyToStoredTweetStatus.java
+++ b/demos/tweetstore/cf-tweetstore-spring/src/main/java/org/jclouds/demo/tweetstore/functions/KeyToStoredTweetStatus.java
@@ -18,8 +18,6 @@
  */
 package org.jclouds.demo.tweetstore.functions;
 
-import static org.jclouds.util.Strings2.toStringAndClose;
-
 import javax.annotation.Resource;
 
 import org.jclouds.blobstore.BlobMap;
@@ -27,6 +25,7 @@
 import org.jclouds.demo.tweetstore.domain.StoredTweetStatus;
 import org.jclouds.demo.tweetstore.reference.TweetStoreConstants;
 import org.jclouds.logging.Logger;
+import org.jclouds.util.Strings2;
 
 import com.google.common.base.Function;
 
@@ -59,7 +58,7 @@
          Blob blob = map.get(id);
          status = ((System.currentTimeMillis() - start) + "ms");
          from = blob.getMetadata().getUserMetadata().get(TweetStoreConstants.SENDER_NAME);
-         tweet = toStringAndClose(blob.getPayload().getInput());
+         tweet = Strings2.toString(blob.getPayload());
       } catch (Exception e) {
          logger.error(e, "Error listing container %s//%s/%s", service, container, id);
          status = (e.getMessage());
diff --git a/demos/tweetstore/cf-tweetstore-spring/src/test/java/org/jclouds/demo/tweetstore/controller/StoreTweetsControllerTest.java b/demos/tweetstore/cf-tweetstore-spring/src/test/java/org/jclouds/demo/tweetstore/controller/StoreTweetsControllerTest.java
index 3d0cbc4..53eb8a9 100644
--- a/demos/tweetstore/cf-tweetstore-spring/src/test/java/org/jclouds/demo/tweetstore/controller/StoreTweetsControllerTest.java
+++ b/demos/tweetstore/cf-tweetstore-spring/src/test/java/org/jclouds/demo/tweetstore/controller/StoreTweetsControllerTest.java
@@ -22,7 +22,6 @@
 import static org.easymock.EasyMock.expect;
 import static org.easymock.EasyMock.replay;
 import static org.easymock.EasyMock.verify;
-import static org.jclouds.util.Strings2.toStringAndClose;
 import static org.testng.Assert.assertEquals;
 
 import java.io.IOException;
@@ -36,6 +35,7 @@
 import org.jclouds.blobstore.TransientApiMetadata;
 import org.jclouds.blobstore.domain.Blob;
 import org.jclouds.demo.tweetstore.reference.TweetStoreConstants;
+import org.jclouds.util.Strings2;
 import org.testng.annotations.Test;
 
 import twitter4j.Status;
@@ -107,13 +107,13 @@
          assertEquals(frankBlob.getMetadata().getName(), "1");
          assertEquals(frankBlob.getMetadata().getUserMetadata().get(TweetStoreConstants.SENDER_NAME), "frank");
          assertEquals(frankBlob.getMetadata().getContentMetadata().getContentType(), "text/plain");
-         assertEquals(toStringAndClose(frankBlob.getPayload().getInput()), "I love beans!");
+         assertEquals(Strings2.toString(frankBlob.getPayload()), "I love beans!");
 
          Blob jimmyBlob = map.get("2");
          assertEquals(jimmyBlob.getMetadata().getName(), "2");
          assertEquals(jimmyBlob.getMetadata().getUserMetadata().get(TweetStoreConstants.SENDER_NAME), "jimmy");
          assertEquals(jimmyBlob.getMetadata().getContentMetadata().getContentType(), "text/plain");
-         assertEquals(toStringAndClose(jimmyBlob.getPayload().getInput()), "cloud is king");
+         assertEquals(Strings2.toString(jimmyBlob.getPayload()), "cloud is king");
       }
 
    }
diff --git a/demos/tweetstore/gae-tweetstore-spring/src/main/java/org/jclouds/demo/tweetstore/functions/KeyToStoredTweetStatus.java b/demos/tweetstore/gae-tweetstore-spring/src/main/java/org/jclouds/demo/tweetstore/functions/KeyToStoredTweetStatus.java
index 2a6ea0a..f831b97 100644
--- a/demos/tweetstore/gae-tweetstore-spring/src/main/java/org/jclouds/demo/tweetstore/functions/KeyToStoredTweetStatus.java
+++ b/demos/tweetstore/gae-tweetstore-spring/src/main/java/org/jclouds/demo/tweetstore/functions/KeyToStoredTweetStatus.java
@@ -18,8 +18,6 @@
  */
 package org.jclouds.demo.tweetstore.functions;
 
-import static org.jclouds.util.Strings2.toStringAndClose;
-
 import javax.annotation.Resource;
 
 import org.jclouds.blobstore.BlobMap;
@@ -27,6 +25,7 @@
 import org.jclouds.demo.tweetstore.domain.StoredTweetStatus;
 import org.jclouds.demo.tweetstore.reference.TweetStoreConstants;
 import org.jclouds.logging.Logger;
+import org.jclouds.util.Strings2;
 
 import com.google.common.base.Function;
 
@@ -59,7 +58,7 @@
          Blob blob = map.get(id);
          status = ((System.currentTimeMillis() - start) + "ms");
          from = blob.getMetadata().getUserMetadata().get(TweetStoreConstants.SENDER_NAME);
-         tweet = toStringAndClose(blob.getPayload().getInput());
+         tweet = Strings2.toString(blob.getPayload());
       } catch (Exception e) {
          logger.error(e, "Error listing container %s//%s/%s", service, container, id);
          status = (e.getMessage());
diff --git a/demos/tweetstore/gae-tweetstore-spring/src/test/java/org/jclouds/demo/tweetstore/controller/StoreTweetsControllerTest.java b/demos/tweetstore/gae-tweetstore-spring/src/test/java/org/jclouds/demo/tweetstore/controller/StoreTweetsControllerTest.java
index 3afb3db..084b18a 100644
--- a/demos/tweetstore/gae-tweetstore-spring/src/test/java/org/jclouds/demo/tweetstore/controller/StoreTweetsControllerTest.java
+++ b/demos/tweetstore/gae-tweetstore-spring/src/test/java/org/jclouds/demo/tweetstore/controller/StoreTweetsControllerTest.java
@@ -22,7 +22,6 @@
 import static org.easymock.EasyMock.expect;
 import static org.easymock.EasyMock.replay;
 import static org.easymock.EasyMock.verify;
-import static org.jclouds.util.Strings2.toStringAndClose;
 import static org.testng.Assert.assertEquals;
 
 import java.io.IOException;
@@ -36,6 +35,7 @@
 import org.jclouds.blobstore.TransientApiMetadata;
 import org.jclouds.blobstore.domain.Blob;
 import org.jclouds.demo.tweetstore.reference.TweetStoreConstants;
+import org.jclouds.util.Strings2;
 import org.testng.annotations.Test;
 
 import twitter4j.Status;
@@ -107,13 +107,13 @@
          assertEquals(frankBlob.getMetadata().getName(), "1");
          assertEquals(frankBlob.getMetadata().getUserMetadata().get(TweetStoreConstants.SENDER_NAME), "frank");
          assertEquals(frankBlob.getMetadata().getContentMetadata().getContentType(), "text/plain");
-         assertEquals(toStringAndClose(frankBlob.getPayload().getInput()), "I love beans!");
+         assertEquals(Strings2.toString(frankBlob.getPayload()), "I love beans!");
 
          Blob jimmyBlob = map.get("2");
          assertEquals(jimmyBlob.getMetadata().getName(), "2");
          assertEquals(jimmyBlob.getMetadata().getUserMetadata().get(TweetStoreConstants.SENDER_NAME), "jimmy");
          assertEquals(jimmyBlob.getMetadata().getContentMetadata().getContentType(), "text/plain");
-         assertEquals(toStringAndClose(jimmyBlob.getPayload().getInput()), "cloud is king");
+         assertEquals(Strings2.toString(jimmyBlob.getPayload()), "cloud is king");
       }
 
    }
diff --git a/demos/tweetstore/gae-tweetstore/src/main/java/org/jclouds/demo/tweetstore/functions/KeyToStoredTweetStatus.java b/demos/tweetstore/gae-tweetstore/src/main/java/org/jclouds/demo/tweetstore/functions/KeyToStoredTweetStatus.java
index 2a6ea0a..f831b97 100644
--- a/demos/tweetstore/gae-tweetstore/src/main/java/org/jclouds/demo/tweetstore/functions/KeyToStoredTweetStatus.java
+++ b/demos/tweetstore/gae-tweetstore/src/main/java/org/jclouds/demo/tweetstore/functions/KeyToStoredTweetStatus.java
@@ -18,8 +18,6 @@
  */
 package org.jclouds.demo.tweetstore.functions;
 
-import static org.jclouds.util.Strings2.toStringAndClose;
-
 import javax.annotation.Resource;
 
 import org.jclouds.blobstore.BlobMap;
@@ -27,6 +25,7 @@
 import org.jclouds.demo.tweetstore.domain.StoredTweetStatus;
 import org.jclouds.demo.tweetstore.reference.TweetStoreConstants;
 import org.jclouds.logging.Logger;
+import org.jclouds.util.Strings2;
 
 import com.google.common.base.Function;
 
@@ -59,7 +58,7 @@
          Blob blob = map.get(id);
          status = ((System.currentTimeMillis() - start) + "ms");
          from = blob.getMetadata().getUserMetadata().get(TweetStoreConstants.SENDER_NAME);
-         tweet = toStringAndClose(blob.getPayload().getInput());
+         tweet = Strings2.toString(blob.getPayload());
       } catch (Exception e) {
          logger.error(e, "Error listing container %s//%s/%s", service, container, id);
          status = (e.getMessage());
diff --git a/demos/tweetstore/gae-tweetstore/src/test/java/org/jclouds/demo/tweetstore/controller/StoreTweetsControllerTest.java b/demos/tweetstore/gae-tweetstore/src/test/java/org/jclouds/demo/tweetstore/controller/StoreTweetsControllerTest.java
index e592355..0976307 100644
--- a/demos/tweetstore/gae-tweetstore/src/test/java/org/jclouds/demo/tweetstore/controller/StoreTweetsControllerTest.java
+++ b/demos/tweetstore/gae-tweetstore/src/test/java/org/jclouds/demo/tweetstore/controller/StoreTweetsControllerTest.java
@@ -22,7 +22,6 @@
 import static org.easymock.EasyMock.expect;
 import static org.easymock.EasyMock.replay;
 import static org.easymock.EasyMock.verify;
-import static org.jclouds.util.Strings2.toStringAndClose;
 import static org.testng.Assert.assertEquals;
 
 import java.io.IOException;
@@ -36,6 +35,7 @@
 import org.jclouds.blobstore.TransientApiMetadata;
 import org.jclouds.blobstore.domain.Blob;
 import org.jclouds.demo.tweetstore.reference.TweetStoreConstants;
+import org.jclouds.util.Strings2;
 import org.testng.annotations.Test;
 
 import twitter4j.Status;
@@ -107,13 +107,13 @@
          assertEquals(frankBlob.getMetadata().getName(), "1");
          assertEquals(frankBlob.getMetadata().getUserMetadata().get(TweetStoreConstants.SENDER_NAME), "frank");
          assertEquals(frankBlob.getMetadata().getContentMetadata().getContentType(), "text/plain");
-         assertEquals(toStringAndClose(frankBlob.getPayload().getInput()), "I love beans!");
+         assertEquals(Strings2.toString(frankBlob.getPayload()), "I love beans!");
 
          Blob jimmyBlob = map.get("2");
          assertEquals(jimmyBlob.getMetadata().getName(), "2");
          assertEquals(jimmyBlob.getMetadata().getUserMetadata().get(TweetStoreConstants.SENDER_NAME), "jimmy");
          assertEquals(jimmyBlob.getMetadata().getContentMetadata().getContentType(), "text/plain");
-         assertEquals(toStringAndClose(jimmyBlob.getPayload().getInput()), "cloud is king");
+         assertEquals(Strings2.toString(jimmyBlob.getPayload()), "cloud is king");
       }
 
    }
diff --git a/demos/tweetstore/heroku-tweetstore/src/main/java/org/jclouds/demo/tweetstore/functions/KeyToStoredTweetStatus.java b/demos/tweetstore/heroku-tweetstore/src/main/java/org/jclouds/demo/tweetstore/functions/KeyToStoredTweetStatus.java
index 2a6ea0a..f831b97 100644
--- a/demos/tweetstore/heroku-tweetstore/src/main/java/org/jclouds/demo/tweetstore/functions/KeyToStoredTweetStatus.java
+++ b/demos/tweetstore/heroku-tweetstore/src/main/java/org/jclouds/demo/tweetstore/functions/KeyToStoredTweetStatus.java
@@ -18,8 +18,6 @@
  */
 package org.jclouds.demo.tweetstore.functions;
 
-import static org.jclouds.util.Strings2.toStringAndClose;
-
 import javax.annotation.Resource;
 
 import org.jclouds.blobstore.BlobMap;
@@ -27,6 +25,7 @@
 import org.jclouds.demo.tweetstore.domain.StoredTweetStatus;
 import org.jclouds.demo.tweetstore.reference.TweetStoreConstants;
 import org.jclouds.logging.Logger;
+import org.jclouds.util.Strings2;
 
 import com.google.common.base.Function;
 
@@ -59,7 +58,7 @@
          Blob blob = map.get(id);
          status = ((System.currentTimeMillis() - start) + "ms");
          from = blob.getMetadata().getUserMetadata().get(TweetStoreConstants.SENDER_NAME);
-         tweet = toStringAndClose(blob.getPayload().getInput());
+         tweet = Strings2.toString(blob.getPayload());
       } catch (Exception e) {
          logger.error(e, "Error listing container %s//%s/%s", service, container, id);
          status = (e.getMessage());
diff --git a/demos/tweetstore/heroku-tweetstore/src/test/java/org/jclouds/demo/tweetstore/controller/StoreTweetsControllerTest.java b/demos/tweetstore/heroku-tweetstore/src/test/java/org/jclouds/demo/tweetstore/controller/StoreTweetsControllerTest.java
index 2d26630..66448df 100644
--- a/demos/tweetstore/heroku-tweetstore/src/test/java/org/jclouds/demo/tweetstore/controller/StoreTweetsControllerTest.java
+++ b/demos/tweetstore/heroku-tweetstore/src/test/java/org/jclouds/demo/tweetstore/controller/StoreTweetsControllerTest.java
@@ -22,7 +22,6 @@
 import static org.easymock.EasyMock.expect;
 import static org.easymock.EasyMock.replay;
 import static org.easymock.EasyMock.verify;
-import static org.jclouds.util.Strings2.toStringAndClose;
 import static org.testng.Assert.assertEquals;
 
 import java.io.IOException;
@@ -36,6 +35,7 @@
 import org.jclouds.blobstore.TransientApiMetadata;
 import org.jclouds.blobstore.domain.Blob;
 import org.jclouds.demo.tweetstore.reference.TweetStoreConstants;
+import org.jclouds.util.Strings2;
 import org.testng.annotations.Test;
 
 import twitter4j.Status;
@@ -108,13 +108,13 @@
          assertEquals(frankBlob.getMetadata().getName(), "1");
          assertEquals(frankBlob.getMetadata().getUserMetadata().get(TweetStoreConstants.SENDER_NAME), "frank");
          assertEquals(frankBlob.getMetadata().getContentMetadata().getContentType(), "text/plain");
-         assertEquals(toStringAndClose(frankBlob.getPayload().getInput()), "I love beans!");
+         assertEquals(Strings2.toString(frankBlob.getPayload()), "I love beans!");
 
          Blob jimmyBlob = map.get("2");
          assertEquals(jimmyBlob.getMetadata().getName(), "2");
          assertEquals(jimmyBlob.getMetadata().getUserMetadata().get(TweetStoreConstants.SENDER_NAME), "jimmy");
          assertEquals(jimmyBlob.getMetadata().getContentMetadata().getContentType(), "text/plain");
-         assertEquals(toStringAndClose(jimmyBlob.getPayload().getInput()), "cloud is king");
+         assertEquals(Strings2.toString(jimmyBlob.getPayload()), "cloud is king");
       }
 
    }
diff --git a/demos/tweetstore/rhcloud-tweetstore/src/main/java/org/jclouds/demo/tweetstore/functions/KeyToStoredTweetStatus.java b/demos/tweetstore/rhcloud-tweetstore/src/main/java/org/jclouds/demo/tweetstore/functions/KeyToStoredTweetStatus.java
index 2a6ea0a..f831b97 100644
--- a/demos/tweetstore/rhcloud-tweetstore/src/main/java/org/jclouds/demo/tweetstore/functions/KeyToStoredTweetStatus.java
+++ b/demos/tweetstore/rhcloud-tweetstore/src/main/java/org/jclouds/demo/tweetstore/functions/KeyToStoredTweetStatus.java
@@ -18,8 +18,6 @@
  */
 package org.jclouds.demo.tweetstore.functions;
 
-import static org.jclouds.util.Strings2.toStringAndClose;
-
 import javax.annotation.Resource;
 
 import org.jclouds.blobstore.BlobMap;
@@ -27,6 +25,7 @@
 import org.jclouds.demo.tweetstore.domain.StoredTweetStatus;
 import org.jclouds.demo.tweetstore.reference.TweetStoreConstants;
 import org.jclouds.logging.Logger;
+import org.jclouds.util.Strings2;
 
 import com.google.common.base.Function;
 
@@ -59,7 +58,7 @@
          Blob blob = map.get(id);
          status = ((System.currentTimeMillis() - start) + "ms");
          from = blob.getMetadata().getUserMetadata().get(TweetStoreConstants.SENDER_NAME);
-         tweet = toStringAndClose(blob.getPayload().getInput());
+         tweet = Strings2.toString(blob.getPayload());
       } catch (Exception e) {
          logger.error(e, "Error listing container %s//%s/%s", service, container, id);
          status = (e.getMessage());
diff --git a/demos/tweetstore/rhcloud-tweetstore/src/test/java/org/jclouds/demo/tweetstore/controller/StoreTweetsControllerTest.java b/demos/tweetstore/rhcloud-tweetstore/src/test/java/org/jclouds/demo/tweetstore/controller/StoreTweetsControllerTest.java
index 7afdb30..2ac4481 100644
--- a/demos/tweetstore/rhcloud-tweetstore/src/test/java/org/jclouds/demo/tweetstore/controller/StoreTweetsControllerTest.java
+++ b/demos/tweetstore/rhcloud-tweetstore/src/test/java/org/jclouds/demo/tweetstore/controller/StoreTweetsControllerTest.java
@@ -22,7 +22,6 @@
 import static org.easymock.EasyMock.expect;
 import static org.easymock.EasyMock.replay;
 import static org.easymock.EasyMock.verify;
-import static org.jclouds.util.Strings2.toStringAndClose;
 import static org.testng.Assert.assertEquals;
 
 import java.io.IOException;
@@ -36,6 +35,7 @@
 import org.jclouds.blobstore.TransientApiMetadata;
 import org.jclouds.blobstore.domain.Blob;
 import org.jclouds.demo.tweetstore.reference.TweetStoreConstants;
+import org.jclouds.util.Strings2;
 import org.testng.annotations.Test;
 
 import twitter4j.Status;
@@ -107,13 +107,13 @@
          assertEquals(frankBlob.getMetadata().getName(), "1");
          assertEquals(frankBlob.getMetadata().getUserMetadata().get(TweetStoreConstants.SENDER_NAME), "frank");
          assertEquals(frankBlob.getMetadata().getContentMetadata().getContentType(), "text/plain");
-         assertEquals(toStringAndClose(frankBlob.getPayload().getInput()), "I love beans!");
+         assertEquals(Strings2.toString(frankBlob.getPayload()), "I love beans!");
 
          Blob jimmyBlob = map.get("2");
          assertEquals(jimmyBlob.getMetadata().getName(), "2");
          assertEquals(jimmyBlob.getMetadata().getUserMetadata().get(TweetStoreConstants.SENDER_NAME), "jimmy");
          assertEquals(jimmyBlob.getMetadata().getContentMetadata().getContentType(), "text/plain");
-         assertEquals(toStringAndClose(jimmyBlob.getPayload().getInput()), "cloud is king");
+         assertEquals(Strings2.toString(jimmyBlob.getPayload()), "cloud is king");
       }
 
    }
diff --git a/demos/tweetstore/runatcloud-tweetstore/src/main/java/org/jclouds/demo/tweetstore/functions/KeyToStoredTweetStatus.java b/demos/tweetstore/runatcloud-tweetstore/src/main/java/org/jclouds/demo/tweetstore/functions/KeyToStoredTweetStatus.java
index 2a6ea0a..f831b97 100644
--- a/demos/tweetstore/runatcloud-tweetstore/src/main/java/org/jclouds/demo/tweetstore/functions/KeyToStoredTweetStatus.java
+++ b/demos/tweetstore/runatcloud-tweetstore/src/main/java/org/jclouds/demo/tweetstore/functions/KeyToStoredTweetStatus.java
@@ -18,8 +18,6 @@
  */
 package org.jclouds.demo.tweetstore.functions;
 
-import static org.jclouds.util.Strings2.toStringAndClose;
-
 import javax.annotation.Resource;
 
 import org.jclouds.blobstore.BlobMap;
@@ -27,6 +25,7 @@
 import org.jclouds.demo.tweetstore.domain.StoredTweetStatus;
 import org.jclouds.demo.tweetstore.reference.TweetStoreConstants;
 import org.jclouds.logging.Logger;
+import org.jclouds.util.Strings2;
 
 import com.google.common.base.Function;
 
@@ -59,7 +58,7 @@
          Blob blob = map.get(id);
          status = ((System.currentTimeMillis() - start) + "ms");
          from = blob.getMetadata().getUserMetadata().get(TweetStoreConstants.SENDER_NAME);
-         tweet = toStringAndClose(blob.getPayload().getInput());
+         tweet = Strings2.toString(blob.getPayload());
       } catch (Exception e) {
          logger.error(e, "Error listing container %s//%s/%s", service, container, id);
          status = (e.getMessage());
diff --git a/demos/tweetstore/runatcloud-tweetstore/src/test/java/org/jclouds/demo/tweetstore/controller/StoreTweetsControllerTest.java b/demos/tweetstore/runatcloud-tweetstore/src/test/java/org/jclouds/demo/tweetstore/controller/StoreTweetsControllerTest.java
index 9cc5635..2eb7704 100644
--- a/demos/tweetstore/runatcloud-tweetstore/src/test/java/org/jclouds/demo/tweetstore/controller/StoreTweetsControllerTest.java
+++ b/demos/tweetstore/runatcloud-tweetstore/src/test/java/org/jclouds/demo/tweetstore/controller/StoreTweetsControllerTest.java
@@ -22,7 +22,6 @@
 import static org.easymock.EasyMock.expect;
 import static org.easymock.EasyMock.replay;
 import static org.easymock.EasyMock.verify;
-import static org.jclouds.util.Strings2.toStringAndClose;
 import static org.testng.Assert.assertEquals;
 
 import java.io.IOException;
@@ -36,6 +35,7 @@
 import org.jclouds.blobstore.TransientApiMetadata;
 import org.jclouds.blobstore.domain.Blob;
 import org.jclouds.demo.tweetstore.reference.TweetStoreConstants;
+import org.jclouds.util.Strings2;
 import org.testng.annotations.Test;
 
 import twitter4j.Status;
@@ -107,13 +107,13 @@
          assertEquals(frankBlob.getMetadata().getName(), "1");
          assertEquals(frankBlob.getMetadata().getUserMetadata().get(TweetStoreConstants.SENDER_NAME), "frank");
          assertEquals(frankBlob.getMetadata().getContentMetadata().getContentType(), "text/plain");
-         assertEquals(toStringAndClose(frankBlob.getPayload().getInput()), "I love beans!");
+         assertEquals(Strings2.toString(frankBlob.getPayload()), "I love beans!");
 
          Blob jimmyBlob = map.get("2");
          assertEquals(jimmyBlob.getMetadata().getName(), "2");
          assertEquals(jimmyBlob.getMetadata().getUserMetadata().get(TweetStoreConstants.SENDER_NAME), "jimmy");
          assertEquals(jimmyBlob.getMetadata().getContentMetadata().getContentType(), "text/plain");
-         assertEquals(toStringAndClose(jimmyBlob.getPayload().getInput()), "cloud is king");
+         assertEquals(Strings2.toString(jimmyBlob.getPayload()), "cloud is king");
       }
 
    }
diff --git a/drivers/gae/src/test/java/org/jclouds/gae/ConvertToJcloudsResponseTest.java b/drivers/gae/src/test/java/org/jclouds/gae/ConvertToJcloudsResponseTest.java
index 7cab1c3..4a43e8a 100644
--- a/drivers/gae/src/test/java/org/jclouds/gae/ConvertToJcloudsResponseTest.java
+++ b/drivers/gae/src/test/java/org/jclouds/gae/ConvertToJcloudsResponseTest.java
@@ -107,7 +107,7 @@
       replay(gaeResponse);
       HttpResponse response = req.apply(gaeResponse);
       assertEquals(response.getStatusCode(), 200);
-      assertEquals(Strings2.toStringAndClose(response.getPayload().getInput()), "hello");
+      assertEquals(Strings2.toString(response.getPayload()), "hello");
       assertEquals(response.getHeaders().size(), 0);
       assertEquals(response.getPayload().getContentMetadata().getContentType(), "text/xml");
    }
diff --git a/drivers/jsch/src/test/java/org/jclouds/ssh/jsch/JschSshClientLiveTest.java b/drivers/jsch/src/test/java/org/jclouds/ssh/jsch/JschSshClientLiveTest.java
index 027311c..033c01b 100644
--- a/drivers/jsch/src/test/java/org/jclouds/ssh/jsch/JschSshClientLiveTest.java
+++ b/drivers/jsch/src/test/java/org/jclouds/ssh/jsch/JschSshClientLiveTest.java
@@ -165,14 +165,14 @@
       SshClient client = setupClient();
       client.put(temp.getAbsolutePath(), Payloads.newStringPayload("rabbit"));
       Payload input = setupClient().get(temp.getAbsolutePath());
-      String contents = Strings2.toStringAndClose(input.getInput());
+      String contents = Strings2.toString(input);
       assertEquals(contents, "rabbit");
    }
 
    @Test
    public void testGetEtcPassword() throws IOException {
       Payload input = setupClient().get("/etc/passwd");
-      String contents = Strings2.toStringAndClose(input.getInput());
+      String contents = Strings2.toString(input);
       assert contents.indexOf("root") >= 0 : "no root in " + contents;
    }
 
@@ -276,6 +276,6 @@
       } finally {
          Closeables.closeQuietly(response);
       }
-      assertEquals(response.getExitStatus().get(), new Integer(0));
+      assertEquals(response.getExitStatus().get(), Integer.valueOf(0));
    }
 }
\ No newline at end of file
diff --git a/drivers/sshj/src/test/java/org/jclouds/sshj/SshjSshClientLiveTest.java b/drivers/sshj/src/test/java/org/jclouds/sshj/SshjSshClientLiveTest.java
index f0d78dd..7f64209 100644
--- a/drivers/sshj/src/test/java/org/jclouds/sshj/SshjSshClientLiveTest.java
+++ b/drivers/sshj/src/test/java/org/jclouds/sshj/SshjSshClientLiveTest.java
@@ -152,13 +152,13 @@
       SshClient client = setupClient();
       client.put(temp.getAbsolutePath(), Payloads.newStringPayload("rabbit"));
       Payload input = client.get(temp.getAbsolutePath());
-      String contents = Strings2.toStringAndClose(input.getInput());
+      String contents = Strings2.toString(input);
       assertEquals(contents, "rabbit");
    }
 
    public void testGetEtcPassword() throws IOException {
       Payload input = setupClient().get("/etc/passwd");
-      String contents = Strings2.toStringAndClose(input.getInput());
+      String contents = Strings2.toString(input);
       assert contents.indexOf("root") >= 0 : "no root in " + contents;
    }
 
@@ -185,6 +185,6 @@
       } finally {
          Closeables.closeQuietly(response);
       }
-      assertEquals(response.getExitStatus().get(), new Integer(0));
+      assertEquals(response.getExitStatus().get(), Integer.valueOf(0));
    }
 }
diff --git a/labs/cdmi/src/main/java/org/jclouds/snia/cdmi/v1/options/ListContainersOptions.java b/labs/cdmi/src/main/java/org/jclouds/snia/cdmi/v1/options/ListContainersOptions.java
index efa468f..6aa1b48 100644
--- a/labs/cdmi/src/main/java/org/jclouds/snia/cdmi/v1/options/ListContainersOptions.java
+++ b/labs/cdmi/src/main/java/org/jclouds/snia/cdmi/v1/options/ListContainersOptions.java
@@ -53,7 +53,7 @@
 
    public int getLimit() {
       String val = getFirstQueryOrNull("limit");
-      return val != null ? new Integer(val) : 10000;
+      return val != null ? Integer.valueOf(val) : 10000;
    }
 
    public static class Builder {
diff --git a/labs/glesys/src/main/java/org/jclouds/glesys/handlers/GleSYSErrorHandler.java b/labs/glesys/src/main/java/org/jclouds/glesys/handlers/GleSYSErrorHandler.java
index 9f5a37c..82afc0f 100644
--- a/labs/glesys/src/main/java/org/jclouds/glesys/handlers/GleSYSErrorHandler.java
+++ b/labs/glesys/src/main/java/org/jclouds/glesys/handlers/GleSYSErrorHandler.java
@@ -80,7 +80,7 @@
       if (response.getPayload() == null)
          return null;
       try {
-         return Strings2.toStringAndClose(response.getPayload().getInput());
+         return Strings2.toString(response.getPayload());
       } catch (IOException e) {
          throw new RuntimeException(e);
       } finally {
diff --git a/labs/joyent-cloudapi/src/test/java/org/jclouds/joyent/cloudapi/v6_5/compute/loaders/CreateUniqueKeyTest.java b/labs/joyent-cloudapi/src/test/java/org/jclouds/joyent/cloudapi/v6_5/compute/loaders/CreateUniqueKeyTest.java
index c264bcd..1eb3aa4 100644
--- a/labs/joyent-cloudapi/src/test/java/org/jclouds/joyent/cloudapi/v6_5/compute/loaders/CreateUniqueKeyTest.java
+++ b/labs/joyent-cloudapi/src/test/java/org/jclouds/joyent/cloudapi/v6_5/compute/loaders/CreateUniqueKeyTest.java
@@ -64,6 +64,8 @@
  */
 @Test(groups = "unit", testName = "CreateUniqueKeyTest")
 public class CreateUniqueKeyTest {
+   private static final String lineSeparator = System.getProperty("line.separator");
+
    private Factory namingConvention;
    private KeyPair keyPair;
    private String openSshKey;
@@ -111,7 +113,7 @@
       CreateUniqueKey parser = new CreateUniqueKey(cloudApiApi, namingConvention, crypto, Providers.of(secureRandom));
 
       assertEquals(parser.load(DatacenterAndName.fromDatacenterAndName("datacenter", "group")),
-            KeyAndPrivateKey.fromKeyAndPrivateKey(key, PRIVATE_KEY));
+            KeyAndPrivateKey.fromKeyAndPrivateKey(key, PRIVATE_KEY.replaceAll("\n", lineSeparator)));
 
       verify(cloudApiApi, keyApi, crypto, rsaKeyPairGenerator, secureRandom);
    }
diff --git a/labs/nodepool/src/main/java/org/jclouds/nodepool/NodePoolApiMetadata.java b/labs/nodepool/src/main/java/org/jclouds/nodepool/NodePoolApiMetadata.java
index df6296c..98b5357 100644
--- a/labs/nodepool/src/main/java/org/jclouds/nodepool/NodePoolApiMetadata.java
+++ b/labs/nodepool/src/main/java/org/jclouds/nodepool/NodePoolApiMetadata.java
@@ -26,6 +26,7 @@
 import static org.jclouds.nodepool.config.NodePoolProperties.POOL_ADMIN_ACCESS;
 import static org.jclouds.nodepool.config.NodePoolProperties.REMOVE_DESTROYED;
 
+import java.io.File;
 import java.net.URI;
 import java.util.Properties;
 
@@ -62,7 +63,6 @@
 
    public static Properties defaultProperties() {
       Properties properties = BaseRestApiMetadata.defaultProperties();
-      properties.setProperty("nodepool.identity", "nodepool-user");
       properties.setProperty(BACKEND_GROUP, "nodepool");
       properties.setProperty(METADATA_CONTAINER, "nodes");
       properties.setProperty(BACKEND_MODULES,
@@ -70,9 +70,12 @@
       properties.setProperty(MAX_SIZE, 10 + "");
       properties.setProperty(MIN_SIZE, 5 + "");
       properties.setProperty(REMOVE_DESTROYED, "true");
-      // by default use the current user's user and private key
-      properties.setProperty(POOL_ADMIN_ACCESS, "adminUsername=" + System.getProperty("user.name")
-               + ",adminPrivateKeyFile=" + System.getProperty("user.home") + "/.ssh/id_rsa");
+      // by default use the current user's user and private key if one exists, if not the properties
+      // will need to be set (no default passwords)
+      if (new File(System.getProperty("user.home") + "/.ssh/id_rsa").exists()) {
+         properties.setProperty(POOL_ADMIN_ACCESS, "adminUsername=" + System.getProperty("user.name")
+                  + ",adminPrivateKeyFile=" + System.getProperty("user.home") + "/.ssh/id_rsa");
+      }
       return properties;
    }
 
diff --git a/labs/nodepool/src/main/java/org/jclouds/nodepool/config/NodePoolComputeServiceContextModule.java b/labs/nodepool/src/main/java/org/jclouds/nodepool/config/NodePoolComputeServiceContextModule.java
index e2cfc0d..2adb63c 100644
--- a/labs/nodepool/src/main/java/org/jclouds/nodepool/config/NodePoolComputeServiceContextModule.java
+++ b/labs/nodepool/src/main/java/org/jclouds/nodepool/config/NodePoolComputeServiceContextModule.java
@@ -1,3 +1,22 @@
+/*
+ * Licensed to jclouds, Inc. (jclouds) under one or more
+ * contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  jclouds 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.nodepool.config;
 
 import javax.annotation.Nullable;
@@ -44,6 +63,7 @@
       bind(ComputeServiceContext.class).to(NodePoolComputeServiceContext.class);
       install(new LocationsFromComputeServiceAdapterModule<NodeMetadata, Hardware, Image, Location>() {
       });
+
    }
 
    @Override
diff --git a/labs/nodepool/src/main/java/org/jclouds/nodepool/internal/BaseNodePoolComputeServiceAdapter.java b/labs/nodepool/src/main/java/org/jclouds/nodepool/internal/BaseNodePoolComputeServiceAdapter.java
index ac3674a..7073d8b 100644
--- a/labs/nodepool/src/main/java/org/jclouds/nodepool/internal/BaseNodePoolComputeServiceAdapter.java
+++ b/labs/nodepool/src/main/java/org/jclouds/nodepool/internal/BaseNodePoolComputeServiceAdapter.java
@@ -61,8 +61,10 @@
    protected final AdminAccess.Builder initialCredentialsBuilder;
 
    public BaseNodePoolComputeServiceAdapter(@Backend Supplier<ComputeService> backendComputeService,
-            @Backend Supplier<Template> backendTemplate, @Named(BACKEND_GROUP) String poolGroupName,
-            NodeMetadataStore metadataStore, @Named(POOL_ADMIN_ACCESS) String poolNodeAdminAccess,
+
+   @Backend Supplier<Template> backendTemplate, @Named(BACKEND_GROUP) String poolGroupName,
+
+   NodeMetadataStore metadataStore, @Named(POOL_ADMIN_ACCESS) String poolNodeAdminAccess,
             AdminAccess.Configuration configuration) {
       this.backendComputeService = backendComputeService;
       this.poolGroupName = poolGroupName;
diff --git a/labs/nodepool/src/main/java/org/jclouds/nodepool/internal/EagerNodePoolComputeServiceAdapter.java b/labs/nodepool/src/main/java/org/jclouds/nodepool/internal/EagerNodePoolComputeServiceAdapter.java
index 8cacf89..2777e55 100644
--- a/labs/nodepool/src/main/java/org/jclouds/nodepool/internal/EagerNodePoolComputeServiceAdapter.java
+++ b/labs/nodepool/src/main/java/org/jclouds/nodepool/internal/EagerNodePoolComputeServiceAdapter.java
@@ -144,10 +144,13 @@
       logger.info(">> destroying node %s", id);
       metadataStore.deleteMapping(id);
       if (removeDestroyed) {
-         logger.info(">> policy is replace detroyed node, replacing node with id %s", id);
          backendComputeService.get().destroyNode(id);
-         Set<? extends NodeMetadata> replacement = addToPool(1);
-         logger.info("<< node %s replaced with %s", id, Iterables.getOnlyElement(replacement));
+         if (currentSize() < minSize) {
+            logger.info(">> policy is remove destroyed node and pool "
+                     + "would fall below minsize, replacing node with id %s", id);
+            Set<? extends NodeMetadata> replacement = addToPool(1);
+            logger.info("<< node %s replaced with %s", id, Iterables.getOnlyElement(replacement));
+         }
       }
       // TODO we should allow the user to hook a way to "clean" the node
       else {
diff --git a/labs/nodepool/src/main/java/org/jclouds/nodepool/internal/JsonNodeMetadataStore.java b/labs/nodepool/src/main/java/org/jclouds/nodepool/internal/JsonNodeMetadataStore.java
index 15eb5e0..9d003cd 100644
--- a/labs/nodepool/src/main/java/org/jclouds/nodepool/internal/JsonNodeMetadataStore.java
+++ b/labs/nodepool/src/main/java/org/jclouds/nodepool/internal/JsonNodeMetadataStore.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to jclouds, Inc. (jclouds) under one or more
+ * contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  jclouds 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.nodepool.internal;
 
 import static com.google.common.base.Preconditions.checkNotNull;
diff --git a/labs/nodepool/src/main/java/org/jclouds/nodepool/internal/NodeMetadataStoreCache.java b/labs/nodepool/src/main/java/org/jclouds/nodepool/internal/NodeMetadataStoreCache.java
index 99db916..af71a93 100644
--- a/labs/nodepool/src/main/java/org/jclouds/nodepool/internal/NodeMetadataStoreCache.java
+++ b/labs/nodepool/src/main/java/org/jclouds/nodepool/internal/NodeMetadataStoreCache.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to jclouds, Inc. (jclouds) under one or more
+ * contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  jclouds 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.nodepool.internal;
 
 import java.util.HashMap;
diff --git a/labs/nodepool/src/test/java/org/jclouds/nodepool/BYONBackendLiveTest.java b/labs/nodepool/src/test/java/org/jclouds/nodepool/BYONBackendLiveTest.java
index e467247..7ae2b20 100644
--- a/labs/nodepool/src/test/java/org/jclouds/nodepool/BYONBackendLiveTest.java
+++ b/labs/nodepool/src/test/java/org/jclouds/nodepool/BYONBackendLiveTest.java
@@ -23,6 +23,7 @@
 import static org.jclouds.nodepool.config.NodePoolProperties.BASEDIR;
 import static org.jclouds.nodepool.config.NodePoolProperties.MAX_SIZE;
 import static org.jclouds.nodepool.config.NodePoolProperties.MIN_SIZE;
+import static org.jclouds.nodepool.config.NodePoolProperties.REMOVE_DESTROYED;
 import static org.jclouds.scriptbuilder.domain.Statements.exec;
 
 import java.io.File;
@@ -41,7 +42,7 @@
 
 /**
  * 
- * @author Adrian Cole
+ * @author Adrian Cole, David Alves
  */
 @Test(groups = "live", testName = "BYONBackendLiveTest")
 public class BYONBackendLiveTest extends BaseComputeServiceContextLiveTest {
@@ -61,6 +62,7 @@
       contextProperties.setProperty(BASEDIR, basedir);
       contextProperties.setProperty(MAX_SIZE, 1 + "");
       contextProperties.setProperty(MIN_SIZE, 1 + "");
+      contextProperties.setProperty(REMOVE_DESTROYED, false + "");
       contextProperties.setProperty("nodepool.identity", System.getProperty("user.name"));
 
       StringBuilder nodes = new StringBuilder();
diff --git a/labs/nodepool/src/test/java/org/jclouds/nodepool/NodeMetadataStoreTestDisabled.java b/labs/nodepool/src/test/java/org/jclouds/nodepool/NodeMetadataStoreTest.java
similarity index 86%
rename from labs/nodepool/src/test/java/org/jclouds/nodepool/NodeMetadataStoreTestDisabled.java
rename to labs/nodepool/src/test/java/org/jclouds/nodepool/NodeMetadataStoreTest.java
index 0079fbb..3500bdf 100644
--- a/labs/nodepool/src/test/java/org/jclouds/nodepool/NodeMetadataStoreTestDisabled.java
+++ b/labs/nodepool/src/test/java/org/jclouds/nodepool/NodeMetadataStoreTest.java
@@ -18,6 +18,7 @@
  */
 package org.jclouds.nodepool;
 
+import static org.jclouds.nodepool.config.NodePoolProperties.POOL_ADMIN_ACCESS;
 import static org.testng.Assert.assertEquals;
 import static org.testng.Assert.assertNull;
 import static org.testng.Assert.assertSame;
@@ -38,7 +39,6 @@
 import org.jclouds.compute.domain.NodeMetadata.Status;
 import org.jclouds.compute.domain.NodeMetadataBuilder;
 import org.jclouds.compute.options.TemplateOptions;
-import org.jclouds.compute.strategy.PrioritizeCredentialsFromTemplate;
 import org.jclouds.logging.slf4j.config.SLF4JLoggingModule;
 import org.jclouds.nodepool.config.NodePoolProperties;
 import org.jclouds.nodepool.internal.NodeMetadataStore;
@@ -53,11 +53,9 @@
 /**
  * @author Adrian Cole, David Alves
  */
-@Test(groups = "unit")
-public class NodeMetadataStoreTestDisabled {
-//   unit tests should have no dependencies, yet this one is failing on cloudbees:
-//   Guice creation errors:  1) Error injecting constructor, java.lang.IllegalArgumentException: key adminPrivateKeyFile value set to /home/hudson/.ssh/id_rsa, must be an existing file   at org.jclouds.nodepool.internal.EagerNodePoolComputeServiceAdapter.<init>(EagerNodePoolComputeServiceAdapter.java:77)   at 
-   
+@Test(groups = "unit", testName = "NodeMetadataStoreTest")
+public class NodeMetadataStoreTest {
+
    @Inject
    NodeMetadataStore store;
 
@@ -84,6 +82,7 @@
       overrides.setProperty(NodePoolProperties.BACKEND_PROVIDER, "stub");
       overrides.setProperty(NodePoolProperties.MIN_SIZE, "0");
       overrides.setProperty(NodePoolProperties.BASEDIR, baseDir);
+      overrides.setProperty(POOL_ADMIN_ACCESS, "adminUsername=pooluser,adminPassword=poolpass");
       // note no ssh module since we are stub and not trying ssh, yet
       overrides.setProperty(NodePoolProperties.BACKEND_MODULES, SLF4JLoggingModule.class.getName());
       Context nodePoolCtx = ContextBuilder.newBuilder("nodepool").credentials("foo", "bar").overrides(overrides)
@@ -103,13 +102,6 @@
    }
 
    @Test(groups = "unit", dependsOnMethods = "testStore")
-   public void testCredentialsFromStoreOverrideBackendCredentials() {
-      // test that node store credentials are not overriden from somewhere else
-      assertNull(createInjector().getBinding(PrioritizeCredentialsFromTemplate.class).getProvider().get()
-               .apply(null, null));
-   }
-
-   @Test(groups = "unit", dependsOnMethods = "testStore")
    public void testLoad() {
       NodeMetadata loaded = store.load(nodeMeta1);
       assertEquals(loaded.getId(), nodeMeta1.getId());
diff --git a/labs/nodepool/src/test/java/org/jclouds/nodepool/NodePoolComputeServiceContextTest.java b/labs/nodepool/src/test/java/org/jclouds/nodepool/NodePoolComputeServiceContextTest.java
index f0dd646..29908b3 100644
--- a/labs/nodepool/src/test/java/org/jclouds/nodepool/NodePoolComputeServiceContextTest.java
+++ b/labs/nodepool/src/test/java/org/jclouds/nodepool/NodePoolComputeServiceContextTest.java
@@ -18,6 +18,7 @@
  */
 package org.jclouds.nodepool;
 
+import static org.jclouds.nodepool.config.NodePoolProperties.POOL_ADMIN_ACCESS;
 import static org.testng.Assert.assertEquals;
 
 import java.io.File;
@@ -41,27 +42,22 @@
 @Test(groups = "unit", testName = "NodePoolComputeServiceContextTest")
 public class NodePoolComputeServiceContextTest {
 
-
-   //TODO: identity became nodepool-user
-   @Test(enabled = false)
    public void testBinds() {
       final String basedir = "target/" + this.getClass().getSimpleName();
       new File(basedir).delete();
-      
+
       Properties overrides = new Properties();
       overrides.setProperty(NodePoolProperties.BACKEND_PROVIDER, "stub");
       overrides.setProperty(NodePoolProperties.BASEDIR, basedir);
       // note no ssh module since we are stub and not trying ssh, yet
       overrides.setProperty(NodePoolProperties.BACKEND_MODULES, SLF4JLoggingModule.class.getName());
-      
-      ComputeService stub = ContextBuilder.newBuilder("nodepool")
-                                          .credentials("foo", "bar")
-                                          .endpoint("gooend")
-                                          .apiVersion("1.1")
-                                          .buildVersion("1.1-2")
-                                          .overrides(overrides)
-                                          .buildInjector().getInstance(Key.get(new TypeLiteral<Supplier<ComputeService>>(){}, Backend.class)).get();
-      
+      overrides.setProperty(POOL_ADMIN_ACCESS, "adminUsername=pooluser,adminPassword=poolpass");
+
+      ComputeService stub = ContextBuilder.newBuilder("nodepool").credentials("foo", "bar").endpoint("gooend")
+               .apiVersion("1.1").buildVersion("1.1-2").overrides(overrides).buildInjector()
+               .getInstance(Key.get(new TypeLiteral<Supplier<ComputeService>>() {
+               }, Backend.class)).get();
+
       assertEquals(stub.getContext().unwrap().getIdentity(), "foo");
       assertEquals(stub.getContext().utils().injector().getInstance(Key.get(String.class, Credential.class)), "bar");
       assertEquals(stub.getContext().unwrap().getProviderMetadata().getEndpoint(), "gooend");
@@ -73,5 +69,4 @@
 
    }
 
-
 }
\ No newline at end of file
diff --git a/labs/nodepool/src/test/java/org/jclouds/nodepool/NodePoolComputeServiceLiveTest.java b/labs/nodepool/src/test/java/org/jclouds/nodepool/NodePoolComputeServiceLiveTest.java
index 40f20f2..7f8d320 100644
--- a/labs/nodepool/src/test/java/org/jclouds/nodepool/NodePoolComputeServiceLiveTest.java
+++ b/labs/nodepool/src/test/java/org/jclouds/nodepool/NodePoolComputeServiceLiveTest.java
@@ -67,7 +67,8 @@
 import com.google.inject.Module;
 
 public class NodePoolComputeServiceLiveTest extends BaseComputeServiceLiveTest {
-   final String basedir = "target/" + this.getClass().getSimpleName().toLowerCase();
+
+   private final String basedir = "target/" + this.getClass().getSimpleName().toLowerCase();
 
    public NodePoolComputeServiceLiveTest() {
       provider = "nodepool";
@@ -76,6 +77,9 @@
    @Override
    protected Properties setupProperties() {
       Properties contextProperties = super.setupProperties();
+      contextProperties.setProperty(BASEDIR, basedir);
+      contextProperties.setProperty("nodepool.identity", "pooluser");
+      contextProperties.setProperty(POOL_ADMIN_ACCESS, "adminUsername=pooluser,adminPassword=poolpassword");
       contextProperties.setProperty(TIMEOUT_SCRIPT_COMPLETE, (1200 * 1000) + "");
       contextProperties.setProperty(TIMEOUT_PORT_OPEN, (1200 * 1000) + "");
       contextProperties.setProperty(BASEDIR, basedir);
@@ -102,9 +106,8 @@
    }
 
    @Override
-   @Test(enabled = true)
+   @Test(enabled = true, groups = "live")
    public void testCreateAndRunAService() throws Exception {
-      this.group = this.group + "s";
       final String configuration = Strings2.toStringAndClose(RunScriptData.class
                .getResourceAsStream("/standalone-basic.xml"));
 
@@ -125,6 +128,11 @@
 
       watch.reset().start();
 
+      // note this is a dependency on the template resolution so we have the
+      // right process per
+      // operating system. moreover, we wish this to run as root, so that it
+      // can change ip
+      // tables rules and setup our admin user
       client.runScriptOnNode(nodeId, installAdminUserJBossAndOpenPorts(node.getOperatingSystem()),
                nameTask("configure-jboss"));
 
@@ -170,7 +178,7 @@
       }), "jboss", node, JBOSS_PATTERN);
    }
 
-   @Test(enabled = true, dependsOnMethods = "testCreateAndRunAService")
+   @Test(enabled = true, groups = "live", dependsOnMethods = "testCreateAndRunAService")
    public void testRebuildPoolStateFromStore() {
       tearDownContext();
       setupContext();
@@ -178,13 +186,13 @@
       assertEquals(((NodeMetadata) Iterables.get(client.listNodes(), 0)).getGroup(), this.group);
    }
 
-   @Test(enabled = false, dependsOnMethods = "testRebuildPoolStateFromStore")
+   @Test(enabled = true, groups = "live", dependsOnMethods = "testRebuildPoolStateFromStore")
    public void testIncreasePoolAllowed() throws RunNodesException {
       client.createNodesInGroup(this.group, 1);
       assertSame(client.listNodes().size(), 2);
    }
 
-   @Test(enabled = false, dependsOnMethods = "testIncreasePoolAllowed")
+   @Test(enabled = true, groups = "live", dependsOnMethods = "testIncreasePoolAllowed")
    public void testIncreasePoolNotAllowed() throws RunNodesException {
       boolean caughtException = false;
       try {
@@ -195,7 +203,7 @@
       assertTrue(caughtException, "expected an exception to be thrown");
    }
 
-   @Test(enabled = true, dependsOnMethods = "testRebuildPoolStateFromStore")
+   @Test(enabled = true, groups = "live", dependsOnMethods = "testIncreasePoolNotAllowed")
    public void testGetBackendComputeServiceContext() {
       NodePoolComputeServiceContext ctx = context.utils().injector().getInstance(NodePoolComputeServiceContext.class);
       assertNotNull(ctx.getBackendContext());
@@ -204,7 +212,7 @@
                         NodePredicates.inGroup(ctx.getPoolGroupName())).size(), 2);
    }
 
-   @Test(enabled = false, dependsOnMethods = "testGetBackendComputeServiceContext")
+   @Test(enabled = true, groups = "live", dependsOnMethods = "testGetBackendComputeServiceContext")
    public void testDestroyPoolNodes() {
       client.destroyNodesMatching(NodePredicates.inGroup(this.group));
       // after we destroy all nodes we should still have minsize nodes in the pool
@@ -212,7 +220,7 @@
       assertSame(ctx.getPoolStats().currentSize(), 1);
    }
 
-   @Test(enabled = true, dependsOnMethods = "testGetBackendComputeServiceContext")
+   @Test(enabled = true, groups = "live", dependsOnMethods = "testDestroyPoolNodes")
    public void testDestroyPool() {
       // TODO get the ctx without the injector
       NodePoolComputeServiceContext ctx = context.utils().injector().getInstance(NodePoolComputeServiceContext.class);
@@ -223,7 +231,7 @@
    }
 
    @Override
-   @Test(enabled = false, dependsOnMethods = "testCompareSizes")
+   @Test(enabled = false)
    public void testAScriptExecutionAfterBootWithBasicTemplate() throws Exception {
    }
 
@@ -233,7 +241,7 @@
    }
 
    @Override
-   @Test(enabled = false, dependsOnMethods = "testCompareSizes")
+   @Test(enabled = false)
    public void testConcurrentUseOfComputeServiceToCreateNodes() throws Exception {
    }
 
diff --git a/labs/nodepool/src/test/java/org/jclouds/nodepool/config/BindBackendComputeServiceTest.java b/labs/nodepool/src/test/java/org/jclouds/nodepool/config/BindBackendComputeServiceTest.java
index 55bafcb..4b510cf 100644
--- a/labs/nodepool/src/test/java/org/jclouds/nodepool/config/BindBackendComputeServiceTest.java
+++ b/labs/nodepool/src/test/java/org/jclouds/nodepool/config/BindBackendComputeServiceTest.java
@@ -18,6 +18,8 @@
  */
 package org.jclouds.nodepool.config;
 
+import static org.easymock.EasyMock.createNiceMock;
+import static org.jclouds.nodepool.config.NodePoolProperties.POOL_ADMIN_ACCESS;
 import static org.testng.Assert.assertEquals;
 
 import java.io.File;
@@ -25,13 +27,19 @@
 
 import org.jclouds.ContextBuilder;
 import org.jclouds.compute.ComputeService;
+import org.jclouds.domain.Credentials;
+import org.jclouds.domain.LoginCredentials;
 import org.jclouds.logging.slf4j.config.SLF4JLoggingModule;
 import org.jclouds.nodepool.Backend;
 import org.jclouds.rest.annotations.Credential;
+import org.jclouds.ssh.SshClient;
 import org.testng.annotations.Test;
 
 import com.google.common.base.Supplier;
+import com.google.common.net.HostAndPort;
+import com.google.inject.AbstractModule;
 import com.google.inject.Key;
+import com.google.inject.Scopes;
 import com.google.inject.TypeLiteral;
 
 /**
@@ -40,26 +48,23 @@
 @Test(groups = "unit", testName = "BindBackendComputeServiceTest")
 public class BindBackendComputeServiceTest {
 
-   //TODO: identity became nodepool-user
-   @Test(enabled = false)
    public void testBinds() {
       final String basedir = "target/" + this.getClass().getSimpleName();
       new File(basedir).delete();
-      
+
       Properties overrides = new Properties();
       overrides.setProperty(NodePoolProperties.BACKEND_PROVIDER, "stub");
       overrides.setProperty(NodePoolProperties.BASEDIR, basedir);
       // note no ssh module since we are stub and not trying ssh, yet
-      overrides.setProperty(NodePoolProperties.BACKEND_MODULES, SLF4JLoggingModule.class.getName());
+      overrides.setProperty(NodePoolProperties.BACKEND_MODULES, SLF4JLoggingModule.class.getName() + ","
+               + StubSshClientModule.class.getName());
+      overrides.setProperty(POOL_ADMIN_ACCESS, "adminUsername=pooluser,adminPassword=poolpass");
 
-      ComputeService stub = ContextBuilder.newBuilder("nodepool")
-                                          .credentials("foo", "bar")
-                                          .endpoint("gooend")
-                                          .apiVersion("1.1")
-                                          .buildVersion("1.1-2")
-                                          .overrides(overrides)
-                                          .buildInjector().getInstance(Key.get(new TypeLiteral<Supplier<ComputeService>>(){}, Backend.class)).get();
-      
+      ComputeService stub = ContextBuilder.newBuilder("nodepool").credentials("foo", "bar").endpoint("gooend")
+               .apiVersion("1.1").buildVersion("1.1-2").overrides(overrides).buildInjector()
+               .getInstance(Key.get(new TypeLiteral<Supplier<ComputeService>>() {
+               }, Backend.class)).get();
+
       assertEquals(stub.getContext().unwrap().getIdentity(), "foo");
       assertEquals(stub.getContext().utils().injector().getInstance(Key.get(String.class, Credential.class)), "bar");
       assertEquals(stub.getContext().unwrap().getProviderMetadata().getEndpoint(), "gooend");
@@ -71,5 +76,23 @@
 
    }
 
+   public static class StubSshClientModule extends AbstractModule {
 
+      protected void configure() {
+         bind(SshClient.Factory.class).to(Factory.class).in(Scopes.SINGLETON);
+      }
+
+      private static class Factory implements SshClient.Factory {
+
+         @Override
+         public SshClient create(HostAndPort socket, LoginCredentials credentials) {
+            return createNiceMock(SshClient.class);
+         }
+
+         @Override
+         public SshClient create(HostAndPort socket, Credentials credentials) {
+            return createNiceMock(SshClient.class);
+         }
+      }
+   }
 }
\ No newline at end of file
diff --git a/labs/nodepool/src/test/java/org/jclouds/nodepool/config/BindInputStreamToFilesystemBlobStoreTest.java b/labs/nodepool/src/test/java/org/jclouds/nodepool/config/BindInputStreamToFilesystemBlobStoreTest.java
index a3283e7..ef6acc0 100644
--- a/labs/nodepool/src/test/java/org/jclouds/nodepool/config/BindInputStreamToFilesystemBlobStoreTest.java
+++ b/labs/nodepool/src/test/java/org/jclouds/nodepool/config/BindInputStreamToFilesystemBlobStoreTest.java
@@ -41,24 +41,23 @@
 @Test(groups = "unit", testName = "BindInputStreamToFilesystemBlobStoreTest")
 public class BindInputStreamToFilesystemBlobStoreTest {
 
-   //TODO: binding error
-   @Test(enabled = false)
    public void testCreatesDir() {
       final String basedir = "target/" + this.getClass().getSimpleName();
       new File(basedir).delete();
-      Map<String, InputStream> file = Guice.createInjector(new AbstractModule() {
-
-         @Override
-         protected void configure() {
-            bindConstant().annotatedWith(Names.named(NodePoolProperties.BASEDIR)).to(basedir);
-            bindConstant().annotatedWith(Names.named(NodePoolProperties.METADATA_CONTAINER)).to("barr");
-            bindConstant().annotatedWith(Names.named(NodePoolProperties.BACKEND_MODULES)).to(
-                  SLF4JLoggingModule.class.getName());
-         }
-
-      }, new BindInputStreamToFilesystemBlobStore()).getInstance(
-            Key.get(new TypeLiteral<Supplier<Map<String, InputStream>>>() {
-            })).get();
+      Map<String, InputStream> file = Guice
+               .createInjector(new AbstractModule() {
+                  @Override
+                  protected void configure() {
+                     bindConstant().annotatedWith(Names.named(NodePoolProperties.BASEDIR)).to(basedir);
+                     bindConstant().annotatedWith(Names.named(NodePoolProperties.METADATA_CONTAINER)).to("barr");
+                     bindConstant().annotatedWith(Names.named(NodePoolProperties.POOL_ADMIN_ACCESS)).to(
+                              "adminUsername=pooluser,adminPassword=poolpass");
+                     bindConstant().annotatedWith(Names.named(NodePoolProperties.BACKEND_MODULES)).to(
+                              SLF4JLoggingModule.class.getName());
+                  }
+               }, new BindInputStreamToFilesystemBlobStore())
+               .getInstance(Key.get(new TypeLiteral<Supplier<Map<String, InputStream>>>() {
+               }, Names.named("METADATA"))).get();
 
       assert (new File(basedir + "/barr").exists());
       assertEquals(file.keySet(), ImmutableSet.of());
diff --git a/labs/nodepool/src/test/resources/logback.xml b/labs/nodepool/src/test/resources/logback.xml
index a74e14e..4f0c2ef 100644
--- a/labs/nodepool/src/test/resources/logback.xml
+++ b/labs/nodepool/src/test/resources/logback.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0"?>

-<configuration scan="false">

+<configuration scan="false">
   <appender name="FILE" class="ch.qos.logback.core.FileAppender">

     <file>target/test-data/jclouds.log</file>

 

diff --git a/labs/openstack-swift/src/main/java/org/jclouds/openstack/swift/v1/options/ListContainersOptions.java b/labs/openstack-swift/src/main/java/org/jclouds/openstack/swift/v1/options/ListContainersOptions.java
index e2afee6..08b3f27 100644
--- a/labs/openstack-swift/src/main/java/org/jclouds/openstack/swift/v1/options/ListContainersOptions.java
+++ b/labs/openstack-swift/src/main/java/org/jclouds/openstack/swift/v1/options/ListContainersOptions.java
@@ -53,7 +53,7 @@
 
    public int getLimit() {
       String val = getFirstQueryOrNull("limit");
-      return val != null ? new Integer(val) : 10000;
+      return val != null ? Integer.valueOf(val) : 10000;
    }
 
 
diff --git a/labs/rds/src/main/java/org/jclouds/rds/xml/InstanceHandler.java b/labs/rds/src/main/java/org/jclouds/rds/xml/InstanceHandler.java
index 3a19ffc..e6ee52c 100644
--- a/labs/rds/src/main/java/org/jclouds/rds/xml/InstanceHandler.java
+++ b/labs/rds/src/main/java/org/jclouds/rds/xml/InstanceHandler.java
@@ -110,7 +110,7 @@
       } else if (equalsOrSuffix(qName, "Address")) {
          address = currentOrNull(currentText);
       } else if (equalsOrSuffix(qName, "Port")) {
-         port = new Integer(currentOrNull(currentText));
+         port = Integer.valueOf(currentOrNull(currentText));
       } else if (equalsOrSuffix(qName, "Endpoint")) {
          builder.endpoint(HostAndPort.fromParts(address, port));
          address = null;
diff --git a/labs/savvis-symphonyvpdc/src/main/java/org/jclouds/savvis/vpdc/handlers/VPDCErrorHandler.java b/labs/savvis-symphonyvpdc/src/main/java/org/jclouds/savvis/vpdc/handlers/VPDCErrorHandler.java
index 0c05f5c..5186b00 100644
--- a/labs/savvis-symphonyvpdc/src/main/java/org/jclouds/savvis/vpdc/handlers/VPDCErrorHandler.java
+++ b/labs/savvis-symphonyvpdc/src/main/java/org/jclouds/savvis/vpdc/handlers/VPDCErrorHandler.java
@@ -84,7 +84,7 @@
       if (response.getPayload() == null)
          return null;
       try {
-         return Strings2.toStringAndClose(response.getPayload().getInput());
+         return Strings2.toString(response.getPayload());
       } catch (IOException e) {
          throw new RuntimeException(e);
       } finally {
diff --git a/labs/savvis-symphonyvpdc/src/main/java/org/jclouds/savvis/vpdc/xml/NetworkConfigSectionHandler.java b/labs/savvis-symphonyvpdc/src/main/java/org/jclouds/savvis/vpdc/xml/NetworkConfigSectionHandler.java
index a62fa97..85647f3 100644
--- a/labs/savvis-symphonyvpdc/src/main/java/org/jclouds/savvis/vpdc/xml/NetworkConfigSectionHandler.java
+++ b/labs/savvis-symphonyvpdc/src/main/java/org/jclouds/savvis/vpdc/xml/NetworkConfigSectionHandler.java
@@ -57,7 +57,7 @@
       if (equalsOrSuffix(qName, "FenceMode")) {
          builder.fenceMode(currentOrNull(currentText));
       } else if (equalsOrSuffix(qName, "Dhcp")) {
-         builder.dhcp(new Boolean(currentOrNull(currentText)));
+         builder.dhcp(Boolean.valueOf(currentOrNull(currentText)));
       }
       super.endElement(uri, localName, qName);
    }
diff --git a/labs/smartos-ssh/src/main/java/org/jclouds/smartos/SmartOSApiMetadata.java b/labs/smartos-ssh/src/main/java/org/jclouds/smartos/SmartOSApiMetadata.java
index af47bb5..8e29b1e 100644
--- a/labs/smartos-ssh/src/main/java/org/jclouds/smartos/SmartOSApiMetadata.java
+++ b/labs/smartos-ssh/src/main/java/org/jclouds/smartos/SmartOSApiMetadata.java
@@ -13,7 +13,7 @@
  * @author Nigel Magnay
  */
 public class SmartOSApiMetadata extends BaseApiMetadata {
-   
+
    /** The serialVersionUID */
    private static final long serialVersionUID = 3606170564482119304L;
 
@@ -36,16 +36,16 @@
 
    public static class Builder extends BaseApiMetadata.Builder {
 
-      protected Builder(){
+      protected Builder() {
          id("smartos-ssh")
-         .name("SmartOS SSH API")
-         .identityName("Username")
-         .defaultIdentity("root")
-         .defaultCredential("smartos")
-         .defaultEndpoint("http://localhost")
-         .documentation(URI.create("http://http://wiki.smartos.org/display/DOC/How+to+create+a+Virtual+Machine+in+SmartOS"))
-         .view(ComputeServiceContext.class)
-         .defaultModule(SmartOSComputeServiceContextModule.class);
+                  .name("SmartOS SSH API")
+                  .identityName("Username")
+                  .defaultIdentity("root")
+                  .defaultCredential("smartos")
+                  .defaultEndpoint("http://localhost")
+                  .documentation(
+                           URI.create("http://http://wiki.smartos.org/display/DOC/How+to+create+a+Virtual+Machine+in+SmartOS"))
+                  .view(ComputeServiceContext.class).defaultModule(SmartOSComputeServiceContextModule.class);
       }
 
       @Override
diff --git a/labs/smartos-ssh/src/main/java/org/jclouds/smartos/compute/config/SmartOSComputeServiceContextModule.java b/labs/smartos-ssh/src/main/java/org/jclouds/smartos/compute/config/SmartOSComputeServiceContextModule.java
index a5fe6c6..124bfc9 100644
--- a/labs/smartos-ssh/src/main/java/org/jclouds/smartos/compute/config/SmartOSComputeServiceContextModule.java
+++ b/labs/smartos-ssh/src/main/java/org/jclouds/smartos/compute/config/SmartOSComputeServiceContextModule.java
@@ -18,23 +18,23 @@
  */
 package org.jclouds.smartos.compute.config;
 
-import com.google.common.base.Function;
-import com.google.inject.TypeLiteral;
-import org.jclouds.smartos.compute.domain.DataSet;
-import org.jclouds.smartos.compute.domain.SmartOSHost;
-import org.jclouds.smartos.compute.domain.VM;
-import org.jclouds.smartos.compute.domain.VmSpecification;
 import org.jclouds.compute.ComputeServiceAdapter;
 import org.jclouds.compute.config.ComputeServiceAdapterContextModule;
 import org.jclouds.compute.domain.NodeMetadata;
 import org.jclouds.domain.Location;
-
+import org.jclouds.smartos.compute.domain.DataSet;
+import org.jclouds.smartos.compute.domain.SmartOSHost;
+import org.jclouds.smartos.compute.domain.VM;
+import org.jclouds.smartos.compute.domain.VmSpecification;
 import org.jclouds.smartos.compute.functions.DataSetToImage;
 import org.jclouds.smartos.compute.functions.DatacenterToLocation;
 import org.jclouds.smartos.compute.functions.VMToNodeMetadata;
 import org.jclouds.smartos.compute.functions.VmSpecificationToHardware;
 import org.jclouds.smartos.compute.strategy.SmartOSComputeServiceAdapter;
 
+import com.google.common.base.Function;
+import com.google.inject.TypeLiteral;
+
 /**
  * 
  * @author Nigel Magnay
@@ -56,7 +56,8 @@
       bind(new TypeLiteral<Function<SmartOSHost, Location>>() {
       }).to(DatacenterToLocation.class);
       // to have the compute service adapter override default locations
-      //install(new LocationsFromComputeServiceAdapterModule<VM, VmSpecification, DataSet, SmartOSHost>(){});
+      // install(new LocationsFromComputeServiceAdapterModule<VM, VmSpecification, DataSet,
+      // SmartOSHost>(){});
 
    }
 }
\ No newline at end of file
diff --git a/labs/smartos-ssh/src/main/java/org/jclouds/smartos/compute/domain/DataSet.java b/labs/smartos-ssh/src/main/java/org/jclouds/smartos/compute/domain/DataSet.java
index 0b766af..be05766 100644
--- a/labs/smartos-ssh/src/main/java/org/jclouds/smartos/compute/domain/DataSet.java
+++ b/labs/smartos-ssh/src/main/java/org/jclouds/smartos/compute/domain/DataSet.java
@@ -1,141 +1,131 @@
 package org.jclouds.smartos.compute.domain;
 
-import com.google.common.base.Objects;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.List;
 import java.util.UUID;
 
+import com.google.common.base.Objects;
+
 /**
  * Dataset is a pre-built image ready to be cloned.
  */
 public class DataSet {
-    private final UUID uuid;
-    private final String os;
-    private final String published;
-    private final String urn;
+   private final UUID uuid;
+   private final String os;
+   private final String published;
+   private final String urn;
 
-    public static Builder builder() {
-        return new Builder();
-    }
+   public static Builder builder() {
+      return new Builder();
+   }
 
-    public Builder toBuilder() {
-        return builder().fromDataSet(this);
-    }
+   public Builder toBuilder() {
+      return builder().fromDataSet(this);
+   }
 
-    public static class Builder {
+   public static class Builder {
 
-        public UUID uuid;
-        public String os;
-        public String published;
-        public String urn;
+      public UUID uuid;
+      public String os;
+      public String published;
+      public String urn;
 
-        public Builder uuid(UUID uuid) {
-            this.uuid = uuid;
-            return this;
-        }
+      public Builder uuid(UUID uuid) {
+         this.uuid = uuid;
+         return this;
+      }
 
-        public Builder uuid(String uuid) {
-            this.uuid = UUID.fromString(uuid);
-            return this;
-        }
+      public Builder uuid(String uuid) {
+         this.uuid = UUID.fromString(uuid);
+         return this;
+      }
 
-        public Builder os(String os) {
-            this.os = os;
-            return this;
-        }
+      public Builder os(String os) {
+         this.os = os;
+         return this;
+      }
 
-        public Builder published(String published) {
-            this.published = published;
-            return this;
-        }
+      public Builder published(String published) {
+         this.published = published;
+         return this;
+      }
 
-        public Builder urn(String urn) {
-            this.urn = urn;
-            return this;
-        }
+      public Builder urn(String urn) {
+         this.urn = urn;
+         return this;
+      }
 
-        public Builder fromDsadmString(String string) {
-            String [] sections = string.split(" ");
+      public Builder fromDsadmString(String string) {
+         String[] sections = string.split(" ");
 
-            uuid      ( sections[0] );
-            os        ( sections[1] );
-            published ( sections[2] );
-            urn       ( sections[3] );
+         uuid(sections[0]);
+         os(sections[1]);
+         published(sections[2]);
+         urn(sections[3]);
 
-            return this;
-        }
+         return this;
+      }
 
+      public DataSet build() {
+         return new DataSet(uuid, os, published, urn);
+      }
 
-        public DataSet build() {
-            return new DataSet(uuid, os, published, urn);
-        }
+      public Builder fromDataSet(DataSet in) {
+         return uuid(in.getUuid()).os(in.getOs()).published(in.getPublished()).urn(in.getUrn());
+      }
+   }
 
-        public Builder fromDataSet(DataSet in) {
-            return uuid(in.getUuid())
-                    .os(in.getOs())
-                    .published(in.getPublished())
-                    .urn(in.getUrn());
-        }
-    }
+   protected DataSet(UUID uuid, String os, String published, String urn) {
+      this.uuid = uuid;
+      this.os = os;
+      this.published = published;
+      this.urn = urn;
+   }
 
-    protected DataSet(UUID uuid, String os, String published, String urn) {
-        this.uuid = uuid;
-        this.os = os;
-        this.published = published;
-        this.urn = urn;
-    }
+   public UUID getUuid() {
+      return uuid;
+   }
 
-    public UUID getUuid() {
-        return uuid;
-    }
+   public String getOs() {
+      return os;
+   }
 
-    public String getOs() {
-        return os;
-    }
+   public String getPublished() {
+      return published;
+   }
 
-    public String getPublished() {
-        return published;
-    }
+   public String getUrn() {
+      return urn;
+   }
 
-    public String getUrn() {
-        return urn;
-    }
+   /**
+    * {@inheritDoc}
+    */
+   @Override
+   public int hashCode() {
+      // UUID is primary key
+      return uuid.hashCode();
+   }
 
-    /**
-     * {@inheritDoc}
-     */
-    @Override
-    public int hashCode() {
-        // UUID is primary key
-        return uuid.hashCode();
-    }
+   /**
+    * {@inheritDoc}
+    */
+   @Override
+   public boolean equals(Object obj) {
+      if (this == obj)
+         return true;
+      if (obj == null)
+         return false;
+      if (getClass() != obj.getClass())
+         return false;
+      return uuid.equals(((DataSet) obj).uuid);
+   }
 
-    /**
-     * {@inheritDoc}
-     */
-    @Override
-    public boolean equals(Object obj) {
-        if (this == obj)
-            return true;
-        if (obj == null)
-            return false;
-        if (getClass() != obj.getClass())
-            return false;
-        return uuid.equals(((DataSet)obj).uuid);
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    @Override
-    public String toString() {
-        return Objects.toStringHelper(this).omitNullValues()
-                .add("uuid", uuid)
-                .add("os", os)
-                .add("published", published)
-                .add("urn", urn).toString();
-    }
+   /**
+    * {@inheritDoc}
+    */
+   @Override
+   public String toString() {
+      return Objects.toStringHelper(this).omitNullValues().add("uuid", uuid).add("os", os).add("published", published)
+               .add("urn", urn).toString();
+   }
 
 }
diff --git a/labs/smartos-ssh/src/main/java/org/jclouds/smartos/compute/domain/SmartOSHost.java b/labs/smartos-ssh/src/main/java/org/jclouds/smartos/compute/domain/SmartOSHost.java
index 7feb88a..248f42f 100644
--- a/labs/smartos-ssh/src/main/java/org/jclouds/smartos/compute/domain/SmartOSHost.java
+++ b/labs/smartos-ssh/src/main/java/org/jclouds/smartos/compute/domain/SmartOSHost.java
@@ -1,19 +1,5 @@
 package org.jclouds.smartos.compute.domain;
 
-import com.google.common.base.Splitter;
-import com.google.common.base.Supplier;
-import com.google.common.collect.ImmutableList;
-import com.google.common.collect.ImmutableMap;
-import com.google.common.net.HostAndPort;
-import org.jclouds.domain.LoginCredentials;
-import org.jclouds.location.Provider;
-import org.jclouds.rest.annotations.Credential;
-import org.jclouds.rest.annotations.Identity;
-import org.jclouds.ssh.SshClient;
-
-import javax.annotation.Nullable;
-import javax.inject.Inject;
-import javax.inject.Singleton;
 import java.io.BufferedReader;
 import java.io.IOException;
 import java.io.StringReader;
@@ -23,274 +9,276 @@
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
+import javax.annotation.Nullable;
+import javax.inject.Inject;
+
+import org.jclouds.domain.LoginCredentials;
+import org.jclouds.location.Provider;
+import org.jclouds.rest.annotations.Credential;
+import org.jclouds.rest.annotations.Identity;
+import org.jclouds.ssh.SshClient;
+
+import com.google.common.base.Splitter;
+import com.google.common.base.Supplier;
+import com.google.common.collect.ImmutableList;
+import com.google.common.collect.ImmutableMap;
+import com.google.common.net.HostAndPort;
+
 /**
  * A host machine that runs smartOS
  */
-@Singleton
 public class SmartOSHost {
-    protected final String hostname;
-    protected final String username;
-    protected final String password;
+   protected final String hostname;
+   protected final String username;
+   protected final String password;
 
-    protected SshClient.Factory sshClientFactory;
+   protected SshClient.Factory sshClientFactory;
 
-    private SshClient _connection;
+   private SshClient _connection;
 
-    public static class HostException extends RuntimeException {
-        public HostException(String s, Throwable throwable) {
-            super(s, throwable);
-        }
+   public static class HostException extends RuntimeException {
+      private static final long serialVersionUID = -2247796213703641847L;
 
-        public HostException(String s) {
-            super(s);
-        }
-    }
+      public HostException(String s, Throwable throwable) {
+         super(s, throwable);
+      }
 
-    public static class NoResponseException extends Exception {
-        public NoResponseException() {
-        }
-    }
+      public HostException(String s) {
+         super(s);
+      }
+   }
 
-    public static Builder builder() {
-        return new Builder();
-    }
+   public static class NoResponseException extends Exception {
+      private static final long serialVersionUID = -2247796213703641847L;
 
-    public Builder toBuilder() {
-        return builder().fromSmartOSHost(this);
-    }
+      public NoResponseException() {
+      }
+   }
 
-    public static class Builder {
-        protected String hostname;
-        protected String username;
-        protected String password;
-        protected SshClient.Factory sshFactory;
+   public static Builder builder() {
+      return new Builder();
+   }
 
-        public Builder hostname(String hostname) {
-            this.hostname = hostname;
-            return this;
-        }
+   public Builder toBuilder() {
+      return builder().fromSmartOSHost(this);
+   }
 
-        public Builder username(String username) {
-            this.username = username;
-            return this;
-        }
+   public static class Builder {
+      protected String hostname;
+      protected String username;
+      protected String password;
+      protected SshClient.Factory sshFactory;
 
-        public Builder password(String password) {
-            this.password = password;
-            return this;
-        }
+      public Builder hostname(String hostname) {
+         this.hostname = hostname;
+         return this;
+      }
 
-        public Builder sshFactory(SshClient.Factory sshFactory) {
-            this.sshFactory = sshFactory;
-            return this;
-        }
+      public Builder username(String username) {
+         this.username = username;
+         return this;
+      }
 
-        public SmartOSHost build() {
-            return new SmartOSHost(hostname, username, password, sshFactory);
-        }
+      public Builder password(String password) {
+         this.password = password;
+         return this;
+      }
 
-        public Builder fromSmartOSHost(SmartOSHost in) {
-            return this.hostname  ( in.getHostname() )
-                       .username  ( in.getHostname() )
-                       .password  ( in.getPassword() )
-                       .sshFactory( in.getSshClientFactory() );
-        }
-    }
+      public Builder sshFactory(SshClient.Factory sshFactory) {
+         this.sshFactory = sshFactory;
+         return this;
+      }
 
-    @Inject
-    protected SmartOSHost(@Provider Supplier<URI> provider,
-                          @Nullable @Identity String identity,
-                          @Nullable @Credential String credential,
-                          SshClient.Factory sshFactory) {
+      public SmartOSHost build() {
+         return new SmartOSHost(hostname, username, password, sshFactory);
+      }
 
-        this.hostname = provider.get().getHost();
-        this.username = identity;
-        this.password = credential;
-        this.sshClientFactory = sshFactory;
-    }
+      public Builder fromSmartOSHost(SmartOSHost in) {
+         return this.hostname(in.getHostname()).username(in.getHostname()).password(in.getPassword())
+                  .sshFactory(in.getSshClientFactory());
+      }
+   }
 
-    protected SmartOSHost(String hostname, String username, String password, SshClient.Factory sshClientFactory) {
-        this.hostname = hostname;
-        this.username = username;
-        this.password = password;
-        this.sshClientFactory = sshClientFactory;
-    }
+   @Inject
+   protected SmartOSHost(@Provider Supplier<URI> provider, @Nullable @Identity String identity,
+            @Nullable @Credential String credential, SshClient.Factory sshFactory) {
 
-    public String getDescription() {
-        return "SmartOS@" + hostname;
-    }
+      this.hostname = provider.get().getHost();
+      this.username = identity;
+      this.password = credential;
+      this.sshClientFactory = sshFactory;
+   }
 
-    public String getHostname() {
-        return hostname;
-    }
+   protected SmartOSHost(String hostname, String username, String password, SshClient.Factory sshClientFactory) {
+      this.hostname = hostname;
+      this.username = username;
+      this.password = password;
+      this.sshClientFactory = sshClientFactory;
+   }
 
-    public String getUsername() {
-        return username;
-    }
+   public String getDescription() {
+      return "SmartOS@" + hostname;
+   }
 
-    public String getPassword() {
-        return password;
-    }
+   public String getHostname() {
+      return hostname;
+   }
 
-    public SshClient.Factory getSshClientFactory() {
-        return sshClientFactory;
-    }
+   public String getUsername() {
+      return username;
+   }
 
-    protected SshClient getConnection() {
-        if (_connection == null) {
+   public String getPassword() {
+      return password;
+   }
 
-            LoginCredentials credentials = new LoginCredentials.Builder()
-                    .user(username)
-                    .password(password)
-                    .build();
+   public SshClient.Factory getSshClientFactory() {
+      return sshClientFactory;
+   }
 
-            _connection = getSshClientFactory().create(
-                    HostAndPort.fromParts(hostname, 22),
-                    credentials
-            );
+   protected SshClient getConnection() {
+      if (_connection == null) {
 
-            _connection.connect();
+         LoginCredentials credentials = new LoginCredentials.Builder().user(username).password(password).build();
 
-        }
-        return _connection;
-    }
+         _connection = getSshClientFactory().create(HostAndPort.fromParts(hostname, 22), credentials);
 
+         _connection.connect();
 
-    public String exec(String cmd) {
-        return getConnection().exec(cmd).getOutput();
-    }
+      }
+      return _connection;
+   }
 
-    public String vmList()  {
-        return exec("vmadm list -p");
-    }
+   public String exec(String cmd) {
+      return getConnection().exec(cmd).getOutput();
+   }
 
+   public String vmList() {
+      return exec("vmadm list -p");
+   }
 
-    public Map<String, String> getVMIpAddresses(UUID vmId)
-    {
-        ImmutableMap.Builder<String, String> netMapBuilder = ImmutableMap.builder();
+   public Map<String, String> getVMIpAddresses(UUID vmId) {
+      ImmutableMap.Builder<String, String> netMapBuilder = ImmutableMap.builder();
 
-        String response = getConnection().exec("zlogin " + vmId.toString() + " ifconfig -a4").getOutput();
+      String response = getConnection().exec("zlogin " + vmId.toString() + " ifconfig -a4").getOutput();
 
-        if( response.length() == 0)
-            return ImmutableMap.of();
+      if (response.length() == 0)
+         return ImmutableMap.of();
 
-        Iterable<String> strings = Splitter.on("\n").split(response);
-        Pattern inetMatcher = Pattern.compile("inet [0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}");
+      Iterable<String> strings = Splitter.on("\n").split(response);
+      Pattern inetMatcher = Pattern.compile("inet [0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}");
 
-        String iface = "";
-        for(String line : strings )
-        {
-            if( line.length() > 0 && Character.isLetterOrDigit(line.charAt(0)) )
-            {
-                iface = line.substring(0, line.indexOf(":") );
-            }
-            else
-            {
-                Matcher matcher = inetMatcher.matcher(line);
-                if( matcher.find() )
-                    netMapBuilder.put(iface, matcher.group().substring(5));
-            }
-        }
+      String iface = "";
+      for (String line : strings) {
+         if (line.length() > 0 && Character.isLetterOrDigit(line.charAt(0))) {
+            iface = line.substring(0, line.indexOf(":"));
+         } else {
+            Matcher matcher = inetMatcher.matcher(line);
+            if (matcher.find())
+               netMapBuilder.put(iface, matcher.group().substring(5));
+         }
+      }
 
-        return netMapBuilder.build();
+      return netMapBuilder.build();
 
-    }
+   }
 
-    /**
-     * What remotely available images are there in the cloud?
-     *
-     * @return Collection of datasets
-     */
-    public Iterable<DataSet> getAvailableImages() {
-        return toSpecList(exec("dsadm avail"));
-    }
+   /**
+    * What remotely available images are there in the cloud?
+    * 
+    * @return Collection of datasets
+    */
+   public Iterable<DataSet> getAvailableImages() {
+      return toSpecList(exec("dsadm avail"));
+   }
 
-    public Iterable<DataSet> getLocalDatasets() {
-        return toSpecList(exec("dsadm list"));
-    }
+   public Iterable<DataSet> getLocalDatasets() {
+      return toSpecList(exec("dsadm list"));
+   }
 
-    public Iterable<VM> getVMs() {
-        return toVMList(exec("vmadm list -p"));
-    }
+   public Iterable<VM> getVMs() {
+      return toVMList(exec("vmadm list -p"));
+   }
 
-    public VM createVM(VmSpecification specification) {
+   public VM createVM(VmSpecification specification) {
 
-        String response = getConnection().exec("(cat <<END\n" +
-                specification.toJSONSpecification() + "\nEND\n) | vmadm create").getOutput();
+      String response = getConnection().exec(
+               "(cat <<END\n" + specification.toJSONSpecification() + "\nEND\n) | vmadm create").getOutput();
 
-        Pattern uuidPattern = Pattern.compile("[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}");
-        Matcher matcher = uuidPattern.matcher(response);
-        if (matcher.find()) {
-            String uuid = matcher.group();
-            return getVM( UUID.fromString(uuid) );
-        } else {
-            throw new HostException("Error creating Host: response = " + response + "\n source = " + specification.toJSONSpecification());
-        }
+      Pattern uuidPattern = Pattern.compile("[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}");
+      Matcher matcher = uuidPattern.matcher(response);
+      if (matcher.find()) {
+         String uuid = matcher.group();
+         return getVM(UUID.fromString(uuid));
+      } else {
+         throw new HostException("Error creating Host: response = " + response + "\n source = "
+                  + specification.toJSONSpecification());
+      }
 
-    }
+   }
 
-    private Iterable<DataSet> toSpecList(String string) {
+   private Iterable<DataSet> toSpecList(String string) {
 
-        try {
-            BufferedReader r = new BufferedReader(new StringReader(string));
-            r.readLine(); // Skip
-            String line;
-            ImmutableList.Builder resultBuilder = ImmutableList.builder();
-            while ((line = r.readLine()) != null) {
-                DataSet dataset = DataSet.builder().fromDsadmString(line).build();
+      try {
+         BufferedReader r = new BufferedReader(new StringReader(string));
+         r.readLine(); // Skip
+         String line;
+         ImmutableList.Builder<DataSet> resultBuilder = ImmutableList.builder();
+         while ((line = r.readLine()) != null) {
+            DataSet dataset = DataSet.builder().fromDsadmString(line).build();
 
-                resultBuilder.add(dataset);
-            }
-            return resultBuilder.build();
-        } catch (IOException e) {
-            throw new HostException("Error parsing response when building spec list", e);
-        }
-    }
+            resultBuilder.add(dataset);
+         }
+         return resultBuilder.build();
+      } catch (IOException e) {
+         throw new HostException("Error parsing response when building spec list", e);
+      }
+   }
 
-    private Iterable<VM> toVMList(String string) {
-        try {
-            BufferedReader r = new BufferedReader(new StringReader(string));
-            String line;
-            ImmutableList.Builder resultBuilder = ImmutableList.builder();
-            while ((line = r.readLine()) != null) {
-                VM vm = VM.builder().host(this).fromVmadmString(line).build();
+   private Iterable<VM> toVMList(String string) {
+      try {
+         BufferedReader r = new BufferedReader(new StringReader(string));
+         String line;
+         ImmutableList.Builder<VM> resultBuilder = ImmutableList.builder();
+         while ((line = r.readLine()) != null) {
+            VM vm = VM.builder().host(this).fromVmadmString(line).build();
 
-                resultBuilder.add(vm);
-            }
-            return resultBuilder.build();
-        } catch (IOException e) {
-            throw new HostException("Error parsing response when building VM list", e);
-        }
-    }
+            resultBuilder.add(vm);
+         }
+         return resultBuilder.build();
+      } catch (IOException e) {
+         throw new HostException("Error parsing response when building VM list", e);
+      }
+   }
 
-    public VM getVM(UUID serverId) {
-        for (VM vm : getVMs())
-            if (vm.uuid.equals(serverId))
-                return vm;
-        return null;
-    }
+   public VM getVM(UUID serverId) {
+      for (VM vm : getVMs())
+         if (vm.uuid.equals(serverId))
+            return vm;
+      return null;
+   }
 
-    public DataSet getDataSet(UUID imageId) {
-        for (DataSet ds : getLocalDatasets()) {
-            if (ds.getUuid().equals(imageId))
-                return ds;
-        }
-        return null;
-    }
+   public DataSet getDataSet(UUID imageId) {
+      for (DataSet ds : getLocalDatasets()) {
+         if (ds.getUuid().equals(imageId))
+            return ds;
+      }
+      return null;
+   }
 
-    public void destroyHost(UUID uuid) {
-        exec("vmadm delete " + uuid.toString());
-    }
+   public void destroyHost(UUID uuid) {
+      exec("vmadm delete " + uuid.toString());
+   }
 
-    public void rebootHost(UUID uuid) {
-        exec("vmadm reboot " + uuid.toString());
-    }
+   public void rebootHost(UUID uuid) {
+      exec("vmadm reboot " + uuid.toString());
+   }
 
-    public void stopHost(UUID uuid) {
-        exec("vmadm stop -p");
-    }
+   public void stopHost(UUID uuid) {
+      exec("vmadm stop -p");
+   }
 
-    public void startHost(UUID uuid) {
-        exec("vmadm start " + uuid.toString());
-    }
+   public void startHost(UUID uuid) {
+      exec("vmadm start " + uuid.toString());
+   }
 }
diff --git a/labs/smartos-ssh/src/main/java/org/jclouds/smartos/compute/domain/VM.java b/labs/smartos-ssh/src/main/java/org/jclouds/smartos/compute/domain/VM.java
index ec9e6e9..988fd23 100644
--- a/labs/smartos-ssh/src/main/java/org/jclouds/smartos/compute/domain/VM.java
+++ b/labs/smartos-ssh/src/main/java/org/jclouds/smartos/compute/domain/VM.java
@@ -1,222 +1,205 @@
 package org.jclouds.smartos.compute.domain;
 
-import com.google.common.base.Objects;
-import com.google.common.base.Optional;
-
-import java.io.IOException;
-import java.util.Collection;
 import java.util.Map;
 import java.util.UUID;
 
+import com.google.common.base.Objects;
+import com.google.common.base.Optional;
+
 /**
  * Representing a Virtual Machine (Zone / KVM )
  **/
 public class VM {
 
-    public enum State
-    {
-        RUNNING,
-        STOPPED,
-        INCOMPLETE
-    }
+   public enum State {
+      RUNNING, STOPPED, INCOMPLETE
+   }
 
-    public static Builder builder() {
-        return new Builder();
-    }
+   public static Builder builder() {
+      return new Builder();
+   }
 
-    public Builder toBuilder() {
-        return builder().fromVM(this);
-    }
+   public Builder toBuilder() {
+      return builder().fromVM(this);
+   }
 
-    public static class Builder {
+   public static class Builder {
 
-        protected SmartOSHost host;
-        protected UUID uuid;
-        protected String type;
-        protected String ram;
-        protected State state = State.STOPPED;
-        protected String alias;
+      protected SmartOSHost host;
+      protected UUID uuid;
+      protected String type;
+      protected String ram;
+      protected State state = State.STOPPED;
+      protected String alias;
 
-        public Builder uuid(UUID uuid) {
-            this.uuid = uuid;
-            return this;
-        }
+      public Builder uuid(UUID uuid) {
+         this.uuid = uuid;
+         return this;
+      }
 
-        public Builder uuid(String uuid) {
-            this.uuid = UUID.fromString(uuid);
-            return this;
-        }
+      public Builder uuid(String uuid) {
+         this.uuid = UUID.fromString(uuid);
+         return this;
+      }
 
-        public Builder host(SmartOSHost host) {
-            this.host = host;
-            return this;
-        }
+      public Builder host(SmartOSHost host) {
+         this.host = host;
+         return this;
+      }
 
-        public Builder type(String type) {
-            this.type = type;
-            return this;
-        }
+      public Builder type(String type) {
+         this.type = type;
+         return this;
+      }
 
-        public Builder ram(String ram) {
-            this.ram = ram;
-            return this;
-        }
+      public Builder ram(String ram) {
+         this.ram = ram;
+         return this;
+      }
 
-        public Builder state(String state) {
-            this.state = State.valueOf(state.toUpperCase());
-            return this;
-        }
+      public Builder state(String state) {
+         this.state = State.valueOf(state.toUpperCase());
+         return this;
+      }
 
-        public Builder state(State state) {
-            this.state = state;
-            return this;
-        }
+      public Builder state(State state) {
+         this.state = state;
+         return this;
+      }
 
-        public Builder alias(String alias) {
-            this.alias = alias;
-            return this;
-        }
+      public Builder alias(String alias) {
+         this.alias = alias;
+         return this;
+      }
 
-        public Builder fromVmadmString(String string) {
-            String[] sections = string.split(":");
+      public Builder fromVmadmString(String string) {
+         String[] sections = string.split(":");
 
-            uuid(sections[0]);
+         uuid(sections[0]);
 
-            type(sections[1]);
-            ram(sections[2]);
-            state(sections[3]);
+         type(sections[1]);
+         ram(sections[2]);
+         state(sections[3]);
 
-            if (sections.length > 4)
-                alias(sections[4]);
+         if (sections.length > 4)
+            alias(sections[4]);
 
-            return this;
-        }
+         return this;
+      }
 
+      public VM build() {
+         return new VM(host, uuid, type, ram, state, alias);
+      }
 
-        public VM build() {
-            return new VM(host,uuid,type,ram,state,alias);
-        }
+      public Builder fromVM(VM in) {
+         return host(in.getHost()).uuid(in.getUuid()).type(in.getType()).ram(in.getRam()).state(in.getState())
+                  .alias(in.getAlias());
+      }
+   }
 
-        public Builder fromVM(VM in) {
-            return host(in.getHost())
-                    .uuid(in.getUuid())
-                    .type(in.getType())
-                    .ram(in.getRam())
-                    .state(in.getState())
-                    .alias(in.getAlias());
-        }
-    }
+   protected SmartOSHost host;
+   protected final UUID uuid;
+   protected String type;
+   protected String ram;
+   protected State state;
+   protected String alias;
 
+   public VM(SmartOSHost host, UUID uuid, String type, String ram, State state, String alias) {
+      this.host = host;
+      this.uuid = uuid;
+      this.type = type;
+      this.ram = ram;
+      this.state = state;
+      this.alias = alias;
+   }
 
-    protected SmartOSHost host;
-    protected final UUID uuid;
-    protected String type;
-    protected String ram;
-    protected State state;
-    protected String alias;
+   public State getState() {
+      return state;
+   }
 
+   public void destroy() {
+      host.destroyHost(uuid);
+   }
 
-    public VM(SmartOSHost host, UUID uuid, String type, String ram, State state, String alias) {
-        this.host = host;
-        this.uuid = uuid;
-        this.type = type;
-        this.ram = ram;
-        this.state = state;
-        this.alias = alias;
-    }
+   public void reboot() {
+      host.rebootHost(uuid);
+   }
 
-    public State getState() {
-       return state;
-    }
+   public void stop() {
+      host.stopHost(uuid);
+   }
 
-    public void destroy() {
-        host.destroyHost(uuid);
-    }
+   public void start() {
+      host.startHost(uuid);
+   }
 
-    public void reboot() {
-        host.rebootHost(uuid);
-    }
+   public Optional<String> getPublicAddress() throws InterruptedException {
+      Map<String, String> ipAddresses;
 
-    public void stop()  {
-        host.stopHost(uuid);
-    }
+      for (int i = 0; i < 30; i++) {
+         ipAddresses = host.getVMIpAddresses(uuid);
+         if (ipAddresses.isEmpty()) {
+            // Got some
+            String ip = ipAddresses.get("net0");
+            if (ip != null && !ip.equals("0.0.0.0"))
+               return Optional.of(ip);
+         }
 
-    public void start()  {
-        host.startHost(uuid);
-    }
+         Thread.sleep(1000);
+      }
 
-    public Optional<String> getPublicAddress() throws InterruptedException {
-        Map<String, String> ipAddresses;
+      return Optional.absent();
+   }
 
-        for( int i=0; i<30; i++ )
-        {
-            ipAddresses = host.getVMIpAddresses(uuid);
-            if( ipAddresses.isEmpty() )
-            {
-                // Got some
-                String ip = ipAddresses.get("net0");
-                if( ip != null && !ip.equals("0.0.0.0"))
-                    return Optional.of(ip);
-            }
+   public SmartOSHost getHost() {
+      return host;
+   }
 
-            Thread.sleep(1000);
-        }
+   public UUID getUuid() {
+      return uuid;
+   }
 
-        return Optional.absent();
-    }
+   public String getType() {
+      return type;
+   }
 
-    public SmartOSHost getHost() {
-        return host;
-    }
+   public String getRam() {
+      return ram;
+   }
 
-    public UUID getUuid() {
-        return uuid;
-    }
+   public String getAlias() {
+      return alias;
+   }
 
-    public String getType() {
-        return type;
-    }
+   /**
+    * {@inheritDoc}
+    */
+   @Override
+   public int hashCode() {
+      // UUID is primary key
+      return uuid.hashCode();
+   }
 
-    public String getRam() {
-        return ram;
-    }
+   /**
+    * {@inheritDoc}
+    */
+   @Override
+   public boolean equals(Object obj) {
+      if (this == obj)
+         return true;
+      if (obj == null)
+         return false;
+      if (getClass() != obj.getClass())
+         return false;
+      return uuid.equals(((DataSet) obj).getUuid());
+   }
 
-    public String getAlias() {
-        return alias;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    @Override
-    public int hashCode() {
-        // UUID is primary key
-        return uuid.hashCode();
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    @Override
-    public boolean equals(Object obj) {
-        if (this == obj)
-            return true;
-        if (obj == null)
-            return false;
-        if (getClass() != obj.getClass())
-            return false;
-        return uuid.equals(((DataSet)obj).getUuid());
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    @Override
-    public String toString() {
-        return Objects.toStringHelper(this).omitNullValues()
-                .add("uuid", uuid)
-                .add("type", type)
-                .add("ram", ram)
-                .add("alias", alias).toString();
-    }
+   /**
+    * {@inheritDoc}
+    */
+   @Override
+   public String toString() {
+      return Objects.toStringHelper(this).omitNullValues().add("uuid", uuid).add("type", type).add("ram", ram)
+               .add("alias", alias).toString();
+   }
 }
diff --git a/labs/smartos-ssh/src/main/java/org/jclouds/smartos/compute/domain/VmNIC.java b/labs/smartos-ssh/src/main/java/org/jclouds/smartos/compute/domain/VmNIC.java
index e8caa3a..3a92064 100644
--- a/labs/smartos-ssh/src/main/java/org/jclouds/smartos/compute/domain/VmNIC.java
+++ b/labs/smartos-ssh/src/main/java/org/jclouds/smartos/compute/domain/VmNIC.java
@@ -2,109 +2,97 @@
 
 import com.google.common.base.Objects;
 import com.google.gson.annotations.SerializedName;
-import com.google.inject.name.Named;
-
-import java.util.UUID;
-
 
 /**
  * Specification of a network card.
  */
 public class VmNIC {
 
-    @SerializedName("nic_tag")
-    protected final String tag;
-    protected final String ip;
-    protected final String netmask;
-    protected final String gateway;
+   @SerializedName("nic_tag")
+   protected final String tag;
+   protected final String ip;
+   protected final String netmask;
+   protected final String gateway;
 
-    public static Builder builder() {
-        return new Builder();
-    }
+   public static Builder builder() {
+      return new Builder();
+   }
 
-    public Builder toBuilder() {
-        return builder().fromVmNIC(this);
-    }
+   public Builder toBuilder() {
+      return builder().fromVmNIC(this);
+   }
 
-    public static class Builder {
+   public static class Builder {
 
-        public String tag = "admin";
-        public String ip;
-        public String netmask;
-        public String gateway;
+      public String tag = "admin";
+      public String ip;
+      public String netmask;
+      public String gateway;
 
+      public Builder simpleDCHPNic() {
+         tag = "admin";
+         ip = "dhcp";
+         return this;
+      }
 
-        public Builder simpleDCHPNic() {
-            tag = "admin";
-            ip = "dhcp";
-            return this;
-        }
+      public Builder tag(String tag) {
+         this.tag = tag;
+         return this;
+      }
 
-        public Builder tag(String tag) {
-            this.tag = tag;
-            return this;
-        }
+      public Builder ip(String ip) {
+         this.ip = ip;
+         return this;
+      }
 
-        public Builder ip(String ip) {
-            this.ip = ip;
-            return this;
-        }
+      public Builder netmask(String netmask) {
+         this.netmask = netmask;
+         return this;
+      }
 
-        public Builder netmask(String netmask) {
-            this.netmask = netmask;
-            return this;
-        }
+      public Builder gateway(String gateway) {
+         this.gateway = gateway;
+         return this;
+      }
 
-        public Builder gateway(String gateway) {
-            this.gateway = gateway;
-            return this;
-        }
+      public VmNIC build() {
+         return new VmNIC(tag, ip, netmask, gateway);
+      }
 
-        public VmNIC build() {
-            return new VmNIC(tag,ip,netmask,gateway);
-        }
+      public Builder fromVmNIC(VmNIC in) {
+         return tag(in.getTag()).ip(in.getIp()).netmask(in.getNetmask()).gateway(in.getGateway());
+      }
+   }
 
-        public Builder fromVmNIC(VmNIC in) {
-            return tag      ( in.getTag())
-                    .ip     ( in.getIp() )
-                    .netmask( in.getNetmask() )
-                    .gateway( in.getGateway() );
-        }
-    }
+   public VmNIC(String tag, String ip, String netmask, String gateway) {
+      this.tag = tag;
+      this.ip = ip;
+      this.netmask = netmask;
+      this.gateway = gateway;
+   }
 
+   public String getTag() {
+      return tag;
+   }
 
-    public VmNIC(String tag, String ip, String netmask, String gateway) {
-        this.tag = tag;
-        this.ip = ip;
-        this.netmask = netmask;
-        this.gateway = gateway;
-    }
+   public String getIp() {
+      return ip;
+   }
 
-    public String getTag() {
-        return tag;
-    }
+   public String getNetmask() {
+      return netmask;
+   }
 
-    public String getIp() {
-        return ip;
-    }
+   public String getGateway() {
+      return gateway;
+   }
 
-    public String getNetmask() {
-        return netmask;
-    }
-
-    public String getGateway() {
-        return gateway;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    @Override
-    public String toString() {
-        return Objects.toStringHelper(this).omitNullValues()
-                .add("tag", tag)
-                .add("ip", ip)
-                .add("netmask", netmask)
-                .add("gateway", gateway).toString();
-    }
+   /**
+    * {@inheritDoc}
+    */
+   @Override
+   public String toString() {
+      return Objects.toStringHelper(this).omitNullValues().add("tag", tag).add("ip", ip).add("netmask", netmask)
+               .add("gateway", gateway).toString();
+   }
 }
diff --git a/labs/smartos-ssh/src/main/java/org/jclouds/smartos/compute/domain/VmSpecification.java b/labs/smartos-ssh/src/main/java/org/jclouds/smartos/compute/domain/VmSpecification.java
index e793816..9771714 100644
--- a/labs/smartos-ssh/src/main/java/org/jclouds/smartos/compute/domain/VmSpecification.java
+++ b/labs/smartos-ssh/src/main/java/org/jclouds/smartos/compute/domain/VmSpecification.java
@@ -1,142 +1,142 @@
 package org.jclouds.smartos.compute.domain;
 
-
-import com.google.common.collect.ImmutableList;
-import com.google.gson.*;
-import com.google.gson.annotations.SerializedName;
-
 import java.lang.reflect.Type;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.List;
 
+import com.google.common.collect.ImmutableList;
+import com.google.gson.Gson;
+import com.google.gson.GsonBuilder;
+import com.google.gson.JsonElement;
+import com.google.gson.JsonPrimitive;
+import com.google.gson.JsonSerializationContext;
+import com.google.gson.JsonSerializer;
+import com.google.gson.annotations.SerializedName;
+
 /**
  * Specification of a VM to build, based on a dataset.
  */
 public class VmSpecification {
-    protected final String alias;
-    protected final String brand;
+   protected final String alias;
+   protected final String brand;
 
-    @SerializedName("dataset_uuid")
-    protected final DataSet dataset;
-    protected final String dnsDomain;
-    protected final String quota;
+   @SerializedName("dataset_uuid")
+   protected final DataSet dataset;
+   protected final String dnsDomain;
+   protected final String quota;
 
-    protected final List<VmNIC> nics;
+   protected final List<VmNIC> nics;
 
-    public static Builder builder() {
-        return new Builder();
-    }
+   public static Builder builder() {
+      return new Builder();
+   }
 
-    public Builder toBuilder() {
-        return builder().fromVmSpecification(this);
-    }
+   public Builder toBuilder() {
+      return builder().fromVmSpecification(this);
+   }
 
-    public static class Builder {
+   public static class Builder {
 
-        protected String alias;
-        protected String brand = "joyent";
-        protected DataSet dataset;
-        protected String dnsDomain = "local";
-        protected String quota = "10";
+      protected String alias;
+      protected String brand = "joyent";
+      protected DataSet dataset;
+      protected String dnsDomain = "local";
+      protected String quota = "10";
 
-        protected List<VmNIC> nics = new ArrayList<VmNIC>();
+      protected List<VmNIC> nics = new ArrayList<VmNIC>();
 
-        public Builder alias(String alias) {
-            this.alias = alias;
-            return this;
-        }
+      public Builder alias(String alias) {
+         this.alias = alias;
+         return this;
+      }
 
-        public Builder brand(String brand) {
-            this.brand = brand;
-            return this;
-        }
+      public Builder brand(String brand) {
+         this.brand = brand;
+         return this;
+      }
 
-        public Builder dataset(DataSet dataset) {
-            this.dataset = dataset;
-            return this;
-        }
+      public Builder dataset(DataSet dataset) {
+         this.dataset = dataset;
+         return this;
+      }
 
-        public Builder dnsDomain(String dnsDomain) {
-            this.dnsDomain = dnsDomain;
-            return this;
-        }
+      public Builder dnsDomain(String dnsDomain) {
+         this.dnsDomain = dnsDomain;
+         return this;
+      }
 
-        public Builder quota(String quota) {
-            this.quota = quota;
-            return this;
-        }
+      public Builder quota(String quota) {
+         this.quota = quota;
+         return this;
+      }
 
-        public Builder nics(Collection<VmNIC> nic) {
-            this.nics.addAll(nics);
-            return this;
-        }
+      public Builder nics(Collection<VmNIC> nic) {
+         this.nics.addAll(nics);
+         return this;
+      }
 
-        public Builder nic(VmNIC nic) {
-            this.nics.add(nic);
-            return this;
-        }
+      public Builder nic(VmNIC nic) {
+         this.nics.add(nic);
+         return this;
+      }
 
-        public VmSpecification build() {
-            return new VmSpecification(alias, brand, dataset, dnsDomain, quota, nics);
-        }
+      public VmSpecification build() {
+         return new VmSpecification(alias, brand, dataset, dnsDomain, quota, nics);
+      }
 
-        public Builder fromVmSpecification(VmSpecification in) {
-            return alias     (in.getAlias())
-                   .brand    (in.getBrand())
-                   .dataset  (in.getDataset())
-                   .dnsDomain(in.getDnsDomain())
-                   .quota    (in.getQuota())
-                   .nics(in.getNics());
-        }
-    }
+      public Builder fromVmSpecification(VmSpecification in) {
+         return alias(in.getAlias()).brand(in.getBrand()).dataset(in.getDataset()).dnsDomain(in.getDnsDomain())
+                  .quota(in.getQuota()).nics(in.getNics());
+      }
+   }
 
-    protected VmSpecification(String alias, String brand, DataSet dataset, String dnsDomain, String quota, List<VmNIC> nics) {
-        this.alias = alias;
-        this.brand = brand;
-        this.dataset = dataset;
-        this.dnsDomain = dnsDomain;
-        this.quota = quota;
-        this.nics = nics;
-    }
+   protected VmSpecification(String alias, String brand, DataSet dataset, String dnsDomain, String quota,
+            List<VmNIC> nics) {
+      this.alias = alias;
+      this.brand = brand;
+      this.dataset = dataset;
+      this.dnsDomain = dnsDomain;
+      this.quota = quota;
+      this.nics = nics;
+   }
 
-    public String getAlias() {
-        return alias;
-    }
+   public String getAlias() {
+      return alias;
+   }
 
-    public String getBrand() {
-        return brand;
-    }
+   public String getBrand() {
+      return brand;
+   }
 
-    public DataSet getDataset() {
-        return dataset;
-    }
+   public DataSet getDataset() {
+      return dataset;
+   }
 
-    public String getDnsDomain() {
-        return dnsDomain;
-    }
+   public String getDnsDomain() {
+      return dnsDomain;
+   }
 
-    public String getQuota() {
-        return quota;
-    }
+   public String getQuota() {
+      return quota;
+   }
 
-    public List<VmNIC> getNics() {
-        return ImmutableList.copyOf(nics);
-    }
+   public List<VmNIC> getNics() {
+      return ImmutableList.copyOf(nics);
+   }
 
-    public String toJSONSpecification() {
-        GsonBuilder gson = new GsonBuilder();
-        gson.registerTypeAdapter(DataSet.class, new FlattenDataset() );
-        Gson g = gson.create();
+   public String toJSONSpecification() {
+      GsonBuilder gson = new GsonBuilder();
+      gson.registerTypeAdapter(DataSet.class, new FlattenDataset());
+      Gson g = gson.create();
 
-        return g.toJson(this);
-    }
+      return g.toJson(this);
+   }
 
-    public class FlattenDataset implements JsonSerializer<DataSet>
-    {
-        @Override
-        public JsonElement serialize(DataSet vmSpecification, Type type, JsonSerializationContext jsonSerializationContext) {
-            return new JsonPrimitive(dataset.getUuid().toString());
-        }
-    }
+   public class FlattenDataset implements JsonSerializer<DataSet> {
+      @Override
+      public JsonElement serialize(DataSet vmSpecification, Type type, JsonSerializationContext jsonSerializationContext) {
+         return new JsonPrimitive(dataset.getUuid().toString());
+      }
+   }
 }
diff --git a/labs/smartos-ssh/src/main/java/org/jclouds/smartos/compute/functions/DataSetToImage.java b/labs/smartos-ssh/src/main/java/org/jclouds/smartos/compute/functions/DataSetToImage.java
index ee90c86..df4b866 100644
--- a/labs/smartos-ssh/src/main/java/org/jclouds/smartos/compute/functions/DataSetToImage.java
+++ b/labs/smartos-ssh/src/main/java/org/jclouds/smartos/compute/functions/DataSetToImage.java
@@ -22,13 +22,13 @@
 import javax.inject.Named;
 import javax.inject.Singleton;
 
-import org.jclouds.smartos.compute.domain.DataSet;
 import org.jclouds.compute.domain.Image;
 import org.jclouds.compute.domain.ImageBuilder;
 import org.jclouds.compute.domain.OperatingSystem;
 import org.jclouds.compute.domain.OsFamily;
 import org.jclouds.compute.reference.ComputeServiceConstants;
 import org.jclouds.logging.Logger;
+import org.jclouds.smartos.compute.domain.DataSet;
 
 import com.google.common.base.Function;
 
@@ -53,7 +53,8 @@
       OsFamily family;
       try {
          family = OsFamily.SOLARIS;
-         builder.operatingSystem(new OperatingSystem.Builder().name(from.getUrn()).description(from.getUrn()).family(family).build());
+         builder.operatingSystem(new OperatingSystem.Builder().name(from.getUrn()).description(from.getUrn())
+                  .family(family).build());
       } catch (IllegalArgumentException e) {
          logger.debug("<< didn't match os(%s)", from);
       }
diff --git a/labs/smartos-ssh/src/main/java/org/jclouds/smartos/compute/functions/DatacenterToLocation.java b/labs/smartos-ssh/src/main/java/org/jclouds/smartos/compute/functions/DatacenterToLocation.java
index ea0984c..b03709d 100644
--- a/labs/smartos-ssh/src/main/java/org/jclouds/smartos/compute/functions/DatacenterToLocation.java
+++ b/labs/smartos-ssh/src/main/java/org/jclouds/smartos/compute/functions/DatacenterToLocation.java
@@ -18,18 +18,19 @@
  */
 package org.jclouds.smartos.compute.functions;
 
-import com.google.common.base.Function;
-import com.google.common.base.Supplier;
-import org.jclouds.smartos.compute.domain.SmartOSHost;
-import org.jclouds.domain.Location;
-import org.jclouds.domain.LocationBuilder;
-import org.jclouds.domain.LocationScope;
+import static com.google.common.base.Preconditions.checkNotNull;
 
 import javax.inject.Inject;
 import javax.inject.Provider;
 import javax.inject.Singleton;
 
-import static com.google.common.base.Preconditions.checkNotNull;
+import org.jclouds.domain.Location;
+import org.jclouds.domain.LocationBuilder;
+import org.jclouds.domain.LocationScope;
+import org.jclouds.smartos.compute.domain.SmartOSHost;
+
+import com.google.common.base.Function;
+import com.google.common.base.Supplier;
 
 /**
  * @author Nigel Magnay
@@ -46,8 +47,8 @@
 
    @Override
    public Location apply(SmartOSHost from) {
-      return new LocationBuilder().scope(LocationScope.ZONE).id(from.getHostname() + "").description(from.getDescription()).parent(
-               provider.get().get()).build();
+      return new LocationBuilder().scope(LocationScope.ZONE).id(from.getHostname() + "")
+               .description(from.getDescription()).parent(provider.get().get()).build();
    }
 
 }
diff --git a/labs/smartos-ssh/src/main/java/org/jclouds/smartos/compute/functions/VMToNodeMetadata.java b/labs/smartos-ssh/src/main/java/org/jclouds/smartos/compute/functions/VMToNodeMetadata.java
index 2780c2d..b32c32e 100644
--- a/labs/smartos-ssh/src/main/java/org/jclouds/smartos/compute/functions/VMToNodeMetadata.java
+++ b/labs/smartos-ssh/src/main/java/org/jclouds/smartos/compute/functions/VMToNodeMetadata.java
@@ -18,30 +18,31 @@
  */
 package org.jclouds.smartos.compute.functions;
 
+import static com.google.common.base.Preconditions.checkNotNull;
+
+import java.util.Map;
+import java.util.Set;
+
+import javax.inject.Inject;
+import javax.inject.Singleton;
+
+import org.jclouds.collect.FindResourceInSet;
+import org.jclouds.collect.Memoized;
+import org.jclouds.compute.domain.Hardware;
+import org.jclouds.compute.domain.Image;
+import org.jclouds.compute.domain.NodeMetadata;
+import org.jclouds.compute.domain.NodeMetadataBuilder;
+import org.jclouds.compute.functions.GroupNamingConvention;
+import org.jclouds.domain.Credentials;
+import org.jclouds.domain.Location;
+import org.jclouds.domain.LoginCredentials;
+import org.jclouds.smartos.compute.domain.VM;
+
 import com.google.common.base.Function;
 import com.google.common.base.Optional;
 import com.google.common.base.Supplier;
 import com.google.common.collect.ImmutableMap;
 import com.google.common.collect.ImmutableSet;
-import com.sun.corba.se.spi.activation.Server;
-import org.jclouds.smartos.compute.domain.VM;
-import org.jclouds.collect.FindResourceInSet;
-import org.jclouds.collect.Memoized;
-import org.jclouds.compute.domain.*;
-import org.jclouds.compute.functions.GroupNamingConvention;
-import org.jclouds.domain.Credentials;
-import org.jclouds.domain.Location;
-import org.jclouds.domain.LoginCredentials;
-import org.omg.PortableInterceptor.ACTIVE;
-
-import javax.inject.Inject;
-import javax.inject.Singleton;
-import java.io.IOException;
-import java.util.Collection;
-import java.util.Map;
-import java.util.Set;
-
-import static com.google.common.base.Preconditions.checkNotNull;
 
 /**
  * @author Nigel Magnay
@@ -49,9 +50,8 @@
 @Singleton
 public class VMToNodeMetadata implements Function<VM, NodeMetadata> {
 
-    public static final Map<VM.State, NodeMetadata.Status> serverStatusToNodeStatus = ImmutableMap
-            .<VM.State, NodeMetadata.Status> builder()
-            .put(VM.State.RUNNING, NodeMetadata.Status.RUNNING)//
+   public static final Map<VM.State, NodeMetadata.Status> serverStatusToNodeStatus = ImmutableMap
+            .<VM.State, NodeMetadata.Status> builder().put(VM.State.RUNNING, NodeMetadata.Status.RUNNING)//
             .put(VM.State.STOPPED, NodeMetadata.Status.SUSPENDED)//
             .put(VM.State.INCOMPLETE, NodeMetadata.Status.PENDING)//
             .build();
@@ -64,8 +64,8 @@
 
    @Inject
    VMToNodeMetadata(Map<String, Credentials> credentialStore, FindHardwareForServer findHardwareForServer,
-                    FindLocationForServer findLocationForServer, FindImageForServer findImageForServer,
-                    GroupNamingConvention.Factory namingConvention) {
+            FindLocationForServer findLocationForServer, FindImageForServer findImageForServer,
+            GroupNamingConvention.Factory namingConvention) {
       this.nodeNamingConvention = checkNotNull(namingConvention, "namingConvention").createWithoutPrefix();
       this.credentialStore = checkNotNull(credentialStore, "credentialStore");
       this.findHardwareForServer = checkNotNull(findHardwareForServer, "findHardwareForServer");
@@ -87,21 +87,18 @@
          builder.operatingSystem(image.getOperatingSystem());
       builder.hardware(findHardwareForServer.apply(from));
       builder.status(serverStatusToNodeStatus.get(from.getState()));
-       try {
-           if( from.getState() == VM.State.RUNNING )
-           {
-               Optional<String> ip = from.getPublicAddress();
-               if( ip.isPresent() ) {
-                    builder.publicAddresses(ImmutableSet.<String> of(ip.get()));
-                    builder.privateAddresses(ImmutableSet.<String> of(ip.get()));
-               }
-           }
-       }
-       catch(Exception ex)
-       {
-           // None?
-       }
-       //builder.privateAddresses(ImmutableSet.<String> of(from.privateAddress));
+      try {
+         if (from.getState() == VM.State.RUNNING) {
+            Optional<String> ip = from.getPublicAddress();
+            if (ip.isPresent()) {
+               builder.publicAddresses(ImmutableSet.<String> of(ip.get()));
+               builder.privateAddresses(ImmutableSet.<String> of(ip.get()));
+            }
+         }
+      } catch (Exception ex) {
+         // None?
+      }
+      // builder.privateAddresses(ImmutableSet.<String> of(from.privateAddress));
       builder.credentials(LoginCredentials.fromCredentials(credentialStore.get(from.getUuid() + "")));
       return builder.build();
    }
diff --git a/labs/smartos-ssh/src/main/java/org/jclouds/smartos/compute/functions/VmSpecificationToHardware.java b/labs/smartos-ssh/src/main/java/org/jclouds/smartos/compute/functions/VmSpecificationToHardware.java
index e789367..d8121c0 100644
--- a/labs/smartos-ssh/src/main/java/org/jclouds/smartos/compute/functions/VmSpecificationToHardware.java
+++ b/labs/smartos-ssh/src/main/java/org/jclouds/smartos/compute/functions/VmSpecificationToHardware.java
@@ -20,10 +20,10 @@
 
 import javax.inject.Singleton;
 
-import org.jclouds.smartos.compute.domain.VmSpecification;
 import org.jclouds.compute.domain.Hardware;
 import org.jclouds.compute.domain.HardwareBuilder;
 import org.jclouds.compute.domain.Processor;
+import org.jclouds.smartos.compute.domain.VmSpecification;
 
 import com.google.common.base.Function;
 import com.google.common.collect.ImmutableList;
@@ -41,7 +41,7 @@
       builder.name(from.getAlias());
       builder.processors(ImmutableList.of(new Processor(1, 1.0)));
       builder.ram(256);
-      //builder.volumes(ImmutableList.<Volume> of(new VolumeImpl(from.disk, true, false)));
+      // builder.volumes(ImmutableList.<Volume> of(new VolumeImpl(from.disk, true, false)));
       return builder.build();
    }
 
diff --git a/labs/smartos-ssh/src/main/java/org/jclouds/smartos/compute/strategy/SmartOSComputeServiceAdapter.java b/labs/smartos-ssh/src/main/java/org/jclouds/smartos/compute/strategy/SmartOSComputeServiceAdapter.java
index 094ad8c..541620c 100644
--- a/labs/smartos-ssh/src/main/java/org/jclouds/smartos/compute/strategy/SmartOSComputeServiceAdapter.java
+++ b/labs/smartos-ssh/src/main/java/org/jclouds/smartos/compute/strategy/SmartOSComputeServiceAdapter.java
@@ -20,24 +20,28 @@
 
 import static com.google.common.base.Preconditions.checkNotNull;
 
-import javax.inject.Inject;
-import javax.inject.Singleton;
-
-import org.jclouds.smartos.compute.domain.*;
-import org.jclouds.compute.ComputeService;
-import org.jclouds.compute.ComputeServiceAdapter;
-import org.jclouds.compute.domain.Template;
-import org.jclouds.domain.LoginCredentials;
-
-import com.google.common.collect.ImmutableSet;
-
 import java.util.ArrayList;
 import java.util.List;
 import java.util.UUID;
 
+import javax.inject.Inject;
+import javax.inject.Singleton;
+
+import org.jclouds.compute.ComputeService;
+import org.jclouds.compute.ComputeServiceAdapter;
+import org.jclouds.compute.domain.Template;
+import org.jclouds.domain.LoginCredentials;
+import org.jclouds.smartos.compute.domain.DataSet;
+import org.jclouds.smartos.compute.domain.SmartOSHost;
+import org.jclouds.smartos.compute.domain.VM;
+import org.jclouds.smartos.compute.domain.VmNIC;
+import org.jclouds.smartos.compute.domain.VmSpecification;
+
+import com.google.common.collect.ImmutableSet;
+
 /**
- * defines the connection between the {@link org.jclouds.smartos.compute.domain.SmartOSHost} implementation and the jclouds
- * {@link ComputeService}
+ * defines the connection between the {@link org.jclouds.smartos.compute.domain.SmartOSHost}
+ * implementation and the jclouds {@link ComputeService}
  * 
  */
 @Singleton
@@ -50,35 +54,31 @@
    }
 
    private SmartOSHost getHost() {
-       return host;
+      return host;
    }
 
    @Override
    public NodeAndInitialCredentials<VM> createNodeWithGroupEncodedIntoName(String tag, String name, Template template) {
-       VmSpecification specification = VmSpecification.builder()
-               .alias(name)
+      VmSpecification specification = VmSpecification.builder().alias(name)
                .dataset(getHost().getDataSet(UUID.fromString(template.getImage().getProviderId())))
-               .nic(VmNIC.builder().simpleDCHPNic().build())
-               .build();
+               .nic(VmNIC.builder().simpleDCHPNic().build()).build();
 
-       VM from = getHost().createVM(specification);
+      VM from = getHost().createVM(specification);
 
-       return new NodeAndInitialCredentials<VM>(from, from.getUuid() + "", LoginCredentials.builder().user("smartos")
+      return new NodeAndInitialCredentials<VM>(from, from.getUuid() + "", LoginCredentials.builder().user("smartos")
                .password("smartos").build());
    }
 
    @Override
    public Iterable<VmSpecification> listHardwareProfiles() {
-       List<VmSpecification> specificationList = new ArrayList<VmSpecification>();
+      List<VmSpecification> specificationList = new ArrayList<VmSpecification>();
 
-       VmSpecification vs = VmSpecification.builder()
-               .alias("Standard Joyent VM")
-               .nic(VmNIC.builder().simpleDCHPNic().build())
-               .build();
+      VmSpecification vs = VmSpecification.builder().alias("Standard Joyent VM")
+               .nic(VmNIC.builder().simpleDCHPNic().build()).build();
 
-       specificationList.add(vs);
+      specificationList.add(vs);
 
-       return specificationList;
+      return specificationList;
    }
 
    @Override
@@ -88,17 +88,17 @@
 
    @Override
    public DataSet getImage(String id) {
-       return getHost().getDataSet(UUID.fromString(id));
+      return getHost().getDataSet(UUID.fromString(id));
    }
 
-    @Override
+   @Override
    public Iterable<VM> listNodes() {
       return getHost().getVMs();
    }
-   
+
    @Override
    public Iterable<SmartOSHost> listLocations() {
-       return ImmutableSet.of();
+      return ImmutableSet.of();
    }
 
    @Override
@@ -108,21 +108,21 @@
 
    @Override
    public void destroyNode(String id) {
-       getHost().getVM(UUID.fromString(id)).destroy();
+      getHost().getVM(UUID.fromString(id)).destroy();
    }
 
    @Override
    public void rebootNode(String id) {
-       getHost().getVM(UUID.fromString(id)).reboot();
+      getHost().getVM(UUID.fromString(id)).reboot();
    }
 
    @Override
    public void resumeNode(String id) {
-       getHost().getVM(UUID.fromString(id)).start();
+      getHost().getVM(UUID.fromString(id)).start();
    }
 
    @Override
    public void suspendNode(String id) {
-       getHost().getVM(UUID.fromString(id)).stop();
+      getHost().getVM(UUID.fromString(id)).stop();
    }
 }
\ No newline at end of file
diff --git a/labs/smartos-ssh/src/test/java/org/jclouds/smartos/compute/SmartOSManagerComputeServiceContextBuilderTest.java b/labs/smartos-ssh/src/test/java/org/jclouds/smartos/compute/SmartOSManagerComputeServiceContextBuilderTest.java
index fe91d42..7451998 100644
--- a/labs/smartos-ssh/src/test/java/org/jclouds/smartos/compute/SmartOSManagerComputeServiceContextBuilderTest.java
+++ b/labs/smartos-ssh/src/test/java/org/jclouds/smartos/compute/SmartOSManagerComputeServiceContextBuilderTest.java
@@ -22,16 +22,16 @@
 
 import java.util.Properties;
 
-import com.google.common.collect.ImmutableSet;
-import com.google.inject.Module;
 import org.jclouds.ContextBuilder;
 import org.jclouds.compute.ComputeServiceContext;
 import org.jclouds.internal.ContextImpl;
-import org.jclouds.rest.internal.BaseRestClientTest;
 import org.jclouds.smartos.SmartOSApiMetadata;
 import org.jclouds.sshj.config.SshjSshClientModule;
 import org.testng.annotations.Test;
 
+import com.google.common.collect.ImmutableSet;
+import com.google.inject.Module;
+
 /**
  * 
  * @author Adrian Cole
@@ -40,21 +40,17 @@
 @Test(groups = "unit", testName = "ServerManagerContextBuilderTest")
 public class SmartOSManagerComputeServiceContextBuilderTest {
 
-
    @Test
    public void testCanBuildWithApiMetadata() {
-      ComputeServiceContext context = ContextBuilder.newBuilder(
-              new SmartOSApiMetadata())
-              .modules(ImmutableSet.<Module>of(getSshModule()))
-              .build(ComputeServiceContext.class);
+      ComputeServiceContext context = ContextBuilder.newBuilder(new SmartOSApiMetadata())
+               .modules(ImmutableSet.<Module> of(getSshModule())).build(ComputeServiceContext.class);
       context.close();
    }
 
    @Test
    public void testCanBuildById() {
       ComputeServiceContext context = ContextBuilder.newBuilder("smartos-ssh")
-              .modules(ImmutableSet.<Module>of(getSshModule()))
-              .build(ComputeServiceContext.class);
+               .modules(ImmutableSet.<Module> of(getSshModule())).build(ComputeServiceContext.class);
       context.close();
    }
 
@@ -65,8 +61,8 @@
       overrides.setProperty("smartos-ssh.api-version", "1");
 
       ComputeServiceContext context = ContextBuilder.newBuilder("smartos-ssh")
-              .modules(ImmutableSet.<Module>of(getSshModule()))
-              .overrides(overrides).build(ComputeServiceContext.class);
+               .modules(ImmutableSet.<Module> of(getSshModule())).overrides(overrides)
+               .build(ComputeServiceContext.class);
 
       context.close();
    }
@@ -74,15 +70,14 @@
    @Test
    public void testUnwrapIsCorrectType() {
       ComputeServiceContext context = ContextBuilder.newBuilder("smartos-ssh")
-              .modules(ImmutableSet.<Module>of(getSshModule()))
-              .build(ComputeServiceContext.class);
+               .modules(ImmutableSet.<Module> of(getSshModule())).build(ComputeServiceContext.class);
 
       assertEquals(context.unwrap().getClass(), ContextImpl.class);
 
       context.close();
    }
 
-    protected Module getSshModule() {
-        return new SshjSshClientModule();
-    }
+   protected Module getSshModule() {
+      return new SshjSshClientModule();
+   }
 }
diff --git a/labs/smartos-ssh/src/test/java/org/jclouds/smartos/compute/SmartOSManagerComputeServiceLiveTest.java b/labs/smartos-ssh/src/test/java/org/jclouds/smartos/compute/SmartOSManagerComputeServiceLiveTest.java
index df29de6..8cbc337 100644
--- a/labs/smartos-ssh/src/test/java/org/jclouds/smartos/compute/SmartOSManagerComputeServiceLiveTest.java
+++ b/labs/smartos-ssh/src/test/java/org/jclouds/smartos/compute/SmartOSManagerComputeServiceLiveTest.java
@@ -49,12 +49,11 @@
       assertEquals(getCores(defaultTemplate.getHardware()), 0.5d);
    }
 
-
    // smartos-ssh does not support metadata
    @Override
    protected void checkUserMetadataInNodeEquals(NodeMetadata node, ImmutableMap<String, String> userMetadata) {
       assert node.getUserMetadata().equals(ImmutableMap.<String, String> of()) : String.format(
-            "node userMetadata did not match %s %s", userMetadata, node);
+               "node userMetadata did not match %s %s", userMetadata, node);
    }
-   
+
 }
diff --git a/labs/smartos-ssh/src/test/java/org/jclouds/smartos/compute/domain/DataSetTest.java b/labs/smartos-ssh/src/test/java/org/jclouds/smartos/compute/domain/DataSetTest.java
index a64e92c..6699c6b 100644
--- a/labs/smartos-ssh/src/test/java/org/jclouds/smartos/compute/domain/DataSetTest.java
+++ b/labs/smartos-ssh/src/test/java/org/jclouds/smartos/compute/domain/DataSetTest.java
@@ -1,36 +1,39 @@
 package org.jclouds.smartos.compute.domain;
 
-import com.google.common.collect.ImmutableList;
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.util.List;
+import java.util.UUID;
+
 import org.testng.Assert;
 import org.testng.annotations.Test;
 
-import java.io.*;
-import java.util.List;
-import java.util.UUID;
+import com.google.common.collect.ImmutableList;
 
 @Test(groups = "unit", testName = "DataSetTest")
 public class DataSetTest {
 
-    @Test
-    public void testParse() throws IOException {
-        // Response from console from a 'dsadm list'
-        InputStream is = getClass().getResourceAsStream("dsadm-list-response.txt");
+   @Test
+   public void testParse() throws IOException {
+      // Response from console from a 'dsadm list'
+      InputStream is = getClass().getResourceAsStream("dsadm-list-response.txt");
 
-        BufferedReader r = new BufferedReader(new InputStreamReader(is));
-        String line = r.readLine(); // skip line
-        ImmutableList.Builder resultBuilder = ImmutableList.builder();
-        while ((line = r.readLine()) != null) {
-            DataSet ds = DataSet.builder().fromDsadmString(line).build();
+      BufferedReader r = new BufferedReader(new InputStreamReader(is));
+      String line = r.readLine(); // skip line
+      ImmutableList.Builder<DataSet> resultBuilder = ImmutableList.builder();
+      while ((line = r.readLine()) != null) {
+         DataSet ds = DataSet.builder().fromDsadmString(line).build();
 
-            resultBuilder.add(ds);
-        }
-        List<DataSet> dataSetList = resultBuilder.build();
+         resultBuilder.add(ds);
+      }
+      List<DataSet> dataSetList = resultBuilder.build();
 
-        Assert.assertEquals(10, dataSetList.size());
+      Assert.assertEquals(10, dataSetList.size());
 
-        Assert.assertEquals(UUID.fromString("c0ffee88-883e-47cf-80d1-ad71cc872180"), dataSetList.get(0).getUuid());
-        Assert.assertEquals("nrm:nrm:realtime-jenkins:1.7", dataSetList.get(0).getUrn());
+      Assert.assertEquals(UUID.fromString("c0ffee88-883e-47cf-80d1-ad71cc872180"), dataSetList.get(0).getUuid());
+      Assert.assertEquals("nrm:nrm:realtime-jenkins:1.7", dataSetList.get(0).getUrn());
 
-
-    }
+   }
 }
diff --git a/labs/smartos-ssh/src/test/java/org/jclouds/smartos/compute/domain/VMTest.java b/labs/smartos-ssh/src/test/java/org/jclouds/smartos/compute/domain/VMTest.java
index 3397c48..5cfa06a 100644
--- a/labs/smartos-ssh/src/test/java/org/jclouds/smartos/compute/domain/VMTest.java
+++ b/labs/smartos-ssh/src/test/java/org/jclouds/smartos/compute/domain/VMTest.java
@@ -1,9 +1,5 @@
 package org.jclouds.smartos.compute.domain;
 
-import com.google.common.collect.ImmutableList;
-import org.testng.Assert;
-import org.testng.annotations.Test;
-
 import java.io.BufferedReader;
 import java.io.IOException;
 import java.io.InputStream;
@@ -11,28 +7,33 @@
 import java.util.List;
 import java.util.UUID;
 
+import org.testng.Assert;
+import org.testng.annotations.Test;
+
+import com.google.common.collect.ImmutableList;
+
 @Test(groups = "unit", testName = "VMTest")
 public class VMTest {
 
-    @Test
-    public void testParse() throws IOException {
-        // Response from console from a 'vmadm list -p'
-        InputStream is = getClass().getResourceAsStream("vmadm-list-response.txt");
+   @Test
+   public void testParse() throws IOException {
+      // Response from console from a 'vmadm list -p'
+      InputStream is = getClass().getResourceAsStream("vmadm-list-response.txt");
 
-        BufferedReader r = new BufferedReader(new InputStreamReader(is));
-        String line = null;
-        ImmutableList.Builder resultBuilder = ImmutableList.builder();
-        while ((line = r.readLine()) != null) {
-            VM vm = VM.builder().fromVmadmString(line).build();
+      BufferedReader r = new BufferedReader(new InputStreamReader(is));
+      String line = null;
+      ImmutableList.Builder<VM> resultBuilder = ImmutableList.builder();
+      while ((line = r.readLine()) != null) {
+         VM vm = VM.builder().fromVmadmString(line).build();
 
-            resultBuilder.add(vm);
-        }
-        List<VM> vmList = resultBuilder.build();
+         resultBuilder.add(vm);
+      }
+      List<VM> vmList = resultBuilder.build();
 
-        Assert.assertEquals(2, vmList.size());
+      Assert.assertEquals(2, vmList.size());
 
-        Assert.assertEquals(UUID.fromString("60bd2ae5-4e4d-4952-88f9-1b850259d914"), vmList.get(0).getUuid());
-        Assert.assertEquals(VM.State.STOPPED, vmList.get(0).getState());
+      Assert.assertEquals(UUID.fromString("60bd2ae5-4e4d-4952-88f9-1b850259d914"), vmList.get(0).getUuid());
+      Assert.assertEquals(VM.State.STOPPED, vmList.get(0).getState());
 
-    }
+   }
 }
\ No newline at end of file
diff --git a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/CatalogAsyncApi.java b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/CatalogAsyncApi.java
index 93dce1d..c7e39b7 100644
--- a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/CatalogAsyncApi.java
+++ b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/CatalogAsyncApi.java
@@ -39,7 +39,7 @@
 import org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType;
 import org.jclouds.vcloud.director.v1_5.domain.Catalog;
 import org.jclouds.vcloud.director.v1_5.domain.CatalogItem;
-import org.jclouds.vcloud.director.v1_5.filters.AddVCloudAuthorizationToRequest;
+import org.jclouds.vcloud.director.v1_5.filters.AddVCloudAuthorizationAndCookieToRequest;
 
 import com.google.common.util.concurrent.ListenableFuture;
 
@@ -47,7 +47,7 @@
  * @see CatalogApi
  * @author grkvlt@apache.org
  */
-@RequestFilters(AddVCloudAuthorizationToRequest.class)
+@RequestFilters(AddVCloudAuthorizationAndCookieToRequest.class)
 public interface CatalogAsyncApi {
 
    /**
diff --git a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/MediaAsyncApi.java b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/MediaAsyncApi.java
index 3fbec87..92490bf 100644
--- a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/MediaAsyncApi.java
+++ b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/MediaAsyncApi.java
@@ -41,7 +41,7 @@
 import org.jclouds.vcloud.director.v1_5.domain.Owner;
 import org.jclouds.vcloud.director.v1_5.domain.Task;
 import org.jclouds.vcloud.director.v1_5.domain.params.CloneMediaParams;
-import org.jclouds.vcloud.director.v1_5.filters.AddVCloudAuthorizationToRequest;
+import org.jclouds.vcloud.director.v1_5.filters.AddVCloudAuthorizationAndCookieToRequest;
 
 import com.google.common.util.concurrent.ListenableFuture;
 
@@ -49,7 +49,7 @@
  * @see MediaApi
  * @author danikov
  */
-@RequestFilters(AddVCloudAuthorizationToRequest.class)
+@RequestFilters(AddVCloudAuthorizationAndCookieToRequest.class)
 public interface MediaAsyncApi {
 
    /**
diff --git a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/MetadataAsyncApi.java b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/MetadataAsyncApi.java
index df5b028..cd1d98e 100644
--- a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/MetadataAsyncApi.java
+++ b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/MetadataAsyncApi.java
@@ -40,7 +40,7 @@
 import org.jclouds.vcloud.director.v1_5.domain.Metadata;
 import org.jclouds.vcloud.director.v1_5.domain.MetadataValue;
 import org.jclouds.vcloud.director.v1_5.domain.Task;
-import org.jclouds.vcloud.director.v1_5.filters.AddVCloudAuthorizationToRequest;
+import org.jclouds.vcloud.director.v1_5.filters.AddVCloudAuthorizationAndCookieToRequest;
 
 import com.google.common.util.concurrent.ListenableFuture;
 
@@ -50,7 +50,7 @@
  */
 public interface MetadataAsyncApi {
 
-   @RequestFilters(AddVCloudAuthorizationToRequest.class)
+   @RequestFilters(AddVCloudAuthorizationAndCookieToRequest.class)
    public static interface Readable extends MetadataAsyncApi {
 
       /**
@@ -74,7 +74,7 @@
       ListenableFuture<MetadataValue> getMetadataValue(@EndpointParam URI metaDataUri, @PathParam("key") String key);
    }
    
-   @RequestFilters(AddVCloudAuthorizationToRequest.class)
+   @RequestFilters(AddVCloudAuthorizationAndCookieToRequest.class)
    public static interface Writeable extends Readable {
 
       /**
diff --git a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/NetworkAsyncApi.java b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/NetworkAsyncApi.java
index 65bbd3c..49de11a 100644
--- a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/NetworkAsyncApi.java
+++ b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/NetworkAsyncApi.java
@@ -30,7 +30,7 @@
 import org.jclouds.rest.annotations.RequestFilters;
 import org.jclouds.rest.functions.ReturnNullOnNotFoundOr404;
 import org.jclouds.vcloud.director.v1_5.domain.network.Network;
-import org.jclouds.vcloud.director.v1_5.filters.AddVCloudAuthorizationToRequest;
+import org.jclouds.vcloud.director.v1_5.filters.AddVCloudAuthorizationAndCookieToRequest;
 
 import com.google.common.util.concurrent.ListenableFuture;
 
@@ -38,7 +38,7 @@
  * @see NetworkApi
  * @author danikov
  */
-@RequestFilters(AddVCloudAuthorizationToRequest.class)
+@RequestFilters(AddVCloudAuthorizationAndCookieToRequest.class)
 public interface NetworkAsyncApi {
 
    /**
diff --git a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/OrgAsyncApi.java b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/OrgAsyncApi.java
index 3295367..eb776ac 100644
--- a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/OrgAsyncApi.java
+++ b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/OrgAsyncApi.java
@@ -40,7 +40,7 @@
 import org.jclouds.vcloud.director.v1_5.domain.org.Org;
 import org.jclouds.vcloud.director.v1_5.domain.org.OrgList;
 import org.jclouds.vcloud.director.v1_5.domain.params.ControlAccessParams;
-import org.jclouds.vcloud.director.v1_5.filters.AddVCloudAuthorizationToRequest;
+import org.jclouds.vcloud.director.v1_5.filters.AddVCloudAuthorizationAndCookieToRequest;
 
 import com.google.common.util.concurrent.ListenableFuture;
 
@@ -48,7 +48,7 @@
  * @see OrgApi
  * @author Adrian Cole
  */
-@RequestFilters(AddVCloudAuthorizationToRequest.class)
+@RequestFilters(AddVCloudAuthorizationAndCookieToRequest.class)
 public interface OrgAsyncApi {
 
    /**
diff --git a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/QueryAsyncApi.java b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/QueryAsyncApi.java
index 6daf91d..235de87 100644
--- a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/QueryAsyncApi.java
+++ b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/QueryAsyncApi.java
@@ -36,7 +36,7 @@
 import org.jclouds.vcloud.director.v1_5.domain.query.QueryList;
 import org.jclouds.vcloud.director.v1_5.domain.query.QueryResultRecords;
 import org.jclouds.vcloud.director.v1_5.domain.query.VAppReferences;
-import org.jclouds.vcloud.director.v1_5.filters.AddVCloudAuthorizationToRequest;
+import org.jclouds.vcloud.director.v1_5.filters.AddVCloudAuthorizationAndCookieToRequest;
 
 import com.google.common.util.concurrent.ListenableFuture;
 
@@ -44,7 +44,7 @@
  * @see QueryApi
  * @author grkvlt@apache.org
  */
-@RequestFilters(AddVCloudAuthorizationToRequest.class)
+@RequestFilters(AddVCloudAuthorizationAndCookieToRequest.class)
 @SkipEncoding({ '=' })
 public interface QueryAsyncApi {
 
diff --git a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/TaskAsyncApi.java b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/TaskAsyncApi.java
index e61634a..ee112d5 100644
--- a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/TaskAsyncApi.java
+++ b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/TaskAsyncApi.java
@@ -32,7 +32,7 @@
 import org.jclouds.rest.functions.ReturnNullOnNotFoundOr404;
 import org.jclouds.vcloud.director.v1_5.domain.Task;
 import org.jclouds.vcloud.director.v1_5.domain.TasksList;
-import org.jclouds.vcloud.director.v1_5.filters.AddVCloudAuthorizationToRequest;
+import org.jclouds.vcloud.director.v1_5.filters.AddVCloudAuthorizationAndCookieToRequest;
 import org.jclouds.vcloud.director.v1_5.functions.OrgReferenceToTaskListEndpoint;
 
 import com.google.common.util.concurrent.ListenableFuture;
@@ -41,7 +41,7 @@
  * @see TaskApi
  * @author grkvlt@apache.org
  */
-@RequestFilters(AddVCloudAuthorizationToRequest.class)
+@RequestFilters(AddVCloudAuthorizationAndCookieToRequest.class)
 public interface TaskAsyncApi {
 
    /**
diff --git a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/UploadAsyncApi.java b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/UploadAsyncApi.java
index 8f62253..8419143 100644
--- a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/UploadAsyncApi.java
+++ b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/UploadAsyncApi.java
@@ -25,7 +25,7 @@
 import org.jclouds.io.Payload;
 import org.jclouds.rest.annotations.EndpointParam;
 import org.jclouds.rest.annotations.RequestFilters;
-import org.jclouds.vcloud.director.v1_5.filters.AddVCloudAuthorizationToRequest;
+import org.jclouds.vcloud.director.v1_5.filters.AddVCloudAuthorizationAndCookieToRequest;
 
 import com.google.common.util.concurrent.ListenableFuture;
 
@@ -33,7 +33,7 @@
  * @see UploadApi
  * @author danikov
  */
-@RequestFilters(AddVCloudAuthorizationToRequest.class)
+@RequestFilters(AddVCloudAuthorizationAndCookieToRequest.class)
 public interface UploadAsyncApi {
 
    /**
diff --git a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/VAppAsyncApi.java b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/VAppAsyncApi.java
index 60854aa..ac3c112 100644
--- a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/VAppAsyncApi.java
+++ b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/VAppAsyncApi.java
@@ -60,7 +60,7 @@
 import org.jclouds.vcloud.director.v1_5.domain.params.UndeployVAppParams;
 import org.jclouds.vcloud.director.v1_5.domain.section.LeaseSettingsSection;
 import org.jclouds.vcloud.director.v1_5.domain.section.NetworkConfigSection;
-import org.jclouds.vcloud.director.v1_5.filters.AddVCloudAuthorizationToRequest;
+import org.jclouds.vcloud.director.v1_5.filters.AddVCloudAuthorizationAndCookieToRequest;
 
 import com.google.common.util.concurrent.ListenableFuture;
 
@@ -68,7 +68,7 @@
  * @author grkvlt@apache.org
  * @see VAppApi
  */
-@RequestFilters(AddVCloudAuthorizationToRequest.class)
+@RequestFilters(AddVCloudAuthorizationAndCookieToRequest.class)
 public interface VAppAsyncApi {
 
    /**
diff --git a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/VAppTemplateAsyncApi.java b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/VAppTemplateAsyncApi.java
index 5fedc5e..0e0826a 100644
--- a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/VAppTemplateAsyncApi.java
+++ b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/VAppTemplateAsyncApi.java
@@ -61,7 +61,7 @@
 import org.jclouds.vcloud.director.v1_5.domain.section.LeaseSettingsSection;
 import org.jclouds.vcloud.director.v1_5.domain.section.NetworkConfigSection;
 import org.jclouds.vcloud.director.v1_5.domain.section.NetworkConnectionSection;
-import org.jclouds.vcloud.director.v1_5.filters.AddVCloudAuthorizationToRequest;
+import org.jclouds.vcloud.director.v1_5.filters.AddVCloudAuthorizationAndCookieToRequest;
 
 import com.google.common.util.concurrent.ListenableFuture;
 
@@ -69,7 +69,7 @@
  * @author Adam Lowe
  * @see org.jclouds.vcloud.director.v1_5.features.VAppTemplateApi
  */
-@RequestFilters(AddVCloudAuthorizationToRequest.class)
+@RequestFilters(AddVCloudAuthorizationAndCookieToRequest.class)
 public interface VAppTemplateAsyncApi {
 
    /**
diff --git a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/VdcAsyncApi.java b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/VdcAsyncApi.java
index 9cab4c6..9e0cdaa 100644
--- a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/VdcAsyncApi.java
+++ b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/VdcAsyncApi.java
@@ -46,7 +46,7 @@
 import org.jclouds.vcloud.director.v1_5.domain.params.ComposeVAppParams;
 import org.jclouds.vcloud.director.v1_5.domain.params.InstantiateVAppParams;
 import org.jclouds.vcloud.director.v1_5.domain.params.UploadVAppTemplateParams;
-import org.jclouds.vcloud.director.v1_5.filters.AddVCloudAuthorizationToRequest;
+import org.jclouds.vcloud.director.v1_5.filters.AddVCloudAuthorizationAndCookieToRequest;
 
 import com.google.common.util.concurrent.ListenableFuture;
  
@@ -54,7 +54,7 @@
  * @see VdcApi
  * @author danikov
  */
-@RequestFilters(AddVCloudAuthorizationToRequest.class)
+@RequestFilters(AddVCloudAuthorizationAndCookieToRequest.class)
 public interface VdcAsyncApi {
  
    /**
diff --git a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/VmAsyncApi.java b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/VmAsyncApi.java
index e2aea6b..0e958a1 100644
--- a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/VmAsyncApi.java
+++ b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/VmAsyncApi.java
@@ -70,7 +70,7 @@
 import org.jclouds.vcloud.director.v1_5.domain.section.OperatingSystemSection;
 import org.jclouds.vcloud.director.v1_5.domain.section.RuntimeInfoSection;
 import org.jclouds.vcloud.director.v1_5.domain.section.VirtualHardwareSection;
-import org.jclouds.vcloud.director.v1_5.filters.AddVCloudAuthorizationToRequest;
+import org.jclouds.vcloud.director.v1_5.filters.AddVCloudAuthorizationAndCookieToRequest;
 import org.jclouds.vcloud.director.v1_5.functions.ReturnPayloadBytes;
 
 import com.google.common.util.concurrent.ListenableFuture;
@@ -79,7 +79,7 @@
  * @author grkvlt@apache.org
  * @see VmApi
  */
-@RequestFilters(AddVCloudAuthorizationToRequest.class)
+@RequestFilters(AddVCloudAuthorizationAndCookieToRequest.class)
 public interface VmAsyncApi {
 
    /**
diff --git a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/admin/AdminCatalogAsyncApi.java b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/admin/AdminCatalogAsyncApi.java
index 7efb63a..239a6a1 100644
--- a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/admin/AdminCatalogAsyncApi.java
+++ b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/admin/AdminCatalogAsyncApi.java
@@ -42,7 +42,7 @@
 import org.jclouds.vcloud.director.v1_5.domain.params.PublishCatalogParams;
 import org.jclouds.vcloud.director.v1_5.features.CatalogAsyncApi;
 import org.jclouds.vcloud.director.v1_5.features.MetadataAsyncApi;
-import org.jclouds.vcloud.director.v1_5.filters.AddVCloudAuthorizationToRequest;
+import org.jclouds.vcloud.director.v1_5.filters.AddVCloudAuthorizationAndCookieToRequest;
 
 import com.google.common.util.concurrent.ListenableFuture;
 
@@ -50,7 +50,7 @@
  * @see AdminCatalogApi
  * @author danikov
  */
-@RequestFilters(AddVCloudAuthorizationToRequest.class)
+@RequestFilters(AddVCloudAuthorizationAndCookieToRequest.class)
 public interface AdminCatalogAsyncApi extends CatalogAsyncApi {
    
    /**
diff --git a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/admin/AdminNetworkAsyncApi.java b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/admin/AdminNetworkAsyncApi.java
index f3f9922..76afd03 100644
--- a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/admin/AdminNetworkAsyncApi.java
+++ b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/admin/AdminNetworkAsyncApi.java
@@ -41,7 +41,7 @@
 import org.jclouds.vcloud.director.v1_5.domain.org.OrgNetwork;
 import org.jclouds.vcloud.director.v1_5.features.MetadataAsyncApi;
 import org.jclouds.vcloud.director.v1_5.features.NetworkAsyncApi;
-import org.jclouds.vcloud.director.v1_5.filters.AddVCloudAuthorizationToRequest;
+import org.jclouds.vcloud.director.v1_5.filters.AddVCloudAuthorizationAndCookieToRequest;
 
 import com.google.common.util.concurrent.ListenableFuture;
 
@@ -49,7 +49,7 @@
  * @see AdminNetworkApi
  * @author danikov
  */
-@RequestFilters(AddVCloudAuthorizationToRequest.class)
+@RequestFilters(AddVCloudAuthorizationAndCookieToRequest.class)
 public interface AdminNetworkAsyncApi extends NetworkAsyncApi {
    
    /**
diff --git a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/admin/AdminOrgAsyncApi.java b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/admin/AdminOrgAsyncApi.java
index 3a77710..2cdc111 100644
--- a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/admin/AdminOrgAsyncApi.java
+++ b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/admin/AdminOrgAsyncApi.java
@@ -45,7 +45,7 @@
 import org.jclouds.vcloud.director.v1_5.domain.org.OrgVAppTemplateLeaseSettings;
 import org.jclouds.vcloud.director.v1_5.features.MetadataAsyncApi;
 import org.jclouds.vcloud.director.v1_5.features.OrgAsyncApi;
-import org.jclouds.vcloud.director.v1_5.filters.AddVCloudAuthorizationToRequest;
+import org.jclouds.vcloud.director.v1_5.filters.AddVCloudAuthorizationAndCookieToRequest;
 
 import com.google.common.util.concurrent.ListenableFuture;
 
@@ -53,7 +53,7 @@
  * @see AdminOrgApi
  * @author danikov
  */
-@RequestFilters(AddVCloudAuthorizationToRequest.class)
+@RequestFilters(AddVCloudAuthorizationAndCookieToRequest.class)
 public interface AdminOrgAsyncApi extends OrgAsyncApi {
    
    /**
diff --git a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/admin/AdminQueryAsyncApi.java b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/admin/AdminQueryAsyncApi.java
index 2ce2251..c333c1d 100644
--- a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/admin/AdminQueryAsyncApi.java
+++ b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/admin/AdminQueryAsyncApi.java
@@ -32,7 +32,7 @@
 import org.jclouds.vcloud.director.v1_5.domain.RoleReferences;
 import org.jclouds.vcloud.director.v1_5.domain.query.QueryResultRecords;
 import org.jclouds.vcloud.director.v1_5.features.QueryAsyncApi;
-import org.jclouds.vcloud.director.v1_5.filters.AddVCloudAuthorizationToRequest;
+import org.jclouds.vcloud.director.v1_5.filters.AddVCloudAuthorizationAndCookieToRequest;
 
 import com.google.common.util.concurrent.ListenableFuture;
 
@@ -42,7 +42,7 @@
  * @see AdminQueryApi
  * @author Aled Sage
  */
-@RequestFilters(AddVCloudAuthorizationToRequest.class)
+@RequestFilters(AddVCloudAuthorizationAndCookieToRequest.class)
 @Timeout(duration = 180, timeUnit = TimeUnit.SECONDS)
 public interface AdminQueryAsyncApi extends QueryAsyncApi {
    
diff --git a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/admin/AdminVdcAsyncApi.java b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/admin/AdminVdcAsyncApi.java
index b7726ec..1d3778b 100644
--- a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/admin/AdminVdcAsyncApi.java
+++ b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/admin/AdminVdcAsyncApi.java
@@ -39,7 +39,7 @@
 import org.jclouds.vcloud.director.v1_5.domain.Task;
 import org.jclouds.vcloud.director.v1_5.features.MetadataAsyncApi;
 import org.jclouds.vcloud.director.v1_5.features.VdcAsyncApi;
-import org.jclouds.vcloud.director.v1_5.filters.AddVCloudAuthorizationToRequest;
+import org.jclouds.vcloud.director.v1_5.filters.AddVCloudAuthorizationAndCookieToRequest;
 
 import com.google.common.util.concurrent.ListenableFuture;
 
@@ -47,7 +47,7 @@
  * @see AdminVdcApi
  * @author danikov
  */
-@RequestFilters(AddVCloudAuthorizationToRequest.class)
+@RequestFilters(AddVCloudAuthorizationAndCookieToRequest.class)
 public interface AdminVdcAsyncApi extends VdcAsyncApi {
    
    @Override
diff --git a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/admin/GroupAsyncApi.java b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/admin/GroupAsyncApi.java
index 52e2a9d..f9653c7 100644
--- a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/admin/GroupAsyncApi.java
+++ b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/admin/GroupAsyncApi.java
@@ -37,7 +37,7 @@
 import org.jclouds.rest.functions.ReturnNullOnNotFoundOr404;
 import org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType;
 import org.jclouds.vcloud.director.v1_5.domain.Group;
-import org.jclouds.vcloud.director.v1_5.filters.AddVCloudAuthorizationToRequest;
+import org.jclouds.vcloud.director.v1_5.filters.AddVCloudAuthorizationAndCookieToRequest;
 
 import com.google.common.util.concurrent.ListenableFuture;
    
@@ -45,7 +45,7 @@
  * @see GroupApi
  * @author danikov
  */
-@RequestFilters(AddVCloudAuthorizationToRequest.class)
+@RequestFilters(AddVCloudAuthorizationAndCookieToRequest.class)
 public interface GroupAsyncApi {
    
    @POST
diff --git a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/admin/UserAsyncApi.java b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/admin/UserAsyncApi.java
index a49c310..c59c8b7 100644
--- a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/admin/UserAsyncApi.java
+++ b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/admin/UserAsyncApi.java
@@ -37,7 +37,7 @@
 import org.jclouds.rest.functions.ReturnNullOnNotFoundOr404;
 import org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType;
 import org.jclouds.vcloud.director.v1_5.domain.User;
-import org.jclouds.vcloud.director.v1_5.filters.AddVCloudAuthorizationToRequest;
+import org.jclouds.vcloud.director.v1_5.filters.AddVCloudAuthorizationAndCookieToRequest;
 
 import com.google.common.util.concurrent.ListenableFuture;
    
@@ -45,7 +45,7 @@
  * @see UserApi
  * @author danikov
  */
-@RequestFilters(AddVCloudAuthorizationToRequest.class)
+@RequestFilters(AddVCloudAuthorizationAndCookieToRequest.class)
 public interface UserAsyncApi {
 
    /**
diff --git a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/filters/AddVCloudAuthorizationAndCookieToRequest.java b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/filters/AddVCloudAuthorizationAndCookieToRequest.java
new file mode 100644
index 0000000..2f52c3d
--- /dev/null
+++ b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/filters/AddVCloudAuthorizationAndCookieToRequest.java
@@ -0,0 +1,39 @@
+package org.jclouds.vcloud.director.v1_5.filters;
+
+import javax.inject.Inject;
+import javax.inject.Singleton;
+import javax.ws.rs.core.HttpHeaders;
+
+import org.jclouds.http.HttpException;
+import org.jclouds.http.HttpRequest;
+import org.jclouds.http.HttpRequestFilter;
+import org.jclouds.vcloud.director.v1_5.annotations.Session;
+
+import com.google.common.base.Supplier;
+import com.google.common.collect.ImmutableMultimap;
+
+/**
+ * 
+ * @author Adrian Cole
+ */
+@Singleton
+public class AddVCloudAuthorizationAndCookieToRequest implements HttpRequestFilter {
+
+   private final Supplier<String> sessionSupplier;
+
+   @Inject
+   public AddVCloudAuthorizationAndCookieToRequest(@Session Supplier<String> sessionSupplier) {
+      this.sessionSupplier = sessionSupplier;
+   }
+
+   @Override
+   public HttpRequest filter(HttpRequest request) throws HttpException {
+      String token = sessionSupplier.get();
+      return request
+               .toBuilder()
+               .replaceHeaders(
+                        ImmutableMultimap.of("x-vcloud-authorization", token, HttpHeaders.COOKIE, "vcloud-token="
+                                 + token)).build();
+   }
+
+}
diff --git a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/filters/AddVCloudAuthorizationToRequest.java b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/filters/AddVCloudAuthorizationToRequest.java
deleted file mode 100644
index 45bc37f..0000000
--- a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/filters/AddVCloudAuthorizationToRequest.java
+++ /dev/null
@@ -1,32 +0,0 @@
-package org.jclouds.vcloud.director.v1_5.filters;
-
-import javax.inject.Inject;
-import javax.inject.Singleton;
-
-import org.jclouds.http.HttpException;
-import org.jclouds.http.HttpRequest;
-import org.jclouds.http.HttpRequestFilter;
-import org.jclouds.vcloud.director.v1_5.annotations.Session;
-
-import com.google.common.base.Supplier;
-
-/**
- * 
- * @author Adrian Cole
- */
-@Singleton
-public class AddVCloudAuthorizationToRequest implements HttpRequestFilter {
-
-   private final Supplier<String> sessionSupplier;
-
-   @Inject
-   public AddVCloudAuthorizationToRequest(@Session Supplier<String> sessionSupplier) {
-      this.sessionSupplier = sessionSupplier;
-   }
-
-   @Override
-   public HttpRequest filter(HttpRequest request) throws HttpException {
-      return request.toBuilder().replaceHeader("x-vcloud-authorization", sessionSupplier.get()).build();
-   }
-
-}
diff --git a/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/HttpClientLiveTest.java b/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/HttpClientLiveTest.java
index 3153f16..b7d66ea 100644
--- a/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/HttpClientLiveTest.java
+++ b/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/HttpClientLiveTest.java
@@ -83,7 +83,7 @@
       assertTrue(sessionWithToken.getSession().getLinks().size() > 0);
       assertNotNull(sessionWithToken.getToken());
 
-      OrgList orgList = parser.fromXML(Strings2.toStringAndClose(response.getPayload().getInput()), OrgList.class);
+      OrgList orgList = parser.fromXML(Strings2.toString(response.getPayload()), OrgList.class);
 
       assertTrue(orgList.getOrgs().size() > 0, "must have orgs");
 
@@ -99,7 +99,7 @@
             .addHeader("x-vcloud-authorization", sessionWithToken.getToken())
             .addHeader("Accept", "*/*").build());
 
-      String schema = Strings2.toStringAndClose(response.getPayload().getInput());
+      String schema = Strings2.toString(response.getPayload());
 
       // TODO: asserting something about the schema
    }
diff --git a/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/features/CatalogApiExpectTest.java b/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/features/CatalogApiExpectTest.java
index cac805a..d5a9718 100644
--- a/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/features/CatalogApiExpectTest.java
+++ b/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/features/CatalogApiExpectTest.java
@@ -38,6 +38,7 @@
 import org.testng.annotations.Test;
 
 import com.google.common.collect.ImmutableSet;
+import com.google.common.net.HttpHeaders;
 
 /**
  * Test the {@link CatalogApi} by observing its side effects.
@@ -53,7 +54,9 @@
               .method("GET")
               .endpoint(endpoint + "/catalog/7212e451-76e1-4631-b2de-ba1dfd8080e4")
               .addHeader("Accept", "*/*")
-              .addHeader("x-vcloud-authorization", token).build();
+              .addHeader("x-vcloud-authorization", token)
+              .addHeader(HttpHeaders.COOKIE, "vcloud-token=" + token)
+              .build();
 
       HttpResponse catalogResponse = HttpResponse.builder()
               .statusCode(200)
@@ -75,6 +78,7 @@
             .endpoint(endpoint + "/catalog/7212e451-76e1-4631-b2de-ba1dfd8080e4/catalogItems")
             .addHeader("Accept", "application/vnd.vmware.vcloud.catalogItem+xml")
             .addHeader("x-vcloud-authorization", token)
+            .addHeader(HttpHeaders.COOKIE, "vcloud-token=" + token)
             .payload(payloadFromResourceWithContentType("/catalog/newCatalogItem.xml", VCloudDirectorMediaType.CATALOG_ITEM))
             .build();
 
@@ -105,7 +109,7 @@
             .endpoint(endpoint + "/catalog/7212e451-76e1-4631-b2de-ba1dfd8080e4/metadata")
             .addHeader("Accept", "*/*")
             .addHeader("x-vcloud-authorization", token)
-            .build();
+            .addHeader(HttpHeaders.COOKIE, "vcloud-token=" + token).build();
 
       HttpResponse catalogResponse = HttpResponse.builder()
               .statusCode(200)
@@ -137,7 +141,7 @@
             .endpoint(endpoint + "/catalog/7212e451-76e1-4631-b2de-ba1dfd8080e4/metadata/KEY")
             .addHeader("Accept", "*/*")
             .addHeader("x-vcloud-authorization", token)
-            .build();
+            .addHeader(HttpHeaders.COOKIE, "vcloud-token=" + token).build();
 
       HttpResponse catalogResponse = HttpResponse.builder()
               .statusCode(200)
@@ -160,7 +164,7 @@
             .endpoint(endpoint + "/catalogItem/a36fdac9-b8c2-43e2-9a4c-2ffaf3ee13df")
             .addHeader("Accept", "*/*")
             .addHeader("x-vcloud-authorization", token)
-            .build();
+            .addHeader(HttpHeaders.COOKIE, "vcloud-token=" + token).build();
 
       HttpResponse catalogItemResponse = HttpResponse.builder()
               .statusCode(200)
@@ -183,6 +187,7 @@
             .endpoint(endpoint + "/catalogItem/a36fdac9-b8c2-43e2-9a4c-2ffaf3ee13df")
             .addHeader("Accept", "application/vnd.vmware.vcloud.catalogItem+xml")
             .addHeader("x-vcloud-authorization", token)
+            .addHeader(HttpHeaders.COOKIE, "vcloud-token=" + token)
             .payload(payloadFromResourceWithContentType("/catalog/updateCatalogItem.xml", VCloudDirectorMediaType.CATALOG_ITEM))
             .build();
 
@@ -206,7 +211,7 @@
             .endpoint(endpoint + "/catalogItem/a36fdac9-b8c2-43e2-9a4c-2ffaf3ee13df")
             .addHeader("Accept", "*/*")
             .addHeader("x-vcloud-authorization", token)
-            .build();
+            .addHeader(HttpHeaders.COOKIE, "vcloud-token=" + token).build();
 
       HttpResponse catalogItemResponse = HttpResponse.builder()
             .statusCode(200)
@@ -226,7 +231,7 @@
             .endpoint(endpoint + "/catalogItem/a36fdac9-b8c2-43e2-9a4c-2ffaf3ee13df/metadata")
             .addHeader("Accept", "*/*")
             .addHeader("x-vcloud-authorization", token)
-            .build();
+            .addHeader(HttpHeaders.COOKIE, "vcloud-token=" + token).build();
 
       HttpResponse catalogItemResponse = HttpResponse.builder()
               .statusCode(200)
@@ -258,6 +263,7 @@
             .endpoint(endpoint + "/catalogItem/a36fdac9-b8c2-43e2-9a4c-2ffaf3ee13df/metadata")
             .addHeader("Accept", "application/vnd.vmware.vcloud.task+xml")
             .addHeader("x-vcloud-authorization", token)
+            .addHeader(HttpHeaders.COOKIE, "vcloud-token=" + token)
             .payload(payloadFromResourceWithContentType("/catalog/mergeCatalogItemMetadata.xml", VCloudDirectorMediaType.METADATA))
             .build();
 
@@ -284,7 +290,7 @@
             .endpoint(endpoint + "/catalogItem/a36fdac9-b8c2-43e2-9a4c-2ffaf3ee13df/metadata/KEY")
             .addHeader("Accept", "*/*")
             .addHeader("x-vcloud-authorization", token)
-            .build();
+            .addHeader(HttpHeaders.COOKIE, "vcloud-token=" + token).build();
 
       HttpResponse catalogItemResponse = HttpResponse.builder()
               .statusCode(200)
@@ -307,6 +313,7 @@
             .endpoint(endpoint + "/catalogItem/a36fdac9-b8c2-43e2-9a4c-2ffaf3ee13df/metadata/KEY")
             .addHeader("Accept", "application/vnd.vmware.vcloud.task+xml")
             .addHeader("x-vcloud-authorization", token)
+            .addHeader(HttpHeaders.COOKIE, "vcloud-token=" + token)
             .payload(payloadFromResourceWithContentType("/catalog/setCatalogItemMetadataValue.xml", VCloudDirectorMediaType.METADATA_VALUE))
             .build();
 
@@ -333,7 +340,7 @@
             .endpoint(endpoint + "/catalogItem/a36fdac9-b8c2-43e2-9a4c-2ffaf3ee13df/metadata/KEY")
             .addHeader("Accept", "application/vnd.vmware.vcloud.task+xml")
             .addHeader("x-vcloud-authorization", token)
-            .build();
+            .addHeader(HttpHeaders.COOKIE, "vcloud-token=" + token).build();
 
       HttpResponse catalogItemResponse = HttpResponse.builder()
             .statusCode(200)
diff --git a/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/features/MediaApiLiveTest.java b/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/features/MediaApiLiveTest.java
index a525023..7bc33c6 100644
--- a/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/features/MediaApiLiveTest.java
+++ b/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/features/MediaApiLiveTest.java
@@ -151,7 +151,7 @@
       assertTrue(media.getFiles().size() == 1, String.format(OBJ_FIELD_LIST_SIZE_EQ, MEDIA, "files", 1, media.getFiles().size()));
       File uploadFile = getFirst(media.getFiles(), null);
       assertNotNull(uploadFile, String.format(OBJ_FIELD_REQ, MEDIA, "files.first"));
-      assertEquals(uploadFile.getSize(), new Long(iso.length));
+      assertEquals(uploadFile.getSize(), Long.valueOf(iso.length));
       assertEquals(uploadFile.getSize().longValue(), sourceMedia.getSize(),
             String.format(OBJ_FIELD_EQ, MEDIA, "uploadFile.size()", sourceMedia.getSize(), uploadFile.getSize()));
       
diff --git a/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/features/QueryApiExpectTest.java b/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/features/QueryApiExpectTest.java
index 50e732c..dad3778 100644
--- a/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/features/QueryApiExpectTest.java
+++ b/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/features/QueryApiExpectTest.java
@@ -22,6 +22,8 @@
 
 import java.net.URI;
 
+import javax.ws.rs.core.HttpHeaders;
+
 import org.jclouds.http.HttpRequest;
 import org.jclouds.http.HttpResponse;
 import org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType;
@@ -48,8 +50,8 @@
               .method("GET")
               .endpoint(endpoint + "/catalogs/query")
               .addHeader("Accept", "*/*")
-            .addHeader("x-vcloud-authorization", token)
-
+              .addHeader("x-vcloud-authorization", token)
+              .addHeader(HttpHeaders.COOKIE, "vcloud-token=" + token)
               .build();
 
       HttpResponse queryResponse= HttpResponse.builder()
@@ -123,7 +125,9 @@
               .method("GET")
               .endpoint(endpoint + "/catalogs/query?format=references")
               .addHeader("Accept", "*/*")
-              .addHeader("x-vcloud-authorization", token).build();
+              .addHeader("x-vcloud-authorization", token)
+              .addHeader(HttpHeaders.COOKIE, "vcloud-token=" + token)
+              .build();
 
       HttpResponse queryResponse= HttpResponse.builder()
               .statusCode(200)
diff --git a/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/features/TaskApiExpectTest.java b/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/features/TaskApiExpectTest.java
index e435c2c..26e3143 100644
--- a/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/features/TaskApiExpectTest.java
+++ b/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/features/TaskApiExpectTest.java
@@ -24,6 +24,8 @@
 
 import java.net.URI;
 
+import javax.ws.rs.core.HttpHeaders;
+
 import org.jclouds.http.HttpRequest;
 import org.jclouds.http.HttpResponse;
 import org.jclouds.vcloud.director.v1_5.VCloudDirectorException;
@@ -51,7 +53,7 @@
               .endpoint(endpoint + "/tasksList/6f312e42-cd2b-488d-a2bb-97519cd57ed0")
               .addHeader("Accept", "*/*")
               .addHeader("x-vcloud-authorization", token)
-              .build();
+              .addHeader(HttpHeaders.COOKIE, "vcloud-token=" + token).build();
 
       HttpResponse taskResponse = HttpResponse.builder()
               .statusCode(200)
@@ -62,7 +64,7 @@
             .endpoint(endpoint + "/org/6f312e42-cd2b-488d-a2bb-97519cd57ed0")
             .addHeader("Accept", "*/*")
             .addHeader("x-vcloud-authorization", token)
-            .build();
+            .addHeader(HttpHeaders.COOKIE, "vcloud-token=" + token).build();
 
 		HttpResponse orgResponse = HttpResponse.builder()
             .statusCode(200)
@@ -95,7 +97,7 @@
             .endpoint(endpoint + "/org/NOTAUUID")
             .addHeader("Accept", "*/*")
             .addHeader("x-vcloud-authorization", token)
-            .build();
+            .addHeader(HttpHeaders.COOKIE, "vcloud-token=" + token).build();
 
       HttpResponse orgResponse = HttpResponse.builder()
             .statusCode(400)
@@ -126,7 +128,7 @@
             .endpoint(endpoint + "/tasksList/aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee")
             .addHeader("Accept", "*/*")
             .addHeader("x-vcloud-authorization", token)
-            .build();
+            .addHeader(HttpHeaders.COOKIE, "vcloud-token=" + token).build();
 
       HttpResponse taskResponse = HttpResponse.builder().build();
       
@@ -134,7 +136,7 @@
             .endpoint(endpoint + "/org/aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee")
             .addHeader("Accept", "*/*")
             .addHeader("x-vcloud-authorization", token)
-            .build();
+            .addHeader(HttpHeaders.COOKIE, "vcloud-token=" + token).build();
 
       HttpResponse orgResponse = HttpResponse.builder()
             .statusCode(403)
@@ -152,7 +154,8 @@
               .method("GET")
               .endpoint(endpoint + "/task/5fcd2af3-d0ec-45ce-9451-8c585a2c766b")
               .addHeader("Accept", "*/*")
-              .addHeader("x-vcloud-authorization", token).build();
+              .addHeader("x-vcloud-authorization", token)
+              .addHeader(HttpHeaders.COOKIE, "vcloud-token=" + token).build();
 
       HttpResponse taskResponse = HttpResponse.builder()
               .statusCode(200)
@@ -175,7 +178,8 @@
             .method("POST")
             .endpoint(endpoint + "/task/5fcd2af3-d0ec-45ce-9451-8c585a2c766b/action/cancel")
             .addHeader("Accept", "*/*")
-            .addHeader("x-vcloud-authorization", token).build();
+            .addHeader("x-vcloud-authorization", token)
+            .addHeader(HttpHeaders.COOKIE, "vcloud-token=" + token).build();
 
       HttpResponse taskResponse = HttpResponse.builder()
             .statusCode(200)
diff --git a/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/features/admin/AdminQueryApiExpectTest.java b/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/features/admin/AdminQueryApiExpectTest.java
index fc0f277..b3ca529 100644
--- a/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/features/admin/AdminQueryApiExpectTest.java
+++ b/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/features/admin/AdminQueryApiExpectTest.java
@@ -22,6 +22,8 @@
 
 import java.net.URI;
 
+import javax.ws.rs.core.HttpHeaders;
+
 import org.jclouds.http.HttpRequest;
 import org.jclouds.http.HttpResponse;
 import org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType;
@@ -52,6 +54,7 @@
               .endpoint(endpoint + "/admin/groups/query")
               .addHeader("Accept", "*/*")
               .addHeader("x-vcloud-authorization", token)
+              .addHeader(HttpHeaders.COOKIE, "vcloud-token=" + token)
               .build();
 
       HttpResponse queryResponse= HttpResponse.builder()
@@ -98,7 +101,7 @@
               .endpoint(endpoint + "/admin/roles/query")
               .addHeader("Accept", "*/*")
               .addHeader("x-vcloud-authorization", token)
-              .build();
+              .addHeader(HttpHeaders.COOKIE, "vcloud-token=" + token).build();
 
       HttpResponse queryResponse= HttpResponse.builder()
               .statusCode(200)
diff --git a/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/internal/BaseVCloudDirectorExpectTest.java b/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/internal/BaseVCloudDirectorExpectTest.java
index a37e700..08c1422 100644
--- a/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/internal/BaseVCloudDirectorExpectTest.java
+++ b/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/internal/BaseVCloudDirectorExpectTest.java
@@ -36,6 +36,7 @@
 import com.google.common.collect.ImmutableMultimap;
 import com.google.common.collect.LinkedListMultimap;
 import com.google.common.collect.Multimap;
+import com.google.common.net.HttpHeaders;
 import com.google.inject.Guice;
 
 /**
@@ -132,6 +133,7 @@
             .headers(ImmutableMultimap.<String, String> builder()
                   .put("Accept", mediaType)
                   .put("x-vcloud-authorization", token)
+                  .put(HttpHeaders.COOKIE, "vcloud-token=" + token)
                   .build())
             .build();
    }
@@ -160,6 +162,7 @@
             .headers(ImmutableMultimap.<String, String> builder()
                   .put("Accept", acceptType)
                   .put("x-vcloud-authorization", token)
+                  .put(HttpHeaders.COOKIE, "vcloud-token=" + token)
                   .build())
             .payload(payloadFromResourceWithContentType(relativeFilePath, mediaType))
             .build();
@@ -221,6 +224,7 @@
       
       public HttpRequest.Builder<?> httpRequestBuilder() {
          header("x-vcloud-authorization", token);
+         header(HttpHeaders.COOKIE, "vcloud-token=" + token);
          builder.headers(headers);
          return builder;
       }
diff --git a/labs/virtualbox/src/test/java/org/jclouds/virtualbox/PreseedCfgServerTest.java b/labs/virtualbox/src/test/java/org/jclouds/virtualbox/PreseedCfgServerTest.java
index 659c1f8..28c6001 100644
--- a/labs/virtualbox/src/test/java/org/jclouds/virtualbox/PreseedCfgServerTest.java
+++ b/labs/virtualbox/src/test/java/org/jclouds/virtualbox/PreseedCfgServerTest.java
@@ -20,6 +20,7 @@
 
 import static org.testng.Assert.assertEquals;
 
+import java.io.File;
 import java.net.URI;
 import java.net.URL;
 import java.util.Map;
@@ -44,9 +45,9 @@
  * @author dralves
  * 
  */
-@Test(groups = "live", singleThreaded = true, testName = "StartJettyIfNotAlreadyRunningLiveTest")
+@Test(groups = "live", singleThreaded = true, testName = "PreseedCfgServerTest")
 public class PreseedCfgServerTest {
-
+   private static final String lineSeparator = System.getProperty("line.separator");
    @Test
    public void testJettyServerServesPreseedFile() throws Exception {
       Properties props = VirtualBoxApiMetadata.defaultProperties();
@@ -60,7 +61,7 @@
       starter.start(preconfigurationUrl, getDefaultImage().preseed_cfg);
 
       String preseedFileFromJetty = IOUtils.toString(new URL("http://127.0.0.1:" + port + "/preseed.cfg").openStream());
-      String preseedFileFromFile = getDefaultImage().preseed_cfg + "\n";
+      String preseedFileFromFile = getDefaultImage().preseed_cfg + lineSeparator;
       assertEquals(preseedFileFromFile, preseedFileFromJetty);
 
       starter.stop();
diff --git a/project/pom.xml b/project/pom.xml
index 7a108df..37bf201 100644
--- a/project/pom.xml
+++ b/project/pom.xml
@@ -605,7 +605,7 @@
                                 <configuration>
                                     <encoding>${project.build.sourceEncoding}</encoding>
                                     <quiet>true</quiet>
-                                    <additionalJOption>-J-Xmx256m</additionalJOption>
+                                    <maxmemory>256m</maxmemory>
                                 </configuration>
                                 <reportSets>
                                     <reportSet>
@@ -709,7 +709,7 @@
                   <artifactId>maven-javadoc-plugin</artifactId>
                   <version>2.8.1</version>
                   <configuration>
-                    <additionalJOption>-J-Xmx256m</additionalJOption>
+                    <maxmemory>256m</maxmemory>
                     <encoding>${project.build.sourceEncoding}</encoding>
                     <quiet>true</quiet>
                     <links>
diff --git a/providers/aws-ec2/src/main/java/org/jclouds/aws/ec2/xml/LaunchSpecificationHandler.java b/providers/aws-ec2/src/main/java/org/jclouds/aws/ec2/xml/LaunchSpecificationHandler.java
index 40ac014..5944b74 100644
--- a/providers/aws-ec2/src/main/java/org/jclouds/aws/ec2/xml/LaunchSpecificationHandler.java
+++ b/providers/aws-ec2/src/main/java/org/jclouds/aws/ec2/xml/LaunchSpecificationHandler.java
@@ -115,7 +115,7 @@
       } else if (qName.equals("enabled")) {
          String monitoringEnabled = currentOrNull();
          if (monitoringEnabled != null)
-            builder.monitoringEnabled(new Boolean(monitoringEnabled));
+            builder.monitoringEnabled(Boolean.valueOf(monitoringEnabled));
       }
       currentText = new StringBuilder();
    }
diff --git a/providers/aws-s3/src/main/java/org/jclouds/aws/s3/blobstore/strategy/internal/ParallelMultipartUploadStrategy.java b/providers/aws-s3/src/main/java/org/jclouds/aws/s3/blobstore/strategy/internal/ParallelMultipartUploadStrategy.java
index e946df6..03868af 100644
--- a/providers/aws-s3/src/main/java/org/jclouds/aws/s3/blobstore/strategy/internal/ParallelMultipartUploadStrategy.java
+++ b/providers/aws-s3/src/main/java/org/jclouds/aws/s3/blobstore/strategy/internal/ParallelMultipartUploadStrategy.java
@@ -190,14 +190,14 @@
                         CountDownLatch latch = new CountDownLatch(effectiveParts);
                         int part;
                         while ((part = algorithm.getNextPart()) <= parts) {
-                           Integer partKey = new Integer(part);
+                           Integer partKey = Integer.valueOf(part);
                            activeParts.put(partKey);
                            prepareUploadPart(container, key, uploadId, partKey, payload, 
                                  algorithm.getNextChunkOffset(), chunkSize, etags, 
                                  activeParts, futureParts, errors, maxRetries, errorMap, toRetry, latch);
                         }
                         if (remaining > 0) {
-                           Integer partKey = new Integer(part);
+                           Integer partKey = Integer.valueOf(part);
                            activeParts.put(partKey);
                            prepareUploadPart(container, key, uploadId, partKey, payload, 
                                  algorithm.getNextChunkOffset(), remaining, etags, 
@@ -210,7 +210,7 @@
                            CountDownLatch retryLatch = new CountDownLatch(atOnce);
                            for (int i = 0; i < atOnce; i++) {
                               Part failedPart = toRetry.poll();
-                              Integer partKey = new Integer(failedPart.getPart());
+                              Integer partKey = Integer.valueOf(failedPart.getPart());
                               activeParts.put(partKey);
                               prepareUploadPart(container, key, uploadId, partKey, payload, 
                                     failedPart.getOffset(), failedPart.getSize(), etags, 
diff --git a/providers/aws-s3/src/main/java/org/jclouds/aws/s3/blobstore/strategy/internal/SequentialMultipartUploadStrategy.java b/providers/aws-s3/src/main/java/org/jclouds/aws/s3/blobstore/strategy/internal/SequentialMultipartUploadStrategy.java
index e262186..22529b7 100644
--- a/providers/aws-s3/src/main/java/org/jclouds/aws/s3/blobstore/strategy/internal/SequentialMultipartUploadStrategy.java
+++ b/providers/aws-s3/src/main/java/org/jclouds/aws/s3/blobstore/strategy/internal/SequentialMultipartUploadStrategy.java
@@ -75,7 +75,7 @@
       String eTag = null;
       try {
          eTag = client.uploadPart(container, key, part, uploadId, chunkedPart);
-         etags.put(new Integer(part), eTag);
+         etags.put(Integer.valueOf(part), eTag);
       } catch (KeyNotFoundException e) {
          // note that because of eventual consistency, the upload id may not be present yet
          // we may wish to add this condition to the retry handler
@@ -83,7 +83,7 @@
          // we may also choose to implement ListParts and wait for the uploadId to become
          // available there.
          eTag = client.uploadPart(container, key, part, uploadId, chunkedPart);
-         etags.put(new Integer(part), eTag);
+         etags.put(Integer.valueOf(part), eTag);
       }
    }
 
diff --git a/providers/aws-s3/src/test/java/org/jclouds/aws/s3/blobstore/strategy/internal/SequentialMultipartUploadStrategyTest.java b/providers/aws-s3/src/test/java/org/jclouds/aws/s3/blobstore/strategy/internal/SequentialMultipartUploadStrategyTest.java
index 6cb969b..5303de5 100644
--- a/providers/aws-s3/src/test/java/org/jclouds/aws/s3/blobstore/strategy/internal/SequentialMultipartUploadStrategyTest.java
+++ b/providers/aws-s3/src/test/java/org/jclouds/aws/s3/blobstore/strategy/internal/SequentialMultipartUploadStrategyTest.java
@@ -75,14 +75,14 @@
       long chunkSize = MultipartUploadSlicingAlgorithm.DEFAULT_PART_SIZE;
       long remaining = 100L;
       SortedMap<Integer, String> etags = Maps.newTreeMap();
-      etags.put(new Integer(1), "eTag1");
-      etags.put(new Integer(2), "eTag2");
+      etags.put(Integer.valueOf(1), "eTag1");
+      etags.put(Integer.valueOf(2), "eTag2");
       
       expect(blob.getMetadata()).andReturn(blobMeta).atLeastOnce();
       expect(blobMeta.getName()).andReturn(key).atLeastOnce();
       expect(blob.getPayload()).andReturn(payload).atLeastOnce();
       expect(payload.getContentMetadata()).andReturn(contentMeta).atLeastOnce();
-      expect(contentMeta.getContentLength()).andReturn(new Long(chunkSize + remaining));
+      expect(contentMeta.getContentLength()).andReturn(Long.valueOf(chunkSize + remaining));
       expect(ablobStore.getContext()).andReturn(context).atLeastOnce();
       expect(context.unwrap(AWSS3ApiMetadata.CONTEXT_TOKEN)).andReturn(psc).atLeastOnce();
       expect(psc.getApi()).andReturn(client).atLeastOnce();
@@ -138,14 +138,14 @@
       long chunkSize = MultipartUploadSlicingAlgorithm.DEFAULT_PART_SIZE;
       long remaining = 100L;
       SortedMap<Integer, String> etags = Maps.newTreeMap();
-      etags.put(new Integer(1), "eTag1");
-      etags.put(new Integer(2), "eTag2");
+      etags.put(Integer.valueOf(1), "eTag1");
+      etags.put(Integer.valueOf(2), "eTag2");
       
       expect(blob.getMetadata()).andReturn(blobMeta).atLeastOnce();
       expect(blobMeta.getName()).andReturn(key).atLeastOnce();
       expect(blob.getPayload()).andReturn(payload).atLeastOnce();
       expect(payload.getContentMetadata()).andReturn(contentMeta).atLeastOnce();
-      expect(contentMeta.getContentLength()).andReturn(new Long(chunkSize + remaining));
+      expect(contentMeta.getContentLength()).andReturn(Long.valueOf(chunkSize + remaining));
       expect(ablobStore.getContext()).andReturn(context).atLeastOnce();
       expect(context.unwrap(AWSS3ApiMetadata.CONTEXT_TOKEN)).andReturn(psc).atLeastOnce();
       expect(psc.getApi()).andReturn(client).atLeastOnce();
diff --git a/providers/azureblob/src/test/java/org/jclouds/azureblob/AzureBlobClientLiveTest.java b/providers/azureblob/src/test/java/org/jclouds/azureblob/AzureBlobClientLiveTest.java
index 0c1dc5f..e2a7ffc 100644
--- a/providers/azureblob/src/test/java/org/jclouds/azureblob/AzureBlobClientLiveTest.java
+++ b/providers/azureblob/src/test/java/org/jclouds/azureblob/AzureBlobClientLiveTest.java
@@ -265,9 +265,9 @@
 
       // Test GET of object (including updated metadata)
       AzureBlob getBlob = getApi().getBlob(privateContainer, object.getProperties().getName());
-      assertEquals(Strings2.toStringAndClose(getBlob.getPayload().getInput()), data);
+      assertEquals(Strings2.toString(getBlob.getPayload()), data);
       // TODO assertEquals(getBlob.getName(), object.getProperties().getName());
-      assertEquals(getBlob.getPayload().getContentMetadata().getContentLength(), new Long(data.length()));
+      assertEquals(getBlob.getPayload().getContentMetadata().getContentLength(), Long.valueOf(data.length()));
       assertEquals(getBlob.getProperties().getContentMetadata().getContentType(), "text/plain");
       assertEquals(CryptoStreams.hex(md5),
             CryptoStreams.hex(getBlob.getProperties().getContentMetadata().getContentMD5()));
@@ -310,7 +310,7 @@
       object = getApi().newBlob();
       object.getProperties().setName("chunked-object");
       object.setPayload(bais);
-      object.getPayload().getContentMetadata().setContentLength(new Long(data.getBytes().length));
+      object.getPayload().getContentMetadata().setContentLength(Long.valueOf(data.getBytes().length));
       newEtag = getApi().putBlob(privateContainer, object);
       assertEquals(CryptoStreams.hex(md5),
             CryptoStreams.hex(getBlob.getProperties().getContentMetadata().getContentMD5()));
diff --git a/providers/gogrid/src/main/java/org/jclouds/gogrid/compute/strategy/GoGridComputeServiceAdapter.java b/providers/gogrid/src/main/java/org/jclouds/gogrid/compute/strategy/GoGridComputeServiceAdapter.java
index cda9ba5..7f0b17f 100644
--- a/providers/gogrid/src/main/java/org/jclouds/gogrid/compute/strategy/GoGridComputeServiceAdapter.java
+++ b/providers/gogrid/src/main/java/org/jclouds/gogrid/compute/strategy/GoGridComputeServiceAdapter.java
@@ -154,19 +154,19 @@
    
    @Override
    public void destroyNode(String id) {
-      client.getServerServices().deleteById(new Long(id));
+      client.getServerServices().deleteById(Long.valueOf(id));
    }
 
    @Override
    public void rebootNode(String id) {
       executeCommandOnServer(PowerCommand.RESTART, id);
-      Server server = Iterables.getOnlyElement(client.getServerServices().getServersById(new Long(id)));
+      Server server = Iterables.getOnlyElement(client.getServerServices().getServersById(Long.valueOf(id)));
       client.getServerServices().power(server.getName(), PowerCommand.START);
       serverLatestJobCompletedShort.apply(server);
    }
 
    private boolean executeCommandOnServer(PowerCommand command, String id) {
-      Server server = Iterables.getOnlyElement(client.getServerServices().getServersById(new Long(id)));
+      Server server = Iterables.getOnlyElement(client.getServerServices().getServersById(Long.valueOf(id)));
       client.getServerServices().power(server.getName(), command);
       return serverLatestJobCompleted.apply(server);
    }
diff --git a/providers/gogrid/src/test/java/org/jclouds/gogrid/compute/GoGridComputeServiceLiveTest.java b/providers/gogrid/src/test/java/org/jclouds/gogrid/compute/GoGridComputeServiceLiveTest.java
index 2aba331..7cdffe2 100644
--- a/providers/gogrid/src/test/java/org/jclouds/gogrid/compute/GoGridComputeServiceLiveTest.java
+++ b/providers/gogrid/src/test/java/org/jclouds/gogrid/compute/GoGridComputeServiceLiveTest.java
@@ -84,12 +84,12 @@
       try {
          NodeMetadata node = getOnlyElement(client.createNodesInGroup(group, 1));
 
-         Server updatedServer = providerContext.getApi().getServerServices().editServerRam(new Long(node.getId()), ram);
+         Server updatedServer = providerContext.getApi().getServerServices().editServerRam(Long.valueOf(node.getId()), ram);
          assertNotNull(updatedServer);
          assert serverLatestJobCompleted.apply(updatedServer);
 
          assertEquals(
-               Iterables.getLast(providerContext.getApi().getServerServices().getServersById(new Long(node.getId())))
+               Iterables.getLast(providerContext.getApi().getServerServices().getServersById(Long.valueOf(node.getId())))
                      .getRam().getName(), ram);
 
       } finally {
diff --git a/providers/hpcloud-objectstorage/src/main/java/org/jclouds/hpcloud/objectstorage/functions/ParseContainerMetadataFromHeaders.java b/providers/hpcloud-objectstorage/src/main/java/org/jclouds/hpcloud/objectstorage/functions/ParseContainerMetadataFromHeaders.java
index fc977e2..a31d123 100644
--- a/providers/hpcloud-objectstorage/src/main/java/org/jclouds/hpcloud/objectstorage/functions/ParseContainerMetadataFromHeaders.java
+++ b/providers/hpcloud-objectstorage/src/main/java/org/jclouds/hpcloud/objectstorage/functions/ParseContainerMetadataFromHeaders.java
@@ -49,8 +49,8 @@
       
       to.setReadACL(from.getFirstHeaderOrNull(SwiftHeaders.CONTAINER_READ));
  
-      to.setBytes(new Long(from.getFirstHeaderOrNull(SwiftHeaders.CONTAINER_BYTES_USED)));
-      to.setCount(new Long(from.getFirstHeaderOrNull(SwiftHeaders.CONTAINER_OBJECT_COUNT)));
+      to.setBytes(Long.valueOf(from.getFirstHeaderOrNull(SwiftHeaders.CONTAINER_BYTES_USED)));
+      to.setCount(Long.valueOf(from.getFirstHeaderOrNull(SwiftHeaders.CONTAINER_OBJECT_COUNT)));
       
       addUserMetadataTo(from, to);
       
diff --git a/providers/slicehost/src/main/java/org/jclouds/slicehost/handlers/ParseSlicehostErrorFromHttpResponse.java b/providers/slicehost/src/main/java/org/jclouds/slicehost/handlers/ParseSlicehostErrorFromHttpResponse.java
index acaf21e..d013eb6 100644
--- a/providers/slicehost/src/main/java/org/jclouds/slicehost/handlers/ParseSlicehostErrorFromHttpResponse.java
+++ b/providers/slicehost/src/main/java/org/jclouds/slicehost/handlers/ParseSlicehostErrorFromHttpResponse.java
@@ -118,7 +118,7 @@
       // slicehost returns " " which is unparsable
       if (response.getPayload() != null) {
          try {
-            String payload = Strings2.toStringAndClose(response.getPayload().getInput()).trim();
+            String payload = Strings2.toString(response.getPayload()).trim();
             return payload.indexOf("xml") != -1 ? errorParser.parse(payload) : payload;
          } catch (IOException e) {
          }
diff --git a/providers/slicehost/src/test/java/org/jclouds/slicehost/SlicehostClientLiveTest.java b/providers/slicehost/src/test/java/org/jclouds/slicehost/SlicehostClientLiveTest.java
index 44d00b9..f82c1e2 100644
--- a/providers/slicehost/src/test/java/org/jclouds/slicehost/SlicehostClientLiveTest.java
+++ b/providers/slicehost/src/test/java/org/jclouds/slicehost/SlicehostClientLiveTest.java
@@ -234,7 +234,7 @@
       Slice slice = client.getSlice(sliceId);
       assertEquals(slice.getStatus(), Slice.Status.ACTIVE);
       assert slice.getProgress() >= 0 : "newDetails.getProgress()" + slice.getProgress();
-      assertEquals(new Integer(14362), slice.getImageId());
+      assertEquals(Integer.valueOf(14362), slice.getImageId());
       assertEquals(1, slice.getFlavorId());
       assertNotNull(slice.getAddresses());
       checkPassOk(slice, rootPassword);
diff --git a/providers/softlayer/src/main/java/org/jclouds/softlayer/domain/Address.java b/providers/softlayer/src/main/java/org/jclouds/softlayer/domain/Address.java
index 2994cf1..13ca1b5 100644
--- a/providers/softlayer/src/main/java/org/jclouds/softlayer/domain/Address.java
+++ b/providers/softlayer/src/main/java/org/jclouds/softlayer/domain/Address.java
@@ -89,7 +89,7 @@
 
    @Override
    public int compareTo(Address arg0) {
-      return new Integer(id).compareTo(arg0.getId());
+      return Integer.valueOf(id).compareTo(arg0.getId());
    }
 
    /**
diff --git a/providers/softlayer/src/main/java/org/jclouds/softlayer/domain/Datacenter.java b/providers/softlayer/src/main/java/org/jclouds/softlayer/domain/Datacenter.java
index c35d372..77f321c 100644
--- a/providers/softlayer/src/main/java/org/jclouds/softlayer/domain/Datacenter.java
+++ b/providers/softlayer/src/main/java/org/jclouds/softlayer/domain/Datacenter.java
@@ -104,7 +104,7 @@
 
    @Override
    public int compareTo(Datacenter arg0) {
-      return new Integer(id).compareTo(arg0.getId());
+      return Integer.valueOf(id).compareTo(arg0.getId());
    }
 
    /**
diff --git a/providers/softlayer/src/main/java/org/jclouds/softlayer/domain/OperatingSystem.java b/providers/softlayer/src/main/java/org/jclouds/softlayer/domain/OperatingSystem.java
index 00a5927..4533ac7 100644
--- a/providers/softlayer/src/main/java/org/jclouds/softlayer/domain/OperatingSystem.java
+++ b/providers/softlayer/src/main/java/org/jclouds/softlayer/domain/OperatingSystem.java
@@ -86,7 +86,7 @@
 
    @Override
    public int compareTo(OperatingSystem arg0) {
-      return new Integer(id).compareTo(arg0.getId());
+      return Integer.valueOf(id).compareTo(arg0.getId());
    }
 
    /**
diff --git a/providers/softlayer/src/main/java/org/jclouds/softlayer/domain/Password.java b/providers/softlayer/src/main/java/org/jclouds/softlayer/domain/Password.java
index bb28d29..0601ab5 100644
--- a/providers/softlayer/src/main/java/org/jclouds/softlayer/domain/Password.java
+++ b/providers/softlayer/src/main/java/org/jclouds/softlayer/domain/Password.java
@@ -82,7 +82,7 @@
 
     @Override
    public int compareTo(Password arg0) {
-      return new Integer(id).compareTo(arg0.getId());
+      return Integer.valueOf(id).compareTo(arg0.getId());
    }
 
    /**
diff --git a/providers/softlayer/src/main/java/org/jclouds/softlayer/domain/ProductItem.java b/providers/softlayer/src/main/java/org/jclouds/softlayer/domain/ProductItem.java
index a6bb0b9..2d3b5e6 100644
--- a/providers/softlayer/src/main/java/org/jclouds/softlayer/domain/ProductItem.java
+++ b/providers/softlayer/src/main/java/org/jclouds/softlayer/domain/ProductItem.java
@@ -130,7 +130,7 @@
 
    @Override
    public int compareTo(ProductItem arg0) {
-      return new Integer(id).compareTo(arg0.getId());
+      return Integer.valueOf(id).compareTo(arg0.getId());
    }
 
    /**
diff --git a/providers/softlayer/src/main/java/org/jclouds/softlayer/domain/ProductItemCategory.java b/providers/softlayer/src/main/java/org/jclouds/softlayer/domain/ProductItemCategory.java
index b525878..3b78ea5 100644
--- a/providers/softlayer/src/main/java/org/jclouds/softlayer/domain/ProductItemCategory.java
+++ b/providers/softlayer/src/main/java/org/jclouds/softlayer/domain/ProductItemCategory.java
@@ -83,7 +83,7 @@
 
    @Override
    public int compareTo(ProductItemCategory arg0) {
-      return new Integer(id).compareTo(arg0.getId());
+      return Integer.valueOf(id).compareTo(arg0.getId());
    }
 
    /**
diff --git a/providers/softlayer/src/main/java/org/jclouds/softlayer/domain/ProductItemPrice.java b/providers/softlayer/src/main/java/org/jclouds/softlayer/domain/ProductItemPrice.java
index 36ae4b1..1ed4809 100644
--- a/providers/softlayer/src/main/java/org/jclouds/softlayer/domain/ProductItemPrice.java
+++ b/providers/softlayer/src/main/java/org/jclouds/softlayer/domain/ProductItemPrice.java
@@ -122,7 +122,7 @@
 
    @Override
    public int compareTo(ProductItemPrice arg0) {
-      return new Integer(id).compareTo(arg0.getId());
+      return Integer.valueOf(id).compareTo(arg0.getId());
    }
 
    /**
diff --git a/providers/softlayer/src/main/java/org/jclouds/softlayer/domain/ProductOrderReceipt.java b/providers/softlayer/src/main/java/org/jclouds/softlayer/domain/ProductOrderReceipt.java
index 64b3456..a93bce8 100644
--- a/providers/softlayer/src/main/java/org/jclouds/softlayer/domain/ProductOrderReceipt.java
+++ b/providers/softlayer/src/main/java/org/jclouds/softlayer/domain/ProductOrderReceipt.java
@@ -67,7 +67,7 @@
 
    @Override
    public int compareTo(ProductOrderReceipt arg0) {
-      return new Integer(orderId).compareTo(arg0.getOrderId());
+      return Integer.valueOf(orderId).compareTo(arg0.getOrderId());
    }
 
    /**
diff --git a/providers/softlayer/src/main/java/org/jclouds/softlayer/domain/ProductPackage.java b/providers/softlayer/src/main/java/org/jclouds/softlayer/domain/ProductPackage.java
index f44ac60..953b1ec 100644
--- a/providers/softlayer/src/main/java/org/jclouds/softlayer/domain/ProductPackage.java
+++ b/providers/softlayer/src/main/java/org/jclouds/softlayer/domain/ProductPackage.java
@@ -110,7 +110,7 @@
 
    @Override
    public int compareTo(ProductPackage arg0) {
-      return new Integer(id).compareTo(arg0.getId());
+      return Integer.valueOf(id).compareTo(arg0.getId());
    }
 
    /**
diff --git a/providers/softlayer/src/main/java/org/jclouds/softlayer/domain/Region.java b/providers/softlayer/src/main/java/org/jclouds/softlayer/domain/Region.java
index c2536b1..611682e 100644
--- a/providers/softlayer/src/main/java/org/jclouds/softlayer/domain/Region.java
+++ b/providers/softlayer/src/main/java/org/jclouds/softlayer/domain/Region.java
@@ -76,7 +76,7 @@
 
    @Override
    public int compareTo(Region arg0) {
-      return new Integer(sortOrder).compareTo(arg0.sortOrder);
+      return Integer.valueOf(sortOrder).compareTo(arg0.sortOrder);
    }
 
    /**
diff --git a/providers/softlayer/src/main/java/org/jclouds/softlayer/domain/VirtualGuest.java b/providers/softlayer/src/main/java/org/jclouds/softlayer/domain/VirtualGuest.java
index a35a209..1127a3e 100644
--- a/providers/softlayer/src/main/java/org/jclouds/softlayer/domain/VirtualGuest.java
+++ b/providers/softlayer/src/main/java/org/jclouds/softlayer/domain/VirtualGuest.java
@@ -326,7 +326,7 @@
 
    @Override
    public int compareTo(VirtualGuest arg0) {
-      return new Integer(id).compareTo(arg0.getId());
+      return Integer.valueOf(id).compareTo(arg0.getId());
    }
 
    /**
diff --git a/providers/softlayer/src/main/java/org/jclouds/softlayer/handlers/SoftLayerErrorHandler.java b/providers/softlayer/src/main/java/org/jclouds/softlayer/handlers/SoftLayerErrorHandler.java
index d67d41a..a8d8254 100644
--- a/providers/softlayer/src/main/java/org/jclouds/softlayer/handlers/SoftLayerErrorHandler.java
+++ b/providers/softlayer/src/main/java/org/jclouds/softlayer/handlers/SoftLayerErrorHandler.java
@@ -80,7 +80,7 @@
       if (response.getPayload() == null)
          return null;
       try {
-         return Strings2.toStringAndClose(response.getPayload().getInput());
+         return Strings2.toString(response.getPayload());
       } catch (IOException e) {
          throw new RuntimeException(e);
       } finally {
diff --git a/providers/softlayer/src/test/java/org/jclouds/softlayer/compute/functions/ProductItemToImageTest.java b/providers/softlayer/src/test/java/org/jclouds/softlayer/compute/functions/ProductItemToImageTest.java
index 33da528..a29827e 100644
--- a/providers/softlayer/src/test/java/org/jclouds/softlayer/compute/functions/ProductItemToImageTest.java
+++ b/providers/softlayer/src/test/java/org/jclouds/softlayer/compute/functions/ProductItemToImageTest.java
@@ -231,12 +231,12 @@
 
    @Test
    public void testOsBitsWithSpace() {
-      assertEquals(osBits().apply("a (32 bit) os"),new Integer(32));
+      assertEquals(osBits().apply("a (32 bit) os"),Integer.valueOf(32));
    }
 
    @Test
    public void testOsBitsNoSpace() {
-      assertEquals(osBits().apply("a (64bit) os"),new Integer(64));
+      assertEquals(osBits().apply("a (64bit) os"),Integer.valueOf(64));
    }
 
    @Test
diff --git a/providers/softlayer/src/test/java/org/jclouds/softlayer/features/ProductPackageClientLiveTest.java b/providers/softlayer/src/test/java/org/jclouds/softlayer/features/ProductPackageClientLiveTest.java
index e77b5d8..7f0e748 100644
--- a/providers/softlayer/src/test/java/org/jclouds/softlayer/features/ProductPackageClientLiveTest.java
+++ b/providers/softlayer/src/test/java/org/jclouds/softlayer/features/ProductPackageClientLiveTest.java
@@ -138,7 +138,7 @@
       Map<Float, ProductItem> ramToProductItem = Maps.uniqueIndex(ramItems, ProductItems.capacity());
 
       ProductItemPrice price = ProductItems.price().apply(ramToProductItem.get(1.0f));
-      assert new Integer(1644).equals(price.getId());
+      assert Integer.valueOf(1644).equals(price.getId());
    }
 
    @Test
@@ -153,7 +153,7 @@
       Map<Float, ProductItem> coresToProductItem = Maps.uniqueIndex(cpuItems, ProductItems.capacity());
 
       ProductItemPrice price = ProductItems.price().apply(coresToProductItem.get(2.0f));
-      assert new Integer(1963).equals(price.getId());
+      assert Integer.valueOf(1963).equals(price.getId());
    }
 
    @Test
@@ -165,7 +165,7 @@
 
       ProductItemPrice price = ProductItems.price().apply(
             osToProductItem.get("Ubuntu Linux 8 LTS Hardy Heron - Minimal Install (64 bit)"));
-      assert new Integer(1693).equals(price.getId());
+      assert Integer.valueOf(1693).equals(price.getId());
    }
 
    private void checkProductItem(ProductItem item) {
diff --git a/providers/trmk-ecloud/src/main/java/org/jclouds/trmk/ecloud/xml/TagNameToUsageCountHandler.java b/providers/trmk-ecloud/src/main/java/org/jclouds/trmk/ecloud/xml/TagNameToUsageCountHandler.java
index 139a64f..2c10893 100644
--- a/providers/trmk-ecloud/src/main/java/org/jclouds/trmk/ecloud/xml/TagNameToUsageCountHandler.java
+++ b/providers/trmk-ecloud/src/main/java/org/jclouds/trmk/ecloud/xml/TagNameToUsageCountHandler.java
@@ -50,7 +50,7 @@
       if (equalsOrSuffix(qName, "Name")) {
          name = currentOrNull(currentText);
       } else if (equalsOrSuffix(qName, "UsageCount")) {
-         builder.put(name, new Integer(currentOrNull(currentText)));
+         builder.put(name, Integer.valueOf(currentOrNull(currentText)));
       }
       currentText = new StringBuilder();
    }
diff --git a/sandbox-apis/libvirt/src/main/java/org/jclouds/libvirt/compute/functions/DomainToHardware.java b/sandbox-apis/libvirt/src/main/java/org/jclouds/libvirt/compute/functions/DomainToHardware.java
index 7599672..7044321 100644
--- a/sandbox-apis/libvirt/src/main/java/org/jclouds/libvirt/compute/functions/DomainToHardware.java
+++ b/sandbox-apis/libvirt/src/main/java/org/jclouds/libvirt/compute/functions/DomainToHardware.java
@@ -78,7 +78,7 @@
 			for (int i = 0; i < nodes.getLength(); i++) {
 				StorageVol storageVol = from.getConnect().storageVolLookupByPath(diskFileName);
 				String id = storageVol.getKey();
-				float size = new Long(storageVol.getInfo().capacity).floatValue();
+				float size = Long.valueOf(storageVol.getInfo().capacity).floatValue();
 				volumes.add(new VolumeImpl(id, Volume.Type.LOCAL, size, null, true, false));
 			}
 			builder.volumes((List<Volume>) volumes);
diff --git a/sandbox-apis/pcs/src/test/java/org/jclouds/mezeo/pcs/PCSClientLiveTest.java b/sandbox-apis/pcs/src/test/java/org/jclouds/mezeo/pcs/PCSClientLiveTest.java
index 337f47b..aa36dd1 100644
--- a/sandbox-apis/pcs/src/test/java/org/jclouds/mezeo/pcs/PCSClientLiveTest.java
+++ b/sandbox-apis/pcs/src/test/java/org/jclouds/mezeo/pcs/PCSClientLiveTest.java
@@ -215,7 +215,7 @@
       // Test GET of object (including updated metadata)
       InputStream file = connection.downloadFile(objectURI);
       assertEquals(Strings2.toStringAndClose(file), data);
-      validateFileInfoAndNameIsInMetadata(container, objectURI, "object", new Long(data.length()));
+      validateFileInfoAndNameIsInMetadata(container, objectURI, "object", Long.valueOf(data.length()));
 
       try {
          connection.uploadFile(container, object);
@@ -235,15 +235,15 @@
       // try sending it in 2 parts
       object.getMetadata().setName(name);
       objectURI = connection.createFile(container, object);
-      validateFileInfoAndNameIsInMetadata(container, objectURI, name, new Long(0));
+      validateFileInfoAndNameIsInMetadata(container, objectURI, name, Long.valueOf(0));
 
       object.setPayload(data.substring(0, 2));
       connection.uploadBlock(objectURI, object, range(0, 2));
-      validateFileInfoAndNameIsInMetadata(container, objectURI, name, new Long(2));
+      validateFileInfoAndNameIsInMetadata(container, objectURI, name, Long.valueOf(2));
 
       object.setPayload(data.substring(2));
       connection.uploadBlock(objectURI, object, range(2, data.getBytes().length));
-      validateFileInfoAndNameIsInMetadata(container, objectURI, name, new Long(data.length()));
+      validateFileInfoAndNameIsInMetadata(container, objectURI, name, Long.valueOf(data.length()));
 
       file = connection.downloadFile(objectURI);
       assertEquals(Strings2.toStringAndClose(file), data);
@@ -252,7 +252,7 @@
       data = "Here is my datum";
       object.setPayload(data.substring(2));
       connection.uploadBlock(objectURI, object, range(2, data.getBytes().length));
-      validateFileInfoAndNameIsInMetadata(container, objectURI, name, new Long(data.length()));
+      validateFileInfoAndNameIsInMetadata(container, objectURI, name, Long.valueOf(data.length()));
 
       file = connection.downloadFile(objectURI);
       assertEquals(Strings2.toStringAndClose(file), data);
diff --git a/sandbox-apis/pcs/src/test/java/org/jclouds/mezeo/pcs/binders/BindContainerNameToXmlPayloadTest.java b/sandbox-apis/pcs/src/test/java/org/jclouds/mezeo/pcs/binders/BindContainerNameToXmlPayloadTest.java
index 43832ee..59583e6 100644
--- a/sandbox-apis/pcs/src/test/java/org/jclouds/mezeo/pcs/binders/BindContainerNameToXmlPayloadTest.java
+++ b/sandbox-apis/pcs/src/test/java/org/jclouds/mezeo/pcs/binders/BindContainerNameToXmlPayloadTest.java
@@ -40,7 +40,7 @@
       binder.bindToRequest(request, "foo");
 
       assertEquals(request.getPayload().getRawContent(), "<container><name>foo</name></container>");
-      assertEquals(request.getPayload().getContentMetadata().getContentLength(), new Long(
+      assertEquals(request.getPayload().getContentMetadata().getContentLength(), Long.valueOf(
                "<container><name>foo</name></container>".getBytes().length));
       assertEquals(request.getPayload().getContentMetadata().getContentType(), "application/unknown");
 
diff --git a/sandbox-providers/boxdotnet/src/main/java/org/jclouds/boxdotnet/handlers/BoxDotNetErrorHandler.java b/sandbox-providers/boxdotnet/src/main/java/org/jclouds/boxdotnet/handlers/BoxDotNetErrorHandler.java
index aaf4484..e6e90a0 100644
--- a/sandbox-providers/boxdotnet/src/main/java/org/jclouds/boxdotnet/handlers/BoxDotNetErrorHandler.java
+++ b/sandbox-providers/boxdotnet/src/main/java/org/jclouds/boxdotnet/handlers/BoxDotNetErrorHandler.java
@@ -76,7 +76,7 @@
       if (response.getPayload() == null)
          return null;
       try {
-         return Strings2.toStringAndClose(response.getPayload().getInput());
+         return Strings2.toString(response.getPayload());
       } catch (IOException e) {
          throw new RuntimeException(e);
       } finally {
diff --git a/sandbox-providers/ibm-smartcloud/src/main/java/org/jclouds/ibm/smartcloud/handlers/IBMSmartCloudErrorHandler.java b/sandbox-providers/ibm-smartcloud/src/main/java/org/jclouds/ibm/smartcloud/handlers/IBMSmartCloudErrorHandler.java
index 93e5884..b95416f 100644
--- a/sandbox-providers/ibm-smartcloud/src/main/java/org/jclouds/ibm/smartcloud/handlers/IBMSmartCloudErrorHandler.java
+++ b/sandbox-providers/ibm-smartcloud/src/main/java/org/jclouds/ibm/smartcloud/handlers/IBMSmartCloudErrorHandler.java
@@ -86,6 +86,6 @@
    public String parseMessage(HttpResponse response) throws IOException {
       if (response.getPayload() == null)
          return null;
-      return Strings2.toStringAndClose(response.getPayload().getInput());
+      return Strings2.toString(response.getPayload());
    }
 }
diff --git a/scriptbuilder/src/main/java/org/jclouds/scriptbuilder/statements/login/AdminAccess.java b/scriptbuilder/src/main/java/org/jclouds/scriptbuilder/statements/login/AdminAccess.java
index 5b2b143..9b8425f 100644
--- a/scriptbuilder/src/main/java/org/jclouds/scriptbuilder/statements/login/AdminAccess.java
+++ b/scriptbuilder/src/main/java/org/jclouds/scriptbuilder/statements/login/AdminAccess.java
@@ -109,6 +109,7 @@
       }
 
       private String adminUsername;
+      private String adminFullName;
       private String adminHome;
       private String adminPublicKey;
       private File adminPublicKeyFile;
@@ -127,6 +128,12 @@
          return this;
       }
 
+      public AdminAccess.Builder adminFullName(String adminFullName) {
+         this.adminFullName = adminFullName;
+         return this;
+      }
+
+
       public AdminAccess.Builder adminHome(String adminHome) {
          this.adminHome = adminHome;
          return this;
@@ -211,7 +218,7 @@
             String adminPrivateKey = this.adminPrivateKey;
             if (adminPrivateKey == null && adminPrivateKeyFile != null)
                adminPrivateKey = Files.toString(adminPrivateKeyFile, UTF_8);
-            return new Config(adminUsername, adminHome, adminPublicKey, adminPrivateKey, adminPassword, loginPassword, 
+            return new Config(adminUsername, adminFullName, adminHome, adminPublicKey, adminPrivateKey, adminPassword, loginPassword,
                      lockSsh, grantSudoToAdminUser, authorizeAdminPublicKey, installAdminPrivateKey, resetLoginPassword,
                      cryptFunction);
          } catch (IOException e) {
@@ -222,6 +229,7 @@
 
    protected static class Config {
       private final String adminUsername;
+      private final String adminFullName;
       private final String adminHome;
       private final String adminPublicKey;
       private final String adminPrivateKey;
@@ -235,11 +243,12 @@
       private boolean authorizeAdminPublicKey;
       private boolean lockSsh;
 
-      protected Config(@Nullable String adminUsername, @Nullable String adminHome, @Nullable String adminPublicKey,
+      protected Config(@Nullable String adminUsername, @Nullable String adminFullName, @Nullable String adminHome, @Nullable String adminPublicKey,
                @Nullable String adminPrivateKey, @Nullable String adminPassword, @Nullable String loginPassword,
                boolean lockSsh, boolean grantSudoToAdminUser, boolean authorizeAdminPublicKey,
                boolean installAdminPrivateKey, boolean resetLoginPassword, Function<String, String> cryptFunction) {
          this.adminUsername = adminUsername;
+         this.adminFullName = adminFullName;
          this.adminHome = adminHome;
          this.adminPublicKey = adminPublicKey;
          this.adminPrivateKey = adminPrivateKey;
@@ -267,6 +276,10 @@
          return adminUsername;
       }
 
+      public String getAdminFullName() {
+         return adminFullName;
+      }
+
       public String getAdminHome() {
          return adminHome;
       }
@@ -318,7 +331,8 @@
       @Override
       public String toString() {
          StringBuilder builder = new StringBuilder();
-         builder.append("Config [adminUsername=").append(adminUsername).append(", adminHome=").append(adminHome)
+         builder.append("Config [adminUsername=").append(adminUsername).append(", adminFullName=").append(adminFullName)
+                  .append(", adminHome=").append(adminHome)
                   .append(", adminPublicKey=").append(adminPublicKey == null ? "null" : "present")
                   .append(", adminPrivateKey=").append(adminPrivateKey == null ? "null" : "present")
                   .append(", adminPassword=").append(adminPassword == null ? "null" : "present")
@@ -368,6 +382,7 @@
       Builder builder = AdminAccess.builder(configuration.cryptFunction());
       builder.adminUsername(config.getAdminUsername() != null ? config.getAdminUsername() : configuration
                .defaultAdminUsername().get());
+      builder.adminFullName(config.getAdminFullName() != null ? config.getAdminFullName() : builder.adminUsername);
       builder.adminHome(config.getAdminHome());
       builder.adminPassword(config.getAdminPassword() != null ? config.getAdminPassword() : configuration
                .passwordGenerator().get());
@@ -408,6 +423,7 @@
       ImmutableList.Builder<Statement> statements = ImmutableList.builder();
       UserAdd.Builder userBuilder = UserAdd.builder();
       userBuilder.login(config.getAdminUsername());
+      userBuilder.fullName(config.getAdminFullName());
       if (config.getAdminHome() != null)
          userBuilder.home(config.getAdminHome());
       if (config.shouldAuthorizeAdminPublicKey())
diff --git a/scriptbuilder/src/main/java/org/jclouds/scriptbuilder/statements/login/AdminAccessBuilderSpec.java b/scriptbuilder/src/main/java/org/jclouds/scriptbuilder/statements/login/AdminAccessBuilderSpec.java
index 2530108..3de0bf1 100644
--- a/scriptbuilder/src/main/java/org/jclouds/scriptbuilder/statements/login/AdminAccessBuilderSpec.java
+++ b/scriptbuilder/src/main/java/org/jclouds/scriptbuilder/statements/login/AdminAccessBuilderSpec.java
@@ -10,6 +10,8 @@
 
 import org.jclouds.javax.annotation.Nullable;
 
+import clojure.main;
+
 import com.google.common.annotations.VisibleForTesting;
 import com.google.common.base.Objects;
 import com.google.common.base.Splitter;
@@ -64,6 +66,8 @@
 
 public class AdminAccessBuilderSpec {
 
+   private static final long serialVersionUID = -379469670373111569L;
+
    /** Parses a single value. */
    protected static interface ValueParser {
       void parse(AdminAccessBuilderSpec spec, String key, @Nullable String value);
diff --git a/scriptbuilder/src/main/java/org/jclouds/scriptbuilder/statements/login/UserAdd.java b/scriptbuilder/src/main/java/org/jclouds/scriptbuilder/statements/login/UserAdd.java
index b6a76b0..357a7a8 100644
--- a/scriptbuilder/src/main/java/org/jclouds/scriptbuilder/statements/login/UserAdd.java
+++ b/scriptbuilder/src/main/java/org/jclouds/scriptbuilder/statements/login/UserAdd.java
@@ -18,13 +18,16 @@
  */
 package org.jclouds.scriptbuilder.statements.login;
 
-import static com.google.common.base.Objects.equal;
-import static com.google.common.base.Preconditions.checkNotNull;
-
-import java.util.List;
-
-import javax.inject.Named;
-
+import com.google.common.annotations.VisibleForTesting;
+import com.google.common.base.Function;
+import com.google.common.base.Joiner;
+import com.google.common.base.Objects;
+import com.google.common.base.Strings;
+import com.google.common.base.Throwables;
+import com.google.common.collect.ImmutableList;
+import com.google.common.collect.ImmutableMap;
+import com.google.common.collect.Lists;
+import com.google.inject.Inject;
 import org.jclouds.crypto.Sha512Crypt;
 import org.jclouds.javax.annotation.Nullable;
 import org.jclouds.scriptbuilder.domain.OsFamily;
@@ -34,25 +37,21 @@
 import org.jclouds.scriptbuilder.statements.ssh.AuthorizeRSAPublicKeys;
 import org.jclouds.scriptbuilder.statements.ssh.InstallRSAPrivateKey;
 
-import com.google.common.annotations.VisibleForTesting;
-import com.google.common.base.Function;
-import com.google.common.base.Joiner;
-import com.google.common.base.Objects;
-import com.google.common.base.Throwables;
-import com.google.common.collect.ImmutableList;
-import com.google.common.collect.ImmutableMap;
-import com.google.common.collect.Lists;
-import com.google.inject.Inject;
+import javax.inject.Named;
+import java.util.List;
+
+import static com.google.common.base.Objects.equal;
+import static com.google.common.base.Preconditions.checkNotNull;
 
 /**
- * Creates a statement that will add a given user to a machine ("login"), with optional 
+ * Creates a statement that will add a given user to a machine ("login"), with optional
  * password, groups, private key, and authorized keys.
  * <p>
  * This is supported on most *nix environments. Not currently supported on Windows.
  * <p>
  * Note that some places where this is used may have stricter requirements on the parameters
- * (for example {@link AdminAccess} requires password and keys).  
- * 
+ * (for example {@link AdminAccess} requires password and keys).
+ *
  * @author Adrian Cole
  */
 public class UserAdd implements Statement {
@@ -69,9 +68,10 @@
       private List<String> groups = Lists.newArrayList();
       private List<String> authorizeRSAPublicKeys = Lists.newArrayList();
       private String shell = "/bin/bash";
+      private String fullName;
 
       /**
-       * See --home in `man useradd`. 
+       * See --home in `man useradd`.
        */
       public UserAdd.Builder home(String home) {
          this.home = home;
@@ -79,7 +79,7 @@
       }
 
       /**
-       * See --base-dir in `man useradd`. 
+       * See --base-dir in `man useradd`.
        */
       public UserAdd.Builder defaultHome(String defaultHome) {
          this.defaultHome = defaultHome;
@@ -128,18 +128,22 @@
          return this;
       }
 
+      public UserAdd.Builder fullName(String fullName) {
+         this.fullName = fullName;
+         return this;
+      }
       public UserAdd build() {
-         return new UserAdd(login, groups, password, RSAPrivateKey, authorizeRSAPublicKeys, home, defaultHome, shell);
+         return new UserAdd(login, groups, password, RSAPrivateKey, authorizeRSAPublicKeys, home, defaultHome, shell, fullName);
       }
    }
 
    public UserAdd(String login, List<String> groups, @Nullable String password, @Nullable String installRSAPrivateKey,
          List<String> authorizeRSAPublicKeys, String defaultHome, String shell) {
-      this(login, groups, password, installRSAPrivateKey, authorizeRSAPublicKeys, null, defaultHome, shell);
+      this(login, groups, password, installRSAPrivateKey, authorizeRSAPublicKeys, null, defaultHome, shell, login);
    }
-   
+
    public UserAdd(String login, List<String> groups, @Nullable String password, @Nullable String installRSAPrivateKey,
-         List<String> authorizeRSAPublicKeys, @Nullable String home, String defaultHome, String shell) {
+         List<String> authorizeRSAPublicKeys, @Nullable String home, String defaultHome, String shell, String fullName) {
       this.login = checkNotNull(login, "login");
       this.password = password;
       this.groups = ImmutableList.copyOf(checkNotNull(groups, "groups"));
@@ -149,6 +153,7 @@
       this.home = home;
       this.defaultHome = checkNotNull(defaultHome, "defaultHome");
       this.shell = checkNotNull(shell, "shell");
+      this.fullName = fullName;
    }
 
    private final String home;
@@ -159,6 +164,7 @@
    private final String installRSAPrivateKey;
    private final List<String> authorizeRSAPublicKeys;
    private final String shell;
+   private final String fullName;
 
    private Function<String, String> cryptFunction = Sha512Crypt.function();
 
@@ -187,8 +193,13 @@
 
       ImmutableMap.Builder<String, String> userAddOptions = ImmutableMap.builder();
       // Include the username as the full name for now.
-      userAddOptions.put("-c", login);
-      
+
+      if (Strings.isNullOrEmpty(fullName)) {
+         userAddOptions.put("-c", login);
+      } else {
+         userAddOptions.put("-c", "'" + fullName + "'");
+      }
+
       userAddOptions.put("-s", shell);
       if (groups.size() > 0) {
          for (String group : groups)
diff --git a/scriptbuilder/src/test/java/org/jclouds/scriptbuilder/statements/login/AdminAccessBuilderSpecTest.java b/scriptbuilder/src/test/java/org/jclouds/scriptbuilder/statements/login/AdminAccessBuilderSpecTest.java
index cc60c91..d2c0f31 100644
--- a/scriptbuilder/src/test/java/org/jclouds/scriptbuilder/statements/login/AdminAccessBuilderSpecTest.java
+++ b/scriptbuilder/src/test/java/org/jclouds/scriptbuilder/statements/login/AdminAccessBuilderSpecTest.java
@@ -19,11 +19,13 @@
 
 package org.jclouds.scriptbuilder.statements.login;
 
+import static java.lang.String.format;
 import static org.jclouds.scriptbuilder.statements.login.AdminAccessBuilderSpec.parse;
 import static org.testng.Assert.assertEquals;
 import static org.testng.Assert.assertNull;
 import static org.testng.Assert.fail;
 
+import java.io.File;
 import java.lang.reflect.Field;
 
 import javax.inject.Provider;
@@ -104,7 +106,7 @@
 
    public void testParsePrivateKeyFile() {
       AdminAccessBuilderSpec spec = parse("adminPrivateKeyFile=target/test-classes/test");
-      assertEquals(spec.getAdminPrivateKeyFile().getPath(), "target/test-classes/test");
+      assertEquals(spec.getAdminPrivateKeyFile().getPath(), format("target%stest-classes%stest", File.separator, File.separator));
       assertNull(spec.adminHome);
       assertNull(spec.adminPassword);
       assertNull(spec.adminPublicKeyFile);
diff --git a/scriptbuilder/src/test/java/org/jclouds/scriptbuilder/statements/login/AdminAccessTest.java b/scriptbuilder/src/test/java/org/jclouds/scriptbuilder/statements/login/AdminAccessTest.java
index 5c95ed3..64d0fbe 100644
--- a/scriptbuilder/src/test/java/org/jclouds/scriptbuilder/statements/login/AdminAccessTest.java
+++ b/scriptbuilder/src/test/java/org/jclouds/scriptbuilder/statements/login/AdminAccessTest.java
@@ -52,15 +52,34 @@
       try {
          assertEquals(
                AdminAccess.builder().adminPassword("bar").adminPrivateKey("fooPrivateKey")
-                     .adminPublicKey("fooPublicKey").adminUsername("foo").adminHome("/over/ridden/foo").build()
+                     .adminPublicKey("fooPublicKey").adminUsername("foo")
+                     .adminHome("/over/ridden/foo").build()
                      .init(TestConfiguration.INSTANCE).render(OsFamily.UNIX), 
                      CharStreams.toString(Resources.newReaderSupplier(
                      Resources.getResource("test_adminaccess_params.sh"), Charsets.UTF_8)));
+
       } finally {
          TestConfiguration.INSTANCE.reset();
       }
    }
 
+   public void testWithParamsAndFullNameUNIX() throws IOException {
+      TestConfiguration.INSTANCE.reset();
+      try {
+         assertEquals(
+               AdminAccess.builder().adminPassword("bar").adminPrivateKey("fooPrivateKey")
+                     .adminPublicKey("fooPublicKey").adminUsername("foo").adminFullName("JClouds Foo")
+                     .adminHome("/over/ridden/foo").build()
+                     .init(TestConfiguration.INSTANCE).render(OsFamily.UNIX),
+               CharStreams.toString(Resources.newReaderSupplier(
+                     Resources.getResource("test_adminaccess_params_and_fullname.sh"), Charsets.UTF_8)));
+
+      } finally {
+         TestConfiguration.INSTANCE.reset();
+      }
+   }
+
+
    public void testOnlyInstallUserUNIX() throws IOException {
       TestConfiguration.INSTANCE.reset();
       try {
diff --git a/scriptbuilder/src/test/java/org/jclouds/scriptbuilder/statements/login/UserAddTest.java b/scriptbuilder/src/test/java/org/jclouds/scriptbuilder/statements/login/UserAddTest.java
index 27e2ac1..69b2c1b 100644
--- a/scriptbuilder/src/test/java/org/jclouds/scriptbuilder/statements/login/UserAddTest.java
+++ b/scriptbuilder/src/test/java/org/jclouds/scriptbuilder/statements/login/UserAddTest.java
@@ -36,6 +36,12 @@
                "mkdir -p /home/users\nuseradd -c me -s /bin/bash -m  -d /home/users/me me\nchown -R me /home/users/me\n");
    }
 
+   public void testWithFullNameUNIX() {
+      assertEquals(UserAdd.builder().login("me").fullName("JClouds Guy").build().render(OsFamily.UNIX),
+            "mkdir -p /home/users\nuseradd -c 'JClouds Guy' -s /bin/bash -m  -d /home/users/me me\nchown -R me /home/users/me\n");
+
+   }
+
    public void testWithBaseUNIX() {
       assertEquals(UserAdd.builder().login("me").defaultHome("/export/home").build().render(OsFamily.UNIX),
                "mkdir -p /export/home\nuseradd -c me -s /bin/bash -m  -d /export/home/me me\nchown -R me /export/home/me\n");
diff --git a/scriptbuilder/src/test/resources/test_adminaccess_params.sh b/scriptbuilder/src/test/resources/test_adminaccess_params.sh
index 123be32..f867d1f 100644
--- a/scriptbuilder/src/test/resources/test_adminaccess_params.sh
+++ b/scriptbuilder/src/test/resources/test_adminaccess_params.sh
@@ -5,7 +5,7 @@
 chmod 0440 /etc/sudoers
 mkdir -p /over/ridden
 groupadd -f wheel
-useradd -c foo -s /bin/bash -g wheel -m  -d /over/ridden/foo -p 'crypt(bar)' foo
+useradd -c 'foo' -s /bin/bash -g wheel -m  -d /over/ridden/foo -p 'crypt(bar)' foo
 mkdir -p /over/ridden/foo/.ssh
 cat >> /over/ridden/foo/.ssh/authorized_keys <<-'END_OF_JCLOUDS_FILE'
 	fooPublicKey
diff --git a/scriptbuilder/src/test/resources/test_adminaccess_params_and_fullname.sh b/scriptbuilder/src/test/resources/test_adminaccess_params_and_fullname.sh
new file mode 100644
index 0000000..e01028f
--- /dev/null
+++ b/scriptbuilder/src/test/resources/test_adminaccess_params_and_fullname.sh
@@ -0,0 +1,20 @@
+cat > /etc/sudoers <<-'END_OF_JCLOUDS_FILE'
+	root ALL = (ALL) ALL
+	%wheel ALL = (ALL) NOPASSWD:ALL
+END_OF_JCLOUDS_FILE
+chmod 0440 /etc/sudoers
+mkdir -p /over/ridden
+groupadd -f wheel
+useradd -c 'JClouds Foo' -s /bin/bash -g wheel -m  -d /over/ridden/foo -p 'crypt(bar)' foo
+mkdir -p /over/ridden/foo/.ssh
+cat >> /over/ridden/foo/.ssh/authorized_keys <<-'END_OF_JCLOUDS_FILE'
+	fooPublicKey
+END_OF_JCLOUDS_FILE
+chmod 600 /over/ridden/foo/.ssh/authorized_keys
+chown -R foo /over/ridden/foo
+exec 3<> /etc/ssh/sshd_config && awk -v TEXT="PasswordAuthentication no
+PermitRootLogin no
+" 'BEGIN {print TEXT}{print}' /etc/ssh/sshd_config >&3
+hash service 2>&- && service ssh reload 2>&- || /etc/init.d/ssh* reload
+awk -v user=^${SUDO_USER:=${USER}}: -v password='crypt(0)' 'BEGIN { FS=OFS=":" } $0 ~ user { $2 = password } 1' /etc/shadow >/etc/shadow.${SUDO_USER:=${USER}}
+test -f /etc/shadow.${SUDO_USER:=${USER}} && mv /etc/shadow.${SUDO_USER:=${USER}} /etc/shadow
diff --git a/scriptbuilder/src/test/resources/test_adminaccess_plainuser.sh b/scriptbuilder/src/test/resources/test_adminaccess_plainuser.sh
index f954fa8..3939006 100644
--- a/scriptbuilder/src/test/resources/test_adminaccess_plainuser.sh
+++ b/scriptbuilder/src/test/resources/test_adminaccess_plainuser.sh
@@ -1,5 +1,5 @@
 mkdir -p /home/users
-useradd -c defaultAdminUsername -s /bin/bash -m  -d /home/users/defaultAdminUsername -p 'crypt(0)' defaultAdminUsername
+useradd -c 'defaultAdminUsername' -s /bin/bash -m  -d /home/users/defaultAdminUsername -p 'crypt(0)' defaultAdminUsername
 mkdir -p /home/users/defaultAdminUsername/.ssh
 cat >> /home/users/defaultAdminUsername/.ssh/authorized_keys <<-'END_OF_JCLOUDS_FILE'
 	publicKey
diff --git a/scriptbuilder/src/test/resources/test_adminaccess_standard.sh b/scriptbuilder/src/test/resources/test_adminaccess_standard.sh
index 5430a4e..34319c6 100644
--- a/scriptbuilder/src/test/resources/test_adminaccess_standard.sh
+++ b/scriptbuilder/src/test/resources/test_adminaccess_standard.sh
@@ -5,7 +5,7 @@
 chmod 0440 /etc/sudoers
 mkdir -p /home/users
 groupadd -f wheel
-useradd -c defaultAdminUsername -s /bin/bash -g wheel -m  -d /home/users/defaultAdminUsername -p 'crypt(0)' defaultAdminUsername
+useradd -c 'defaultAdminUsername' -s /bin/bash -g wheel -m  -d /home/users/defaultAdminUsername -p 'crypt(0)' defaultAdminUsername
 mkdir -p /home/users/defaultAdminUsername/.ssh
 cat >> /home/users/defaultAdminUsername/.ssh/authorized_keys <<-'END_OF_JCLOUDS_FILE'
 	publicKey