diff --git a/labs/joyent-sdc/pom.xml b/labs/joyent-cloudapi/pom.xml
similarity index 74%
rename from labs/joyent-sdc/pom.xml
rename to labs/joyent-cloudapi/pom.xml
index e307093..1d0ac27 100644
--- a/labs/joyent-sdc/pom.xml
+++ b/labs/joyent-cloudapi/pom.xml
@@ -28,18 +28,18 @@
     <relativePath>../../project/pom.xml</relativePath>
   </parent>
   <groupId>org.jclouds.labs</groupId>
-  <artifactId>joyent-sdc</artifactId>
-  <name>jcloud joyent-sdc api</name>
+  <artifactId>joyent-cloudapi</artifactId>
+  <name>jcloud joyent-cloudapi api</name>
   <description>jclouds components to access an implementation of Joyent SDC</description>
   <packaging>bundle</packaging>
 
   <properties>
-    <test.joyent-sdc.endpoint>https://api.joyentcloud.com</test.joyent-sdc.endpoint>
-    <test.joyent-sdc.api-version>~6.5</test.joyent-sdc.api-version>
-    <test.joyent-sdc.build-version />
-    <test.joyent-sdc.identity>FIXME_IDENTITY</test.joyent-sdc.identity>
-    <test.joyent-sdc.credential>FIXME_CREDENTIALS</test.joyent-sdc.credential>
-    <jclouds.osgi.export>org.jclouds.joyent.sdc.v6_5*;version="${project.version}"</jclouds.osgi.export>
+    <test.joyent-cloudapi.endpoint>https://api.joyentcloud.com</test.joyent-cloudapi.endpoint>
+    <test.joyent-cloudapi.api-version>~6.5</test.joyent-cloudapi.api-version>
+    <test.joyent-cloudapi.build-version></test.joyent-cloudapi.build-version>
+    <test.joyent-cloudapi.identity>FIXME_IDENTITY</test.joyent-cloudapi.identity>
+    <test.joyent-cloudapi.credential>FIXME_CREDENTIALS</test.joyent-cloudapi.credential>
+    <jclouds.osgi.export>org.jclouds.joyent.cloudapi.v6_5*;version="${project.version}"</jclouds.osgi.export>
     <jclouds.osgi.import>
       org.jclouds.rest.internal;version="${project.version}",
       org.jclouds*;version="${project.version}",
@@ -104,11 +104,11 @@
                 </goals>
                 <configuration>
                   <systemPropertyVariables>
-                    <test.joyent-sdc.endpoint>${test.joyent-sdc.endpoint}</test.joyent-sdc.endpoint>
-                    <test.joyent-sdc.api-version>${test.joyent-sdc.api-version}</test.joyent-sdc.api-version>
-                    <test.joyent-sdc.build-version>${test.joyent-sdc.build-version}</test.joyent-sdc.build-version>
-                    <test.joyent-sdc.identity>${test.joyent-sdc.identity}</test.joyent-sdc.identity>
-                    <test.joyent-sdc.credential>${test.joyent-sdc.credential}</test.joyent-sdc.credential>
+                    <test.joyent-cloudapi.endpoint>${test.joyent-cloudapi.endpoint}</test.joyent-cloudapi.endpoint>
+                    <test.joyent-cloudapi.api-version>${test.joyent-cloudapi.api-version}</test.joyent-cloudapi.api-version>
+                    <test.joyent-cloudapi.build-version>${test.joyent-cloudapi.build-version}</test.joyent-cloudapi.build-version>
+                    <test.joyent-cloudapi.identity>${test.joyent-cloudapi.identity}</test.joyent-cloudapi.identity>
+                    <test.joyent-cloudapi.credential>${test.joyent-cloudapi.credential}</test.joyent-cloudapi.credential>
                   </systemPropertyVariables>
                 </configuration>
               </execution>
diff --git a/labs/joyent-sdc/src/main/java/org/jclouds/joyent/sdc/v6_5/SDCApiMetadata.java b/labs/joyent-cloudapi/src/main/java/org/jclouds/joyent/cloudapi/v6_5/JoyentCloudApiMetadata.java
similarity index 62%
rename from labs/joyent-sdc/src/main/java/org/jclouds/joyent/sdc/v6_5/SDCApiMetadata.java
rename to labs/joyent-cloudapi/src/main/java/org/jclouds/joyent/cloudapi/v6_5/JoyentCloudApiMetadata.java
index e9679e8..b83be9c 100644
--- a/labs/joyent-sdc/src/main/java/org/jclouds/joyent/sdc/v6_5/SDCApiMetadata.java
+++ b/labs/joyent-cloudapi/src/main/java/org/jclouds/joyent/cloudapi/v6_5/JoyentCloudApiMetadata.java
@@ -16,17 +16,17 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.jclouds.joyent.sdc.v6_5;
+package org.jclouds.joyent.cloudapi.v6_5;
 
 import java.net.URI;
 import java.util.Properties;
 
 import org.jclouds.apis.ApiMetadata;
 import org.jclouds.compute.ComputeServiceContext;
-import org.jclouds.joyent.sdc.v6_5.compute.config.SDCComputeServiceContextModule;
-import org.jclouds.joyent.sdc.v6_5.config.DatacentersAreZonesModule;
-import org.jclouds.joyent.sdc.v6_5.config.SDCProperties;
-import org.jclouds.joyent.sdc.v6_5.config.SDCRestClientModule;
+import org.jclouds.joyent.cloudapi.v6_5.compute.config.JoyentCloudComputeServiceContextModule;
+import org.jclouds.joyent.cloudapi.v6_5.config.DatacentersAreZonesModule;
+import org.jclouds.joyent.cloudapi.v6_5.config.JoyentCloudProperties;
+import org.jclouds.joyent.cloudapi.v6_5.config.JoyentCloudRestClientModule;
 import org.jclouds.rest.RestContext;
 import org.jclouds.rest.internal.BaseRestApiMetadata;
 
@@ -35,16 +35,16 @@
 import com.google.inject.Module;
 
 /**
- * Implementation of {@link ApiMetadata} for SDC ~6.5 API
+ * Implementation of {@link ApiMetadata} for JoyentCloud ~6.5 API
  * 
  * @author Adrian Cole
  */
-public class SDCApiMetadata extends BaseRestApiMetadata {
+public class JoyentCloudApiMetadata extends BaseRestApiMetadata {
 
    /** The serialVersionUID */
    private static final long serialVersionUID = 6725672099385580694L;
 
-   public static final TypeToken<RestContext<SDCClient, SDCAsyncClient>> CONTEXT_TOKEN = new TypeToken<RestContext<SDCClient, SDCAsyncClient>>() {
+   public static final TypeToken<RestContext<JoyentCloudClient, JoyentCloudAsyncClient>> CONTEXT_TOKEN = new TypeToken<RestContext<JoyentCloudClient, JoyentCloudAsyncClient>>() {
       private static final long serialVersionUID = -5070937833892503232L;
    };
 
@@ -53,39 +53,39 @@
       return new Builder().fromApiMetadata(this);
    }
 
-   public SDCApiMetadata() {
+   public JoyentCloudApiMetadata() {
       this(new Builder());
    }
 
-   protected SDCApiMetadata(Builder builder) {
+   protected JoyentCloudApiMetadata(Builder builder) {
       super(builder);
    }
 
    public static Properties defaultProperties() {
       Properties properties = BaseRestApiMetadata.defaultProperties();
-      properties.setProperty(SDCProperties.AUTOGENERATE_KEYS, "true");
+      properties.setProperty(JoyentCloudProperties.AUTOGENERATE_KEYS, "true");
       return properties;
    }
 
    public static class Builder extends BaseRestApiMetadata.Builder {
 
       protected Builder() {
-         super(SDCClient.class, SDCAsyncClient.class);
-         id("joyent-sdc")
-         .name("Joyent SDC API")
+         super(JoyentCloudClient.class, JoyentCloudAsyncClient.class);
+         id("joyent-cloudapi")
+         .name("Joyent Cloud API")
          .identityName("username")
          .credentialName("password")
-         .documentation(URI.create("http://sdc.joyent.org/sdcapi.html"))
+         .documentation(URI.create("http://cloudApi.joyent.org/cloudApiapi.html"))
          .version("~6.5")
          .defaultEndpoint("https://api.joyentcloud.com")
-         .defaultProperties(SDCApiMetadata.defaultProperties())
+         .defaultProperties(JoyentCloudApiMetadata.defaultProperties())
          .view(TypeToken.of(ComputeServiceContext.class))
-         .defaultModules(ImmutableSet.<Class<? extends Module>> of(DatacentersAreZonesModule.class, SDCRestClientModule.class, SDCComputeServiceContextModule.class));
+         .defaultModules(ImmutableSet.<Class<? extends Module>> of(DatacentersAreZonesModule.class, JoyentCloudRestClientModule.class, JoyentCloudComputeServiceContextModule.class));
       }
 
       @Override
-      public SDCApiMetadata build() {
-         return new SDCApiMetadata(this);
+      public JoyentCloudApiMetadata build() {
+         return new JoyentCloudApiMetadata(this);
       }
 
       @Override
diff --git a/labs/joyent-sdc/src/main/java/org/jclouds/joyent/sdc/v6_5/SDCAsyncClient.java b/labs/joyent-cloudapi/src/main/java/org/jclouds/joyent/cloudapi/v6_5/JoyentCloudAsyncClient.java
similarity index 78%
rename from labs/joyent-sdc/src/main/java/org/jclouds/joyent/sdc/v6_5/SDCAsyncClient.java
rename to labs/joyent-cloudapi/src/main/java/org/jclouds/joyent/cloudapi/v6_5/JoyentCloudAsyncClient.java
index f6b24b6..0279ac9 100644
--- a/labs/joyent-sdc/src/main/java/org/jclouds/joyent/sdc/v6_5/SDCAsyncClient.java
+++ b/labs/joyent-cloudapi/src/main/java/org/jclouds/joyent/cloudapi/v6_5/JoyentCloudAsyncClient.java
@@ -16,16 +16,16 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.jclouds.joyent.sdc.v6_5;
+package org.jclouds.joyent.cloudapi.v6_5;
 
 import java.util.Set;
 
 import org.jclouds.javax.annotation.Nullable;
-import org.jclouds.joyent.sdc.v6_5.features.DatacenterAsyncClient;
-import org.jclouds.joyent.sdc.v6_5.features.DatasetAsyncClient;
-import org.jclouds.joyent.sdc.v6_5.features.KeyAsyncClient;
-import org.jclouds.joyent.sdc.v6_5.features.MachineAsyncClient;
-import org.jclouds.joyent.sdc.v6_5.features.PackageAsyncClient;
+import org.jclouds.joyent.cloudapi.v6_5.features.DatacenterAsyncClient;
+import org.jclouds.joyent.cloudapi.v6_5.features.DatasetAsyncClient;
+import org.jclouds.joyent.cloudapi.v6_5.features.KeyAsyncClient;
+import org.jclouds.joyent.cloudapi.v6_5.features.MachineAsyncClient;
+import org.jclouds.joyent.cloudapi.v6_5.features.PackageAsyncClient;
 import org.jclouds.location.Zone;
 import org.jclouds.location.functions.ZoneToEndpoint;
 import org.jclouds.rest.annotations.Delegate;
@@ -34,14 +34,14 @@
 import com.google.inject.Provides;
 
 /**
- * Provides asynchronous access to SDC via their REST API.
+ * Provides asynchronous access to JoyentCloud via their REST API.
  * <p/>
  * 
- * @see SDCClient
- * @see <a href="http://sdc.joyent.org/sdcapi.html">api doc</a>
+ * @see JoyentCloudClient
+ * @see <a href="http://cloudApi.joyent.org/cloudApiapi.html">api doc</a>
  * @author Adrian Cole
  */
-public interface SDCAsyncClient {
+public interface JoyentCloudAsyncClient {
    
    /**
     * 
diff --git a/labs/joyent-sdc/src/main/java/org/jclouds/joyent/sdc/v6_5/SDCClient.java b/labs/joyent-cloudapi/src/main/java/org/jclouds/joyent/cloudapi/v6_5/JoyentCloudClient.java
similarity index 80%
rename from labs/joyent-sdc/src/main/java/org/jclouds/joyent/sdc/v6_5/SDCClient.java
rename to labs/joyent-cloudapi/src/main/java/org/jclouds/joyent/cloudapi/v6_5/JoyentCloudClient.java
index fca489b..3b1489d 100644
--- a/labs/joyent-sdc/src/main/java/org/jclouds/joyent/sdc/v6_5/SDCClient.java
+++ b/labs/joyent-cloudapi/src/main/java/org/jclouds/joyent/cloudapi/v6_5/JoyentCloudClient.java
@@ -16,18 +16,18 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.jclouds.joyent.sdc.v6_5;
+package org.jclouds.joyent.cloudapi.v6_5;
 
 import java.util.Set;
 import java.util.concurrent.TimeUnit;
 
 import org.jclouds.concurrent.Timeout;
 import org.jclouds.javax.annotation.Nullable;
-import org.jclouds.joyent.sdc.v6_5.features.DatacenterClient;
-import org.jclouds.joyent.sdc.v6_5.features.DatasetClient;
-import org.jclouds.joyent.sdc.v6_5.features.KeyClient;
-import org.jclouds.joyent.sdc.v6_5.features.MachineClient;
-import org.jclouds.joyent.sdc.v6_5.features.PackageClient;
+import org.jclouds.joyent.cloudapi.v6_5.features.DatacenterClient;
+import org.jclouds.joyent.cloudapi.v6_5.features.DatasetClient;
+import org.jclouds.joyent.cloudapi.v6_5.features.KeyClient;
+import org.jclouds.joyent.cloudapi.v6_5.features.MachineClient;
+import org.jclouds.joyent.cloudapi.v6_5.features.PackageClient;
 import org.jclouds.location.Zone;
 import org.jclouds.location.functions.ZoneToEndpoint;
 import org.jclouds.rest.annotations.Delegate;
@@ -36,15 +36,15 @@
 import com.google.inject.Provides;
 
 /**
- * Provides synchronous access to SDC.
+ * Provides synchronous access to JoyentCloud.
  * <p/>
  * 
- * @see SDCAsyncClient
- * @see <a href="http://sdc.joyent.org/sdcapi.html">api doc</a>
+ * @see JoyentCloudAsyncClient
+ * @see <a href="http://cloudApi.joyent.org/cloudApiapi.html">api doc</a>
  * @author Adrian Cole
  */
 @Timeout(duration = 60, timeUnit = TimeUnit.SECONDS)
-public interface SDCClient {
+public interface JoyentCloudClient {
 
    /**
     * 
diff --git a/labs/joyent-sdc/src/main/java/org/jclouds/joyent/sdc/v6_5/binders/BindKeyToJsonPayload.java b/labs/joyent-cloudapi/src/main/java/org/jclouds/joyent/cloudapi/v6_5/binders/BindKeyToJsonPayload.java
similarity index 93%
rename from labs/joyent-sdc/src/main/java/org/jclouds/joyent/sdc/v6_5/binders/BindKeyToJsonPayload.java
rename to labs/joyent-cloudapi/src/main/java/org/jclouds/joyent/cloudapi/v6_5/binders/BindKeyToJsonPayload.java
index 15dc5e6..9a4b3d9 100644
--- a/labs/joyent-sdc/src/main/java/org/jclouds/joyent/sdc/v6_5/binders/BindKeyToJsonPayload.java
+++ b/labs/joyent-cloudapi/src/main/java/org/jclouds/joyent/cloudapi/v6_5/binders/BindKeyToJsonPayload.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.jclouds.joyent.sdc.v6_5.binders;
+package org.jclouds.joyent.cloudapi.v6_5.binders;
 
 import java.util.Map;
 
@@ -24,7 +24,7 @@
 import javax.inject.Singleton;
 
 import org.jclouds.http.HttpRequest;
-import org.jclouds.joyent.sdc.v6_5.domain.Key;
+import org.jclouds.joyent.cloudapi.v6_5.domain.Key;
 import org.jclouds.json.Json;
 import org.jclouds.rest.binders.BindToJsonPayload;
 
diff --git a/labs/joyent-sdc/src/main/java/org/jclouds/joyent/sdc/v6_5/compute/SDCComputeService.java b/labs/joyent-cloudapi/src/main/java/org/jclouds/joyent/cloudapi/v6_5/compute/JoyentCloudComputeService.java
similarity index 87%
rename from labs/joyent-sdc/src/main/java/org/jclouds/joyent/sdc/v6_5/compute/SDCComputeService.java
rename to labs/joyent-cloudapi/src/main/java/org/jclouds/joyent/cloudapi/v6_5/compute/JoyentCloudComputeService.java
index e6e4cc9..28a0c9c 100644
--- a/labs/joyent-sdc/src/main/java/org/jclouds/joyent/sdc/v6_5/compute/SDCComputeService.java
+++ b/labs/joyent-cloudapi/src/main/java/org/jclouds/joyent/cloudapi/v6_5/compute/JoyentCloudComputeService.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.jclouds.joyent.sdc.v6_5.compute;
+package org.jclouds.joyent.cloudapi.v6_5.compute;
 
 import static com.google.common.base.Preconditions.checkNotNull;
 import static org.jclouds.compute.config.ComputeServiceProperties.TIMEOUT_NODE_RUNNING;
@@ -58,13 +58,13 @@
 import org.jclouds.compute.strategy.SuspendNodeStrategy;
 import org.jclouds.domain.Credentials;
 import org.jclouds.domain.Location;
-import org.jclouds.joyent.sdc.v6_5.SDCClient;
-import org.jclouds.joyent.sdc.v6_5.compute.internal.KeyAndPrivateKey;
-import org.jclouds.joyent.sdc.v6_5.compute.options.SDCTemplateOptions;
-import org.jclouds.joyent.sdc.v6_5.domain.Key;
-import org.jclouds.joyent.sdc.v6_5.domain.datacenterscoped.DatacenterAndName;
-import org.jclouds.joyent.sdc.v6_5.features.KeyClient;
-import org.jclouds.joyent.sdc.v6_5.predicates.KeyPredicates;
+import org.jclouds.joyent.cloudapi.v6_5.JoyentCloudClient;
+import org.jclouds.joyent.cloudapi.v6_5.compute.internal.KeyAndPrivateKey;
+import org.jclouds.joyent.cloudapi.v6_5.compute.options.JoyentCloudTemplateOptions;
+import org.jclouds.joyent.cloudapi.v6_5.domain.Key;
+import org.jclouds.joyent.cloudapi.v6_5.domain.datacenterscoped.DatacenterAndName;
+import org.jclouds.joyent.cloudapi.v6_5.features.KeyClient;
+import org.jclouds.joyent.cloudapi.v6_5.predicates.KeyPredicates;
 import org.jclouds.scriptbuilder.functions.InitAdminAccess;
 
 import com.google.common.base.Function;
@@ -80,14 +80,14 @@
  * @author Adrian Cole
  */
 @Singleton
-public class SDCComputeService extends BaseComputeService {
-   protected final SDCClient novaClient;
+public class JoyentCloudComputeService extends BaseComputeService {
+   protected final JoyentCloudClient novaClient;
    protected final LoadingCache<DatacenterAndName, KeyAndPrivateKey> keyCache;
    protected final Function<Set<? extends NodeMetadata>, Multimap<String, String>> orphanedGroupsByDatacenterId;
    protected final GroupNamingConvention.Factory namingConvention;
 
    @Inject
-   protected SDCComputeService(ComputeServiceContext context, Map<String, Credentials> credentialStore,
+   protected JoyentCloudComputeService(ComputeServiceContext context, Map<String, Credentials> credentialStore,
          @Memoized Supplier<Set<? extends Image>> images, @Memoized Supplier<Set<? extends Hardware>> sizes,
          @Memoized Supplier<Set<? extends Location>> locations, ListNodesStrategy listNodesStrategy,
          GetImageStrategy getImageStrategy, GetNodeMetadataStrategy getNodeMetadataStrategy,
@@ -101,7 +101,7 @@
          InitializeRunScriptOnNodeOrPlaceInBadMap.Factory initScriptRunnerFactory,
          RunScriptOnNode.Factory runScriptOnNodeFactory, InitAdminAccess initAdminAccess,
          PersistNodeCredentials persistNodeCredentials, Timeouts timeouts,
-         @Named(Constants.PROPERTY_USER_THREADS) ExecutorService executor, SDCClient novaClient,
+         @Named(Constants.PROPERTY_USER_THREADS) ExecutorService executor, JoyentCloudClient novaClient,
          LoadingCache<DatacenterAndName, KeyAndPrivateKey> keyCache,
          Function<Set<? extends NodeMetadata>, Multimap<String, String>> orphanedGroupsByDatacenterId,
          GroupNamingConvention.Factory namingConvention, Optional<ImageExtension> imageExtension) {
@@ -143,11 +143,11 @@
    }
 
    /**
-    * returns template options, except of type {@link SDCTemplateOptions}.
+    * returns template options, except of type {@link JoyentCloudTemplateOptions}.
     */
    @Override
-   public SDCTemplateOptions templateOptions() {
-      return SDCTemplateOptions.class.cast(super.templateOptions());
+   public JoyentCloudTemplateOptions templateOptions() {
+      return JoyentCloudTemplateOptions.class.cast(super.templateOptions());
    }
 
 }
diff --git a/labs/joyent-sdc/src/main/java/org/jclouds/joyent/sdc/v6_5/compute/SDCComputeServiceAdapter.java b/labs/joyent-cloudapi/src/main/java/org/jclouds/joyent/cloudapi/v6_5/compute/JoyentCloudComputeServiceAdapter.java
similarity index 71%
rename from labs/joyent-sdc/src/main/java/org/jclouds/joyent/sdc/v6_5/compute/SDCComputeServiceAdapter.java
rename to labs/joyent-cloudapi/src/main/java/org/jclouds/joyent/cloudapi/v6_5/compute/JoyentCloudComputeServiceAdapter.java
index 97ce63f..ad87a4d 100644
--- a/labs/joyent-sdc/src/main/java/org/jclouds/joyent/sdc/v6_5/compute/SDCComputeServiceAdapter.java
+++ b/labs/joyent-cloudapi/src/main/java/org/jclouds/joyent/cloudapi/v6_5/compute/JoyentCloudComputeServiceAdapter.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.jclouds.joyent.sdc.v6_5.compute;
+package org.jclouds.joyent.cloudapi.v6_5.compute;
 
 import static com.google.common.base.Preconditions.checkNotNull;
 import static com.google.common.collect.Iterables.transform;
@@ -33,14 +33,14 @@
 import org.jclouds.compute.reference.ComputeServiceConstants;
 import org.jclouds.domain.Location;
 import org.jclouds.domain.LoginCredentials;
-import org.jclouds.joyent.sdc.v6_5.SDCClient;
-import org.jclouds.joyent.sdc.v6_5.domain.Dataset;
-import org.jclouds.joyent.sdc.v6_5.domain.Machine;
-import org.jclouds.joyent.sdc.v6_5.domain.datacenterscoped.DatacenterAndId;
-import org.jclouds.joyent.sdc.v6_5.domain.datacenterscoped.DatasetInDatacenter;
-import org.jclouds.joyent.sdc.v6_5.domain.datacenterscoped.MachineInDatacenter;
-import org.jclouds.joyent.sdc.v6_5.domain.datacenterscoped.PackageInDatacenter;
-import org.jclouds.joyent.sdc.v6_5.options.CreateMachineOptions;
+import org.jclouds.joyent.cloudapi.v6_5.JoyentCloudClient;
+import org.jclouds.joyent.cloudapi.v6_5.domain.Dataset;
+import org.jclouds.joyent.cloudapi.v6_5.domain.Machine;
+import org.jclouds.joyent.cloudapi.v6_5.domain.datacenterscoped.DatacenterAndId;
+import org.jclouds.joyent.cloudapi.v6_5.domain.datacenterscoped.DatasetInDatacenter;
+import org.jclouds.joyent.cloudapi.v6_5.domain.datacenterscoped.MachineInDatacenter;
+import org.jclouds.joyent.cloudapi.v6_5.domain.datacenterscoped.PackageInDatacenter;
+import org.jclouds.joyent.cloudapi.v6_5.options.CreateMachineOptions;
 import org.jclouds.location.Zone;
 import org.jclouds.logging.Logger;
 
@@ -50,24 +50,24 @@
 import com.google.common.collect.ImmutableSet.Builder;
 
 /**
- * The adapter used by the SDCComputeServiceContextModule to interface the
- * SDC-specific domain model to the computeService generic domain model.
+ * The adapter used by the JoyentCloudComputeServiceContextModule to interface the
+ * JoyentCloud-specific domain model to the computeService generic domain model.
  * 
  * @author Adrian Cole
  */
-public class SDCComputeServiceAdapter implements
+public class JoyentCloudComputeServiceAdapter implements
       ComputeServiceAdapter<MachineInDatacenter, PackageInDatacenter, DatasetInDatacenter, Location> {
 
    @Resource
    @Named(ComputeServiceConstants.COMPUTE_LOGGER)
    protected Logger logger = Logger.NULL;
 
-   protected final SDCClient sdcClient;
+   protected final JoyentCloudClient cloudApiClient;
    protected final Supplier<Set<String>> datacenterIds;
 
    @Inject
-   public SDCComputeServiceAdapter(SDCClient sdcClient, @Zone Supplier<Set<String>> datacenterIds) {
-      this.sdcClient = checkNotNull(sdcClient, "sdcClient");
+   public JoyentCloudComputeServiceAdapter(JoyentCloudClient cloudApiClient, @Zone Supplier<Set<String>> datacenterIds) {
+      this.cloudApiClient = checkNotNull(cloudApiClient, "cloudApiClient");
       this.datacenterIds = checkNotNull(datacenterIds, "datacenterIds");
    }
 
@@ -87,7 +87,7 @@
 
       logger.debug(">> creating new machine datacenter(%s) datasetURN(%s) options(%s)", datacenterId, datasetURN,
             options);
-      Machine machine = sdcClient.getMachineClientForDatacenter(datacenterId).createWithDataset(datasetURN, options);
+      Machine machine = cloudApiClient.getMachineClientForDatacenter(datacenterId).createWithDataset(datasetURN, options);
 
       logger.trace("<< machine(%s)", machine.getId());
 
@@ -105,11 +105,11 @@
    public Iterable<PackageInDatacenter> listHardwareProfiles() {
       Builder<PackageInDatacenter> builder = ImmutableSet.builder();
       for (final String datacenterId : datacenterIds.get()) {
-         builder.addAll(transform(sdcClient.getPackageClientForDatacenter(datacenterId).list(),
-               new Function<org.jclouds.joyent.sdc.v6_5.domain.Package, PackageInDatacenter>() {
+         builder.addAll(transform(cloudApiClient.getPackageClientForDatacenter(datacenterId).list(),
+               new Function<org.jclouds.joyent.cloudapi.v6_5.domain.Package, PackageInDatacenter>() {
 
                   @Override
-                  public PackageInDatacenter apply(org.jclouds.joyent.sdc.v6_5.domain.Package arg0) {
+                  public PackageInDatacenter apply(org.jclouds.joyent.cloudapi.v6_5.domain.Package arg0) {
                      return new PackageInDatacenter(arg0, datacenterId);
                   }
 
@@ -122,7 +122,7 @@
    public Iterable<DatasetInDatacenter> listImages() {
       Builder<DatasetInDatacenter> builder = ImmutableSet.builder();
       for (final String datacenterId : datacenterIds.get()) {
-         builder.addAll(transform(sdcClient.getDatasetClientForDatacenter(datacenterId).list(),
+         builder.addAll(transform(cloudApiClient.getDatasetClientForDatacenter(datacenterId).list(),
                new Function<Dataset, DatasetInDatacenter>() {
 
                   @Override
@@ -139,7 +139,7 @@
    public Iterable<MachineInDatacenter> listNodes() {
       Builder<MachineInDatacenter> builder = ImmutableSet.builder();
       for (final String datacenterId : datacenterIds.get()) {
-         builder.addAll(transform(sdcClient.getMachineClientForDatacenter(datacenterId).list(),
+         builder.addAll(transform(cloudApiClient.getMachineClientForDatacenter(datacenterId).list(),
                new Function<Machine, MachineInDatacenter>() {
 
                   @Override
@@ -161,7 +161,7 @@
    @Override
    public MachineInDatacenter getNode(String id) {
       DatacenterAndId datacenterAndId = DatacenterAndId.fromSlashEncoded(id);
-      Machine machine = sdcClient.getMachineClientForDatacenter(datacenterAndId.getDatacenter()).get(
+      Machine machine = cloudApiClient.getMachineClientForDatacenter(datacenterAndId.getDatacenter()).get(
             datacenterAndId.getId());
       return machine == null ? null : new MachineInDatacenter(machine, datacenterAndId.getDatacenter());
    }
@@ -169,7 +169,7 @@
    @Override
    public DatasetInDatacenter getImage(String id) {
       DatacenterAndId datacenterAndId = DatacenterAndId.fromSlashEncoded(id);
-      Dataset dataset = sdcClient.getDatasetClientForDatacenter(datacenterAndId.getDatacenter()).get(
+      Dataset dataset = cloudApiClient.getDatasetClientForDatacenter(datacenterAndId.getDatacenter()).get(
             datacenterAndId.getId());
       return dataset == null ? null : new DatasetInDatacenter(dataset, datacenterAndId.getDatacenter());
    }
@@ -177,26 +177,26 @@
    @Override
    public void destroyNode(String id) {
       DatacenterAndId datacenterAndId = DatacenterAndId.fromSlashEncoded(id);
-      sdcClient.getMachineClientForDatacenter(datacenterAndId.getDatacenter()).delete(datacenterAndId.getId());
+      cloudApiClient.getMachineClientForDatacenter(datacenterAndId.getDatacenter()).delete(datacenterAndId.getId());
    }
 
    @Override
    public void rebootNode(String id) {
       DatacenterAndId datacenterAndId = DatacenterAndId.fromSlashEncoded(id);
-      sdcClient.getMachineClientForDatacenter(datacenterAndId.getDatacenter()).reboot(datacenterAndId.getId());
+      cloudApiClient.getMachineClientForDatacenter(datacenterAndId.getDatacenter()).reboot(datacenterAndId.getId());
    }
 
    @Override
    public void resumeNode(String id) {
       DatacenterAndId datacenterAndId = DatacenterAndId.fromSlashEncoded(id);
-      sdcClient.getMachineClientForDatacenter(datacenterAndId.getDatacenter()).stop(datacenterAndId.getId());
+      cloudApiClient.getMachineClientForDatacenter(datacenterAndId.getDatacenter()).stop(datacenterAndId.getId());
 
    }
 
    @Override
    public void suspendNode(String id) {
       DatacenterAndId datacenterAndId = DatacenterAndId.fromSlashEncoded(id);
-      sdcClient.getMachineClientForDatacenter(datacenterAndId.getDatacenter()).start(datacenterAndId.getId());
+      cloudApiClient.getMachineClientForDatacenter(datacenterAndId.getDatacenter()).start(datacenterAndId.getId());
 
    }
 
diff --git a/labs/joyent-sdc/src/main/java/org/jclouds/joyent/sdc/v6_5/compute/config/SDCComputeServiceContextModule.java b/labs/joyent-cloudapi/src/main/java/org/jclouds/joyent/cloudapi/v6_5/compute/config/JoyentCloudComputeServiceContextModule.java
similarity index 73%
rename from labs/joyent-sdc/src/main/java/org/jclouds/joyent/sdc/v6_5/compute/config/SDCComputeServiceContextModule.java
rename to labs/joyent-cloudapi/src/main/java/org/jclouds/joyent/cloudapi/v6_5/compute/config/JoyentCloudComputeServiceContextModule.java
index 1dc909f..09172d4 100644
--- a/labs/joyent-sdc/src/main/java/org/jclouds/joyent/sdc/v6_5/compute/config/SDCComputeServiceContextModule.java
+++ b/labs/joyent-cloudapi/src/main/java/org/jclouds/joyent/cloudapi/v6_5/compute/config/JoyentCloudComputeServiceContextModule.java
@@ -16,9 +16,9 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.jclouds.joyent.sdc.v6_5.compute.config;
+package org.jclouds.joyent.cloudapi.v6_5.compute.config;
 
-import static org.jclouds.joyent.sdc.v6_5.config.SDCProperties.AUTOGENERATE_KEYS;
+import static org.jclouds.joyent.cloudapi.v6_5.config.JoyentCloudProperties.AUTOGENERATE_KEYS;
 
 import java.security.SecureRandom;
 import java.util.Map;
@@ -38,23 +38,23 @@
 import org.jclouds.compute.strategy.impl.CreateNodesWithGroupEncodedIntoNameThenAddToSet;
 import org.jclouds.domain.Location;
 import org.jclouds.functions.IdentityFunction;
-import org.jclouds.joyent.sdc.v6_5.compute.SDCComputeService;
-import org.jclouds.joyent.sdc.v6_5.compute.SDCComputeServiceAdapter;
-import org.jclouds.joyent.sdc.v6_5.compute.functions.DatasetInDatacenterToImage;
-import org.jclouds.joyent.sdc.v6_5.compute.functions.DatasetToOperatingSystem;
-import org.jclouds.joyent.sdc.v6_5.compute.functions.MachineInDatacenterToNodeMetadata;
-import org.jclouds.joyent.sdc.v6_5.compute.functions.OrphanedGroupsByDatacenterId;
-import org.jclouds.joyent.sdc.v6_5.compute.functions.PackageInDatacenterToHardware;
-import org.jclouds.joyent.sdc.v6_5.compute.internal.KeyAndPrivateKey;
-import org.jclouds.joyent.sdc.v6_5.compute.loaders.CreateUniqueKey;
-import org.jclouds.joyent.sdc.v6_5.compute.options.SDCTemplateOptions;
-import org.jclouds.joyent.sdc.v6_5.compute.strategy.ApplySDCTemplateOptionsCreateNodesWithGroupEncodedIntoNameThenAddToSet;
-import org.jclouds.joyent.sdc.v6_5.domain.Dataset;
-import org.jclouds.joyent.sdc.v6_5.domain.Machine;
-import org.jclouds.joyent.sdc.v6_5.domain.datacenterscoped.DatacenterAndName;
-import org.jclouds.joyent.sdc.v6_5.domain.datacenterscoped.DatasetInDatacenter;
-import org.jclouds.joyent.sdc.v6_5.domain.datacenterscoped.MachineInDatacenter;
-import org.jclouds.joyent.sdc.v6_5.domain.datacenterscoped.PackageInDatacenter;
+import org.jclouds.joyent.cloudapi.v6_5.compute.JoyentCloudComputeService;
+import org.jclouds.joyent.cloudapi.v6_5.compute.JoyentCloudComputeServiceAdapter;
+import org.jclouds.joyent.cloudapi.v6_5.compute.functions.DatasetInDatacenterToImage;
+import org.jclouds.joyent.cloudapi.v6_5.compute.functions.DatasetToOperatingSystem;
+import org.jclouds.joyent.cloudapi.v6_5.compute.functions.MachineInDatacenterToNodeMetadata;
+import org.jclouds.joyent.cloudapi.v6_5.compute.functions.OrphanedGroupsByDatacenterId;
+import org.jclouds.joyent.cloudapi.v6_5.compute.functions.PackageInDatacenterToHardware;
+import org.jclouds.joyent.cloudapi.v6_5.compute.internal.KeyAndPrivateKey;
+import org.jclouds.joyent.cloudapi.v6_5.compute.loaders.CreateUniqueKey;
+import org.jclouds.joyent.cloudapi.v6_5.compute.options.JoyentCloudTemplateOptions;
+import org.jclouds.joyent.cloudapi.v6_5.compute.strategy.ApplyJoyentCloudTemplateOptionsCreateNodesWithGroupEncodedIntoNameThenAddToSet;
+import org.jclouds.joyent.cloudapi.v6_5.domain.Dataset;
+import org.jclouds.joyent.cloudapi.v6_5.domain.Machine;
+import org.jclouds.joyent.cloudapi.v6_5.domain.datacenterscoped.DatacenterAndName;
+import org.jclouds.joyent.cloudapi.v6_5.domain.datacenterscoped.DatasetInDatacenter;
+import org.jclouds.joyent.cloudapi.v6_5.domain.datacenterscoped.MachineInDatacenter;
+import org.jclouds.joyent.cloudapi.v6_5.domain.datacenterscoped.PackageInDatacenter;
 import org.jclouds.util.Iterables2;
 import org.jclouds.util.Suppliers2;
 
@@ -73,11 +73,11 @@
 import com.google.inject.name.Names;
 
 /**
- * Module for building a compute service context for SDC
+ * Module for building a compute service context for Cloud Api
  * 
  * @author Adrian Cole
  */
-public class SDCComputeServiceContextModule extends
+public class JoyentCloudComputeServiceContextModule extends
       ComputeServiceAdapterContextModule<MachineInDatacenter, PackageInDatacenter, DatasetInDatacenter, Location> {
 
    @SuppressWarnings("unchecked")
@@ -86,7 +86,7 @@
       super.configure();
       bind(
             new TypeLiteral<ComputeServiceAdapter<MachineInDatacenter, PackageInDatacenter, DatasetInDatacenter, Location>>() {
-            }).to(SDCComputeServiceAdapter.class);
+            }).to(JoyentCloudComputeServiceAdapter.class);
 
       bind(new TypeLiteral<Function<MachineInDatacenter, NodeMetadata>>() {
       }).to(MachineInDatacenterToNodeMetadata.class);
@@ -107,11 +107,11 @@
       bind(new TypeLiteral<Function<Set<? extends NodeMetadata>, Multimap<String, String>>>() {
       }).to(OrphanedGroupsByDatacenterId.class);
 
-      bind(ComputeService.class).to(SDCComputeService.class);
-      bind(TemplateOptions.class).to(SDCTemplateOptions.class);
+      bind(ComputeService.class).to(JoyentCloudComputeService.class);
+      bind(TemplateOptions.class).to(JoyentCloudTemplateOptions.class);
 
       bind(CreateNodesWithGroupEncodedIntoNameThenAddToSet.class).to(
-      ApplySDCTemplateOptionsCreateNodesWithGroupEncodedIntoNameThenAddToSet.class);
+      ApplyJoyentCloudTemplateOptionsCreateNodesWithGroupEncodedIntoNameThenAddToSet.class);
       
       bind(new TypeLiteral<CacheLoader<DatacenterAndName, KeyAndPrivateKey>>() {
       }).to(CreateUniqueKey.class);
@@ -119,7 +119,7 @@
    
    @Override
    protected TemplateOptions provideTemplateOptions(Injector injector, TemplateOptions options) {
-      return options.as(SDCTemplateOptions.class)
+      return options.as(JoyentCloudTemplateOptions.class)
                     .generateKey(injector.getInstance(
                           com.google.inject.Key.get(boolean.class, Names.named(AUTOGENERATE_KEYS))));
    }
diff --git a/labs/joyent-sdc/src/main/java/org/jclouds/joyent/sdc/v6_5/compute/functions/DatasetInDatacenterToImage.java b/labs/joyent-cloudapi/src/main/java/org/jclouds/joyent/cloudapi/v6_5/compute/functions/DatasetInDatacenterToImage.java
similarity index 89%
rename from labs/joyent-sdc/src/main/java/org/jclouds/joyent/sdc/v6_5/compute/functions/DatasetInDatacenterToImage.java
rename to labs/joyent-cloudapi/src/main/java/org/jclouds/joyent/cloudapi/v6_5/compute/functions/DatasetInDatacenterToImage.java
index 87a4053..3ffd155 100644
--- a/labs/joyent-sdc/src/main/java/org/jclouds/joyent/sdc/v6_5/compute/functions/DatasetInDatacenterToImage.java
+++ b/labs/joyent-cloudapi/src/main/java/org/jclouds/joyent/cloudapi/v6_5/compute/functions/DatasetInDatacenterToImage.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.jclouds.joyent.sdc.v6_5.compute.functions;
+package org.jclouds.joyent.cloudapi.v6_5.compute.functions;
 
 import static com.google.common.base.Preconditions.checkNotNull;
 import static com.google.common.base.Preconditions.checkState;
@@ -29,14 +29,14 @@
 import org.jclouds.compute.domain.ImageBuilder;
 import org.jclouds.compute.domain.OperatingSystem;
 import org.jclouds.domain.Location;
-import org.jclouds.joyent.sdc.v6_5.domain.Dataset;
-import org.jclouds.joyent.sdc.v6_5.domain.datacenterscoped.DatasetInDatacenter;
+import org.jclouds.joyent.cloudapi.v6_5.domain.Dataset;
+import org.jclouds.joyent.cloudapi.v6_5.domain.datacenterscoped.DatasetInDatacenter;
 
 import com.google.common.base.Function;
 import com.google.common.base.Supplier;
 
 /**
- * A function for transforming a sdc-specific Image into a generic Image object.
+ * A function for transforming a cloudApi-specific Image into a generic Image object.
  * 
  * @author Adrian Cole
  */
diff --git a/labs/joyent-sdc/src/main/java/org/jclouds/joyent/sdc/v6_5/compute/functions/DatasetToOperatingSystem.java b/labs/joyent-cloudapi/src/main/java/org/jclouds/joyent/cloudapi/v6_5/compute/functions/DatasetToOperatingSystem.java
similarity index 93%
rename from labs/joyent-sdc/src/main/java/org/jclouds/joyent/sdc/v6_5/compute/functions/DatasetToOperatingSystem.java
rename to labs/joyent-cloudapi/src/main/java/org/jclouds/joyent/cloudapi/v6_5/compute/functions/DatasetToOperatingSystem.java
index e195f7c..7bfdb5c 100644
--- a/labs/joyent-sdc/src/main/java/org/jclouds/joyent/sdc/v6_5/compute/functions/DatasetToOperatingSystem.java
+++ b/labs/joyent-cloudapi/src/main/java/org/jclouds/joyent/cloudapi/v6_5/compute/functions/DatasetToOperatingSystem.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.jclouds.joyent.sdc.v6_5.compute.functions;
+package org.jclouds.joyent.cloudapi.v6_5.compute.functions;
 
 import java.util.List;
 import java.util.Map;
@@ -30,7 +30,7 @@
 import org.jclouds.compute.domain.OsFamily;
 import org.jclouds.compute.reference.ComputeServiceConstants;
 import org.jclouds.compute.util.ComputeServiceUtils;
-import org.jclouds.joyent.sdc.v6_5.domain.Dataset;
+import org.jclouds.joyent.cloudapi.v6_5.domain.Dataset;
 import org.jclouds.logging.Logger;
 
 import com.google.common.base.Function;
@@ -38,7 +38,7 @@
 import com.google.common.collect.ImmutableList;
 
 /**
- * A function for transforming a sdc specific Dataset into a generic
+ * A function for transforming a cloudApi specific Dataset into a generic
  * OperatingSystem object.
  * 
  * @author Adrian Cole
diff --git a/labs/joyent-sdc/src/main/java/org/jclouds/joyent/sdc/v6_5/compute/functions/MachineInDatacenterToNodeMetadata.java b/labs/joyent-cloudapi/src/main/java/org/jclouds/joyent/cloudapi/v6_5/compute/functions/MachineInDatacenterToNodeMetadata.java
similarity index 92%
rename from labs/joyent-sdc/src/main/java/org/jclouds/joyent/sdc/v6_5/compute/functions/MachineInDatacenterToNodeMetadata.java
rename to labs/joyent-cloudapi/src/main/java/org/jclouds/joyent/cloudapi/v6_5/compute/functions/MachineInDatacenterToNodeMetadata.java
index 7d3482c..e1986f7 100644
--- a/labs/joyent-sdc/src/main/java/org/jclouds/joyent/sdc/v6_5/compute/functions/MachineInDatacenterToNodeMetadata.java
+++ b/labs/joyent-cloudapi/src/main/java/org/jclouds/joyent/cloudapi/v6_5/compute/functions/MachineInDatacenterToNodeMetadata.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.jclouds.joyent.sdc.v6_5.compute.functions;
+package org.jclouds.joyent.cloudapi.v6_5.compute.functions;
 import static com.google.common.base.Preconditions.checkNotNull;
 import static com.google.common.base.Preconditions.checkState;
 import static com.google.common.base.Predicates.not;
@@ -43,11 +43,11 @@
 import org.jclouds.compute.functions.GroupNamingConvention;
 import org.jclouds.compute.reference.ComputeServiceConstants;
 import org.jclouds.domain.Location;
-import org.jclouds.joyent.sdc.v6_5.domain.Machine;
-import org.jclouds.joyent.sdc.v6_5.domain.datacenterscoped.DatacenterAndId;
-import org.jclouds.joyent.sdc.v6_5.domain.datacenterscoped.DatacenterAndName;
-import org.jclouds.joyent.sdc.v6_5.domain.datacenterscoped.MachineInDatacenter;
-import org.jclouds.joyent.sdc.v6_5.reference.Metadata;
+import org.jclouds.joyent.cloudapi.v6_5.domain.Machine;
+import org.jclouds.joyent.cloudapi.v6_5.domain.datacenterscoped.DatacenterAndId;
+import org.jclouds.joyent.cloudapi.v6_5.domain.datacenterscoped.DatacenterAndName;
+import org.jclouds.joyent.cloudapi.v6_5.domain.datacenterscoped.MachineInDatacenter;
+import org.jclouds.joyent.cloudapi.v6_5.reference.Metadata;
 import org.jclouds.logging.Logger;
 import org.jclouds.util.InetAddresses2;
 
@@ -56,7 +56,7 @@
 import com.google.common.base.Supplier;
 
 /**
- * A function for transforming a sdc-specific Machine into a generic
+ * A function for transforming a cloudApi-specific Machine into a generic
  * NodeMetadata object.
  * 
  * @author Adrian Cole
diff --git a/labs/joyent-sdc/src/main/java/org/jclouds/joyent/sdc/v6_5/compute/functions/OrphanedGroupsByDatacenterId.java b/labs/joyent-cloudapi/src/main/java/org/jclouds/joyent/cloudapi/v6_5/compute/functions/OrphanedGroupsByDatacenterId.java
similarity index 92%
rename from labs/joyent-sdc/src/main/java/org/jclouds/joyent/sdc/v6_5/compute/functions/OrphanedGroupsByDatacenterId.java
rename to labs/joyent-cloudapi/src/main/java/org/jclouds/joyent/cloudapi/v6_5/compute/functions/OrphanedGroupsByDatacenterId.java
index 5e0bbfc..53186d1 100644
--- a/labs/joyent-sdc/src/main/java/org/jclouds/joyent/sdc/v6_5/compute/functions/OrphanedGroupsByDatacenterId.java
+++ b/labs/joyent-cloudapi/src/main/java/org/jclouds/joyent/cloudapi/v6_5/compute/functions/OrphanedGroupsByDatacenterId.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.jclouds.joyent.sdc.v6_5.compute.functions;
+package org.jclouds.joyent.cloudapi.v6_5.compute.functions;
 
 import static com.google.common.base.Preconditions.checkNotNull;
 import static com.google.common.collect.Iterables.filter;
@@ -29,8 +29,8 @@
 import org.jclouds.compute.ComputeService;
 import org.jclouds.compute.domain.NodeMetadata;
 import org.jclouds.compute.predicates.NodePredicates;
-import org.jclouds.joyent.sdc.v6_5.compute.predicates.AllNodesInGroupTerminated;
-import org.jclouds.joyent.sdc.v6_5.domain.datacenterscoped.DatacenterAndName;
+import org.jclouds.joyent.cloudapi.v6_5.compute.predicates.AllNodesInGroupTerminated;
+import org.jclouds.joyent.cloudapi.v6_5.domain.datacenterscoped.DatacenterAndName;
 
 import com.google.common.annotations.VisibleForTesting;
 import com.google.common.base.Function;
diff --git a/labs/joyent-sdc/src/main/java/org/jclouds/joyent/sdc/v6_5/compute/functions/PackageInDatacenterToHardware.java b/labs/joyent-cloudapi/src/main/java/org/jclouds/joyent/cloudapi/v6_5/compute/functions/PackageInDatacenterToHardware.java
similarity index 88%
rename from labs/joyent-sdc/src/main/java/org/jclouds/joyent/sdc/v6_5/compute/functions/PackageInDatacenterToHardware.java
rename to labs/joyent-cloudapi/src/main/java/org/jclouds/joyent/cloudapi/v6_5/compute/functions/PackageInDatacenterToHardware.java
index 2aa55db..64bd24c 100644
--- a/labs/joyent-sdc/src/main/java/org/jclouds/joyent/sdc/v6_5/compute/functions/PackageInDatacenterToHardware.java
+++ b/labs/joyent-cloudapi/src/main/java/org/jclouds/joyent/cloudapi/v6_5/compute/functions/PackageInDatacenterToHardware.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.jclouds.joyent.sdc.v6_5.compute.functions;
+package org.jclouds.joyent.cloudapi.v6_5.compute.functions;
 
 import static com.google.common.base.Preconditions.checkNotNull;
 import static com.google.common.base.Preconditions.checkState;
@@ -30,13 +30,13 @@
 import org.jclouds.compute.domain.Processor;
 import org.jclouds.compute.domain.internal.VolumeImpl;
 import org.jclouds.domain.Location;
-import org.jclouds.joyent.sdc.v6_5.domain.datacenterscoped.PackageInDatacenter;
+import org.jclouds.joyent.cloudapi.v6_5.domain.datacenterscoped.PackageInDatacenter;
 
 import com.google.common.base.Function;
 import com.google.common.base.Supplier;
 
 /**
- * A function for transforming the sdc specific PackageInDatacenter object to
+ * A function for transforming the cloudApi specific PackageInDatacenter object to
  * the generic Hardware object.
  * 
  * @author Adrian Cole
@@ -55,7 +55,7 @@
       Location location = locationIndex.get().get(pkgInDatacenter.getDatacenter());
       checkState(location != null, "location %s not in locationIndex: %s", pkgInDatacenter.getDatacenter(),
             locationIndex.get());
-      org.jclouds.joyent.sdc.v6_5.domain.Package pkg = pkgInDatacenter.get();
+      org.jclouds.joyent.cloudapi.v6_5.domain.Package pkg = pkgInDatacenter.get();
       return new HardwareBuilder().id(pkgInDatacenter.slashEncode()).providerId(pkg.getName()).name(pkg.getName())
             .ram(pkg.getMemorySizeMb())
             // TODO: no api call to get processors.. either hard-code or
diff --git a/labs/joyent-sdc/src/main/java/org/jclouds/joyent/sdc/v6_5/compute/internal/KeyAndPrivateKey.java b/labs/joyent-cloudapi/src/main/java/org/jclouds/joyent/cloudapi/v6_5/compute/internal/KeyAndPrivateKey.java
similarity index 94%
rename from labs/joyent-sdc/src/main/java/org/jclouds/joyent/sdc/v6_5/compute/internal/KeyAndPrivateKey.java
rename to labs/joyent-cloudapi/src/main/java/org/jclouds/joyent/cloudapi/v6_5/compute/internal/KeyAndPrivateKey.java
index 04c75a5..3318d54 100644
--- a/labs/joyent-sdc/src/main/java/org/jclouds/joyent/sdc/v6_5/compute/internal/KeyAndPrivateKey.java
+++ b/labs/joyent-cloudapi/src/main/java/org/jclouds/joyent/cloudapi/v6_5/compute/internal/KeyAndPrivateKey.java
@@ -16,11 +16,11 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.jclouds.joyent.sdc.v6_5.compute.internal;
+package org.jclouds.joyent.cloudapi.v6_5.compute.internal;
 
 import static com.google.common.base.Preconditions.checkNotNull;
 
-import org.jclouds.joyent.sdc.v6_5.domain.Key;
+import org.jclouds.joyent.cloudapi.v6_5.domain.Key;
 
 import com.google.common.base.Objects;
 
diff --git a/labs/joyent-sdc/src/main/java/org/jclouds/joyent/sdc/v6_5/compute/loaders/CreateUniqueKey.java b/labs/joyent-cloudapi/src/main/java/org/jclouds/joyent/cloudapi/v6_5/compute/loaders/CreateUniqueKey.java
similarity index 80%
rename from labs/joyent-sdc/src/main/java/org/jclouds/joyent/sdc/v6_5/compute/loaders/CreateUniqueKey.java
rename to labs/joyent-cloudapi/src/main/java/org/jclouds/joyent/cloudapi/v6_5/compute/loaders/CreateUniqueKey.java
index ca19266..05b0a15 100644
--- a/labs/joyent-sdc/src/main/java/org/jclouds/joyent/sdc/v6_5/compute/loaders/CreateUniqueKey.java
+++ b/labs/joyent-cloudapi/src/main/java/org/jclouds/joyent/cloudapi/v6_5/compute/loaders/CreateUniqueKey.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.jclouds.joyent.sdc.v6_5.compute.loaders;
+package org.jclouds.joyent.cloudapi.v6_5.compute.loaders;
 
 import static com.google.common.base.Preconditions.checkNotNull;
 
@@ -32,10 +32,10 @@
 import org.jclouds.compute.reference.ComputeServiceConstants;
 import org.jclouds.crypto.Crypto;
 import org.jclouds.crypto.SshKeys;
-import org.jclouds.joyent.sdc.v6_5.SDCClient;
-import org.jclouds.joyent.sdc.v6_5.compute.internal.KeyAndPrivateKey;
-import org.jclouds.joyent.sdc.v6_5.domain.Key;
-import org.jclouds.joyent.sdc.v6_5.domain.datacenterscoped.DatacenterAndName;
+import org.jclouds.joyent.cloudapi.v6_5.JoyentCloudClient;
+import org.jclouds.joyent.cloudapi.v6_5.compute.internal.KeyAndPrivateKey;
+import org.jclouds.joyent.cloudapi.v6_5.domain.Key;
+import org.jclouds.joyent.cloudapi.v6_5.domain.datacenterscoped.DatacenterAndName;
 import org.jclouds.logging.Logger;
 
 import com.google.common.cache.CacheLoader;
@@ -49,14 +49,14 @@
    @Resource
    @Named(ComputeServiceConstants.COMPUTE_LOGGER)
    protected Logger logger = Logger.NULL;
-   protected final SDCClient sdcClient;
+   protected final JoyentCloudClient cloudApiClient;
    protected final GroupNamingConvention.Factory namingConvention;
    protected final Crypto crypto;
    protected final Provider<SecureRandom> secureRandom;
 
    @Inject
-   public CreateUniqueKey(SDCClient sdcClient, GroupNamingConvention.Factory namingConvention, Crypto crypto, Provider<SecureRandom> secureRandom) {
-      this.sdcClient = checkNotNull(sdcClient, "sdcClient");
+   public CreateUniqueKey(JoyentCloudClient cloudApiClient, GroupNamingConvention.Factory namingConvention, Crypto crypto, Provider<SecureRandom> secureRandom) {
+      this.cloudApiClient = checkNotNull(cloudApiClient, "cloudApiClient");
       this.namingConvention = checkNotNull(namingConvention, "namingConvention");
       this.crypto = checkNotNull(crypto, "crypto");
       this.secureRandom = checkNotNull(secureRandom, "secureRandom");
@@ -77,7 +77,7 @@
       while (key == null) {
          String name = namingConvention.createWithoutPrefix().uniqueNameForGroup(prefix);
          try {
-            key = sdcClient.getKeyClient().create(Key.builder().name(name).key(publicKey).build());
+            key = cloudApiClient.getKeyClient().create(Key.builder().name(name).key(publicKey).build());
          } catch (IllegalStateException e) {
             logger.trace("error creating keypair named %s, %s", name, e.getMessage());
          }
diff --git a/labs/joyent-cloudapi/src/main/java/org/jclouds/joyent/cloudapi/v6_5/compute/options/JoyentCloudTemplateOptions.java b/labs/joyent-cloudapi/src/main/java/org/jclouds/joyent/cloudapi/v6_5/compute/options/JoyentCloudTemplateOptions.java
new file mode 100644
index 0000000..e652afb
--- /dev/null
+++ b/labs/joyent-cloudapi/src/main/java/org/jclouds/joyent/cloudapi/v6_5/compute/options/JoyentCloudTemplateOptions.java
@@ -0,0 +1,339 @@
+/**
+ * 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.joyent.cloudapi.v6_5.compute.options;
+
+import static com.google.common.base.Objects.equal;
+
+import java.util.Map;
+
+import org.jclouds.compute.options.TemplateOptions;
+import org.jclouds.domain.LoginCredentials;
+import org.jclouds.scriptbuilder.domain.Statement;
+
+import com.google.common.base.Objects;
+import com.google.common.base.Objects.ToStringHelper;
+
+/**
+ * Contains options supported in the {@code ComputeService#createNodesInGroup} operation on the
+ * "joyent-cloudapi" provider. 
+ * 
+ * <h2>Usage</h2> The recommended way to instantiate a
+ * JoyentCloudTemplateOptions object is to statically import JoyentCloudTemplateOptions.Builder.* and
+ * invoke a static creation method followed by an instance mutator (if needed):
+ * <p/>
+ * <code>
+ * import static org.jclouds.joyent.cloudapi.v6_5.compute.options.JoyentCloudTemplateOptions.Builder.*;
+ * <p/>
+ * ComputeService client = // get connection
+ * templateBuilder.options(inboundPorts(22, 80, 8080, 443));
+ * Set<? extends NodeMetadata> set = client.createNodesInGroup(tag, 2, templateBuilder.build());
+ * <code>
+ * 
+ * @author Adrian Cole
+ */
+public class JoyentCloudTemplateOptions extends TemplateOptions implements Cloneable {
+   @Override
+   public JoyentCloudTemplateOptions clone() {
+      JoyentCloudTemplateOptions options = new JoyentCloudTemplateOptions();
+      copyTo(options);
+      return options;
+   }
+
+   @Override
+   public void copyTo(TemplateOptions to) {
+      super.copyTo(to);
+      if (to instanceof JoyentCloudTemplateOptions) {
+         JoyentCloudTemplateOptions eTo = JoyentCloudTemplateOptions.class.cast(to);
+         eTo.generateKey(shouldGenerateKey());
+      }
+   }
+
+   protected boolean generateKey = false;
+
+   @Override
+   public boolean equals(Object o) {
+      if (this == o)
+         return true;
+      if (o == null || getClass() != o.getClass())
+         return false;
+      JoyentCloudTemplateOptions that = JoyentCloudTemplateOptions.class.cast(o);
+      return super.equals(that) && equal(this.generateKey, that.generateKey);
+   }
+
+   @Override
+   public int hashCode() {
+      return Objects.hashCode(super.hashCode(), generateKey);
+   }
+
+   @Override
+   public ToStringHelper string() {
+      ToStringHelper toString = super.string();
+      if (generateKey)
+         toString.add("generateKey", generateKey);
+      return toString;
+   }
+
+   /**
+    * @see #shouldGenerateKey()
+    */
+   public JoyentCloudTemplateOptions generateKey(boolean enable) {
+      this.generateKey = enable;
+      return this;
+   }
+   
+   /**
+    *
+    * @return true if auto generation of keys is enabled
+    */
+   public boolean shouldGenerateKey() {
+      return generateKey;
+   }
+   
+   public static class Builder {
+
+      /**
+       * @see JoyentCloudTemplateOptions#shouldGenerateKey() 
+       */
+      public static JoyentCloudTemplateOptions generateKey(boolean enable) {
+         return new JoyentCloudTemplateOptions().generateKey(enable);
+      }
+      
+      // methods that only facilitate returning the correct object type
+
+      /**
+       * @see TemplateOptions#inboundPorts
+       */
+      public static JoyentCloudTemplateOptions inboundPorts(int... ports) {
+         JoyentCloudTemplateOptions options = new JoyentCloudTemplateOptions();
+         return JoyentCloudTemplateOptions.class.cast(options.inboundPorts(ports));
+      }
+
+      /**
+       * @see TemplateOptions#port
+       */
+      public static JoyentCloudTemplateOptions blockOnPort(int port, int seconds) {
+         JoyentCloudTemplateOptions options = new JoyentCloudTemplateOptions();
+         return JoyentCloudTemplateOptions.class.cast(options.blockOnPort(port, seconds));
+      }
+
+      /**
+       * @see TemplateOptions#installPrivateKey
+       */
+      public static JoyentCloudTemplateOptions installPrivateKey(String rsaKey) {
+         JoyentCloudTemplateOptions options = new JoyentCloudTemplateOptions();
+         return JoyentCloudTemplateOptions.class.cast(options.installPrivateKey(rsaKey));
+      }
+
+      /**
+       * @see TemplateOptions#authorizePublicKey
+       */
+      public static JoyentCloudTemplateOptions authorizePublicKey(String rsaKey) {
+         JoyentCloudTemplateOptions options = new JoyentCloudTemplateOptions();
+         return JoyentCloudTemplateOptions.class.cast(options.authorizePublicKey(rsaKey));
+      }
+
+      /**
+       * @see TemplateOptions#userMetadata
+       */
+      public static JoyentCloudTemplateOptions userMetadata(Map<String, String> userMetadata) {
+         JoyentCloudTemplateOptions options = new JoyentCloudTemplateOptions();
+         return JoyentCloudTemplateOptions.class.cast(options.userMetadata(userMetadata));
+      }
+
+      /**
+       * @see TemplateOptions#overrideLoginUser
+       */
+      public static JoyentCloudTemplateOptions overrideLoginUser(String user) {
+         JoyentCloudTemplateOptions options = new JoyentCloudTemplateOptions();
+         return options.overrideLoginUser(user);
+      }
+
+      /**
+       * @see TemplateOptions#overrideLoginPassword
+       */
+      public static JoyentCloudTemplateOptions overrideLoginPassword(String password) {
+         JoyentCloudTemplateOptions options = new JoyentCloudTemplateOptions();
+         return options.overrideLoginPassword(password);
+      }
+
+      /**
+       * @see TemplateOptions#overrideLoginPrivateKey
+       */
+      public static JoyentCloudTemplateOptions overrideLoginPrivateKey(String privateKey) {
+         JoyentCloudTemplateOptions options = new JoyentCloudTemplateOptions();
+         return options.overrideLoginPrivateKey(privateKey);
+      }
+
+      /**
+       * @see TemplateOptions#overrideAuthenticateSudo
+       */
+      public static JoyentCloudTemplateOptions overrideAuthenticateSudo(boolean authenticateSudo) {
+         JoyentCloudTemplateOptions options = new JoyentCloudTemplateOptions();
+         return options.overrideAuthenticateSudo(authenticateSudo);
+      }
+
+      /**
+       * @see TemplateOptions#overrideLoginCredentials
+       */
+      public static JoyentCloudTemplateOptions overrideLoginCredentials(LoginCredentials credentials) {
+         JoyentCloudTemplateOptions options = new JoyentCloudTemplateOptions();
+         return options.overrideLoginCredentials(credentials);
+      }
+      
+      /**
+       * @see TemplateOptions#blockUntilRunning
+       */
+      public static JoyentCloudTemplateOptions blockUntilRunning(boolean blockUntilRunning) {
+         JoyentCloudTemplateOptions options = new JoyentCloudTemplateOptions();
+         return options.blockUntilRunning(blockUntilRunning);
+      }
+
+   }
+
+   // methods that only facilitate returning the correct object type
+
+   /**
+    * {@inheritDoc}
+    */
+   @Override
+   public JoyentCloudTemplateOptions blockOnPort(int port, int seconds) {
+      return JoyentCloudTemplateOptions.class.cast(super.blockOnPort(port, seconds));
+   }
+
+   /**
+    * {@inheritDoc}
+    */
+   @Override
+   public JoyentCloudTemplateOptions inboundPorts(int... ports) {
+      return JoyentCloudTemplateOptions.class.cast(super.inboundPorts(ports));
+   }
+
+   /**
+    * {@inheritDoc}
+    */
+   @Override
+   public JoyentCloudTemplateOptions authorizePublicKey(String publicKey) {
+      return JoyentCloudTemplateOptions.class.cast(super.authorizePublicKey(publicKey));
+   }
+
+   /**
+    * {@inheritDoc}
+    */
+   @Override
+   public JoyentCloudTemplateOptions installPrivateKey(String privateKey) {
+      return JoyentCloudTemplateOptions.class.cast(super.installPrivateKey(privateKey));
+   }
+
+   /**
+    * {@inheritDoc}
+    */
+   @Override
+   public JoyentCloudTemplateOptions blockUntilRunning(boolean blockUntilRunning) {
+      return JoyentCloudTemplateOptions.class.cast(super.blockUntilRunning(blockUntilRunning));
+   }
+
+   /**
+    * {@inheritDoc}
+    */
+   @Override
+   public JoyentCloudTemplateOptions dontAuthorizePublicKey() {
+      return JoyentCloudTemplateOptions.class.cast(super.dontAuthorizePublicKey());
+   }
+
+   /**
+    * {@inheritDoc}
+    */
+   @Override
+   public JoyentCloudTemplateOptions nameTask(String name) {
+      return JoyentCloudTemplateOptions.class.cast(super.nameTask(name));
+   }
+
+   /**
+    * {@inheritDoc}
+    */
+   @Override
+   public JoyentCloudTemplateOptions runAsRoot(boolean runAsRoot) {
+      return JoyentCloudTemplateOptions.class.cast(super.runAsRoot(runAsRoot));
+   }
+
+   /**
+    * {@inheritDoc}
+    */
+   @Override
+   public JoyentCloudTemplateOptions runScript(Statement script) {
+      return JoyentCloudTemplateOptions.class.cast(super.runScript(script));
+   }
+
+   /**
+    * {@inheritDoc}
+    */
+   @Override
+   public JoyentCloudTemplateOptions overrideLoginCredentials(LoginCredentials overridingCredentials) {
+      return JoyentCloudTemplateOptions.class.cast(super.overrideLoginCredentials(overridingCredentials));
+   }
+
+   /**
+    * {@inheritDoc}
+    */
+   @Override
+   public JoyentCloudTemplateOptions overrideLoginPassword(String password) {
+      return JoyentCloudTemplateOptions.class.cast(super.overrideLoginPassword(password));
+   }
+
+   /**
+    * {@inheritDoc}
+    */
+   @Override
+   public JoyentCloudTemplateOptions overrideLoginPrivateKey(String privateKey) {
+      return JoyentCloudTemplateOptions.class.cast(super.overrideLoginPrivateKey(privateKey));
+   }
+
+   /**
+    * {@inheritDoc}
+    */
+   @Override
+   public JoyentCloudTemplateOptions overrideLoginUser(String loginUser) {
+      return JoyentCloudTemplateOptions.class.cast(super.overrideLoginUser(loginUser));
+   }
+
+   /**
+    * {@inheritDoc}
+    */
+   @Override
+   public JoyentCloudTemplateOptions overrideAuthenticateSudo(boolean authenticateSudo) {
+      return JoyentCloudTemplateOptions.class.cast(super.overrideAuthenticateSudo(authenticateSudo));
+   }
+
+   /**
+    * {@inheritDoc}
+    */
+   @Override
+   public JoyentCloudTemplateOptions userMetadata(Map<String, String> userMetadata) {
+      return JoyentCloudTemplateOptions.class.cast(super.userMetadata(userMetadata));
+   }
+
+   /**
+    * {@inheritDoc}
+    */
+   @Override
+   public JoyentCloudTemplateOptions userMetadata(String key, String value) {
+      return JoyentCloudTemplateOptions.class.cast(super.userMetadata(key, value));
+   }
+
+}
diff --git a/labs/joyent-sdc/src/main/java/org/jclouds/joyent/sdc/v6_5/compute/predicates/AllNodesInGroupTerminated.java b/labs/joyent-cloudapi/src/main/java/org/jclouds/joyent/cloudapi/v6_5/compute/predicates/AllNodesInGroupTerminated.java
similarity index 92%
rename from labs/joyent-sdc/src/main/java/org/jclouds/joyent/sdc/v6_5/compute/predicates/AllNodesInGroupTerminated.java
rename to labs/joyent-cloudapi/src/main/java/org/jclouds/joyent/cloudapi/v6_5/compute/predicates/AllNodesInGroupTerminated.java
index ee20fdd..e35504b 100644
--- a/labs/joyent-sdc/src/main/java/org/jclouds/joyent/sdc/v6_5/compute/predicates/AllNodesInGroupTerminated.java
+++ b/labs/joyent-cloudapi/src/main/java/org/jclouds/joyent/cloudapi/v6_5/compute/predicates/AllNodesInGroupTerminated.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.jclouds.joyent.sdc.v6_5.compute.predicates;
+package org.jclouds.joyent.cloudapi.v6_5.compute.predicates;
 
 import static com.google.common.base.Preconditions.checkNotNull;
 import static com.google.common.base.Predicates.and;
@@ -28,7 +28,7 @@
 import javax.inject.Inject;
 
 import org.jclouds.compute.ComputeService;
-import org.jclouds.joyent.sdc.v6_5.domain.datacenterscoped.DatacenterAndName;
+import org.jclouds.joyent.cloudapi.v6_5.domain.datacenterscoped.DatacenterAndName;
 
 import com.google.common.base.Predicate;
 
diff --git a/labs/joyent-sdc/src/main/java/org/jclouds/joyent/sdc/v6_5/compute/strategy/ApplySDCTemplateOptionsCreateNodesWithGroupEncodedIntoNameThenAddToSet.java b/labs/joyent-cloudapi/src/main/java/org/jclouds/joyent/cloudapi/v6_5/compute/strategy/ApplyJoyentCloudTemplateOptionsCreateNodesWithGroupEncodedIntoNameThenAddToSet.java
similarity index 86%
rename from labs/joyent-sdc/src/main/java/org/jclouds/joyent/sdc/v6_5/compute/strategy/ApplySDCTemplateOptionsCreateNodesWithGroupEncodedIntoNameThenAddToSet.java
rename to labs/joyent-cloudapi/src/main/java/org/jclouds/joyent/cloudapi/v6_5/compute/strategy/ApplyJoyentCloudTemplateOptionsCreateNodesWithGroupEncodedIntoNameThenAddToSet.java
index 0644756..0078685 100644
--- a/labs/joyent-sdc/src/main/java/org/jclouds/joyent/sdc/v6_5/compute/strategy/ApplySDCTemplateOptionsCreateNodesWithGroupEncodedIntoNameThenAddToSet.java
+++ b/labs/joyent-cloudapi/src/main/java/org/jclouds/joyent/cloudapi/v6_5/compute/strategy/ApplyJoyentCloudTemplateOptionsCreateNodesWithGroupEncodedIntoNameThenAddToSet.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.jclouds.joyent.sdc.v6_5.compute.strategy;
+package org.jclouds.joyent.cloudapi.v6_5.compute.strategy;
 
 import static com.google.common.base.Preconditions.checkArgument;
 import static com.google.common.base.Preconditions.checkNotNull;
@@ -39,9 +39,9 @@
 import org.jclouds.compute.strategy.CustomizeNodeAndAddToGoodMapOrPutExceptionIntoBadMap;
 import org.jclouds.compute.strategy.ListNodesStrategy;
 import org.jclouds.compute.strategy.impl.CreateNodesWithGroupEncodedIntoNameThenAddToSet;
-import org.jclouds.joyent.sdc.v6_5.compute.internal.KeyAndPrivateKey;
-import org.jclouds.joyent.sdc.v6_5.compute.options.SDCTemplateOptions;
-import org.jclouds.joyent.sdc.v6_5.domain.datacenterscoped.DatacenterAndName;
+import org.jclouds.joyent.cloudapi.v6_5.compute.internal.KeyAndPrivateKey;
+import org.jclouds.joyent.cloudapi.v6_5.compute.options.JoyentCloudTemplateOptions;
+import org.jclouds.joyent.cloudapi.v6_5.domain.datacenterscoped.DatacenterAndName;
 
 import com.google.common.cache.LoadingCache;
 import com.google.common.collect.Multimap;
@@ -51,13 +51,13 @@
  * @author Adrian Cole
  */
 @Singleton
-public class ApplySDCTemplateOptionsCreateNodesWithGroupEncodedIntoNameThenAddToSet extends
+public class ApplyJoyentCloudTemplateOptionsCreateNodesWithGroupEncodedIntoNameThenAddToSet extends
          CreateNodesWithGroupEncodedIntoNameThenAddToSet {
 
    private final LoadingCache<DatacenterAndName, KeyAndPrivateKey> keyCache;
 
    @Inject
-   protected ApplySDCTemplateOptionsCreateNodesWithGroupEncodedIntoNameThenAddToSet(
+   protected ApplyJoyentCloudTemplateOptionsCreateNodesWithGroupEncodedIntoNameThenAddToSet(
             CreateNodeWithGroupEncodedIntoName addNodeWithTagStrategy,
             ListNodesStrategy listNodesStrategy,
             GroupNamingConvention.Factory namingConvention,
@@ -75,7 +75,7 @@
 
       Template mutableTemplate = template.clone();
 
-      SDCTemplateOptions templateOptions = SDCTemplateOptions.class.cast(mutableTemplate.getOptions());
+      JoyentCloudTemplateOptions templateOptions = JoyentCloudTemplateOptions.class.cast(mutableTemplate.getOptions());
 
       assert template.getOptions().equals(templateOptions) : "options didn't clone properly";
 
diff --git a/labs/joyent-sdc/src/main/java/org/jclouds/joyent/sdc/v6_5/config/DatacentersAreZonesModule.java b/labs/joyent-cloudapi/src/main/java/org/jclouds/joyent/cloudapi/v6_5/config/DatacentersAreZonesModule.java
similarity index 87%
rename from labs/joyent-sdc/src/main/java/org/jclouds/joyent/sdc/v6_5/config/DatacentersAreZonesModule.java
rename to labs/joyent-cloudapi/src/main/java/org/jclouds/joyent/cloudapi/v6_5/config/DatacentersAreZonesModule.java
index 48b2c51..1765518 100644
--- a/labs/joyent-sdc/src/main/java/org/jclouds/joyent/sdc/v6_5/config/DatacentersAreZonesModule.java
+++ b/labs/joyent-cloudapi/src/main/java/org/jclouds/joyent/cloudapi/v6_5/config/DatacentersAreZonesModule.java
@@ -16,13 +16,13 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.jclouds.joyent.sdc.v6_5.config;
+package org.jclouds.joyent.cloudapi.v6_5.config;
 
 import static org.jclouds.rest.config.BinderUtils.bindClientAndAsyncClient;
 
-import org.jclouds.joyent.sdc.v6_5.features.DatacenterAsyncClient;
-import org.jclouds.joyent.sdc.v6_5.features.DatacenterClient;
-import org.jclouds.joyent.sdc.v6_5.suppliers.ZoneIdToURIFromDatacentersClient;
+import org.jclouds.joyent.cloudapi.v6_5.features.DatacenterAsyncClient;
+import org.jclouds.joyent.cloudapi.v6_5.features.DatacenterClient;
+import org.jclouds.joyent.cloudapi.v6_5.suppliers.ZoneIdToURIFromDatacentersClient;
 import org.jclouds.location.suppliers.ImplicitLocationSupplier;
 import org.jclouds.location.suppliers.ZoneIdToURISupplier;
 import org.jclouds.location.suppliers.ZoneIdsSupplier;
diff --git a/labs/joyent-sdc/src/main/java/org/jclouds/joyent/sdc/v6_5/config/SDCParserModule.java b/labs/joyent-cloudapi/src/main/java/org/jclouds/joyent/cloudapi/v6_5/config/JoyentCloudParserModule.java
similarity index 76%
rename from labs/joyent-sdc/src/main/java/org/jclouds/joyent/sdc/v6_5/config/SDCParserModule.java
rename to labs/joyent-cloudapi/src/main/java/org/jclouds/joyent/cloudapi/v6_5/config/JoyentCloudParserModule.java
index ae0974e..a1d298f 100644
--- a/labs/joyent-sdc/src/main/java/org/jclouds/joyent/sdc/v6_5/config/SDCParserModule.java
+++ b/labs/joyent-cloudapi/src/main/java/org/jclouds/joyent/cloudapi/v6_5/config/JoyentCloudParserModule.java
@@ -16,15 +16,15 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.jclouds.joyent.sdc.v6_5.config;
+package org.jclouds.joyent.cloudapi.v6_5.config;
 
 import java.lang.reflect.Type;
 import java.util.Map;
 
 import javax.inject.Singleton;
 
-import org.jclouds.joyent.sdc.v6_5.domain.Machine;
-import org.jclouds.joyent.sdc.v6_5.functions.internal.SDCTypeAdapters;
+import org.jclouds.joyent.cloudapi.v6_5.domain.Machine;
+import org.jclouds.joyent.cloudapi.v6_5.functions.internal.JoyentCloudTypeAdapters;
 
 import com.google.common.collect.ImmutableMap;
 import com.google.inject.AbstractModule;
@@ -33,13 +33,13 @@
 /**
  * @author Adrian Cole
  */
-public class SDCParserModule extends AbstractModule {
+public class JoyentCloudParserModule extends AbstractModule {
 
    @Provides
    @Singleton
    public Map<Type, Object> provideCustomAdapterBindings() {
-      return ImmutableMap.<Type, Object> of(Machine.State.class, new SDCTypeAdapters.MachineStateAdapter(), Type.class,
-            new SDCTypeAdapters.SDCTypeAdapter());
+      return ImmutableMap.<Type, Object> of(Machine.State.class, new JoyentCloudTypeAdapters.MachineStateAdapter(), Type.class,
+            new JoyentCloudTypeAdapters.JoyentCloudTypeAdapter());
    }
 
    @Override
diff --git a/labs/joyent-sdc/src/main/java/org/jclouds/joyent/sdc/v6_5/config/SDCProperties.java b/labs/joyent-cloudapi/src/main/java/org/jclouds/joyent/cloudapi/v6_5/config/JoyentCloudProperties.java
similarity index 83%
rename from labs/joyent-sdc/src/main/java/org/jclouds/joyent/sdc/v6_5/config/SDCProperties.java
rename to labs/joyent-cloudapi/src/main/java/org/jclouds/joyent/cloudapi/v6_5/config/JoyentCloudProperties.java
index e408831..299a5de 100644
--- a/labs/joyent-sdc/src/main/java/org/jclouds/joyent/sdc/v6_5/config/SDCProperties.java
+++ b/labs/joyent-cloudapi/src/main/java/org/jclouds/joyent/cloudapi/v6_5/config/JoyentCloudProperties.java
@@ -16,19 +16,19 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.jclouds.joyent.sdc.v6_5.config;
+package org.jclouds.joyent.cloudapi.v6_5.config;
 
 /**
- * Configuration properties and constants used in joyent SDC connections.
+ * Configuration properties and constants used in joyent JoyentCloud connections.
  * 
  * @author Adrian Cole
  */
-public class SDCProperties {
+public class JoyentCloudProperties {
 
    /**
     * Whenever a node is created, automatically generate keys for groups, as needed, also
     * delete the key(s) when the last node in the group is destroyed.
     */
-   public static final String AUTOGENERATE_KEYS = "jclouds.joyent-sdc.autogenerate-keys";
+   public static final String AUTOGENERATE_KEYS = "jclouds.joyent-cloudapi.autogenerate-keys";
 
 }
diff --git a/labs/joyent-sdc/src/main/java/org/jclouds/joyent/sdc/v6_5/config/SDCRestClientModule.java b/labs/joyent-cloudapi/src/main/java/org/jclouds/joyent/cloudapi/v6_5/config/JoyentCloudRestClientModule.java
similarity index 62%
rename from labs/joyent-sdc/src/main/java/org/jclouds/joyent/sdc/v6_5/config/SDCRestClientModule.java
rename to labs/joyent-cloudapi/src/main/java/org/jclouds/joyent/cloudapi/v6_5/config/JoyentCloudRestClientModule.java
index 5b27bdc..7a4944a 100644
--- a/labs/joyent-sdc/src/main/java/org/jclouds/joyent/sdc/v6_5/config/SDCRestClientModule.java
+++ b/labs/joyent-cloudapi/src/main/java/org/jclouds/joyent/cloudapi/v6_5/config/JoyentCloudRestClientModule.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.jclouds.joyent.sdc.v6_5.config;
+package org.jclouds.joyent.cloudapi.v6_5.config;
 
 import java.util.Map;
 
@@ -24,19 +24,19 @@
 import org.jclouds.http.annotation.ClientError;
 import org.jclouds.http.annotation.Redirection;
 import org.jclouds.http.annotation.ServerError;
-import org.jclouds.joyent.sdc.v6_5.SDCAsyncClient;
-import org.jclouds.joyent.sdc.v6_5.SDCClient;
-import org.jclouds.joyent.sdc.v6_5.features.DatacenterAsyncClient;
-import org.jclouds.joyent.sdc.v6_5.features.DatacenterClient;
-import org.jclouds.joyent.sdc.v6_5.features.DatasetAsyncClient;
-import org.jclouds.joyent.sdc.v6_5.features.DatasetClient;
-import org.jclouds.joyent.sdc.v6_5.features.KeyAsyncClient;
-import org.jclouds.joyent.sdc.v6_5.features.KeyClient;
-import org.jclouds.joyent.sdc.v6_5.features.MachineAsyncClient;
-import org.jclouds.joyent.sdc.v6_5.features.MachineClient;
-import org.jclouds.joyent.sdc.v6_5.features.PackageAsyncClient;
-import org.jclouds.joyent.sdc.v6_5.features.PackageClient;
-import org.jclouds.joyent.sdc.v6_5.handlers.SDCErrorHandler;
+import org.jclouds.joyent.cloudapi.v6_5.JoyentCloudAsyncClient;
+import org.jclouds.joyent.cloudapi.v6_5.JoyentCloudClient;
+import org.jclouds.joyent.cloudapi.v6_5.features.DatacenterAsyncClient;
+import org.jclouds.joyent.cloudapi.v6_5.features.DatacenterClient;
+import org.jclouds.joyent.cloudapi.v6_5.features.DatasetAsyncClient;
+import org.jclouds.joyent.cloudapi.v6_5.features.DatasetClient;
+import org.jclouds.joyent.cloudapi.v6_5.features.KeyAsyncClient;
+import org.jclouds.joyent.cloudapi.v6_5.features.KeyClient;
+import org.jclouds.joyent.cloudapi.v6_5.features.MachineAsyncClient;
+import org.jclouds.joyent.cloudapi.v6_5.features.MachineClient;
+import org.jclouds.joyent.cloudapi.v6_5.features.PackageAsyncClient;
+import org.jclouds.joyent.cloudapi.v6_5.features.PackageClient;
+import org.jclouds.joyent.cloudapi.v6_5.handlers.JoyentCloudErrorHandler;
 import org.jclouds.json.config.GsonModule.DateAdapter;
 import org.jclouds.json.config.GsonModule.Iso8601DateAdapter;
 import org.jclouds.rest.ConfiguresRestClient;
@@ -45,12 +45,12 @@
 import com.google.common.collect.ImmutableMap;
 
 /**
- * Configures the SDC connection.
+ * Configures the JoyentCloud connection.
  * 
  * @author Adrian Cole
  */
 @ConfiguresRestClient
-public class SDCRestClientModule extends RestClientModule<SDCClient, SDCAsyncClient> {
+public class JoyentCloudRestClientModule extends RestClientModule<JoyentCloudClient, JoyentCloudAsyncClient> {
    public static final Map<Class<?>, Class<?>> DELEGATE_MAP = ImmutableMap.<Class<?>, Class<?>> builder()
          .put(DatacenterClient.class, DatacenterAsyncClient.class)
          .put(KeyClient.class, KeyAsyncClient.class)
@@ -58,22 +58,22 @@
          .put(DatasetClient.class, DatasetAsyncClient.class)
          .put(PackageClient.class, PackageAsyncClient.class).build();
 
-   public SDCRestClientModule() {
+   public JoyentCloudRestClientModule() {
       super(DELEGATE_MAP);
    }
 
    @Override
    protected void configure() {
       bind(DateAdapter.class).to(Iso8601DateAdapter.class);
-      install(new SDCParserModule());
+      install(new JoyentCloudParserModule());
       super.configure();
    }
 
    @Override
    protected void bindErrorHandlers() {
-      bind(HttpErrorHandler.class).annotatedWith(Redirection.class).to(SDCErrorHandler.class);
-      bind(HttpErrorHandler.class).annotatedWith(ClientError.class).to(SDCErrorHandler.class);
-      bind(HttpErrorHandler.class).annotatedWith(ServerError.class).to(SDCErrorHandler.class);
+      bind(HttpErrorHandler.class).annotatedWith(Redirection.class).to(JoyentCloudErrorHandler.class);
+      bind(HttpErrorHandler.class).annotatedWith(ClientError.class).to(JoyentCloudErrorHandler.class);
+      bind(HttpErrorHandler.class).annotatedWith(ServerError.class).to(JoyentCloudErrorHandler.class);
    }
    
 }
diff --git a/labs/joyent-sdc/src/main/java/org/jclouds/joyent/sdc/v6_5/domain/Dataset.java b/labs/joyent-cloudapi/src/main/java/org/jclouds/joyent/cloudapi/v6_5/domain/Dataset.java
similarity index 96%
rename from labs/joyent-sdc/src/main/java/org/jclouds/joyent/sdc/v6_5/domain/Dataset.java
rename to labs/joyent-cloudapi/src/main/java/org/jclouds/joyent/cloudapi/v6_5/domain/Dataset.java
index 72d7b08..ee8be85 100644
--- a/labs/joyent-sdc/src/main/java/org/jclouds/joyent/sdc/v6_5/domain/Dataset.java
+++ b/labs/joyent-cloudapi/src/main/java/org/jclouds/joyent/cloudapi/v6_5/domain/Dataset.java
@@ -1,4 +1,4 @@
-package org.jclouds.joyent.sdc.v6_5.domain;
+package org.jclouds.joyent.cloudapi.v6_5.domain;
 
 import java.util.Date;
 
@@ -9,7 +9,7 @@
  * Listing of a dataset.
  * 
  * @author Gerald Pereira
- * @see <a href= "http://apidocs.joyent.com/sdcapidoc/cloudapi/#datasets" />
+ * @see <a href= "http://apidocs.joyent.com/cloudApiapidoc/cloudapi/#datasets" />
  */
 public class Dataset implements Comparable<Dataset> {
 
diff --git a/labs/joyent-sdc/src/main/java/org/jclouds/joyent/sdc/v6_5/domain/Key.java b/labs/joyent-cloudapi/src/main/java/org/jclouds/joyent/cloudapi/v6_5/domain/Key.java
similarity index 94%
rename from labs/joyent-sdc/src/main/java/org/jclouds/joyent/sdc/v6_5/domain/Key.java
rename to labs/joyent-cloudapi/src/main/java/org/jclouds/joyent/cloudapi/v6_5/domain/Key.java
index 1933691..2b84bbb 100644
--- a/labs/joyent-sdc/src/main/java/org/jclouds/joyent/sdc/v6_5/domain/Key.java
+++ b/labs/joyent-cloudapi/src/main/java/org/jclouds/joyent/cloudapi/v6_5/domain/Key.java
@@ -1,4 +1,4 @@
-package org.jclouds.joyent.sdc.v6_5.domain;
+package org.jclouds.joyent.cloudapi.v6_5.domain;
 
 import static com.google.common.base.Preconditions.checkNotNull;
 
@@ -11,7 +11,7 @@
  * CloudAPI supports uploads of public keys in the OpenSSH format.
  * 
  * @author Adrian Cole
- * @see <a href="http://apidocs.joyent.com/sdcapidoc/cloudapi/#keys" >docs</a>
+ * @see <a href="http://apidocs.joyent.com/cloudApiapidoc/cloudapi/#keys" >docs</a>
  */
 public class Key implements Comparable<Key> {
 
diff --git a/labs/joyent-sdc/src/main/java/org/jclouds/joyent/sdc/v6_5/domain/Machine.java b/labs/joyent-cloudapi/src/main/java/org/jclouds/joyent/cloudapi/v6_5/domain/Machine.java
similarity index 97%
rename from labs/joyent-sdc/src/main/java/org/jclouds/joyent/sdc/v6_5/domain/Machine.java
rename to labs/joyent-cloudapi/src/main/java/org/jclouds/joyent/cloudapi/v6_5/domain/Machine.java
index 17018b6..6a5caad 100644
--- a/labs/joyent-sdc/src/main/java/org/jclouds/joyent/sdc/v6_5/domain/Machine.java
+++ b/labs/joyent-cloudapi/src/main/java/org/jclouds/joyent/cloudapi/v6_5/domain/Machine.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.jclouds.joyent.sdc.v6_5.domain;
+package org.jclouds.joyent.cloudapi.v6_5.domain;
 
 import static com.google.common.base.Preconditions.checkNotNull;
 
@@ -25,7 +25,7 @@
 import java.util.Set;
 
 import org.jclouds.domain.JsonBall;
-import org.jclouds.joyent.sdc.v6_5.reference.Metadata;
+import org.jclouds.joyent.cloudapi.v6_5.reference.Metadata;
 import org.jclouds.json.Json;
 
 import com.google.common.annotations.VisibleForTesting;
@@ -42,7 +42,7 @@
  * Listing of a machine.
  * 
  * @author Gerald Pereira
- * @see <a href= "http://apidocs.joyent.com/sdcapidoc/cloudapi/#machines" />
+ * @see <a href= "http://apidocs.joyent.com/cloudApiapidoc/cloudapi/#machines" />
  */
 public class Machine implements Comparable<Machine> {
 
diff --git a/labs/joyent-sdc/src/main/java/org/jclouds/joyent/sdc/v6_5/domain/Package.java b/labs/joyent-cloudapi/src/main/java/org/jclouds/joyent/cloudapi/v6_5/domain/Package.java
similarity index 96%
rename from labs/joyent-sdc/src/main/java/org/jclouds/joyent/sdc/v6_5/domain/Package.java
rename to labs/joyent-cloudapi/src/main/java/org/jclouds/joyent/cloudapi/v6_5/domain/Package.java
index a76ca6d..815abbf 100644
--- a/labs/joyent-sdc/src/main/java/org/jclouds/joyent/sdc/v6_5/domain/Package.java
+++ b/labs/joyent-cloudapi/src/main/java/org/jclouds/joyent/cloudapi/v6_5/domain/Package.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.jclouds.joyent.sdc.v6_5.domain;
+package org.jclouds.joyent.cloudapi.v6_5.domain;
 
 import com.google.common.base.Objects;
 import com.google.gson.annotations.SerializedName;
@@ -25,7 +25,7 @@
  * Listing of a package.
  * 
  * @author Gerald Pereira
- * @see <a href= "http://apidocs.joyent.com/sdcapidoc/cloudapi/#machines" />
+ * @see <a href= "http://apidocs.joyent.com/cloudApiapidoc/cloudapi/#machines" />
  */
 public class Package implements Comparable<Package> {
 
diff --git a/labs/joyent-sdc/src/main/java/org/jclouds/joyent/sdc/v6_5/domain/Type.java b/labs/joyent-cloudapi/src/main/java/org/jclouds/joyent/cloudapi/v6_5/domain/Type.java
similarity index 92%
rename from labs/joyent-sdc/src/main/java/org/jclouds/joyent/sdc/v6_5/domain/Type.java
rename to labs/joyent-cloudapi/src/main/java/org/jclouds/joyent/cloudapi/v6_5/domain/Type.java
index e922410..36e070d 100644
--- a/labs/joyent-sdc/src/main/java/org/jclouds/joyent/sdc/v6_5/domain/Type.java
+++ b/labs/joyent-cloudapi/src/main/java/org/jclouds/joyent/cloudapi/v6_5/domain/Type.java
@@ -1,4 +1,4 @@
-package org.jclouds.joyent.sdc.v6_5.domain;
+package org.jclouds.joyent.cloudapi.v6_5.domain;
 
 import static com.google.common.base.Preconditions.checkNotNull;
 
diff --git a/labs/joyent-sdc/src/main/java/org/jclouds/joyent/sdc/v6_5/domain/datacenterscoped/DatacenterAndId.java b/labs/joyent-cloudapi/src/main/java/org/jclouds/joyent/cloudapi/v6_5/domain/datacenterscoped/DatacenterAndId.java
similarity index 97%
rename from labs/joyent-sdc/src/main/java/org/jclouds/joyent/sdc/v6_5/domain/datacenterscoped/DatacenterAndId.java
rename to labs/joyent-cloudapi/src/main/java/org/jclouds/joyent/cloudapi/v6_5/domain/datacenterscoped/DatacenterAndId.java
index df04e1d..93c1a5b 100644
--- a/labs/joyent-sdc/src/main/java/org/jclouds/joyent/sdc/v6_5/domain/datacenterscoped/DatacenterAndId.java
+++ b/labs/joyent-cloudapi/src/main/java/org/jclouds/joyent/cloudapi/v6_5/domain/datacenterscoped/DatacenterAndId.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.jclouds.joyent.sdc.v6_5.domain.datacenterscoped;
+package org.jclouds.joyent.cloudapi.v6_5.domain.datacenterscoped;
 
 import static com.google.common.base.Preconditions.checkArgument;
 import static com.google.common.base.Preconditions.checkNotNull;
diff --git a/labs/joyent-sdc/src/main/java/org/jclouds/joyent/sdc/v6_5/domain/datacenterscoped/DatacenterAndName.java b/labs/joyent-cloudapi/src/main/java/org/jclouds/joyent/cloudapi/v6_5/domain/datacenterscoped/DatacenterAndName.java
similarity index 97%
rename from labs/joyent-sdc/src/main/java/org/jclouds/joyent/sdc/v6_5/domain/datacenterscoped/DatacenterAndName.java
rename to labs/joyent-cloudapi/src/main/java/org/jclouds/joyent/cloudapi/v6_5/domain/datacenterscoped/DatacenterAndName.java
index 158c384..0a86ecc 100644
--- a/labs/joyent-sdc/src/main/java/org/jclouds/joyent/sdc/v6_5/domain/datacenterscoped/DatacenterAndName.java
+++ b/labs/joyent-cloudapi/src/main/java/org/jclouds/joyent/cloudapi/v6_5/domain/datacenterscoped/DatacenterAndName.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.jclouds.joyent.sdc.v6_5.domain.datacenterscoped;
+package org.jclouds.joyent.cloudapi.v6_5.domain.datacenterscoped;
 
 import static com.google.common.base.Objects.equal;
 import static com.google.common.base.Preconditions.checkArgument;
diff --git a/labs/joyent-sdc/src/main/java/org/jclouds/joyent/sdc/v6_5/domain/datacenterscoped/DatasetInDatacenter.java b/labs/joyent-cloudapi/src/main/java/org/jclouds/joyent/cloudapi/v6_5/domain/datacenterscoped/DatasetInDatacenter.java
similarity index 92%
rename from labs/joyent-sdc/src/main/java/org/jclouds/joyent/sdc/v6_5/domain/datacenterscoped/DatasetInDatacenter.java
rename to labs/joyent-cloudapi/src/main/java/org/jclouds/joyent/cloudapi/v6_5/domain/datacenterscoped/DatasetInDatacenter.java
index 4e3e0e6..cd0f88c 100644
--- a/labs/joyent-sdc/src/main/java/org/jclouds/joyent/sdc/v6_5/domain/datacenterscoped/DatasetInDatacenter.java
+++ b/labs/joyent-cloudapi/src/main/java/org/jclouds/joyent/cloudapi/v6_5/domain/datacenterscoped/DatasetInDatacenter.java
@@ -16,11 +16,11 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.jclouds.joyent.sdc.v6_5.domain.datacenterscoped;
+package org.jclouds.joyent.cloudapi.v6_5.domain.datacenterscoped;
 
 import static com.google.common.base.Preconditions.checkNotNull;
 
-import org.jclouds.joyent.sdc.v6_5.domain.Dataset;
+import org.jclouds.joyent.cloudapi.v6_5.domain.Dataset;
 
 /**
  * @author Adrian Cole
diff --git a/labs/joyent-sdc/src/main/java/org/jclouds/joyent/sdc/v6_5/domain/datacenterscoped/KeyInDatacenter.java b/labs/joyent-cloudapi/src/main/java/org/jclouds/joyent/cloudapi/v6_5/domain/datacenterscoped/KeyInDatacenter.java
similarity index 92%
rename from labs/joyent-sdc/src/main/java/org/jclouds/joyent/sdc/v6_5/domain/datacenterscoped/KeyInDatacenter.java
rename to labs/joyent-cloudapi/src/main/java/org/jclouds/joyent/cloudapi/v6_5/domain/datacenterscoped/KeyInDatacenter.java
index 42a80a0..62206db 100644
--- a/labs/joyent-sdc/src/main/java/org/jclouds/joyent/sdc/v6_5/domain/datacenterscoped/KeyInDatacenter.java
+++ b/labs/joyent-cloudapi/src/main/java/org/jclouds/joyent/cloudapi/v6_5/domain/datacenterscoped/KeyInDatacenter.java
@@ -16,11 +16,11 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.jclouds.joyent.sdc.v6_5.domain.datacenterscoped;
+package org.jclouds.joyent.cloudapi.v6_5.domain.datacenterscoped;
 
 import static com.google.common.base.Preconditions.checkNotNull;
 
-import org.jclouds.joyent.sdc.v6_5.domain.Key;
+import org.jclouds.joyent.cloudapi.v6_5.domain.Key;
 
 /**
  * @author Adrian Cole
diff --git a/labs/joyent-sdc/src/main/java/org/jclouds/joyent/sdc/v6_5/domain/datacenterscoped/MachineInDatacenter.java b/labs/joyent-cloudapi/src/main/java/org/jclouds/joyent/cloudapi/v6_5/domain/datacenterscoped/MachineInDatacenter.java
similarity index 92%
rename from labs/joyent-sdc/src/main/java/org/jclouds/joyent/sdc/v6_5/domain/datacenterscoped/MachineInDatacenter.java
rename to labs/joyent-cloudapi/src/main/java/org/jclouds/joyent/cloudapi/v6_5/domain/datacenterscoped/MachineInDatacenter.java
index 1f0fb23..5fc4eed 100644
--- a/labs/joyent-sdc/src/main/java/org/jclouds/joyent/sdc/v6_5/domain/datacenterscoped/MachineInDatacenter.java
+++ b/labs/joyent-cloudapi/src/main/java/org/jclouds/joyent/cloudapi/v6_5/domain/datacenterscoped/MachineInDatacenter.java
@@ -16,11 +16,11 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.jclouds.joyent.sdc.v6_5.domain.datacenterscoped;
+package org.jclouds.joyent.cloudapi.v6_5.domain.datacenterscoped;
 
 import static com.google.common.base.Preconditions.checkNotNull;
 
-import org.jclouds.joyent.sdc.v6_5.domain.Machine;
+import org.jclouds.joyent.cloudapi.v6_5.domain.Machine;
 
 /**
  * @author Adrian Cole
diff --git a/labs/joyent-sdc/src/main/java/org/jclouds/joyent/sdc/v6_5/domain/datacenterscoped/PackageInDatacenter.java b/labs/joyent-cloudapi/src/main/java/org/jclouds/joyent/cloudapi/v6_5/domain/datacenterscoped/PackageInDatacenter.java
similarity index 80%
rename from labs/joyent-sdc/src/main/java/org/jclouds/joyent/sdc/v6_5/domain/datacenterscoped/PackageInDatacenter.java
rename to labs/joyent-cloudapi/src/main/java/org/jclouds/joyent/cloudapi/v6_5/domain/datacenterscoped/PackageInDatacenter.java
index 3a155c1..672c94e 100644
--- a/labs/joyent-sdc/src/main/java/org/jclouds/joyent/sdc/v6_5/domain/datacenterscoped/PackageInDatacenter.java
+++ b/labs/joyent-cloudapi/src/main/java/org/jclouds/joyent/cloudapi/v6_5/domain/datacenterscoped/PackageInDatacenter.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.jclouds.joyent.sdc.v6_5.domain.datacenterscoped;
+package org.jclouds.joyent.cloudapi.v6_5.domain.datacenterscoped;
 
 import static com.google.common.base.Preconditions.checkNotNull;
 
@@ -24,14 +24,14 @@
  * @author Adrian Cole
  */
 public class PackageInDatacenter extends DatacenterAndName {
-   protected final org.jclouds.joyent.sdc.v6_5.domain.Package pkg;
+   protected final org.jclouds.joyent.cloudapi.v6_5.domain.Package pkg;
 
-   public PackageInDatacenter(org.jclouds.joyent.sdc.v6_5.domain.Package pkg, String datacenterId) {
+   public PackageInDatacenter(org.jclouds.joyent.cloudapi.v6_5.domain.Package pkg, String datacenterId) {
       super(datacenterId, checkNotNull(pkg, "pkg").getName());
       this.pkg = pkg;
    }
 
-   public org.jclouds.joyent.sdc.v6_5.domain.Package get() {
+   public org.jclouds.joyent.cloudapi.v6_5.domain.Package get() {
       return pkg;
    }
 
diff --git a/labs/joyent-sdc/src/main/java/org/jclouds/joyent/sdc/v6_5/features/DatacenterAsyncClient.java b/labs/joyent-cloudapi/src/main/java/org/jclouds/joyent/cloudapi/v6_5/features/DatacenterAsyncClient.java
similarity index 93%
rename from labs/joyent-sdc/src/main/java/org/jclouds/joyent/sdc/v6_5/features/DatacenterAsyncClient.java
rename to labs/joyent-cloudapi/src/main/java/org/jclouds/joyent/cloudapi/v6_5/features/DatacenterAsyncClient.java
index cb4949a..f26441e 100644
--- a/labs/joyent-sdc/src/main/java/org/jclouds/joyent/sdc/v6_5/features/DatacenterAsyncClient.java
+++ b/labs/joyent-cloudapi/src/main/java/org/jclouds/joyent/cloudapi/v6_5/features/DatacenterAsyncClient.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.jclouds.joyent.sdc.v6_5.features;
+package org.jclouds.joyent.cloudapi.v6_5.features;
 
 import java.net.URI;
 import java.util.Map;
@@ -40,7 +40,7 @@
  * 
  * @see DatacenterClient
  * @author Adrian Cole
- * @see <a href="http://sdc.joyent.org/sdcapi.html">api doc</a>
+ * @see <a href="http://cloudApi.joyent.org/cloudApiapi.html">api doc</a>
  */
 @SkipEncoding({ '/', '=' })
 @Headers(keys = "X-Api-Version", values = "{jclouds.api-version}")
diff --git a/labs/joyent-sdc/src/main/java/org/jclouds/joyent/sdc/v6_5/features/DatacenterClient.java b/labs/joyent-cloudapi/src/main/java/org/jclouds/joyent/cloudapi/v6_5/features/DatacenterClient.java
similarity index 90%
rename from labs/joyent-sdc/src/main/java/org/jclouds/joyent/sdc/v6_5/features/DatacenterClient.java
rename to labs/joyent-cloudapi/src/main/java/org/jclouds/joyent/cloudapi/v6_5/features/DatacenterClient.java
index c022419..d136d54 100644
--- a/labs/joyent-sdc/src/main/java/org/jclouds/joyent/sdc/v6_5/features/DatacenterClient.java
+++ b/labs/joyent-cloudapi/src/main/java/org/jclouds/joyent/cloudapi/v6_5/features/DatacenterClient.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.jclouds.joyent.sdc.v6_5.features;
+package org.jclouds.joyent.cloudapi.v6_5.features;
 
 import java.net.URI;
 import java.util.Map;
@@ -29,7 +29,7 @@
  * 
  * @see DatacenterAsyncClient
  * @author Adrian Cole
- * @see <a href="http://sdc.joyent.org/sdcapi.html">api doc</a>
+ * @see <a href="http://cloudApi.joyent.org/cloudApiapi.html">api doc</a>
  */
 @Timeout(duration = 30, timeUnit = TimeUnit.SECONDS)
 public interface DatacenterClient {
diff --git a/labs/joyent-sdc/src/main/java/org/jclouds/joyent/sdc/v6_5/features/DatasetAsyncClient.java b/labs/joyent-cloudapi/src/main/java/org/jclouds/joyent/cloudapi/v6_5/features/DatasetAsyncClient.java
similarity index 87%
rename from labs/joyent-sdc/src/main/java/org/jclouds/joyent/sdc/v6_5/features/DatasetAsyncClient.java
rename to labs/joyent-cloudapi/src/main/java/org/jclouds/joyent/cloudapi/v6_5/features/DatasetAsyncClient.java
index c76ce88..3a1146b 100644
--- a/labs/joyent-sdc/src/main/java/org/jclouds/joyent/sdc/v6_5/features/DatasetAsyncClient.java
+++ b/labs/joyent-cloudapi/src/main/java/org/jclouds/joyent/cloudapi/v6_5/features/DatasetAsyncClient.java
@@ -1,4 +1,4 @@
-package org.jclouds.joyent.sdc.v6_5.features;
+package org.jclouds.joyent.cloudapi.v6_5.features;
 
 import java.util.Set;
 
@@ -9,7 +9,7 @@
 import javax.ws.rs.core.MediaType;
 
 import org.jclouds.http.filters.BasicAuthentication;
-import org.jclouds.joyent.sdc.v6_5.domain.Dataset;
+import org.jclouds.joyent.cloudapi.v6_5.domain.Dataset;
 import org.jclouds.rest.annotations.ExceptionParser;
 import org.jclouds.rest.annotations.Headers;
 import org.jclouds.rest.annotations.RequestFilters;
@@ -25,7 +25,7 @@
  * 
  * @author Gerald Pereira
  * @see DatasetClient
- * @see <a href="http://apidocs.joyent.com/sdcapidoc/cloudapi">api doc</a>
+ * @see <a href="http://apidocs.joyent.com/cloudApiapidoc/cloudapi">api doc</a>
  */
 @SkipEncoding({ '/', '=' })
 @Headers(keys = "X-Api-Version", values = "{jclouds.api-version}")
diff --git a/labs/joyent-sdc/src/main/java/org/jclouds/joyent/sdc/v6_5/features/DatasetClient.java b/labs/joyent-cloudapi/src/main/java/org/jclouds/joyent/cloudapi/v6_5/features/DatasetClient.java
similarity index 75%
rename from labs/joyent-sdc/src/main/java/org/jclouds/joyent/sdc/v6_5/features/DatasetClient.java
rename to labs/joyent-cloudapi/src/main/java/org/jclouds/joyent/cloudapi/v6_5/features/DatasetClient.java
index eaf99d5..8c76eed 100644
--- a/labs/joyent-sdc/src/main/java/org/jclouds/joyent/sdc/v6_5/features/DatasetClient.java
+++ b/labs/joyent-cloudapi/src/main/java/org/jclouds/joyent/cloudapi/v6_5/features/DatasetClient.java
@@ -1,10 +1,10 @@
-package org.jclouds.joyent.sdc.v6_5.features;
+package org.jclouds.joyent.cloudapi.v6_5.features;
 
 import java.util.Set;
 import java.util.concurrent.TimeUnit;
 
 import org.jclouds.concurrent.Timeout;
-import org.jclouds.joyent.sdc.v6_5.domain.Dataset;
+import org.jclouds.joyent.cloudapi.v6_5.domain.Dataset;
 
 /**
  * Provides synchronous access to Datasets.
@@ -12,7 +12,7 @@
  * 
  * @author Gerald Pereira
  * @see DatasetAsyncClient
- * @see <a href="http://apidocs.joyent.com/sdcapidoc/cloudapi">api doc</a>
+ * @see <a href="http://apidocs.joyent.com/cloudApiapidoc/cloudapi">api doc</a>
  */
 @Timeout(duration = 30, timeUnit = TimeUnit.SECONDS)
 public interface DatasetClient {
diff --git a/labs/joyent-sdc/src/main/java/org/jclouds/joyent/sdc/v6_5/features/KeyAsyncClient.java b/labs/joyent-cloudapi/src/main/java/org/jclouds/joyent/cloudapi/v6_5/features/KeyAsyncClient.java
similarity index 86%
rename from labs/joyent-sdc/src/main/java/org/jclouds/joyent/sdc/v6_5/features/KeyAsyncClient.java
rename to labs/joyent-cloudapi/src/main/java/org/jclouds/joyent/cloudapi/v6_5/features/KeyAsyncClient.java
index 975347b..3bc6994 100644
--- a/labs/joyent-sdc/src/main/java/org/jclouds/joyent/sdc/v6_5/features/KeyAsyncClient.java
+++ b/labs/joyent-cloudapi/src/main/java/org/jclouds/joyent/cloudapi/v6_5/features/KeyAsyncClient.java
@@ -1,4 +1,4 @@
-package org.jclouds.joyent.sdc.v6_5.features;
+package org.jclouds.joyent.cloudapi.v6_5.features;
 
 import java.util.Set;
 
@@ -11,8 +11,8 @@
 import javax.ws.rs.core.MediaType;
 
 import org.jclouds.http.filters.BasicAuthentication;
-import org.jclouds.joyent.sdc.v6_5.binders.BindKeyToJsonPayload;
-import org.jclouds.joyent.sdc.v6_5.domain.Key;
+import org.jclouds.joyent.cloudapi.v6_5.binders.BindKeyToJsonPayload;
+import org.jclouds.joyent.cloudapi.v6_5.domain.Key;
 import org.jclouds.rest.annotations.BinderParam;
 import org.jclouds.rest.annotations.ExceptionParser;
 import org.jclouds.rest.annotations.Headers;
@@ -26,7 +26,7 @@
 /**
  * @author Adrian Cole
  * @see KeyClient
- * @see <a href="http://apidocs.joyent.com/sdcapidoc/cloudapi/#keys">api doc</a>
+ * @see <a href="http://apidocs.joyent.com/cloudApiapidoc/cloudapi/#keys">api doc</a>
  */
 @SkipEncoding({ '/', '=' })
 @Headers(keys = "X-Api-Version", values = "{jclouds.api-version}")
diff --git a/labs/joyent-sdc/src/main/java/org/jclouds/joyent/sdc/v6_5/features/KeyClient.java b/labs/joyent-cloudapi/src/main/java/org/jclouds/joyent/cloudapi/v6_5/features/KeyClient.java
similarity index 80%
rename from labs/joyent-sdc/src/main/java/org/jclouds/joyent/sdc/v6_5/features/KeyClient.java
rename to labs/joyent-cloudapi/src/main/java/org/jclouds/joyent/cloudapi/v6_5/features/KeyClient.java
index ad540b6..28798e3 100644
--- a/labs/joyent-sdc/src/main/java/org/jclouds/joyent/sdc/v6_5/features/KeyClient.java
+++ b/labs/joyent-cloudapi/src/main/java/org/jclouds/joyent/cloudapi/v6_5/features/KeyClient.java
@@ -1,10 +1,10 @@
-package org.jclouds.joyent.sdc.v6_5.features;
+package org.jclouds.joyent.cloudapi.v6_5.features;
 
 import java.util.Set;
 import java.util.concurrent.TimeUnit;
 
 import org.jclouds.concurrent.Timeout;
-import org.jclouds.joyent.sdc.v6_5.domain.Key;
+import org.jclouds.joyent.cloudapi.v6_5.domain.Key;
 
 /**
  * Keys are the means by which you operate on your SSH/signing keys. Currently
@@ -12,7 +12,7 @@
  * 
  * @author Adrian Cole
  * @see KeyAsyncClient
- * @see <a href="http://apidocs.joyent.com/sdcapidoc/cloudapi/#keys">api doc</a>
+ * @see <a href="http://apidocs.joyent.com/cloudApiapidoc/cloudapi/#keys">api doc</a>
  */
 @Timeout(duration = 30, timeUnit = TimeUnit.SECONDS)
 public interface KeyClient {
diff --git a/labs/joyent-sdc/src/main/java/org/jclouds/joyent/sdc/v6_5/features/MachineAsyncClient.java b/labs/joyent-cloudapi/src/main/java/org/jclouds/joyent/cloudapi/v6_5/features/MachineAsyncClient.java
similarity index 92%
rename from labs/joyent-sdc/src/main/java/org/jclouds/joyent/sdc/v6_5/features/MachineAsyncClient.java
rename to labs/joyent-cloudapi/src/main/java/org/jclouds/joyent/cloudapi/v6_5/features/MachineAsyncClient.java
index 67281e1..1005ffb 100644
--- a/labs/joyent-sdc/src/main/java/org/jclouds/joyent/sdc/v6_5/features/MachineAsyncClient.java
+++ b/labs/joyent-cloudapi/src/main/java/org/jclouds/joyent/cloudapi/v6_5/features/MachineAsyncClient.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.jclouds.joyent.sdc.v6_5.features;
+package org.jclouds.joyent.cloudapi.v6_5.features;
 
 import java.util.Set;
 
@@ -31,8 +31,8 @@
 import javax.ws.rs.core.MediaType;
 
 import org.jclouds.http.filters.BasicAuthentication;
-import org.jclouds.joyent.sdc.v6_5.domain.Machine;
-import org.jclouds.joyent.sdc.v6_5.options.CreateMachineOptions;
+import org.jclouds.joyent.cloudapi.v6_5.domain.Machine;
+import org.jclouds.joyent.cloudapi.v6_5.options.CreateMachineOptions;
 import org.jclouds.rest.annotations.ExceptionParser;
 import org.jclouds.rest.annotations.Headers;
 import org.jclouds.rest.annotations.Payload;
@@ -50,7 +50,7 @@
  * 
  * @author Gerald Pereira
  * @see MachineClient
- * @see <a href="http://apidocs.joyent.com/sdcapidoc/cloudapi">api doc</a>
+ * @see <a href="http://apidocs.joyent.com/cloudApiapidoc/cloudapi">api doc</a>
  */
 @SkipEncoding({ '/', '=' })
 @Headers(keys = "X-Api-Version", values = "{jclouds.api-version}")
@@ -129,7 +129,7 @@
 	@Produces(MediaType.APPLICATION_FORM_URLENCODED)
 	@Path("/my/machines/{id}")
 	@Payload("action=resize&package={package}")
-	ListenableFuture<Void> resize(@PathParam("id") String id,@PayloadParam("package") String packageSDC);
+	ListenableFuture<Void> resize(@PathParam("id") String id,@PayloadParam("package") String packageJoyentCloud);
 	
 	/**
 	 * @see MachineClient#delete
diff --git a/labs/joyent-sdc/src/main/java/org/jclouds/joyent/sdc/v6_5/features/MachineClient.java b/labs/joyent-cloudapi/src/main/java/org/jclouds/joyent/cloudapi/v6_5/features/MachineClient.java
similarity index 91%
rename from labs/joyent-sdc/src/main/java/org/jclouds/joyent/sdc/v6_5/features/MachineClient.java
rename to labs/joyent-cloudapi/src/main/java/org/jclouds/joyent/cloudapi/v6_5/features/MachineClient.java
index 64ccc6d..7c598b8 100644
--- a/labs/joyent-sdc/src/main/java/org/jclouds/joyent/sdc/v6_5/features/MachineClient.java
+++ b/labs/joyent-cloudapi/src/main/java/org/jclouds/joyent/cloudapi/v6_5/features/MachineClient.java
@@ -16,14 +16,14 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.jclouds.joyent.sdc.v6_5.features;
+package org.jclouds.joyent.cloudapi.v6_5.features;
 
 import java.util.Set;
 import java.util.concurrent.TimeUnit;
 
 import org.jclouds.concurrent.Timeout;
-import org.jclouds.joyent.sdc.v6_5.domain.Machine;
-import org.jclouds.joyent.sdc.v6_5.options.CreateMachineOptions;
+import org.jclouds.joyent.cloudapi.v6_5.domain.Machine;
+import org.jclouds.joyent.cloudapi.v6_5.options.CreateMachineOptions;
 
 /**
  * Provides synchronous access to Machine.
@@ -31,7 +31,7 @@
  * 
  * @author Gerald Pereira
  * @see MachineAsyncClient
- * @see <a href="http://apidocs.joyent.com/sdcapidoc/cloudapi">api doc</a>
+ * @see <a href="http://apidocs.joyent.com/cloudApiapidoc/cloudapi">api doc</a>
  */
 @Timeout(duration = 30, timeUnit = TimeUnit.SECONDS)
 public interface MachineClient {
@@ -121,10 +121,10 @@
     * 
     * @param id
     *           the id of the machine to resize
-    * @param packageSDC
+    * @param packageJoyentCloud
     *           the package to use for the machine
     */
-   void resize(String id, String packageSDC);
+   void resize(String id, String packageJoyentCloud);
 
    /**
     * Allows you to delete a machine (the machine must be stopped before it can
diff --git a/labs/joyent-sdc/src/main/java/org/jclouds/joyent/sdc/v6_5/features/PackageAsyncClient.java b/labs/joyent-cloudapi/src/main/java/org/jclouds/joyent/cloudapi/v6_5/features/PackageAsyncClient.java
similarity index 79%
rename from labs/joyent-sdc/src/main/java/org/jclouds/joyent/sdc/v6_5/features/PackageAsyncClient.java
rename to labs/joyent-cloudapi/src/main/java/org/jclouds/joyent/cloudapi/v6_5/features/PackageAsyncClient.java
index eab42d6..35618da 100644
--- a/labs/joyent-sdc/src/main/java/org/jclouds/joyent/sdc/v6_5/features/PackageAsyncClient.java
+++ b/labs/joyent-cloudapi/src/main/java/org/jclouds/joyent/cloudapi/v6_5/features/PackageAsyncClient.java
@@ -1,4 +1,4 @@
-package org.jclouds.joyent.sdc.v6_5.features;
+package org.jclouds.joyent.cloudapi.v6_5.features;
 
 import java.util.Set;
 
@@ -24,7 +24,7 @@
  * 
  * @author Gerald Pereira
  * @see PackageClient
- * @see <a href="http://apidocs.joyent.com/sdcapidoc/cloudapi">api doc</a>
+ * @see <a href="http://apidocs.joyent.com/cloudApiapidoc/cloudapi">api doc</a>
  */
 @SkipEncoding({ '/', '=' })
 @Headers(keys = "X-Api-Version", values = "{jclouds.api-version}")
@@ -37,7 +37,7 @@
    @Path("/my/packages")
    @Consumes(MediaType.APPLICATION_JSON)
    @ExceptionParser(ReturnEmptySetOnNotFoundOr404.class)
-   ListenableFuture<Set<org.jclouds.joyent.sdc.v6_5.domain.Package>> list();
+   ListenableFuture<Set<org.jclouds.joyent.cloudapi.v6_5.domain.Package>> list();
 
    /**
     * @see PackageClient#get
@@ -46,5 +46,5 @@
    @Path("/my/packages/{name}")
    @Consumes(MediaType.APPLICATION_JSON)
    @ExceptionParser(ReturnNullOnNotFoundOr404.class)
-   ListenableFuture<org.jclouds.joyent.sdc.v6_5.domain.Package> get(@PathParam("name") String name);
+   ListenableFuture<org.jclouds.joyent.cloudapi.v6_5.domain.Package> get(@PathParam("name") String name);
 }
diff --git a/labs/joyent-sdc/src/main/java/org/jclouds/joyent/sdc/v6_5/features/PackageClient.java b/labs/joyent-cloudapi/src/main/java/org/jclouds/joyent/cloudapi/v6_5/features/PackageClient.java
similarity index 67%
rename from labs/joyent-sdc/src/main/java/org/jclouds/joyent/sdc/v6_5/features/PackageClient.java
rename to labs/joyent-cloudapi/src/main/java/org/jclouds/joyent/cloudapi/v6_5/features/PackageClient.java
index 4b02b8f..de27d8a 100644
--- a/labs/joyent-sdc/src/main/java/org/jclouds/joyent/sdc/v6_5/features/PackageClient.java
+++ b/labs/joyent-cloudapi/src/main/java/org/jclouds/joyent/cloudapi/v6_5/features/PackageClient.java
@@ -1,4 +1,4 @@
-package org.jclouds.joyent.sdc.v6_5.features;
+package org.jclouds.joyent.cloudapi.v6_5.features;
 
 import java.util.Set;
 import java.util.concurrent.TimeUnit;
@@ -11,7 +11,7 @@
  * 
  * @author Gerald Pereira
  * @see PackageAsyncClient
- * @see <a href="http://apidocs.joyent.com/sdcapidoc/cloudapi">api doc</a>
+ * @see <a href="http://apidocs.joyent.com/cloudApiapidoc/cloudapi">api doc</a>
  */
 @Timeout(duration = 30, timeUnit = TimeUnit.SECONDS)
 public interface PackageClient {
@@ -21,7 +21,7 @@
     * 
     * @return
     */
-   Set<org.jclouds.joyent.sdc.v6_5.domain.Package> list();
+   Set<org.jclouds.joyent.cloudapi.v6_5.domain.Package> list();
 
    /**
     * Gets an individual package by id.
@@ -30,5 +30,5 @@
     *           the name of the package
     * @return
     */
-   org.jclouds.joyent.sdc.v6_5.domain.Package get(String name);
+   org.jclouds.joyent.cloudapi.v6_5.domain.Package get(String name);
 }
diff --git a/labs/joyent-sdc/src/main/java/org/jclouds/joyent/sdc/v6_5/functions/internal/SDCTypeAdapters.java b/labs/joyent-cloudapi/src/main/java/org/jclouds/joyent/cloudapi/v6_5/functions/internal/JoyentCloudTypeAdapters.java
similarity index 84%
rename from labs/joyent-sdc/src/main/java/org/jclouds/joyent/sdc/v6_5/functions/internal/SDCTypeAdapters.java
rename to labs/joyent-cloudapi/src/main/java/org/jclouds/joyent/cloudapi/v6_5/functions/internal/JoyentCloudTypeAdapters.java
index 78c6066..c981cbf 100644
--- a/labs/joyent-sdc/src/main/java/org/jclouds/joyent/sdc/v6_5/functions/internal/SDCTypeAdapters.java
+++ b/labs/joyent-cloudapi/src/main/java/org/jclouds/joyent/cloudapi/v6_5/functions/internal/JoyentCloudTypeAdapters.java
@@ -16,12 +16,12 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.jclouds.joyent.sdc.v6_5.functions.internal;
+package org.jclouds.joyent.cloudapi.v6_5.functions.internal;
 
 import java.io.IOException;
 
-import org.jclouds.joyent.sdc.v6_5.domain.Machine;
-import org.jclouds.joyent.sdc.v6_5.domain.Type;
+import org.jclouds.joyent.cloudapi.v6_5.domain.Machine;
+import org.jclouds.joyent.cloudapi.v6_5.domain.Type;
 
 import com.google.gson.TypeAdapter;
 import com.google.gson.stream.JsonReader;
@@ -30,7 +30,7 @@
 /**
  * @author Adrian Cole
  */
-public class SDCTypeAdapters {
+public class JoyentCloudTypeAdapters {
 
    public static class MachineStateAdapter extends TypeAdapter<Machine.State> {
       @Override
@@ -44,7 +44,7 @@
       }
    }
 
-   public static class SDCTypeAdapter extends TypeAdapter<Type> {
+   public static class JoyentCloudTypeAdapter extends TypeAdapter<Type> {
       @Override
       public void write(JsonWriter writer, Type value) throws IOException {
          writer.value(value.value());
diff --git a/labs/joyent-sdc/src/main/java/org/jclouds/joyent/sdc/v6_5/handlers/SDCErrorHandler.java b/labs/joyent-cloudapi/src/main/java/org/jclouds/joyent/cloudapi/v6_5/handlers/JoyentCloudErrorHandler.java
similarity index 94%
rename from labs/joyent-sdc/src/main/java/org/jclouds/joyent/sdc/v6_5/handlers/SDCErrorHandler.java
rename to labs/joyent-cloudapi/src/main/java/org/jclouds/joyent/cloudapi/v6_5/handlers/JoyentCloudErrorHandler.java
index 2f84370..1104ee1 100644
--- a/labs/joyent-sdc/src/main/java/org/jclouds/joyent/sdc/v6_5/handlers/SDCErrorHandler.java
+++ b/labs/joyent-cloudapi/src/main/java/org/jclouds/joyent/cloudapi/v6_5/handlers/JoyentCloudErrorHandler.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.jclouds.joyent.sdc.v6_5.handlers;
+package org.jclouds.joyent.cloudapi.v6_5.handlers;
 
 import static org.jclouds.http.HttpUtils.closeClientButKeepContentStream;
 
@@ -37,7 +37,7 @@
  */
 // TODO: is there error spec someplace? let's type errors, etc.
 @Singleton
-public class SDCErrorHandler implements HttpErrorHandler {
+public class JoyentCloudErrorHandler implements HttpErrorHandler {
    public void handleError(HttpCommand command, HttpResponse response) {
       // it is important to always read fully and close streams
       byte[] data = closeClientButKeepContentStream(response);
diff --git a/labs/joyent-sdc/src/main/java/org/jclouds/joyent/sdc/v6_5/options/CreateMachineOptions.java b/labs/joyent-cloudapi/src/main/java/org/jclouds/joyent/cloudapi/v6_5/options/CreateMachineOptions.java
similarity index 97%
rename from labs/joyent-sdc/src/main/java/org/jclouds/joyent/sdc/v6_5/options/CreateMachineOptions.java
rename to labs/joyent-cloudapi/src/main/java/org/jclouds/joyent/cloudapi/v6_5/options/CreateMachineOptions.java
index e0f5292..f996628 100644
--- a/labs/joyent-sdc/src/main/java/org/jclouds/joyent/sdc/v6_5/options/CreateMachineOptions.java
+++ b/labs/joyent-cloudapi/src/main/java/org/jclouds/joyent/cloudapi/v6_5/options/CreateMachineOptions.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.jclouds.joyent.sdc.v6_5.options;
+package org.jclouds.joyent.cloudapi.v6_5.options;
 
 import static com.google.common.base.Objects.equal;
 import static com.google.common.base.Preconditions.checkNotNull;
@@ -24,7 +24,7 @@
 import java.util.Map;
 
 import org.jclouds.http.options.BaseHttpRequestOptions;
-import org.jclouds.joyent.sdc.v6_5.features.PackageClient;
+import org.jclouds.joyent.cloudapi.v6_5.features.PackageClient;
 import org.jclouds.util.Maps2;
 
 import com.google.common.base.Function;
diff --git a/labs/joyent-sdc/src/main/java/org/jclouds/joyent/sdc/v6_5/predicates/KeyPredicates.java b/labs/joyent-cloudapi/src/main/java/org/jclouds/joyent/cloudapi/v6_5/predicates/KeyPredicates.java
similarity index 93%
rename from labs/joyent-sdc/src/main/java/org/jclouds/joyent/sdc/v6_5/predicates/KeyPredicates.java
rename to labs/joyent-cloudapi/src/main/java/org/jclouds/joyent/cloudapi/v6_5/predicates/KeyPredicates.java
index c5963b1..9f28c7b 100644
--- a/labs/joyent-sdc/src/main/java/org/jclouds/joyent/sdc/v6_5/predicates/KeyPredicates.java
+++ b/labs/joyent-cloudapi/src/main/java/org/jclouds/joyent/cloudapi/v6_5/predicates/KeyPredicates.java
@@ -16,11 +16,11 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.jclouds.joyent.sdc.v6_5.predicates;
+package org.jclouds.joyent.cloudapi.v6_5.predicates;
 
 import static com.google.common.base.Preconditions.checkNotNull;
 
-import org.jclouds.joyent.sdc.v6_5.domain.Key;
+import org.jclouds.joyent.cloudapi.v6_5.domain.Key;
 
 import com.google.common.base.Predicate;
 
diff --git a/labs/joyent-sdc/src/main/java/org/jclouds/joyent/sdc/v6_5/reference/Metadata.java b/labs/joyent-cloudapi/src/main/java/org/jclouds/joyent/cloudapi/v6_5/reference/Metadata.java
similarity index 96%
rename from labs/joyent-sdc/src/main/java/org/jclouds/joyent/sdc/v6_5/reference/Metadata.java
rename to labs/joyent-cloudapi/src/main/java/org/jclouds/joyent/cloudapi/v6_5/reference/Metadata.java
index 8ad338c..c4fff80 100644
--- a/labs/joyent-sdc/src/main/java/org/jclouds/joyent/sdc/v6_5/reference/Metadata.java
+++ b/labs/joyent-cloudapi/src/main/java/org/jclouds/joyent/cloudapi/v6_5/reference/Metadata.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.jclouds.joyent.sdc.v6_5.reference;
+package org.jclouds.joyent.cloudapi.v6_5.reference;
 
 import java.lang.reflect.Type;
 import java.util.Map;
diff --git a/labs/joyent-sdc/src/main/java/org/jclouds/joyent/sdc/v6_5/suppliers/ZoneIdToURIFromDatacentersClient.java b/labs/joyent-cloudapi/src/main/java/org/jclouds/joyent/cloudapi/v6_5/suppliers/ZoneIdToURIFromDatacentersClient.java
similarity index 86%
rename from labs/joyent-sdc/src/main/java/org/jclouds/joyent/sdc/v6_5/suppliers/ZoneIdToURIFromDatacentersClient.java
rename to labs/joyent-cloudapi/src/main/java/org/jclouds/joyent/cloudapi/v6_5/suppliers/ZoneIdToURIFromDatacentersClient.java
index 06d14a1..dac0c97 100644
--- a/labs/joyent-sdc/src/main/java/org/jclouds/joyent/sdc/v6_5/suppliers/ZoneIdToURIFromDatacentersClient.java
+++ b/labs/joyent-cloudapi/src/main/java/org/jclouds/joyent/cloudapi/v6_5/suppliers/ZoneIdToURIFromDatacentersClient.java
@@ -1,4 +1,4 @@
-package org.jclouds.joyent.sdc.v6_5.suppliers;
+package org.jclouds.joyent.cloudapi.v6_5.suppliers;
 
 import java.net.URI;
 import java.util.Map;
@@ -6,7 +6,7 @@
 import javax.inject.Inject;
 import javax.inject.Singleton;
 
-import org.jclouds.joyent.sdc.v6_5.features.DatacenterClient;
+import org.jclouds.joyent.cloudapi.v6_5.features.DatacenterClient;
 import org.jclouds.location.suppliers.ZoneIdToURISupplier;
 import org.jclouds.util.Suppliers2;
 
diff --git a/labs/joyent-cloudapi/src/main/resources/META-INF/services/org.jclouds.apis.ApiMetadata b/labs/joyent-cloudapi/src/main/resources/META-INF/services/org.jclouds.apis.ApiMetadata
new file mode 100644
index 0000000..8deea9e
--- /dev/null
+++ b/labs/joyent-cloudapi/src/main/resources/META-INF/services/org.jclouds.apis.ApiMetadata
@@ -0,0 +1 @@
+org.jclouds.joyent.cloudapi.v6_5.JoyentCloudApiMetadata
diff --git a/labs/joyent-sdc/src/test/java/org/jclouds/joyent/sdc/v6_5/SDCApiMetadataTest.java b/labs/joyent-cloudapi/src/test/java/org/jclouds/joyent/cloudapi/v6_5/JoyentCloudApiMetadataTest.java
similarity index 73%
rename from labs/joyent-sdc/src/test/java/org/jclouds/joyent/sdc/v6_5/SDCApiMetadataTest.java
rename to labs/joyent-cloudapi/src/test/java/org/jclouds/joyent/cloudapi/v6_5/JoyentCloudApiMetadataTest.java
index c78131f..e2d98e0 100644
--- a/labs/joyent-sdc/src/test/java/org/jclouds/joyent/sdc/v6_5/SDCApiMetadataTest.java
+++ b/labs/joyent-cloudapi/src/test/java/org/jclouds/joyent/cloudapi/v6_5/JoyentCloudApiMetadataTest.java
@@ -16,10 +16,11 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.jclouds.joyent.sdc.v6_5;
+package org.jclouds.joyent.cloudapi.v6_5;
 
 import org.jclouds.View;
 import org.jclouds.apis.internal.BaseApiMetadataTest;
+import org.jclouds.joyent.cloudapi.v6_5.JoyentCloudApiMetadata;
 import org.testng.annotations.Test;
 
 import com.google.common.collect.ImmutableSet;
@@ -29,9 +30,9 @@
  * 
  * @author Adrian Cole
  */
-@Test(groups = "unit", testName = "SDCApiMetadataTest")
-public class SDCApiMetadataTest extends BaseApiMetadataTest {
-   public SDCApiMetadataTest() {
-      super(new SDCApiMetadata(), ImmutableSet.<TypeToken<? extends View>> of());
+@Test(groups = "unit", testName = "JoyentCloudApiMetadataTest")
+public class JoyentCloudApiMetadataTest extends BaseApiMetadataTest {
+   public JoyentCloudApiMetadataTest() {
+      super(new JoyentCloudApiMetadata(), ImmutableSet.<TypeToken<? extends View>> of());
    }
 }
diff --git a/labs/joyent-sdc/src/test/java/org/jclouds/joyent/sdc/v6_5/SDCClientExpectTest.java b/labs/joyent-cloudapi/src/test/java/org/jclouds/joyent/cloudapi/v6_5/JoyentCloudClientExpectTest.java
similarity index 74%
rename from labs/joyent-sdc/src/test/java/org/jclouds/joyent/sdc/v6_5/SDCClientExpectTest.java
rename to labs/joyent-cloudapi/src/test/java/org/jclouds/joyent/cloudapi/v6_5/JoyentCloudClientExpectTest.java
index 901f943..55c4a73 100644
--- a/labs/joyent-sdc/src/test/java/org/jclouds/joyent/sdc/v6_5/SDCClientExpectTest.java
+++ b/labs/joyent-cloudapi/src/test/java/org/jclouds/joyent/cloudapi/v6_5/JoyentCloudClientExpectTest.java
@@ -16,11 +16,12 @@
  * specific language governing permisions and limitations
  * under the License.
  */
-package org.jclouds.joyent.sdc.v6_5;
+package org.jclouds.joyent.cloudapi.v6_5;
 
 import static org.testng.Assert.assertEquals;
 
-import org.jclouds.joyent.sdc.v6_5.internal.BaseSDCClientExpectTest;
+import org.jclouds.joyent.cloudapi.v6_5.JoyentCloudClient;
+import org.jclouds.joyent.cloudapi.v6_5.internal.BaseJoyentCloudClientExpectTest;
 import org.testng.annotations.Test;
 
 import com.google.common.collect.ImmutableSet;
@@ -28,12 +29,12 @@
 /**
  * @author Adrian Cole
  */
-@Test(groups = "unit", testName = "SDCClientExpectTest")
-public class SDCClientExpectTest extends BaseSDCClientExpectTest {
+@Test(groups = "unit", testName = "JoyentCloudClientExpectTest")
+public class JoyentCloudClientExpectTest extends BaseJoyentCloudClientExpectTest {
 
    public void testGetConfiguredDatacenters() {
 
-      SDCClient clientWhenDatacentersExists = requestSendsResponse(getDatacenters, getDatacentersResponse);
+      JoyentCloudClient clientWhenDatacentersExists = requestSendsResponse(getDatacenters, getDatacentersResponse);
 
       assertEquals(
             clientWhenDatacentersExists.getConfiguredDatacenters(),
diff --git a/labs/joyent-sdc/src/test/java/org/jclouds/joyent/sdc/v6_5/SDCClientLiveTest.java b/labs/joyent-cloudapi/src/test/java/org/jclouds/joyent/cloudapi/v6_5/JoyentCloudClientLiveTest.java
similarity index 68%
rename from labs/joyent-sdc/src/test/java/org/jclouds/joyent/sdc/v6_5/SDCClientLiveTest.java
rename to labs/joyent-cloudapi/src/test/java/org/jclouds/joyent/cloudapi/v6_5/JoyentCloudClientLiveTest.java
index 4060e79..a3c4410 100644
--- a/labs/joyent-sdc/src/test/java/org/jclouds/joyent/sdc/v6_5/SDCClientLiveTest.java
+++ b/labs/joyent-cloudapi/src/test/java/org/jclouds/joyent/cloudapi/v6_5/JoyentCloudClientLiveTest.java
@@ -16,23 +16,23 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.jclouds.joyent.sdc.v6_5;
+package org.jclouds.joyent.cloudapi.v6_5;
 
 import static org.testng.Assert.assertEquals;
 
 import java.util.Set;
 
-import org.jclouds.joyent.sdc.v6_5.internal.BaseSDCClientLiveTest;
+import org.jclouds.joyent.cloudapi.v6_5.internal.BaseJoyentCloudClientLiveTest;
 import org.testng.annotations.Test;
 
 /**
  * @author Adrian Cole
  */
-@Test(groups = "live", testName = "SDCClientLiveTest")
-public class SDCClientLiveTest extends BaseSDCClientLiveTest {
+@Test(groups = "live", testName = "JoyentCloudClientLiveTest")
+public class JoyentCloudClientLiveTest extends BaseJoyentCloudClientLiveTest {
 
    public void testGetDatacenters() {
-      Set<String> dcs = sdcContext.getApi().getConfiguredDatacenters();
-      assertEquals(dcs, sdcContext.getApi().getDatacenterClient().getDatacenters().keySet());
+      Set<String> dcs = cloudApiContext.getApi().getConfiguredDatacenters();
+      assertEquals(dcs, cloudApiContext.getApi().getDatacenterClient().getDatacenters().keySet());
    }
 }
diff --git a/labs/joyent-cloudapi/src/test/java/org/jclouds/joyent/cloudapi/v6_5/compute/JoyentCloudComputeServiceLiveTest.java b/labs/joyent-cloudapi/src/test/java/org/jclouds/joyent/cloudapi/v6_5/compute/JoyentCloudComputeServiceLiveTest.java
new file mode 100644
index 0000000..7303c6e
--- /dev/null
+++ b/labs/joyent-cloudapi/src/test/java/org/jclouds/joyent/cloudapi/v6_5/compute/JoyentCloudComputeServiceLiveTest.java
@@ -0,0 +1,26 @@
+package org.jclouds.joyent.cloudapi.v6_5.compute;
+
+import org.jclouds.compute.internal.BaseComputeServiceLiveTest;
+import org.jclouds.sshj.config.SshjSshClientModule;
+import org.testng.annotations.Test;
+
+import com.google.inject.Module;
+
+/**
+ * 
+ * @author Adrian Cole
+ */
+@Test(groups = "live", singleThreaded = true, testName = "JoyentCloudComputeServiceLiveTest")
+public class JoyentCloudComputeServiceLiveTest extends BaseComputeServiceLiveTest {
+
+   public JoyentCloudComputeServiceLiveTest() {
+      provider = "joyent-cloudapi";
+   }
+
+   @Override
+   protected Module getSshModule() {
+      return new SshjSshClientModule();
+   }
+   
+
+}
diff --git a/labs/joyent-sdc/src/test/java/org/jclouds/joyent/sdc/v6_5/compute/functions/DatasetInDatacenterToImageTest.java b/labs/joyent-cloudapi/src/test/java/org/jclouds/joyent/cloudapi/v6_5/compute/functions/DatasetInDatacenterToImageTest.java
similarity index 87%
rename from labs/joyent-sdc/src/test/java/org/jclouds/joyent/sdc/v6_5/compute/functions/DatasetInDatacenterToImageTest.java
rename to labs/joyent-cloudapi/src/test/java/org/jclouds/joyent/cloudapi/v6_5/compute/functions/DatasetInDatacenterToImageTest.java
index c517630..9c970fa 100644
--- a/labs/joyent-sdc/src/test/java/org/jclouds/joyent/sdc/v6_5/compute/functions/DatasetInDatacenterToImageTest.java
+++ b/labs/joyent-cloudapi/src/test/java/org/jclouds/joyent/cloudapi/v6_5/compute/functions/DatasetInDatacenterToImageTest.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.jclouds.joyent.sdc.v6_5.compute.functions;
+package org.jclouds.joyent.cloudapi.v6_5.compute.functions;
 
 import static org.testng.Assert.assertEquals;
 
@@ -27,9 +27,10 @@
 import org.jclouds.domain.Location;
 import org.jclouds.domain.LocationBuilder;
 import org.jclouds.domain.LocationScope;
-import org.jclouds.joyent.sdc.v6_5.domain.Dataset;
-import org.jclouds.joyent.sdc.v6_5.domain.datacenterscoped.DatasetInDatacenter;
-import org.jclouds.joyent.sdc.v6_5.parse.ParseDatasetTest;
+import org.jclouds.joyent.cloudapi.v6_5.compute.functions.DatasetInDatacenterToImage;
+import org.jclouds.joyent.cloudapi.v6_5.domain.Dataset;
+import org.jclouds.joyent.cloudapi.v6_5.domain.datacenterscoped.DatasetInDatacenter;
+import org.jclouds.joyent.cloudapi.v6_5.parse.ParseDatasetTest;
 import org.testng.annotations.Test;
 
 import com.google.common.base.Function;
@@ -39,15 +40,15 @@
 import com.google.common.collect.ImmutableMap;
 
 /**
- * Tests the function that transforms sdc-specific images to generic images.
+ * Tests the function that transforms cloudApi-specific images to generic images.
  * 
  * @author Adrian Cole
  */
 @Test(testName = "DatasetInDatacenterToHardwareTest")
 public class DatasetInDatacenterToImageTest {
 
-   Location provider = new LocationBuilder().scope(LocationScope.PROVIDER).id("joyent-sdc")
-         .description("joyent-sdc").build();
+   Location provider = new LocationBuilder().scope(LocationScope.PROVIDER).id("joyent-cloudapi")
+         .description("joyent-cloudapi").build();
    Location zone = new LocationBuilder().id("us-sw-1").description("us-sw-1").scope(LocationScope.ZONE)
          .parent(provider).build();
    Supplier<Map<String, Location>> locationIndex = Suppliers.<Map<String, Location>> ofInstance(ImmutableMap
diff --git a/labs/joyent-sdc/src/test/java/org/jclouds/joyent/sdc/v6_5/compute/functions/DatasetToOperatingSystemTest.java b/labs/joyent-cloudapi/src/test/java/org/jclouds/joyent/cloudapi/v6_5/compute/functions/DatasetToOperatingSystemTest.java
similarity index 84%
rename from labs/joyent-sdc/src/test/java/org/jclouds/joyent/sdc/v6_5/compute/functions/DatasetToOperatingSystemTest.java
rename to labs/joyent-cloudapi/src/test/java/org/jclouds/joyent/cloudapi/v6_5/compute/functions/DatasetToOperatingSystemTest.java
index 8c014a3..2ef805b 100644
--- a/labs/joyent-sdc/src/test/java/org/jclouds/joyent/sdc/v6_5/compute/functions/DatasetToOperatingSystemTest.java
+++ b/labs/joyent-cloudapi/src/test/java/org/jclouds/joyent/cloudapi/v6_5/compute/functions/DatasetToOperatingSystemTest.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.jclouds.joyent.sdc.v6_5.compute.functions;
+package org.jclouds.joyent.cloudapi.v6_5.compute.functions;
 
 import static org.testng.Assert.assertEquals;
 import static org.testng.Assert.assertTrue;
@@ -25,14 +25,15 @@
 
 import org.jclouds.compute.domain.OperatingSystem;
 import org.jclouds.compute.domain.OsFamily;
-import org.jclouds.joyent.sdc.v6_5.domain.Dataset;
-import org.jclouds.joyent.sdc.v6_5.parse.ParseDatasetTest;
+import org.jclouds.joyent.cloudapi.v6_5.compute.functions.DatasetToOperatingSystem;
+import org.jclouds.joyent.cloudapi.v6_5.domain.Dataset;
+import org.jclouds.joyent.cloudapi.v6_5.parse.ParseDatasetTest;
 import org.testng.annotations.Test;
 
 import com.google.common.collect.ImmutableMap;
 
 /**
- * Tests for the function for transforming a sdc specific Image into a generic
+ * Tests for the function for transforming a cloudApi specific Image into a generic
  * OperatingSystem object.
  * 
  * @author Adrian Cole
diff --git a/labs/joyent-sdc/src/test/java/org/jclouds/joyent/sdc/v6_5/compute/functions/MachineInDatacenterToNodeMetadataTest.java b/labs/joyent-cloudapi/src/test/java/org/jclouds/joyent/cloudapi/v6_5/compute/functions/MachineInDatacenterToNodeMetadataTest.java
similarity index 87%
rename from labs/joyent-sdc/src/test/java/org/jclouds/joyent/sdc/v6_5/compute/functions/MachineInDatacenterToNodeMetadataTest.java
rename to labs/joyent-cloudapi/src/test/java/org/jclouds/joyent/cloudapi/v6_5/compute/functions/MachineInDatacenterToNodeMetadataTest.java
index 2ff1ac0..197572c 100644
--- a/labs/joyent-sdc/src/test/java/org/jclouds/joyent/sdc/v6_5/compute/functions/MachineInDatacenterToNodeMetadataTest.java
+++ b/labs/joyent-cloudapi/src/test/java/org/jclouds/joyent/cloudapi/v6_5/compute/functions/MachineInDatacenterToNodeMetadataTest.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.jclouds.joyent.sdc.v6_5.compute.functions;
+package org.jclouds.joyent.cloudapi.v6_5.compute.functions;
 
 import static org.testng.Assert.assertEquals;
 import static org.testng.Assert.assertNotNull;
@@ -36,10 +36,11 @@
 import org.jclouds.domain.Location;
 import org.jclouds.domain.LocationBuilder;
 import org.jclouds.domain.LocationScope;
-import org.jclouds.joyent.sdc.v6_5.compute.config.SDCComputeServiceContextModule;
-import org.jclouds.joyent.sdc.v6_5.domain.Machine;
-import org.jclouds.joyent.sdc.v6_5.domain.datacenterscoped.MachineInDatacenter;
-import org.jclouds.joyent.sdc.v6_5.parse.ParseCreatedMachineTest;
+import org.jclouds.joyent.cloudapi.v6_5.compute.config.JoyentCloudComputeServiceContextModule;
+import org.jclouds.joyent.cloudapi.v6_5.compute.functions.MachineInDatacenterToNodeMetadata;
+import org.jclouds.joyent.cloudapi.v6_5.domain.Machine;
+import org.jclouds.joyent.cloudapi.v6_5.domain.datacenterscoped.MachineInDatacenter;
+import org.jclouds.joyent.cloudapi.v6_5.parse.ParseCreatedMachineTest;
 import org.testng.annotations.Test;
 
 import com.google.common.base.Supplier;
@@ -49,7 +50,7 @@
 import com.google.inject.Guice;
 
 /**
- * Tests for the function for transforming a sdc specific Machine into a generic
+ * Tests for the function for transforming a cloudApi specific Machine into a generic
  * NodeMetadata object.
  * 
  * @author Adrian Cole
@@ -57,8 +58,8 @@
 @Test(testName = "MachineInDatacenterToNodeMetadataTest")
 public class MachineInDatacenterToNodeMetadataTest {
 
-   Location provider = new LocationBuilder().scope(LocationScope.PROVIDER).id("joyent-sdc")
-         .description("joyent-sdc").build();
+   Location provider = new LocationBuilder().scope(LocationScope.PROVIDER).id("joyent-cloudapi")
+         .description("joyent-cloudapi").build();
    Location zone = new LocationBuilder().id("us-sw-1").description("us-sw-1").scope(LocationScope.ZONE)
          .parent(provider).build();
    Supplier<Map<String, Location>> locationIndex = Suppliers.<Map<String, Location>> ofInstance(ImmutableMap
@@ -105,7 +106,7 @@
       MachineInDatacenter machineInDatacenterToConvert = new MachineInDatacenter(machineToConvert, "us-sw-1");
 
       MachineInDatacenterToNodeMetadata converter = new MachineInDatacenterToNodeMetadata(
-            SDCComputeServiceContextModule.toPortableNodeStatus, locationIndex,
+            JoyentCloudComputeServiceContextModule.toPortableNodeStatus, locationIndex,
             Suppliers.<Set<? extends Image>> ofInstance(images),
             Suppliers.<Set<? extends Hardware>> ofInstance(hardwares), namingConvention);
 
@@ -125,7 +126,7 @@
 
       assertEquals(convertedNodeMetadata.getHardware(), expectedHardware);
 
-      assertEquals(SDCComputeServiceContextModule.toPortableNodeStatus.get(machineToConvert.getState()),
+      assertEquals(JoyentCloudComputeServiceContextModule.toPortableNodeStatus.get(machineToConvert.getState()),
             convertedNodeMetadata.getStatus());
 
       assertNotNull(convertedNodeMetadata.getPrivateAddresses());
diff --git a/labs/joyent-sdc/src/test/java/org/jclouds/joyent/sdc/v6_5/compute/functions/OrphanedGroupsByDatacenterIdTest.java b/labs/joyent-cloudapi/src/test/java/org/jclouds/joyent/cloudapi/v6_5/compute/functions/OrphanedGroupsByDatacenterIdTest.java
similarity index 81%
rename from labs/joyent-sdc/src/test/java/org/jclouds/joyent/sdc/v6_5/compute/functions/OrphanedGroupsByDatacenterIdTest.java
rename to labs/joyent-cloudapi/src/test/java/org/jclouds/joyent/cloudapi/v6_5/compute/functions/OrphanedGroupsByDatacenterIdTest.java
index 0d61775..2b3f8c1 100644
--- a/labs/joyent-sdc/src/test/java/org/jclouds/joyent/sdc/v6_5/compute/functions/OrphanedGroupsByDatacenterIdTest.java
+++ b/labs/joyent-cloudapi/src/test/java/org/jclouds/joyent/cloudapi/v6_5/compute/functions/OrphanedGroupsByDatacenterIdTest.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.jclouds.joyent.sdc.v6_5.compute.functions;
+package org.jclouds.joyent.cloudapi.v6_5.compute.functions;
 
 import static org.testng.Assert.assertEquals;
 
@@ -30,11 +30,13 @@
 import org.jclouds.domain.Location;
 import org.jclouds.domain.LocationBuilder;
 import org.jclouds.domain.LocationScope;
-import org.jclouds.joyent.sdc.v6_5.compute.config.SDCComputeServiceContextModule;
-import org.jclouds.joyent.sdc.v6_5.domain.Machine.State;
-import org.jclouds.joyent.sdc.v6_5.domain.datacenterscoped.DatacenterAndName;
-import org.jclouds.joyent.sdc.v6_5.domain.datacenterscoped.MachineInDatacenter;
-import org.jclouds.joyent.sdc.v6_5.parse.ParseMachineTest;
+import org.jclouds.joyent.cloudapi.v6_5.compute.config.JoyentCloudComputeServiceContextModule;
+import org.jclouds.joyent.cloudapi.v6_5.compute.functions.MachineInDatacenterToNodeMetadata;
+import org.jclouds.joyent.cloudapi.v6_5.compute.functions.OrphanedGroupsByDatacenterId;
+import org.jclouds.joyent.cloudapi.v6_5.domain.Machine.State;
+import org.jclouds.joyent.cloudapi.v6_5.domain.datacenterscoped.DatacenterAndName;
+import org.jclouds.joyent.cloudapi.v6_5.domain.datacenterscoped.MachineInDatacenter;
+import org.jclouds.joyent.cloudapi.v6_5.parse.ParseMachineTest;
 import org.testng.annotations.Test;
 
 import com.google.common.base.Predicates;
@@ -53,8 +55,8 @@
 @Test(testName = "OrphanedGroupsByDatacenterIdTest")
 public class OrphanedGroupsByDatacenterIdTest {
 
-   Location provider = new LocationBuilder().scope(LocationScope.PROVIDER).id("joyent-sdc").description(
-            "joyent-sdc").build();
+   Location provider = new LocationBuilder().scope(LocationScope.PROVIDER).id("joyent-cloudapi").description(
+            "joyent-cloudapi").build();
    Location datacenter = new LocationBuilder().id("us-east-1").description("us-east-1").scope(
             LocationScope.ZONE).parent(provider).build();
    Supplier<Map<String, Location>> locationIndex = Suppliers.<Map<String, Location>> ofInstance(ImmutableMap
@@ -70,7 +72,7 @@
 
       
       MachineInDatacenterToNodeMetadata converter = new MachineInDatacenterToNodeMetadata(
-               SDCComputeServiceContextModule.toPortableNodeStatus, locationIndex, Suppliers
+               JoyentCloudComputeServiceContextModule.toPortableNodeStatus, locationIndex, Suppliers
                .<Set<? extends Image>> ofInstance(ImmutableSet.<Image> of()), Suppliers
                .<Set<? extends Hardware>> ofInstance(ImmutableSet.<Hardware> of()), namingConvention);
 
@@ -87,7 +89,7 @@
       MachineInDatacenter machine2 = new MachineInDatacenter(new ParseMachineTest().expected(), "us-east-1");
 
       MachineInDatacenterToNodeMetadata converter = new MachineInDatacenterToNodeMetadata(
-               SDCComputeServiceContextModule.toPortableNodeStatus, locationIndex, Suppliers
+               JoyentCloudComputeServiceContextModule.toPortableNodeStatus, locationIndex, Suppliers
                         .<Set<? extends Image>> ofInstance(ImmutableSet.<Image> of()), Suppliers
                         .<Set<? extends Hardware>> ofInstance(ImmutableSet.<Hardware> of()), namingConvention);
 
diff --git a/labs/joyent-sdc/src/test/java/org/jclouds/joyent/sdc/v6_5/compute/functions/PackageInDatacenterToHardwareTest.java b/labs/joyent-cloudapi/src/test/java/org/jclouds/joyent/cloudapi/v6_5/compute/functions/PackageInDatacenterToHardwareTest.java
similarity index 86%
rename from labs/joyent-sdc/src/test/java/org/jclouds/joyent/sdc/v6_5/compute/functions/PackageInDatacenterToHardwareTest.java
rename to labs/joyent-cloudapi/src/test/java/org/jclouds/joyent/cloudapi/v6_5/compute/functions/PackageInDatacenterToHardwareTest.java
index 8a88530..fea8e82 100644
--- a/labs/joyent-sdc/src/test/java/org/jclouds/joyent/sdc/v6_5/compute/functions/PackageInDatacenterToHardwareTest.java
+++ b/labs/joyent-cloudapi/src/test/java/org/jclouds/joyent/cloudapi/v6_5/compute/functions/PackageInDatacenterToHardwareTest.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.jclouds.joyent.sdc.v6_5.compute.functions;
+package org.jclouds.joyent.cloudapi.v6_5.compute.functions;
 
 import static org.testng.Assert.assertEquals;
 import static org.testng.Assert.assertFalse;
@@ -28,8 +28,9 @@
 import org.jclouds.domain.Location;
 import org.jclouds.domain.LocationBuilder;
 import org.jclouds.domain.LocationScope;
-import org.jclouds.joyent.sdc.v6_5.domain.Package;
-import org.jclouds.joyent.sdc.v6_5.domain.datacenterscoped.PackageInDatacenter;
+import org.jclouds.joyent.cloudapi.v6_5.compute.functions.PackageInDatacenterToHardware;
+import org.jclouds.joyent.cloudapi.v6_5.domain.Package;
+import org.jclouds.joyent.cloudapi.v6_5.domain.datacenterscoped.PackageInDatacenter;
 import org.testng.annotations.Test;
 
 import com.google.common.base.Supplier;
@@ -43,14 +44,14 @@
  */
 @Test(testName = "PackageInDatacenterToHardwareTest")
 public class PackageInDatacenterToHardwareTest {
-   Location provider = new LocationBuilder().scope(LocationScope.PROVIDER).id("joyent-sdc").description(
-            "joyent-sdc").build();
+   Location provider = new LocationBuilder().scope(LocationScope.PROVIDER).id("joyent-cloudapi").description(
+            "joyent-cloudapi").build();
    Location zone = new LocationBuilder().id("us-sw-1").description("us-sw-1").scope(
             LocationScope.ZONE).parent(provider).build();
    Supplier<Map<String, Location>> locationIndex = Suppliers.<Map<String, Location>> ofInstance(ImmutableMap
             .<String, Location> of("us-sw-1", zone));
    
-   Package packageToConvert = org.jclouds.joyent.sdc.v6_5.domain.Package.builder().name("Small 1GB").memorySizeMb(1024)
+   Package packageToConvert = org.jclouds.joyent.cloudapi.v6_5.domain.Package.builder().name("Small 1GB").memorySizeMb(1024)
          .diskSizeGb(30720).swapSizeMb(2048).isDefault(true).build();
 
    @Test
diff --git a/labs/joyent-sdc/src/test/java/org/jclouds/joyent/sdc/v6_5/compute/loaders/CreateUniqueKeyTest.java b/labs/joyent-cloudapi/src/test/java/org/jclouds/joyent/cloudapi/v6_5/compute/loaders/CreateUniqueKeyTest.java
similarity index 81%
rename from labs/joyent-sdc/src/test/java/org/jclouds/joyent/sdc/v6_5/compute/loaders/CreateUniqueKeyTest.java
rename to labs/joyent-cloudapi/src/test/java/org/jclouds/joyent/cloudapi/v6_5/compute/loaders/CreateUniqueKeyTest.java
index 9e2a4a2..af4b530 100644
--- a/labs/joyent-sdc/src/test/java/org/jclouds/joyent/sdc/v6_5/compute/loaders/CreateUniqueKeyTest.java
+++ b/labs/joyent-cloudapi/src/test/java/org/jclouds/joyent/cloudapi/v6_5/compute/loaders/CreateUniqueKeyTest.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.jclouds.joyent.sdc.v6_5.compute.loaders;
+package org.jclouds.joyent.cloudapi.v6_5.compute.loaders;
 
 import static org.easymock.EasyMock.createMock;
 import static org.easymock.EasyMock.expect;
@@ -43,11 +43,12 @@
 import org.jclouds.crypto.Pems;
 import org.jclouds.crypto.SshKeys;
 import org.jclouds.io.Payloads;
-import org.jclouds.joyent.sdc.v6_5.SDCClient;
-import org.jclouds.joyent.sdc.v6_5.compute.internal.KeyAndPrivateKey;
-import org.jclouds.joyent.sdc.v6_5.domain.Key;
-import org.jclouds.joyent.sdc.v6_5.domain.datacenterscoped.DatacenterAndName;
-import org.jclouds.joyent.sdc.v6_5.features.KeyClient;
+import org.jclouds.joyent.cloudapi.v6_5.JoyentCloudClient;
+import org.jclouds.joyent.cloudapi.v6_5.compute.internal.KeyAndPrivateKey;
+import org.jclouds.joyent.cloudapi.v6_5.compute.loaders.CreateUniqueKey;
+import org.jclouds.joyent.cloudapi.v6_5.domain.Key;
+import org.jclouds.joyent.cloudapi.v6_5.domain.datacenterscoped.DatacenterAndName;
+import org.jclouds.joyent.cloudapi.v6_5.features.KeyClient;
 import org.testng.annotations.BeforeClass;
 import org.testng.annotations.Test;
 
@@ -89,7 +90,7 @@
 
    @Test
    public void testApply() {
-      SDCClient sdcClient = createMock(SDCClient.class);
+      JoyentCloudClient cloudApiClient = createMock(JoyentCloudClient.class);
       KeyClient keyClient = createMock(KeyClient.class);
       Crypto crypto = createMock(Crypto.class);
       KeyPairGenerator rsaKeyPairGenerator = createMock(KeyPairGenerator.class);
@@ -101,18 +102,18 @@
       rsaKeyPairGenerator.initialize(2048, secureRandom);
       expect(rsaKeyPairGenerator.genKeyPair()).andReturn(keyPair);
 
-      expect(sdcClient.getKeyClient()).andReturn(keyClient);
+      expect(cloudApiClient.getKeyClient()).andReturn(keyClient);
 
       expect(keyClient.create(key)).andReturn(key);
 
-      replay(sdcClient, keyClient, crypto, rsaKeyPairGenerator, secureRandom);
+      replay(cloudApiClient, keyClient, crypto, rsaKeyPairGenerator, secureRandom);
 
-      CreateUniqueKey parser = new CreateUniqueKey(sdcClient, namingConvention, crypto, Providers.of(secureRandom));
+      CreateUniqueKey parser = new CreateUniqueKey(cloudApiClient, namingConvention, crypto, Providers.of(secureRandom));
 
       assertEquals(parser.load(DatacenterAndName.fromDatacenterAndName("datacenter", "group")),
             KeyAndPrivateKey.fromKeyAndPrivateKey(key, PRIVATE_KEY));
 
-      verify(sdcClient, keyClient, crypto, rsaKeyPairGenerator, secureRandom);
+      verify(cloudApiClient, keyClient, crypto, rsaKeyPairGenerator, secureRandom);
    }
 
 }
diff --git a/labs/joyent-sdc/src/test/java/org/jclouds/joyent/sdc/v6_5/compute/options/SDCTemplateOptionsTest.java b/labs/joyent-cloudapi/src/test/java/org/jclouds/joyent/cloudapi/v6_5/compute/options/JoyentCloudTemplateOptionsTest.java
similarity index 61%
rename from labs/joyent-sdc/src/test/java/org/jclouds/joyent/sdc/v6_5/compute/options/SDCTemplateOptionsTest.java
rename to labs/joyent-cloudapi/src/test/java/org/jclouds/joyent/cloudapi/v6_5/compute/options/JoyentCloudTemplateOptionsTest.java
index bf75a90..b832ae3 100644
--- a/labs/joyent-sdc/src/test/java/org/jclouds/joyent/sdc/v6_5/compute/options/SDCTemplateOptionsTest.java
+++ b/labs/joyent-cloudapi/src/test/java/org/jclouds/joyent/cloudapi/v6_5/compute/options/JoyentCloudTemplateOptionsTest.java
@@ -16,74 +16,75 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.jclouds.joyent.sdc.v6_5.compute.options;
+package org.jclouds.joyent.cloudapi.v6_5.compute.options;
 
-import static org.jclouds.joyent.sdc.v6_5.compute.options.SDCTemplateOptions.Builder.authorizePublicKey;
-import static org.jclouds.joyent.sdc.v6_5.compute.options.SDCTemplateOptions.Builder.blockOnPort;
-import static org.jclouds.joyent.sdc.v6_5.compute.options.SDCTemplateOptions.Builder.generateKey;
-import static org.jclouds.joyent.sdc.v6_5.compute.options.SDCTemplateOptions.Builder.inboundPorts;
-import static org.jclouds.joyent.sdc.v6_5.compute.options.SDCTemplateOptions.Builder.installPrivateKey;
+import static org.jclouds.joyent.cloudapi.v6_5.compute.options.JoyentCloudTemplateOptions.Builder.authorizePublicKey;
+import static org.jclouds.joyent.cloudapi.v6_5.compute.options.JoyentCloudTemplateOptions.Builder.blockOnPort;
+import static org.jclouds.joyent.cloudapi.v6_5.compute.options.JoyentCloudTemplateOptions.Builder.generateKey;
+import static org.jclouds.joyent.cloudapi.v6_5.compute.options.JoyentCloudTemplateOptions.Builder.inboundPorts;
+import static org.jclouds.joyent.cloudapi.v6_5.compute.options.JoyentCloudTemplateOptions.Builder.installPrivateKey;
 import static org.testng.Assert.assertEquals;
 
 import java.io.IOException;
 
 import org.jclouds.compute.options.TemplateOptions;
+import org.jclouds.joyent.cloudapi.v6_5.compute.options.JoyentCloudTemplateOptions;
 import org.testng.annotations.Test;
 
 /**
- * Tests possible uses of SDCTemplateOptions and SDCTemplateOptions.Builder.*
+ * Tests possible uses of JoyentCloudTemplateOptions and JoyentCloudTemplateOptions.Builder.*
  * 
  * @author Adrian Cole
  */
-@Test(testName = "SDCTemplateOptionsTest")
-public class SDCTemplateOptionsTest {
+@Test(testName = "JoyentCloudTemplateOptionsTest")
+public class JoyentCloudTemplateOptionsTest {
 
    public void testAs() {
-      TemplateOptions options = new SDCTemplateOptions();
-      assertEquals(options.as(SDCTemplateOptions.class), options);
+      TemplateOptions options = new JoyentCloudTemplateOptions();
+      assertEquals(options.as(JoyentCloudTemplateOptions.class), options);
    }
 
    @Test
    public void testGenerateKeyDefault() {
-      SDCTemplateOptions options = new SDCTemplateOptions();
+      JoyentCloudTemplateOptions options = new JoyentCloudTemplateOptions();
       assert !options.shouldGenerateKey();
    }
 
    @Test
    public void testGenerateKey() {
-      SDCTemplateOptions options = new SDCTemplateOptions().generateKey(true);
+      JoyentCloudTemplateOptions options = new JoyentCloudTemplateOptions().generateKey(true);
       assert options.shouldGenerateKey();
    }
 
    @Test
    public void testGenerateKeyStatic() {
-      SDCTemplateOptions options = generateKey(true);
+      JoyentCloudTemplateOptions options = generateKey(true);
       assert options.shouldGenerateKey();
    }
 
    // superclass tests
    @Test(expectedExceptions = IllegalArgumentException.class)
    public void testinstallPrivateKeyBadFormat() {
-      SDCTemplateOptions options = new SDCTemplateOptions();
+      JoyentCloudTemplateOptions options = new JoyentCloudTemplateOptions();
       options.installPrivateKey("whompy");
    }
 
    @Test
    public void testinstallPrivateKey() throws IOException {
-      SDCTemplateOptions options = new SDCTemplateOptions();
+      JoyentCloudTemplateOptions options = new JoyentCloudTemplateOptions();
       options.installPrivateKey("-----BEGIN RSA PRIVATE KEY-----");
       assertEquals(options.getPrivateKey(), "-----BEGIN RSA PRIVATE KEY-----");
    }
 
    @Test
    public void testNullinstallPrivateKey() {
-      SDCTemplateOptions options = new SDCTemplateOptions();
+      JoyentCloudTemplateOptions options = new JoyentCloudTemplateOptions();
       assertEquals(options.getPrivateKey(), null);
    }
 
    @Test
    public void testinstallPrivateKeyStatic() throws IOException {
-      SDCTemplateOptions options = installPrivateKey("-----BEGIN RSA PRIVATE KEY-----");
+      JoyentCloudTemplateOptions options = installPrivateKey("-----BEGIN RSA PRIVATE KEY-----");
       assertEquals(options.getPrivateKey(), "-----BEGIN RSA PRIVATE KEY-----");
    }
 
@@ -94,26 +95,26 @@
 
    @Test(expectedExceptions = IllegalArgumentException.class)
    public void testauthorizePublicKeyBadFormat() {
-      SDCTemplateOptions options = new SDCTemplateOptions();
+      JoyentCloudTemplateOptions options = new JoyentCloudTemplateOptions();
       options.authorizePublicKey("whompy");
    }
 
    @Test
    public void testauthorizePublicKey() throws IOException {
-      SDCTemplateOptions options = new SDCTemplateOptions();
+      JoyentCloudTemplateOptions options = new JoyentCloudTemplateOptions();
       options.authorizePublicKey("ssh-rsa");
       assertEquals(options.getPublicKey(), "ssh-rsa");
    }
 
    @Test
    public void testNullauthorizePublicKey() {
-      SDCTemplateOptions options = new SDCTemplateOptions();
+      JoyentCloudTemplateOptions options = new JoyentCloudTemplateOptions();
       assertEquals(options.getPublicKey(), null);
    }
 
    @Test
    public void testauthorizePublicKeyStatic() throws IOException {
-      SDCTemplateOptions options = authorizePublicKey("ssh-rsa");
+      JoyentCloudTemplateOptions options = authorizePublicKey("ssh-rsa");
       assertEquals(options.getPublicKey(), "ssh-rsa");
    }
 
@@ -124,13 +125,13 @@
 
    @Test(expectedExceptions = IllegalArgumentException.class)
    public void testblockOnPortBadFormat() {
-      SDCTemplateOptions options = new SDCTemplateOptions();
+      JoyentCloudTemplateOptions options = new JoyentCloudTemplateOptions();
       options.blockOnPort(-1, -1);
    }
 
    @Test
    public void testblockOnPort() {
-      SDCTemplateOptions options = new SDCTemplateOptions();
+      JoyentCloudTemplateOptions options = new JoyentCloudTemplateOptions();
       options.blockOnPort(22, 30);
       assertEquals(options.getPort(), 22);
       assertEquals(options.getSeconds(), 30);
@@ -139,27 +140,27 @@
 
    @Test
    public void testNullblockOnPort() {
-      SDCTemplateOptions options = new SDCTemplateOptions();
+      JoyentCloudTemplateOptions options = new JoyentCloudTemplateOptions();
       assertEquals(options.getPort(), -1);
       assertEquals(options.getSeconds(), -1);
    }
 
    @Test
    public void testblockOnPortStatic() {
-      SDCTemplateOptions options = blockOnPort(22, 30);
+      JoyentCloudTemplateOptions options = blockOnPort(22, 30);
       assertEquals(options.getPort(), 22);
       assertEquals(options.getSeconds(), 30);
    }
 
    @Test(expectedExceptions = IllegalArgumentException.class)
    public void testinboundPortsBadFormat() {
-      SDCTemplateOptions options = new SDCTemplateOptions();
+      JoyentCloudTemplateOptions options = new JoyentCloudTemplateOptions();
       options.inboundPorts(-1, -1);
    }
 
    @Test
    public void testinboundPorts() {
-      SDCTemplateOptions options = new SDCTemplateOptions();
+      JoyentCloudTemplateOptions options = new JoyentCloudTemplateOptions();
       options.inboundPorts(22, 30);
       assertEquals(options.getInboundPorts()[0], 22);
       assertEquals(options.getInboundPorts()[1], 30);
@@ -168,13 +169,13 @@
 
    @Test
    public void testDefaultOpen22() {
-      SDCTemplateOptions options = new SDCTemplateOptions();
+      JoyentCloudTemplateOptions options = new JoyentCloudTemplateOptions();
       assertEquals(options.getInboundPorts()[0], 22);
    }
 
    @Test
    public void testinboundPortsStatic() {
-      SDCTemplateOptions options = inboundPorts(22, 30);
+      JoyentCloudTemplateOptions options = inboundPorts(22, 30);
       assertEquals(options.getInboundPorts()[0], 22);
       assertEquals(options.getInboundPorts()[1], 30);
    }
diff --git a/labs/joyent-sdc/src/test/java/org/jclouds/joyent/sdc/v6_5/features/DatacenterClientExpectTest.java b/labs/joyent-cloudapi/src/test/java/org/jclouds/joyent/cloudapi/v6_5/features/DatacenterClientExpectTest.java
similarity index 78%
rename from labs/joyent-sdc/src/test/java/org/jclouds/joyent/sdc/v6_5/features/DatacenterClientExpectTest.java
rename to labs/joyent-cloudapi/src/test/java/org/jclouds/joyent/cloudapi/v6_5/features/DatacenterClientExpectTest.java
index 2dc69ab..62d2dfa 100644
--- a/labs/joyent-sdc/src/test/java/org/jclouds/joyent/sdc/v6_5/features/DatacenterClientExpectTest.java
+++ b/labs/joyent-cloudapi/src/test/java/org/jclouds/joyent/cloudapi/v6_5/features/DatacenterClientExpectTest.java
@@ -16,15 +16,15 @@
  * specific language governing permisions and limitations
  * under the License.
  */
-package org.jclouds.joyent.sdc.v6_5.features;
+package org.jclouds.joyent.cloudapi.v6_5.features;
 
 import static org.testng.Assert.assertEquals;
 
 import java.net.URI;
 
 import org.jclouds.http.HttpResponse;
-import org.jclouds.joyent.sdc.v6_5.SDCClient;
-import org.jclouds.joyent.sdc.v6_5.internal.BaseSDCClientExpectTest;
+import org.jclouds.joyent.cloudapi.v6_5.JoyentCloudClient;
+import org.jclouds.joyent.cloudapi.v6_5.internal.BaseJoyentCloudClientExpectTest;
 import org.testng.annotations.Test;
 
 import com.google.common.collect.ImmutableMap;
@@ -33,11 +33,11 @@
  * @author Adrian Cole
  */
 @Test(groups = "unit", testName = "DatacenterClientExpectTest")
-public class DatacenterClientExpectTest extends BaseSDCClientExpectTest {
+public class DatacenterClientExpectTest extends BaseJoyentCloudClientExpectTest {
 
    public void testGetDatacentersWhenResponseIs2xx() {
 
-      SDCClient clientWhenDatacentersExists = requestSendsResponse(getDatacenters, getDatacentersResponse);
+      JoyentCloudClient clientWhenDatacentersExists = requestSendsResponse(getDatacenters, getDatacentersResponse);
 
       assertEquals(
             clientWhenDatacentersExists.getDatacenterClient().getDatacenters(),
@@ -50,7 +50,7 @@
    public void testGetDatacentersWhenResponseIs404() {
       HttpResponse getDatacentersResponse = HttpResponse.builder().statusCode(404).build();
 
-      SDCClient getDatacentersWhenNone = requestSendsResponse(getDatacenters, getDatacentersResponse);
+      JoyentCloudClient getDatacentersWhenNone = requestSendsResponse(getDatacenters, getDatacentersResponse);
 
       assertEquals(getDatacentersWhenNone.getDatacenterClient().getDatacenters(), ImmutableMap.of());
    }
diff --git a/labs/joyent-sdc/src/test/java/org/jclouds/joyent/sdc/v6_5/features/DatacenterClientLiveTest.java b/labs/joyent-cloudapi/src/test/java/org/jclouds/joyent/cloudapi/v6_5/features/DatacenterClientLiveTest.java
similarity index 79%
rename from labs/joyent-sdc/src/test/java/org/jclouds/joyent/sdc/v6_5/features/DatacenterClientLiveTest.java
rename to labs/joyent-cloudapi/src/test/java/org/jclouds/joyent/cloudapi/v6_5/features/DatacenterClientLiveTest.java
index 6858db2..561639a 100644
--- a/labs/joyent-sdc/src/test/java/org/jclouds/joyent/sdc/v6_5/features/DatacenterClientLiveTest.java
+++ b/labs/joyent-cloudapi/src/test/java/org/jclouds/joyent/cloudapi/v6_5/features/DatacenterClientLiveTest.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.jclouds.joyent.sdc.v6_5.features;
+package org.jclouds.joyent.cloudapi.v6_5.features;
 
 import static org.testng.Assert.assertNotNull;
 import static org.testng.Assert.assertTrue;
@@ -24,17 +24,17 @@
 import java.net.URI;
 import java.util.Map;
 
-import org.jclouds.joyent.sdc.v6_5.internal.BaseSDCClientLiveTest;
+import org.jclouds.joyent.cloudapi.v6_5.internal.BaseJoyentCloudClientLiveTest;
 import org.testng.annotations.Test;
 
 /**
  * @author Adrian Cole
  */
 @Test(groups = "live", testName = "DatacenterClientLiveTest")
-public class DatacenterClientLiveTest extends BaseSDCClientLiveTest {
+public class DatacenterClientLiveTest extends BaseJoyentCloudClientLiveTest {
 
    public void testGetDatacenters() {
-      Map<String, URI> dcs = sdcContext.getApi().getDatacenterClient().getDatacenters();
+      Map<String, URI> dcs = cloudApiContext.getApi().getDatacenterClient().getDatacenters();
       assertNotNull(dcs);
       assertTrue(dcs.size() > 0);
    }
diff --git a/labs/joyent-sdc/src/test/java/org/jclouds/joyent/sdc/v6_5/features/DatasetClientExpectTest.java b/labs/joyent-cloudapi/src/test/java/org/jclouds/joyent/cloudapi/v6_5/features/DatasetClientExpectTest.java
similarity index 82%
rename from labs/joyent-sdc/src/test/java/org/jclouds/joyent/sdc/v6_5/features/DatasetClientExpectTest.java
rename to labs/joyent-cloudapi/src/test/java/org/jclouds/joyent/cloudapi/v6_5/features/DatasetClientExpectTest.java
index 8e0e951..e0000dc 100644
--- a/labs/joyent-sdc/src/test/java/org/jclouds/joyent/sdc/v6_5/features/DatasetClientExpectTest.java
+++ b/labs/joyent-cloudapi/src/test/java/org/jclouds/joyent/cloudapi/v6_5/features/DatasetClientExpectTest.java
@@ -16,7 +16,7 @@
  * specific language governing permisions and limitations
  * under the License.
  */
-package org.jclouds.joyent.sdc.v6_5.features;
+package org.jclouds.joyent.cloudapi.v6_5.features;
 
 import static org.testng.Assert.assertEquals;
 
@@ -24,9 +24,9 @@
 
 import org.jclouds.http.HttpRequest;
 import org.jclouds.http.HttpResponse;
-import org.jclouds.joyent.sdc.v6_5.SDCClient;
-import org.jclouds.joyent.sdc.v6_5.internal.BaseSDCClientExpectTest;
-import org.jclouds.joyent.sdc.v6_5.parse.ParseDatasetListTest;
+import org.jclouds.joyent.cloudapi.v6_5.JoyentCloudClient;
+import org.jclouds.joyent.cloudapi.v6_5.internal.BaseJoyentCloudClientExpectTest;
+import org.jclouds.joyent.cloudapi.v6_5.parse.ParseDatasetListTest;
 import org.testng.annotations.Test;
 
 import com.google.common.collect.ImmutableMultimap;
@@ -36,7 +36,7 @@
  * @author Gerald Pereira
  */
 @Test(groups = "unit", testName = "DatasetClientExpectTest")
-public class DatasetClientExpectTest extends BaseSDCClientExpectTest {
+public class DatasetClientExpectTest extends BaseJoyentCloudClientExpectTest {
    HttpRequest list = HttpRequest.builder().method("GET").endpoint(
             URI.create("https://us-sw-1.api.joyentcloud.com/my/datasets")).headers(
             ImmutableMultimap.<String, String> builder().put("X-Api-Version", "~6.5").put("Accept", "application/json")
@@ -46,7 +46,7 @@
       HttpResponse listResponse = HttpResponse.builder().statusCode(200).payload(
                payloadFromResource("/dataset_list.json")).build();
 
-      SDCClient clientWhenDatasetsExists = requestsSendResponses(getDatacenters, getDatacentersResponse, list, listResponse);
+      JoyentCloudClient clientWhenDatasetsExists = requestsSendResponses(getDatacenters, getDatacentersResponse, list, listResponse);
 
       assertEquals(clientWhenDatasetsExists.getDatasetClientForDatacenter("us-sw-1").list().toString(), new ParseDatasetListTest()
                .expected().toString());
@@ -55,7 +55,7 @@
    public void testListDatasetsWhenResponseIs404() {
       HttpResponse listResponse = HttpResponse.builder().statusCode(404).build();
 
-      SDCClient listWhenNone = requestsSendResponses(getDatacenters, getDatacentersResponse, list, listResponse);
+      JoyentCloudClient listWhenNone = requestsSendResponses(getDatacenters, getDatacentersResponse, list, listResponse);
 
       assertEquals(listWhenNone.getDatasetClientForDatacenter("us-sw-1").list(), ImmutableSet.of());
    }
diff --git a/labs/joyent-sdc/src/test/java/org/jclouds/joyent/sdc/v6_5/features/DatasetClientLiveTest.java b/labs/joyent-cloudapi/src/test/java/org/jclouds/joyent/cloudapi/v6_5/features/DatasetClientLiveTest.java
similarity index 77%
rename from labs/joyent-sdc/src/test/java/org/jclouds/joyent/sdc/v6_5/features/DatasetClientLiveTest.java
rename to labs/joyent-cloudapi/src/test/java/org/jclouds/joyent/cloudapi/v6_5/features/DatasetClientLiveTest.java
index 0d62c86..0e50bf6 100644
--- a/labs/joyent-sdc/src/test/java/org/jclouds/joyent/sdc/v6_5/features/DatasetClientLiveTest.java
+++ b/labs/joyent-cloudapi/src/test/java/org/jclouds/joyent/cloudapi/v6_5/features/DatasetClientLiveTest.java
@@ -16,26 +16,27 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.jclouds.joyent.sdc.v6_5.features;
+package org.jclouds.joyent.cloudapi.v6_5.features;
 
 import static org.testng.Assert.assertEquals;
 
 import java.util.Set;
 
-import org.jclouds.joyent.sdc.v6_5.domain.Dataset;
-import org.jclouds.joyent.sdc.v6_5.internal.BaseSDCClientLiveTest;
+import org.jclouds.joyent.cloudapi.v6_5.domain.Dataset;
+import org.jclouds.joyent.cloudapi.v6_5.features.DatasetClient;
+import org.jclouds.joyent.cloudapi.v6_5.internal.BaseJoyentCloudClientLiveTest;
 import org.testng.annotations.Test;
 
 /**
  * @author Gerald Pereira
  */
 @Test(groups = "live", testName = "DatasetClientLiveTest")
-public class DatasetClientLiveTest extends BaseSDCClientLiveTest {
+public class DatasetClientLiveTest extends BaseJoyentCloudClientLiveTest {
 
    @Test
    public void testListAndGetDatasets() throws Exception {
-      for (String datacenterId : sdcContext.getApi().getConfiguredDatacenters()) {
-         DatasetClient client = sdcContext.getApi().getDatasetClientForDatacenter(datacenterId);
+      for (String datacenterId : cloudApiContext.getApi().getConfiguredDatacenters()) {
+         DatasetClient client = cloudApiContext.getApi().getDatasetClientForDatacenter(datacenterId);
          Set<Dataset> response = client.list();
          assert null != response;
          for (Dataset dataset : response) {
diff --git a/labs/joyent-sdc/src/test/java/org/jclouds/joyent/sdc/v6_5/features/KeyClientExpectTest.java b/labs/joyent-cloudapi/src/test/java/org/jclouds/joyent/cloudapi/v6_5/features/KeyClientExpectTest.java
similarity index 81%
rename from labs/joyent-sdc/src/test/java/org/jclouds/joyent/sdc/v6_5/features/KeyClientExpectTest.java
rename to labs/joyent-cloudapi/src/test/java/org/jclouds/joyent/cloudapi/v6_5/features/KeyClientExpectTest.java
index e8190c8..c027fbf 100644
--- a/labs/joyent-sdc/src/test/java/org/jclouds/joyent/sdc/v6_5/features/KeyClientExpectTest.java
+++ b/labs/joyent-cloudapi/src/test/java/org/jclouds/joyent/cloudapi/v6_5/features/KeyClientExpectTest.java
@@ -16,7 +16,7 @@
  * specific language governing permisions and limitations
  * under the License.
  */
-package org.jclouds.joyent.sdc.v6_5.features;
+package org.jclouds.joyent.cloudapi.v6_5.features;
 
 import static org.testng.Assert.assertEquals;
 
@@ -24,10 +24,10 @@
 
 import org.jclouds.http.HttpRequest;
 import org.jclouds.http.HttpResponse;
-import org.jclouds.joyent.sdc.v6_5.SDCClient;
-import org.jclouds.joyent.sdc.v6_5.internal.BaseSDCClientExpectTest;
-import org.jclouds.joyent.sdc.v6_5.parse.ParseKeyListTest;
-import org.jclouds.joyent.sdc.v6_5.parse.ParseKeyTest;
+import org.jclouds.joyent.cloudapi.v6_5.JoyentCloudClient;
+import org.jclouds.joyent.cloudapi.v6_5.internal.BaseJoyentCloudClientExpectTest;
+import org.jclouds.joyent.cloudapi.v6_5.parse.ParseKeyListTest;
+import org.jclouds.joyent.cloudapi.v6_5.parse.ParseKeyTest;
 import org.testng.annotations.Test;
 
 import com.google.common.collect.ImmutableMultimap;
@@ -37,7 +37,7 @@
  * @author Adrian Cole
  */
 @Test(groups = "unit", testName = "KeyClientExpectTest")
-public class KeyClientExpectTest extends BaseSDCClientExpectTest {
+public class KeyClientExpectTest extends BaseJoyentCloudClientExpectTest {
    HttpRequest list = HttpRequest.builder().method("GET").endpoint(
             URI.create("https://api.joyentcloud.com/my/keys")).headers(
             ImmutableMultimap.<String, String> builder().put("X-Api-Version", "~6.5").put("Accept", "application/json")
@@ -47,7 +47,7 @@
       HttpResponse listResponse = HttpResponse.builder().statusCode(200).payload(
                payloadFromResource("/key_list.json")).build();
 
-      SDCClient clientWhenKeysExists = requestsSendResponses(getDatacenters, getDatacentersResponse, list, listResponse);
+      JoyentCloudClient clientWhenKeysExists = requestsSendResponses(getDatacenters, getDatacentersResponse, list, listResponse);
 
       assertEquals(clientWhenKeysExists.getKeyClient().list(), new ParseKeyListTest().expected());
    }
@@ -55,7 +55,7 @@
    public void testListKeysWhenResponseIs404() {
       HttpResponse listResponse = HttpResponse.builder().statusCode(404).build();
 
-      SDCClient listWhenNone = requestsSendResponses(getDatacenters, getDatacentersResponse, list, listResponse);
+      JoyentCloudClient listWhenNone = requestsSendResponses(getDatacenters, getDatacentersResponse, list, listResponse);
 
       assertEquals(listWhenNone.getKeyClient().list(), ImmutableSet.of());
    }
@@ -77,7 +77,7 @@
                .payload(payloadFromResourceWithContentType("/key.json", "application/json; charset=UTF-8"))
                .build();
 
-      SDCClient clientWithNewKey = requestsSendResponses(getDatacenters, getDatacentersResponse, create, createResponse);
+      JoyentCloudClient clientWithNewKey = requestsSendResponses(getDatacenters, getDatacentersResponse, create, createResponse);
 
       assertEquals(clientWithNewKey.getKeyClient().create(new ParseKeyTest().expected())
             .toString(), new ParseKeyTest().expected().toString());
diff --git a/labs/joyent-sdc/src/test/java/org/jclouds/joyent/sdc/v6_5/features/KeyClientLiveTest.java b/labs/joyent-cloudapi/src/test/java/org/jclouds/joyent/cloudapi/v6_5/features/KeyClientLiveTest.java
similarity index 81%
rename from labs/joyent-sdc/src/test/java/org/jclouds/joyent/sdc/v6_5/features/KeyClientLiveTest.java
rename to labs/joyent-cloudapi/src/test/java/org/jclouds/joyent/cloudapi/v6_5/features/KeyClientLiveTest.java
index 072b1a5..49a15f2 100644
--- a/labs/joyent-sdc/src/test/java/org/jclouds/joyent/sdc/v6_5/features/KeyClientLiveTest.java
+++ b/labs/joyent-cloudapi/src/test/java/org/jclouds/joyent/cloudapi/v6_5/features/KeyClientLiveTest.java
@@ -16,15 +16,16 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.jclouds.joyent.sdc.v6_5.features;
+package org.jclouds.joyent.cloudapi.v6_5.features;
 
 import static org.testng.Assert.assertEquals;
 
 import java.util.Set;
 
 import org.jclouds.crypto.SshKeys;
-import org.jclouds.joyent.sdc.v6_5.domain.Key;
-import org.jclouds.joyent.sdc.v6_5.internal.BaseSDCClientLiveTest;
+import org.jclouds.joyent.cloudapi.v6_5.domain.Key;
+import org.jclouds.joyent.cloudapi.v6_5.features.KeyClient;
+import org.jclouds.joyent.cloudapi.v6_5.internal.BaseJoyentCloudClientLiveTest;
 import org.testng.annotations.BeforeTest;
 import org.testng.annotations.Test;
 
@@ -32,11 +33,11 @@
  * @author Adrian Cole
  */
 @Test(groups = "live", singleThreaded = true, testName = "KeyClientLiveTest")
-public class KeyClientLiveTest extends BaseSDCClientLiveTest {
+public class KeyClientLiveTest extends BaseJoyentCloudClientLiveTest {
 
    @Test
    public void testListAndGetKeys() throws Exception {
-      KeyClient client = sdcContext.getApi().getKeyClient();
+      KeyClient client = cloudApiContext.getApi().getKeyClient();
       Set<Key> response = client.list();
       assert null != response;
       for (Key key : response) {
@@ -58,7 +59,7 @@
    }
 
    public void testCreateKey() {
-      KeyClient client = sdcContext.getApi().getKeyClient();
+      KeyClient client = cloudApiContext.getApi().getKeyClient();
 
       Key newKey = client.create(Key.builder().name(fingerprint).key(keyText).build());
       assertEquals(newKey.getName(), fingerprint);
@@ -71,13 +72,13 @@
 
    @Test(dependsOnMethods = "testCreateKey", expectedExceptions = IllegalStateException.class)
    public void testDuplicateKey() {
-      KeyClient client = sdcContext.getApi().getKeyClient();
+      KeyClient client = cloudApiContext.getApi().getKeyClient();
       client.create(Key.builder().name(fingerprint).key(keyText).build());
    }
 
    @Test(dependsOnMethods = "testDuplicateKey")
    public void testDestroyKey() {
-      final KeyClient client = sdcContext.getApi().getKeyClient();
+      final KeyClient client = cloudApiContext.getApi().getKeyClient();
       client.delete(fingerprint);
       // not that eventhough the key is destroyed it is visible via GET for at
       // least 45 seconds. This may be a cache issue on the server
diff --git a/labs/joyent-sdc/src/test/java/org/jclouds/joyent/sdc/v6_5/features/MachineClientExpectTest.java b/labs/joyent-cloudapi/src/test/java/org/jclouds/joyent/cloudapi/v6_5/features/MachineClientExpectTest.java
similarity index 78%
rename from labs/joyent-sdc/src/test/java/org/jclouds/joyent/sdc/v6_5/features/MachineClientExpectTest.java
rename to labs/joyent-cloudapi/src/test/java/org/jclouds/joyent/cloudapi/v6_5/features/MachineClientExpectTest.java
index 78b658c..0b249b6 100644
--- a/labs/joyent-sdc/src/test/java/org/jclouds/joyent/sdc/v6_5/features/MachineClientExpectTest.java
+++ b/labs/joyent-cloudapi/src/test/java/org/jclouds/joyent/cloudapi/v6_5/features/MachineClientExpectTest.java
@@ -16,7 +16,7 @@
  * specific language governing permisions and limitations
  * under the License.
  */
-package org.jclouds.joyent.sdc.v6_5.features;
+package org.jclouds.joyent.cloudapi.v6_5.features;
 
 import static org.testng.Assert.assertEquals;
 
@@ -24,11 +24,11 @@
 
 import org.jclouds.http.HttpRequest;
 import org.jclouds.http.HttpResponse;
-import org.jclouds.joyent.sdc.v6_5.SDCClient;
-import org.jclouds.joyent.sdc.v6_5.internal.BaseSDCClientExpectTest;
-import org.jclouds.joyent.sdc.v6_5.options.CreateMachineOptions;
-import org.jclouds.joyent.sdc.v6_5.parse.ParseCreatedMachineTest;
-import org.jclouds.joyent.sdc.v6_5.parse.ParseMachineListTest;
+import org.jclouds.joyent.cloudapi.v6_5.JoyentCloudClient;
+import org.jclouds.joyent.cloudapi.v6_5.internal.BaseJoyentCloudClientExpectTest;
+import org.jclouds.joyent.cloudapi.v6_5.options.CreateMachineOptions;
+import org.jclouds.joyent.cloudapi.v6_5.parse.ParseCreatedMachineTest;
+import org.jclouds.joyent.cloudapi.v6_5.parse.ParseMachineListTest;
 import org.testng.annotations.Test;
 
 import com.google.common.collect.ImmutableMultimap;
@@ -38,7 +38,7 @@
  * @author Gerald Pereira
  */
 @Test(groups = "unit", testName = "MachineClientExpectTest")
-public class MachineClientExpectTest extends BaseSDCClientExpectTest {
+public class MachineClientExpectTest extends BaseJoyentCloudClientExpectTest {
    HttpRequest list = HttpRequest.builder().method("GET").endpoint(
             URI.create("https://us-sw-1.api.joyentcloud.com/my/machines")).headers(
             ImmutableMultimap.<String, String> builder().put("X-Api-Version", "~6.5").put("Accept", "application/json")
@@ -48,7 +48,7 @@
       HttpResponse listResponse = HttpResponse.builder().statusCode(200).payload(
                payloadFromResource("/machine_list.json")).build();
 
-      SDCClient clientWhenMachinesExists = requestsSendResponses(getDatacenters, getDatacentersResponse, list, listResponse);
+      JoyentCloudClient clientWhenMachinesExists = requestsSendResponses(getDatacenters, getDatacentersResponse, list, listResponse);
 
       assertEquals(clientWhenMachinesExists.getMachineClientForDatacenter("us-sw-1").list(), new ParseMachineListTest().expected());
    }
@@ -56,7 +56,7 @@
    public void testListMachinesWhenResponseIs404() {
       HttpResponse listResponse = HttpResponse.builder().statusCode(404).build();
 
-      SDCClient listWhenNone = requestsSendResponses(getDatacenters, getDatacentersResponse, list, listResponse);
+      JoyentCloudClient listWhenNone = requestsSendResponses(getDatacenters, getDatacentersResponse, list, listResponse);
 
       assertEquals(listWhenNone.getMachineClientForDatacenter("us-sw-1").list(), ImmutableSet.of());
    }
@@ -76,7 +76,7 @@
                .payload(payloadFromResourceWithContentType("/new_machine.json", "application/json; charset=UTF-8"))
                .build();
 
-      SDCClient clientWithNewMachine = requestsSendResponses(getDatacenters, getDatacentersResponse, createWithDataset, createWithDatasetResponse);
+      JoyentCloudClient clientWithNewMachine = requestsSendResponses(getDatacenters, getDatacentersResponse, createWithDataset, createWithDatasetResponse);
 
       assertEquals(
             clientWithNewMachine
diff --git a/labs/joyent-sdc/src/test/java/org/jclouds/joyent/sdc/v6_5/features/MachineClientLiveTest.java b/labs/joyent-cloudapi/src/test/java/org/jclouds/joyent/cloudapi/v6_5/features/MachineClientLiveTest.java
similarity index 85%
rename from labs/joyent-sdc/src/test/java/org/jclouds/joyent/sdc/v6_5/features/MachineClientLiveTest.java
rename to labs/joyent-cloudapi/src/test/java/org/jclouds/joyent/cloudapi/v6_5/features/MachineClientLiveTest.java
index 677860d..62ca169 100644
--- a/labs/joyent-sdc/src/test/java/org/jclouds/joyent/sdc/v6_5/features/MachineClientLiveTest.java
+++ b/labs/joyent-cloudapi/src/test/java/org/jclouds/joyent/cloudapi/v6_5/features/MachineClientLiveTest.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.jclouds.joyent.sdc.v6_5.features;
+package org.jclouds.joyent.cloudapi.v6_5.features;
 
 import static com.google.common.base.Predicates.not;
 import static org.testng.Assert.assertEquals;
@@ -29,11 +29,12 @@
 import org.jclouds.compute.domain.ExecResponse;
 import org.jclouds.crypto.SshKeys;
 import org.jclouds.domain.LoginCredentials;
-import org.jclouds.joyent.sdc.v6_5.domain.Key;
-import org.jclouds.joyent.sdc.v6_5.domain.Machine;
-import org.jclouds.joyent.sdc.v6_5.internal.BaseSDCClientLiveTest;
-import org.jclouds.joyent.sdc.v6_5.options.CreateMachineOptions;
-import org.jclouds.joyent.sdc.v6_5.reference.Metadata;
+import org.jclouds.joyent.cloudapi.v6_5.domain.Key;
+import org.jclouds.joyent.cloudapi.v6_5.domain.Machine;
+import org.jclouds.joyent.cloudapi.v6_5.features.MachineClient;
+import org.jclouds.joyent.cloudapi.v6_5.internal.BaseJoyentCloudClientLiveTest;
+import org.jclouds.joyent.cloudapi.v6_5.options.CreateMachineOptions;
+import org.jclouds.joyent.cloudapi.v6_5.reference.Metadata;
 import org.jclouds.predicates.InetSocketAddressConnect;
 import org.jclouds.predicates.RetryablePredicate;
 import org.jclouds.ssh.SshClient;
@@ -53,12 +54,12 @@
  * @author Adrian Cole
  */
 @Test(groups = "live", testName = "MachineClientLiveTest")
-public class MachineClientLiveTest extends BaseSDCClientLiveTest {
+public class MachineClientLiveTest extends BaseJoyentCloudClientLiveTest {
 
    @Test
    public void testListAndGetMachines() throws Exception {
-      for (String datacenterId : sdcContext.getApi().getConfiguredDatacenters()) {
-         MachineClient client = sdcContext.getApi().getMachineClientForDatacenter(datacenterId);
+      for (String datacenterId : cloudApiContext.getApi().getConfiguredDatacenters()) {
+         MachineClient client = cloudApiContext.getApi().getMachineClientForDatacenter(datacenterId);
          Set<Machine> response = client.list();
          assert null != response;
          for (Machine machine : response) {
@@ -93,9 +94,9 @@
       super.setupContext();
       key = SshKeys.generate();
       fingerprint = SshKeys.fingerprintPublicKey(key.get("public"));
-      sdcContext.getApi().getKeyClient().create(Key.builder().name(fingerprint).key(key.get("public")).build());
-      client = sdcContext.getApi().getMachineClientForDatacenter(
-            Iterables.get(sdcContext.getApi().getConfiguredDatacenters(), 0));
+      cloudApiContext.getApi().getKeyClient().create(Key.builder().name(fingerprint).key(key.get("public")).build());
+      client = cloudApiContext.getApi().getMachineClientForDatacenter(
+            Iterables.get(cloudApiContext.getApi().getConfiguredDatacenters(), 0));
       socketTester = new RetryablePredicate<HostAndPort>(new InetSocketAddressConnect(), 180, 1, 1, TimeUnit.SECONDS);
       machineRunning = new RetryablePredicate<Machine>(new Predicate<Machine>() {
 
@@ -164,7 +165,7 @@
    protected void tearDown() {
       if (machine != null)
          client.delete(machine.getId());
-      sdcContext.getApi().getKeyClient().delete(fingerprint);
+      cloudApiContext.getApi().getKeyClient().delete(fingerprint);
       super.tearDown();
    }
 
diff --git a/labs/joyent-sdc/src/test/java/org/jclouds/joyent/sdc/v6_5/features/PackageClientExpectTest.java b/labs/joyent-cloudapi/src/test/java/org/jclouds/joyent/cloudapi/v6_5/features/PackageClientExpectTest.java
similarity index 78%
rename from labs/joyent-sdc/src/test/java/org/jclouds/joyent/sdc/v6_5/features/PackageClientExpectTest.java
rename to labs/joyent-cloudapi/src/test/java/org/jclouds/joyent/cloudapi/v6_5/features/PackageClientExpectTest.java
index 86fbbd7..313b8dd 100644
--- a/labs/joyent-sdc/src/test/java/org/jclouds/joyent/sdc/v6_5/features/PackageClientExpectTest.java
+++ b/labs/joyent-cloudapi/src/test/java/org/jclouds/joyent/cloudapi/v6_5/features/PackageClientExpectTest.java
@@ -16,7 +16,7 @@
  * specific language governing permisions and limitations
  * under the License.
  */
-package org.jclouds.joyent.sdc.v6_5.features;
+package org.jclouds.joyent.cloudapi.v6_5.features;
 
 import static org.testng.Assert.assertEquals;
 
@@ -24,9 +24,9 @@
 
 import org.jclouds.http.HttpRequest;
 import org.jclouds.http.HttpResponse;
-import org.jclouds.joyent.sdc.v6_5.SDCClient;
-import org.jclouds.joyent.sdc.v6_5.internal.BaseSDCClientExpectTest;
-import org.jclouds.joyent.sdc.v6_5.parse.ParsePackageListTest;
+import org.jclouds.joyent.cloudapi.v6_5.JoyentCloudClient;
+import org.jclouds.joyent.cloudapi.v6_5.internal.BaseJoyentCloudClientExpectTest;
+import org.jclouds.joyent.cloudapi.v6_5.parse.ParsePackageListTest;
 import org.testng.annotations.Test;
 
 import com.google.common.collect.ImmutableMultimap;
@@ -36,7 +36,7 @@
  * @author Gerald Pereira
  */
 @Test(groups = "unit", testName = "PackageClientExpectTest")
-public class PackageClientExpectTest extends BaseSDCClientExpectTest {
+public class PackageClientExpectTest extends BaseJoyentCloudClientExpectTest {
    HttpRequest list = HttpRequest
          .builder()
          .method("GET")
@@ -50,7 +50,7 @@
       HttpResponse listResponse = HttpResponse.builder().statusCode(200)
             .payload(payloadFromResource("/package_list.json")).build();
 
-      SDCClient clientWhenPackagesExists = requestsSendResponses(getDatacenters, getDatacentersResponse, list, listResponse);
+      JoyentCloudClient clientWhenPackagesExists = requestsSendResponses(getDatacenters, getDatacentersResponse, list, listResponse);
 
       assertEquals(clientWhenPackagesExists.getPackageClientForDatacenter("us-sw-1").list(), new ParsePackageListTest().expected());
    }
@@ -58,7 +58,7 @@
    public void testListPackagesWhenResponseIs404() {
       HttpResponse listResponse = HttpResponse.builder().statusCode(404).build();
 
-      SDCClient listWhenNone = requestsSendResponses(getDatacenters, getDatacentersResponse, list, listResponse);
+      JoyentCloudClient listWhenNone = requestsSendResponses(getDatacenters, getDatacentersResponse, list, listResponse);
 
       assertEquals(listWhenNone.getPackageClientForDatacenter("us-sw-1").list(), ImmutableSet.of());
    }
diff --git a/labs/joyent-sdc/src/test/java/org/jclouds/joyent/sdc/v6_5/features/PackageClientLiveTest.java b/labs/joyent-cloudapi/src/test/java/org/jclouds/joyent/cloudapi/v6_5/features/PackageClientLiveTest.java
similarity index 75%
rename from labs/joyent-sdc/src/test/java/org/jclouds/joyent/sdc/v6_5/features/PackageClientLiveTest.java
rename to labs/joyent-cloudapi/src/test/java/org/jclouds/joyent/cloudapi/v6_5/features/PackageClientLiveTest.java
index 08fbd84..e1c1b99 100644
--- a/labs/joyent-sdc/src/test/java/org/jclouds/joyent/sdc/v6_5/features/PackageClientLiveTest.java
+++ b/labs/joyent-cloudapi/src/test/java/org/jclouds/joyent/cloudapi/v6_5/features/PackageClientLiveTest.java
@@ -16,26 +16,27 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.jclouds.joyent.sdc.v6_5.features;
+package org.jclouds.joyent.cloudapi.v6_5.features;
 
 import static org.testng.Assert.assertEquals;
 
 import java.util.Set;
 
-import org.jclouds.joyent.sdc.v6_5.domain.Package;
-import org.jclouds.joyent.sdc.v6_5.internal.BaseSDCClientLiveTest;
+import org.jclouds.joyent.cloudapi.v6_5.domain.Package;
+import org.jclouds.joyent.cloudapi.v6_5.features.PackageClient;
+import org.jclouds.joyent.cloudapi.v6_5.internal.BaseJoyentCloudClientLiveTest;
 import org.testng.annotations.Test;
 
 /**
  * @author Gerald Pereira
  */
 @Test(groups = "live", testName = "PackageClientLiveTest")
-public class PackageClientLiveTest extends BaseSDCClientLiveTest {
+public class PackageClientLiveTest extends BaseJoyentCloudClientLiveTest {
 
    @Test
    public void testListAndGetPackages() throws Exception {
-      for (String datacenterId : sdcContext.getApi().getConfiguredDatacenters()) {
-         PackageClient client = sdcContext.getApi().getPackageClientForDatacenter(datacenterId);
+      for (String datacenterId : cloudApiContext.getApi().getConfiguredDatacenters()) {
+         PackageClient client = cloudApiContext.getApi().getPackageClientForDatacenter(datacenterId);
          Set<Package> response = client.list();
          assert null != response;
          for (Package pkg : response) {
diff --git a/labs/joyent-sdc/src/test/java/org/jclouds/joyent/sdc/v6_5/handlers/SDCErrorHandlerTest.java b/labs/joyent-cloudapi/src/test/java/org/jclouds/joyent/cloudapi/v6_5/handlers/JoyentCloudErrorHandlerTest.java
similarity index 89%
rename from labs/joyent-sdc/src/test/java/org/jclouds/joyent/sdc/v6_5/handlers/SDCErrorHandlerTest.java
rename to labs/joyent-cloudapi/src/test/java/org/jclouds/joyent/cloudapi/v6_5/handlers/JoyentCloudErrorHandlerTest.java
index bec62ba..7fb8003 100644
--- a/labs/joyent-sdc/src/test/java/org/jclouds/joyent/sdc/v6_5/handlers/SDCErrorHandlerTest.java
+++ b/labs/joyent-cloudapi/src/test/java/org/jclouds/joyent/cloudapi/v6_5/handlers/JoyentCloudErrorHandlerTest.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.jclouds.joyent.sdc.v6_5.handlers;
+package org.jclouds.joyent.cloudapi.v6_5.handlers;
 
 import static org.easymock.EasyMock.createMockBuilder;
 import static org.easymock.EasyMock.expect;
@@ -31,6 +31,7 @@
 import org.jclouds.http.HttpRequest;
 import org.jclouds.http.HttpResponse;
 import org.jclouds.io.Payloads;
+import org.jclouds.joyent.cloudapi.v6_5.handlers.JoyentCloudErrorHandler;
 import org.jclouds.util.Strings2;
 import org.testng.annotations.Test;
 
@@ -38,8 +39,8 @@
  * 
  * @author Adrian Cole
  */
-@Test(groups = "unit", testName = "SDCErrorHandlerTest")
-public class SDCErrorHandlerTest {
+@Test(groups = "unit", testName = "JoyentCloudErrorHandlerTest")
+public class JoyentCloudErrorHandlerTest {
 
    private void assertCodeMakes(String method, URI uri, int statusCode, String message, String content,
          Class<? extends Exception> expected) {
@@ -49,7 +50,7 @@
    private void assertCodeMakes(String method, URI uri, int statusCode, String message, String contentType,
          String content, Class<? extends Exception> expected) {
 
-      SDCErrorHandler function = new SDCErrorHandler();
+      JoyentCloudErrorHandler function = new JoyentCloudErrorHandler();
 
       HttpCommand command = createMockBuilder(HttpCommand.class).createMock();
       HttpRequest request = new HttpRequest(method, uri);
diff --git a/labs/joyent-sdc/src/test/java/org/jclouds/joyent/sdc/v6_5/internal/BaseSDCAsyncClientExpectTest.java b/labs/joyent-cloudapi/src/test/java/org/jclouds/joyent/cloudapi/v6_5/internal/BaseJoyentCloudAsyncClientExpectTest.java
similarity index 66%
rename from labs/joyent-sdc/src/test/java/org/jclouds/joyent/sdc/v6_5/internal/BaseSDCAsyncClientExpectTest.java
rename to labs/joyent-cloudapi/src/test/java/org/jclouds/joyent/cloudapi/v6_5/internal/BaseJoyentCloudAsyncClientExpectTest.java
index 2c8436d..1fc911d 100644
--- a/labs/joyent-sdc/src/test/java/org/jclouds/joyent/sdc/v6_5/internal/BaseSDCAsyncClientExpectTest.java
+++ b/labs/joyent-cloudapi/src/test/java/org/jclouds/joyent/cloudapi/v6_5/internal/BaseJoyentCloudAsyncClientExpectTest.java
@@ -16,24 +16,24 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.jclouds.joyent.sdc.v6_5.internal;
+package org.jclouds.joyent.cloudapi.v6_5.internal;
 
 import java.util.Properties;
 
 import org.jclouds.http.HttpRequest;
 import org.jclouds.http.HttpResponse;
-import org.jclouds.joyent.sdc.v6_5.SDCAsyncClient;
+import org.jclouds.joyent.cloudapi.v6_5.JoyentCloudAsyncClient;
 
 import com.google.common.base.Function;
 import com.google.inject.Module;
 
 /**
- * Base class for writing KeyStone Rest Client Expect tests
+ * Base class for writing Cloud Api Rest Client Expect tests
  * 
  * @author Adrian Cole
  */
-public class BaseSDCAsyncClientExpectTest extends BaseSDCExpectTest<SDCAsyncClient> {
-   public SDCAsyncClient createClient(Function<HttpRequest, HttpResponse> fn, Module module, Properties props) {
-      return createInjector(fn, module, props).getInstance(SDCAsyncClient.class);
+public class BaseJoyentCloudAsyncClientExpectTest extends BaseJoyentCloudExpectTest<JoyentCloudAsyncClient> {
+   public JoyentCloudAsyncClient createClient(Function<HttpRequest, HttpResponse> fn, Module module, Properties props) {
+      return createInjector(fn, module, props).getInstance(JoyentCloudAsyncClient.class);
    }
 }
diff --git a/labs/joyent-sdc/src/test/java/org/jclouds/joyent/sdc/v6_5/internal/BaseSDCClientExpectTest.java b/labs/joyent-cloudapi/src/test/java/org/jclouds/joyent/cloudapi/v6_5/internal/BaseJoyentCloudClientExpectTest.java
similarity index 85%
rename from labs/joyent-sdc/src/test/java/org/jclouds/joyent/sdc/v6_5/internal/BaseSDCClientExpectTest.java
rename to labs/joyent-cloudapi/src/test/java/org/jclouds/joyent/cloudapi/v6_5/internal/BaseJoyentCloudClientExpectTest.java
index bc1d4e2..c83a35b 100644
--- a/labs/joyent-sdc/src/test/java/org/jclouds/joyent/sdc/v6_5/internal/BaseSDCClientExpectTest.java
+++ b/labs/joyent-cloudapi/src/test/java/org/jclouds/joyent/cloudapi/v6_5/internal/BaseJoyentCloudClientExpectTest.java
@@ -16,22 +16,22 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.jclouds.joyent.sdc.v6_5.internal;
+package org.jclouds.joyent.cloudapi.v6_5.internal;
 
 import java.net.URI;
 
 import org.jclouds.http.HttpRequest;
 import org.jclouds.http.HttpResponse;
-import org.jclouds.joyent.sdc.v6_5.SDCClient;
+import org.jclouds.joyent.cloudapi.v6_5.JoyentCloudClient;
 
 import com.google.common.collect.ImmutableMultimap;
 
 /**
- * Base class for writing KeyStone Rest Client Expect tests
+ * Base class for writing Cloud Api Rest Client Expect tests
  * 
  * @author Adrian Cole
  */
-public class BaseSDCClientExpectTest extends BaseSDCExpectTest<SDCClient> {
+public class BaseJoyentCloudClientExpectTest extends BaseJoyentCloudExpectTest<JoyentCloudClient> {
    protected HttpRequest getDatacenters = HttpRequest
          .builder()
          .method("GET")
diff --git a/labs/joyent-sdc/src/test/java/org/jclouds/joyent/sdc/v6_5/internal/BaseSDCClientLiveTest.java b/labs/joyent-cloudapi/src/test/java/org/jclouds/joyent/cloudapi/v6_5/internal/BaseJoyentCloudClientLiveTest.java
similarity index 71%
rename from labs/joyent-sdc/src/test/java/org/jclouds/joyent/sdc/v6_5/internal/BaseSDCClientLiveTest.java
rename to labs/joyent-cloudapi/src/test/java/org/jclouds/joyent/cloudapi/v6_5/internal/BaseJoyentCloudClientLiveTest.java
index 51180b7..d6ca0b8 100644
--- a/labs/joyent-sdc/src/test/java/org/jclouds/joyent/sdc/v6_5/internal/BaseSDCClientLiveTest.java
+++ b/labs/joyent-cloudapi/src/test/java/org/jclouds/joyent/cloudapi/v6_5/internal/BaseJoyentCloudClientLiveTest.java
@@ -16,11 +16,11 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.jclouds.joyent.sdc.v6_5.internal;
+package org.jclouds.joyent.cloudapi.v6_5.internal;
 
 import org.jclouds.compute.internal.BaseComputeServiceContextLiveTest;
-import org.jclouds.joyent.sdc.v6_5.SDCAsyncClient;
-import org.jclouds.joyent.sdc.v6_5.SDCClient;
+import org.jclouds.joyent.cloudapi.v6_5.JoyentCloudAsyncClient;
+import org.jclouds.joyent.cloudapi.v6_5.JoyentCloudClient;
 import org.jclouds.rest.RestContext;
 import org.jclouds.sshj.config.SshjSshClientModule;
 import org.testng.annotations.AfterGroups;
@@ -30,30 +30,30 @@
 import com.google.inject.Module;
 
 /**
- * Tests behavior of {@code SDCClient}
+ * Tests behavior of {@code JoyentCloudClient}
  * 
  * @author Adrian Cole
  */
 @Test(groups = "live")
-public class BaseSDCClientLiveTest extends BaseComputeServiceContextLiveTest {
+public class BaseJoyentCloudClientLiveTest extends BaseComputeServiceContextLiveTest {
 
-   public BaseSDCClientLiveTest() {
-      provider = "joyent-sdc";
+   public BaseJoyentCloudClientLiveTest() {
+      provider = "joyent-cloudapi";
    }
 
-   protected RestContext<SDCClient, SDCAsyncClient> sdcContext;
+   protected RestContext<JoyentCloudClient, JoyentCloudAsyncClient> cloudApiContext;
 
    @BeforeGroups(groups = { "integration", "live" })
    @Override
    public void setupContext() {
       super.setupContext();
-      sdcContext = view.unwrap();
+      cloudApiContext = view.unwrap();
    }
 
    @AfterGroups(groups = "live")
    protected void tearDown() {
-      if (sdcContext != null)
-         sdcContext.close();
+      if (cloudApiContext != null)
+         cloudApiContext.close();
    }
 
    @Override
diff --git a/labs/joyent-sdc/src/test/java/org/jclouds/joyent/sdc/v6_5/internal/BaseSDCExpectTest.java b/labs/joyent-cloudapi/src/test/java/org/jclouds/joyent/cloudapi/v6_5/internal/BaseJoyentCloudExpectTest.java
similarity index 77%
rename from labs/joyent-sdc/src/test/java/org/jclouds/joyent/sdc/v6_5/internal/BaseSDCExpectTest.java
rename to labs/joyent-cloudapi/src/test/java/org/jclouds/joyent/cloudapi/v6_5/internal/BaseJoyentCloudExpectTest.java
index 6122ae4..deae1cc 100644
--- a/labs/joyent-sdc/src/test/java/org/jclouds/joyent/sdc/v6_5/internal/BaseSDCExpectTest.java
+++ b/labs/joyent-cloudapi/src/test/java/org/jclouds/joyent/cloudapi/v6_5/internal/BaseJoyentCloudExpectTest.java
@@ -16,18 +16,18 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.jclouds.joyent.sdc.v6_5.internal;
+package org.jclouds.joyent.cloudapi.v6_5.internal;
 
 import org.jclouds.rest.internal.BaseRestClientExpectTest;
 
 /**
- * Base class for writing SDC Expect tests
+ * Base class for writing JoyentCloud Expect tests
  * 
  * @author Adrian Cole
  */
-public class BaseSDCExpectTest<T> extends BaseRestClientExpectTest<T> {
+public class BaseJoyentCloudExpectTest<T> extends BaseRestClientExpectTest<T> {
 
-   public BaseSDCExpectTest() {
-      provider = "joyent-sdc";
+   public BaseJoyentCloudExpectTest() {
+      provider = "joyent-cloudapi";
    }
 }
diff --git a/labs/joyent-sdc/src/test/java/org/jclouds/joyent/sdc/v6_5/parse/ParseCreatedMachineTest.java b/labs/joyent-cloudapi/src/test/java/org/jclouds/joyent/cloudapi/v6_5/parse/ParseCreatedMachineTest.java
similarity index 89%
rename from labs/joyent-sdc/src/test/java/org/jclouds/joyent/sdc/v6_5/parse/ParseCreatedMachineTest.java
rename to labs/joyent-cloudapi/src/test/java/org/jclouds/joyent/cloudapi/v6_5/parse/ParseCreatedMachineTest.java
index 10e73ff..d4f9e0d 100644
--- a/labs/joyent-sdc/src/test/java/org/jclouds/joyent/sdc/v6_5/parse/ParseCreatedMachineTest.java
+++ b/labs/joyent-cloudapi/src/test/java/org/jclouds/joyent/cloudapi/v6_5/parse/ParseCreatedMachineTest.java
@@ -16,16 +16,16 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.jclouds.joyent.sdc.v6_5.parse;
+package org.jclouds.joyent.cloudapi.v6_5.parse;
 
 import javax.ws.rs.Consumes;
 import javax.ws.rs.core.MediaType;
 
 import org.jclouds.date.internal.SimpleDateFormatDateService;
 import org.jclouds.domain.JsonBall;
-import org.jclouds.joyent.sdc.v6_5.config.SDCParserModule;
-import org.jclouds.joyent.sdc.v6_5.domain.Machine;
-import org.jclouds.joyent.sdc.v6_5.domain.Type;
+import org.jclouds.joyent.cloudapi.v6_5.config.JoyentCloudParserModule;
+import org.jclouds.joyent.cloudapi.v6_5.domain.Machine;
+import org.jclouds.joyent.cloudapi.v6_5.domain.Type;
 import org.jclouds.json.BaseItemParserTest;
 import org.jclouds.json.config.GsonModule;
 import org.testng.annotations.Test;
@@ -68,7 +68,7 @@
    }
 
    protected Injector injector() {
-      return Guice.createInjector(new SDCParserModule(), new GsonModule() {
+      return Guice.createInjector(new JoyentCloudParserModule(), new GsonModule() {
 
           @Override
           protected void configure() {
diff --git a/labs/joyent-sdc/src/test/java/org/jclouds/joyent/sdc/v6_5/parse/ParseDatasetListTest.java b/labs/joyent-cloudapi/src/test/java/org/jclouds/joyent/cloudapi/v6_5/parse/ParseDatasetListTest.java
similarity index 88%
rename from labs/joyent-sdc/src/test/java/org/jclouds/joyent/sdc/v6_5/parse/ParseDatasetListTest.java
rename to labs/joyent-cloudapi/src/test/java/org/jclouds/joyent/cloudapi/v6_5/parse/ParseDatasetListTest.java
index c824402..d62373c 100644
--- a/labs/joyent-sdc/src/test/java/org/jclouds/joyent/sdc/v6_5/parse/ParseDatasetListTest.java
+++ b/labs/joyent-cloudapi/src/test/java/org/jclouds/joyent/cloudapi/v6_5/parse/ParseDatasetListTest.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.jclouds.joyent.sdc.v6_5.parse;
+package org.jclouds.joyent.cloudapi.v6_5.parse;
 
 import java.util.Set;
 
@@ -24,9 +24,9 @@
 import javax.ws.rs.core.MediaType;
 
 import org.jclouds.date.internal.SimpleDateFormatDateService;
-import org.jclouds.joyent.sdc.v6_5.config.SDCParserModule;
-import org.jclouds.joyent.sdc.v6_5.domain.Dataset;
-import org.jclouds.joyent.sdc.v6_5.domain.Type;
+import org.jclouds.joyent.cloudapi.v6_5.config.JoyentCloudParserModule;
+import org.jclouds.joyent.cloudapi.v6_5.domain.Dataset;
+import org.jclouds.joyent.cloudapi.v6_5.domain.Type;
 import org.jclouds.json.BaseSetParserTest;
 import org.jclouds.json.config.GsonModule;
 import org.testng.annotations.Test;
@@ -64,7 +64,7 @@
    }
 
    protected Injector injector() {
-      return Guice.createInjector(new SDCParserModule(), new GsonModule() {
+      return Guice.createInjector(new JoyentCloudParserModule(), new GsonModule() {
 
          @Override
          protected void configure() {
diff --git a/labs/joyent-sdc/src/test/java/org/jclouds/joyent/sdc/v6_5/parse/ParseDatasetTest.java b/labs/joyent-cloudapi/src/test/java/org/jclouds/joyent/cloudapi/v6_5/parse/ParseDatasetTest.java
similarity index 86%
rename from labs/joyent-sdc/src/test/java/org/jclouds/joyent/sdc/v6_5/parse/ParseDatasetTest.java
rename to labs/joyent-cloudapi/src/test/java/org/jclouds/joyent/cloudapi/v6_5/parse/ParseDatasetTest.java
index 5e01809..33d7ccd 100644
--- a/labs/joyent-sdc/src/test/java/org/jclouds/joyent/sdc/v6_5/parse/ParseDatasetTest.java
+++ b/labs/joyent-cloudapi/src/test/java/org/jclouds/joyent/cloudapi/v6_5/parse/ParseDatasetTest.java
@@ -16,15 +16,15 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.jclouds.joyent.sdc.v6_5.parse;
+package org.jclouds.joyent.cloudapi.v6_5.parse;
 
 import javax.ws.rs.Consumes;
 import javax.ws.rs.core.MediaType;
 
 import org.jclouds.date.internal.SimpleDateFormatDateService;
-import org.jclouds.joyent.sdc.v6_5.config.SDCParserModule;
-import org.jclouds.joyent.sdc.v6_5.domain.Dataset;
-import org.jclouds.joyent.sdc.v6_5.domain.Type;
+import org.jclouds.joyent.cloudapi.v6_5.config.JoyentCloudParserModule;
+import org.jclouds.joyent.cloudapi.v6_5.domain.Dataset;
+import org.jclouds.joyent.cloudapi.v6_5.domain.Type;
 import org.jclouds.json.BaseItemParserTest;
 import org.jclouds.json.config.GsonModule;
 import org.testng.annotations.Test;
@@ -52,7 +52,7 @@
    }
 
    protected Injector injector() {
-      return Guice.createInjector(new SDCParserModule(), new GsonModule() {
+      return Guice.createInjector(new JoyentCloudParserModule(), new GsonModule() {
 
          @Override
          protected void configure() {
diff --git a/labs/joyent-sdc/src/test/java/org/jclouds/joyent/sdc/v6_5/parse/ParseKeyListTest.java b/labs/joyent-cloudapi/src/test/java/org/jclouds/joyent/cloudapi/v6_5/parse/ParseKeyListTest.java
similarity index 88%
rename from labs/joyent-sdc/src/test/java/org/jclouds/joyent/sdc/v6_5/parse/ParseKeyListTest.java
rename to labs/joyent-cloudapi/src/test/java/org/jclouds/joyent/cloudapi/v6_5/parse/ParseKeyListTest.java
index edd8d17..7f2cbc2 100644
--- a/labs/joyent-sdc/src/test/java/org/jclouds/joyent/sdc/v6_5/parse/ParseKeyListTest.java
+++ b/labs/joyent-cloudapi/src/test/java/org/jclouds/joyent/cloudapi/v6_5/parse/ParseKeyListTest.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.jclouds.joyent.sdc.v6_5.parse;
+package org.jclouds.joyent.cloudapi.v6_5.parse;
 
 import java.util.Set;
 
@@ -24,8 +24,8 @@
 import javax.ws.rs.core.MediaType;
 
 import org.jclouds.date.internal.SimpleDateFormatDateService;
-import org.jclouds.joyent.sdc.v6_5.config.SDCParserModule;
-import org.jclouds.joyent.sdc.v6_5.domain.Key;
+import org.jclouds.joyent.cloudapi.v6_5.config.JoyentCloudParserModule;
+import org.jclouds.joyent.cloudapi.v6_5.domain.Key;
 import org.jclouds.json.BaseSetParserTest;
 import org.jclouds.json.config.GsonModule;
 import org.testng.annotations.Test;
@@ -58,7 +58,7 @@
    }
 
    protected Injector injector() {
-      return Guice.createInjector(new SDCParserModule(), new GsonModule() {
+      return Guice.createInjector(new JoyentCloudParserModule(), new GsonModule() {
 
          @Override
          protected void configure() {
diff --git a/labs/joyent-sdc/src/test/java/org/jclouds/joyent/sdc/v6_5/parse/ParseKeyTest.java b/labs/joyent-cloudapi/src/test/java/org/jclouds/joyent/cloudapi/v6_5/parse/ParseKeyTest.java
similarity index 87%
rename from labs/joyent-sdc/src/test/java/org/jclouds/joyent/sdc/v6_5/parse/ParseKeyTest.java
rename to labs/joyent-cloudapi/src/test/java/org/jclouds/joyent/cloudapi/v6_5/parse/ParseKeyTest.java
index c147693..99c65d2 100644
--- a/labs/joyent-sdc/src/test/java/org/jclouds/joyent/sdc/v6_5/parse/ParseKeyTest.java
+++ b/labs/joyent-cloudapi/src/test/java/org/jclouds/joyent/cloudapi/v6_5/parse/ParseKeyTest.java
@@ -16,14 +16,14 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.jclouds.joyent.sdc.v6_5.parse;
+package org.jclouds.joyent.cloudapi.v6_5.parse;
 
 import javax.ws.rs.Consumes;
 import javax.ws.rs.core.MediaType;
 
 import org.jclouds.date.internal.SimpleDateFormatDateService;
-import org.jclouds.joyent.sdc.v6_5.config.SDCParserModule;
-import org.jclouds.joyent.sdc.v6_5.domain.Key;
+import org.jclouds.joyent.cloudapi.v6_5.config.JoyentCloudParserModule;
+import org.jclouds.joyent.cloudapi.v6_5.domain.Key;
 import org.jclouds.json.BaseItemParserTest;
 import org.jclouds.json.config.GsonModule;
 import org.testng.annotations.Test;
@@ -53,7 +53,7 @@
    }
    
    protected Injector injector() {
-      return Guice.createInjector(new SDCParserModule(), new GsonModule() {
+      return Guice.createInjector(new JoyentCloudParserModule(), new GsonModule() {
 
          @Override
          protected void configure() {
diff --git a/labs/joyent-sdc/src/test/java/org/jclouds/joyent/sdc/v6_5/parse/ParseMachineListTest.java b/labs/joyent-cloudapi/src/test/java/org/jclouds/joyent/cloudapi/v6_5/parse/ParseMachineListTest.java
similarity index 91%
rename from labs/joyent-sdc/src/test/java/org/jclouds/joyent/sdc/v6_5/parse/ParseMachineListTest.java
rename to labs/joyent-cloudapi/src/test/java/org/jclouds/joyent/cloudapi/v6_5/parse/ParseMachineListTest.java
index 51979c7..cc7f86a 100644
--- a/labs/joyent-sdc/src/test/java/org/jclouds/joyent/sdc/v6_5/parse/ParseMachineListTest.java
+++ b/labs/joyent-cloudapi/src/test/java/org/jclouds/joyent/cloudapi/v6_5/parse/ParseMachineListTest.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.jclouds.joyent.sdc.v6_5.parse;
+package org.jclouds.joyent.cloudapi.v6_5.parse;
 
 import java.util.Set;
 
@@ -25,9 +25,9 @@
 
 import org.jclouds.date.internal.SimpleDateFormatDateService;
 import org.jclouds.domain.JsonBall;
-import org.jclouds.joyent.sdc.v6_5.config.SDCParserModule;
-import org.jclouds.joyent.sdc.v6_5.domain.Machine;
-import org.jclouds.joyent.sdc.v6_5.domain.Type;
+import org.jclouds.joyent.cloudapi.v6_5.config.JoyentCloudParserModule;
+import org.jclouds.joyent.cloudapi.v6_5.domain.Machine;
+import org.jclouds.joyent.cloudapi.v6_5.domain.Type;
 import org.jclouds.json.BaseSetParserTest;
 import org.jclouds.json.config.GsonModule;
 import org.testng.annotations.Test;
@@ -81,7 +81,7 @@
    }
 
    protected Injector injector() {
-      return Guice.createInjector(new SDCParserModule(), new GsonModule() {
+      return Guice.createInjector(new JoyentCloudParserModule(), new GsonModule() {
 
          @Override
          protected void configure() {
diff --git a/labs/joyent-sdc/src/test/java/org/jclouds/joyent/sdc/v6_5/parse/ParseMachineTest.java b/labs/joyent-cloudapi/src/test/java/org/jclouds/joyent/cloudapi/v6_5/parse/ParseMachineTest.java
similarity index 89%
rename from labs/joyent-sdc/src/test/java/org/jclouds/joyent/sdc/v6_5/parse/ParseMachineTest.java
rename to labs/joyent-cloudapi/src/test/java/org/jclouds/joyent/cloudapi/v6_5/parse/ParseMachineTest.java
index 912d31f..af5c0ad 100644
--- a/labs/joyent-sdc/src/test/java/org/jclouds/joyent/sdc/v6_5/parse/ParseMachineTest.java
+++ b/labs/joyent-cloudapi/src/test/java/org/jclouds/joyent/cloudapi/v6_5/parse/ParseMachineTest.java
@@ -16,16 +16,16 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.jclouds.joyent.sdc.v6_5.parse;
+package org.jclouds.joyent.cloudapi.v6_5.parse;
 
 import javax.ws.rs.Consumes;
 import javax.ws.rs.core.MediaType;
 
 import org.jclouds.date.internal.SimpleDateFormatDateService;
 import org.jclouds.domain.JsonBall;
-import org.jclouds.joyent.sdc.v6_5.config.SDCParserModule;
-import org.jclouds.joyent.sdc.v6_5.domain.Machine;
-import org.jclouds.joyent.sdc.v6_5.domain.Type;
+import org.jclouds.joyent.cloudapi.v6_5.config.JoyentCloudParserModule;
+import org.jclouds.joyent.cloudapi.v6_5.domain.Machine;
+import org.jclouds.joyent.cloudapi.v6_5.domain.Type;
 import org.jclouds.json.BaseItemParserTest;
 import org.jclouds.json.config.GsonModule;
 import org.testng.annotations.Test;
@@ -67,7 +67,7 @@
    }
 
    protected Injector injector() {
-      return Guice.createInjector(new SDCParserModule(), new GsonModule() {
+      return Guice.createInjector(new JoyentCloudParserModule(), new GsonModule() {
 
          @Override
          protected void configure() {
diff --git a/labs/joyent-sdc/src/test/java/org/jclouds/joyent/sdc/v6_5/parse/ParsePackageListTest.java b/labs/joyent-cloudapi/src/test/java/org/jclouds/joyent/cloudapi/v6_5/parse/ParsePackageListTest.java
similarity index 78%
rename from labs/joyent-sdc/src/test/java/org/jclouds/joyent/sdc/v6_5/parse/ParsePackageListTest.java
rename to labs/joyent-cloudapi/src/test/java/org/jclouds/joyent/cloudapi/v6_5/parse/ParsePackageListTest.java
index 0790ca4..d1b83ed 100644
--- a/labs/joyent-sdc/src/test/java/org/jclouds/joyent/sdc/v6_5/parse/ParsePackageListTest.java
+++ b/labs/joyent-cloudapi/src/test/java/org/jclouds/joyent/cloudapi/v6_5/parse/ParsePackageListTest.java
@@ -16,15 +16,15 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.jclouds.joyent.sdc.v6_5.parse;
+package org.jclouds.joyent.cloudapi.v6_5.parse;
 
 import java.util.Set;
 
 import javax.ws.rs.Consumes;
 import javax.ws.rs.core.MediaType;
 
-import org.jclouds.joyent.sdc.v6_5.config.SDCParserModule;
-import org.jclouds.joyent.sdc.v6_5.domain.Package;
+import org.jclouds.joyent.cloudapi.v6_5.config.JoyentCloudParserModule;
+import org.jclouds.joyent.cloudapi.v6_5.domain.Package;
 import org.jclouds.json.BaseSetParserTest;
 import org.jclouds.json.config.GsonModule;
 import org.testng.annotations.Test;
@@ -47,17 +47,17 @@
    @Override
    @Consumes(MediaType.APPLICATION_JSON)
    public Set<Package> expected() {
-      return ImmutableSet.of(org.jclouds.joyent.sdc.v6_5.domain.Package.builder().name("Small 1GB").memorySizeMb(1024)
+      return ImmutableSet.of(org.jclouds.joyent.cloudapi.v6_5.domain.Package.builder().name("Small 1GB").memorySizeMb(1024)
             .diskSizeGb(30720).swapSizeMb(2048).isDefault(true).build(),
 
-      org.jclouds.joyent.sdc.v6_5.domain.Package.builder().name("Medium 2GB").memorySizeMb(2048).diskSizeGb(61440)
+      org.jclouds.joyent.cloudapi.v6_5.domain.Package.builder().name("Medium 2GB").memorySizeMb(2048).diskSizeGb(61440)
             .swapSizeMb(4096).isDefault(false).build()
 
       );
    }
 
    protected Injector injector() {
-      return Guice.createInjector(new SDCParserModule(), new GsonModule() {
+      return Guice.createInjector(new JoyentCloudParserModule(), new GsonModule() {
 
          @Override
          protected void configure() {
diff --git a/labs/joyent-sdc/src/test/java/org/jclouds/joyent/sdc/v6_5/parse/ParsePackageTest.java b/labs/joyent-cloudapi/src/test/java/org/jclouds/joyent/cloudapi/v6_5/parse/ParsePackageTest.java
similarity index 79%
rename from labs/joyent-sdc/src/test/java/org/jclouds/joyent/sdc/v6_5/parse/ParsePackageTest.java
rename to labs/joyent-cloudapi/src/test/java/org/jclouds/joyent/cloudapi/v6_5/parse/ParsePackageTest.java
index 397a887..f29ee5d 100644
--- a/labs/joyent-sdc/src/test/java/org/jclouds/joyent/sdc/v6_5/parse/ParsePackageTest.java
+++ b/labs/joyent-cloudapi/src/test/java/org/jclouds/joyent/cloudapi/v6_5/parse/ParsePackageTest.java
@@ -16,12 +16,12 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.jclouds.joyent.sdc.v6_5.parse;
+package org.jclouds.joyent.cloudapi.v6_5.parse;
 
 import javax.ws.rs.Consumes;
 import javax.ws.rs.core.MediaType;
 
-import org.jclouds.joyent.sdc.v6_5.config.SDCParserModule;
+import org.jclouds.joyent.cloudapi.v6_5.config.JoyentCloudParserModule;
 import org.jclouds.json.BaseItemParserTest;
 import org.jclouds.json.config.GsonModule;
 import org.testng.annotations.Test;
@@ -33,7 +33,7 @@
  * @author Gerald Pereira
  */
 @Test(groups = "unit", testName = "ParsePackageTest")
-public class ParsePackageTest extends BaseItemParserTest<org.jclouds.joyent.sdc.v6_5.domain.Package> {
+public class ParsePackageTest extends BaseItemParserTest<org.jclouds.joyent.cloudapi.v6_5.domain.Package> {
 
    @Override
    public String resource() {
@@ -42,13 +42,13 @@
 
    @Override
    @Consumes(MediaType.APPLICATION_JSON)
-   public org.jclouds.joyent.sdc.v6_5.domain.Package expected() {
-      return org.jclouds.joyent.sdc.v6_5.domain.Package.builder().name("Small 1GB").memorySizeMb(1024)
+   public org.jclouds.joyent.cloudapi.v6_5.domain.Package expected() {
+      return org.jclouds.joyent.cloudapi.v6_5.domain.Package.builder().name("Small 1GB").memorySizeMb(1024)
             .diskSizeGb(30720).swapSizeMb(2048).isDefault(true).build();
    }
 
    protected Injector injector() {
-      return Guice.createInjector(new SDCParserModule(), new GsonModule() {
+      return Guice.createInjector(new JoyentCloudParserModule(), new GsonModule() {
 
          @Override
          protected void configure() {
diff --git a/labs/joyent-sdc/src/test/resources/datacenters.json b/labs/joyent-cloudapi/src/test/resources/datacenters.json
similarity index 100%
rename from labs/joyent-sdc/src/test/resources/datacenters.json
rename to labs/joyent-cloudapi/src/test/resources/datacenters.json
diff --git a/labs/joyent-sdc/src/test/resources/dataset.json b/labs/joyent-cloudapi/src/test/resources/dataset.json
similarity index 100%
rename from labs/joyent-sdc/src/test/resources/dataset.json
rename to labs/joyent-cloudapi/src/test/resources/dataset.json
diff --git a/labs/joyent-sdc/src/test/resources/dataset_list.json b/labs/joyent-cloudapi/src/test/resources/dataset_list.json
similarity index 100%
rename from labs/joyent-sdc/src/test/resources/dataset_list.json
rename to labs/joyent-cloudapi/src/test/resources/dataset_list.json
diff --git a/labs/joyent-sdc/src/test/resources/key.json b/labs/joyent-cloudapi/src/test/resources/key.json
similarity index 100%
rename from labs/joyent-sdc/src/test/resources/key.json
rename to labs/joyent-cloudapi/src/test/resources/key.json
diff --git a/labs/joyent-sdc/src/test/resources/key_list.json b/labs/joyent-cloudapi/src/test/resources/key_list.json
similarity index 100%
rename from labs/joyent-sdc/src/test/resources/key_list.json
rename to labs/joyent-cloudapi/src/test/resources/key_list.json
diff --git a/labs/joyent-sdc/src/test/resources/machine.json b/labs/joyent-cloudapi/src/test/resources/machine.json
similarity index 100%
rename from labs/joyent-sdc/src/test/resources/machine.json
rename to labs/joyent-cloudapi/src/test/resources/machine.json
diff --git a/labs/joyent-sdc/src/test/resources/machine_list.json b/labs/joyent-cloudapi/src/test/resources/machine_list.json
similarity index 100%
rename from labs/joyent-sdc/src/test/resources/machine_list.json
rename to labs/joyent-cloudapi/src/test/resources/machine_list.json
diff --git a/labs/joyent-sdc/src/test/resources/new_machine.json b/labs/joyent-cloudapi/src/test/resources/new_machine.json
similarity index 100%
rename from labs/joyent-sdc/src/test/resources/new_machine.json
rename to labs/joyent-cloudapi/src/test/resources/new_machine.json
diff --git a/labs/joyent-sdc/src/test/resources/package.json b/labs/joyent-cloudapi/src/test/resources/package.json
similarity index 100%
rename from labs/joyent-sdc/src/test/resources/package.json
rename to labs/joyent-cloudapi/src/test/resources/package.json
diff --git a/labs/joyent-sdc/src/test/resources/package_list.json b/labs/joyent-cloudapi/src/test/resources/package_list.json
similarity index 100%
rename from labs/joyent-sdc/src/test/resources/package_list.json
rename to labs/joyent-cloudapi/src/test/resources/package_list.json
diff --git a/labs/joyent-sdc/src/main/java/org/jclouds/joyent/sdc/v6_5/compute/options/SDCTemplateOptions.java b/labs/joyent-sdc/src/main/java/org/jclouds/joyent/sdc/v6_5/compute/options/SDCTemplateOptions.java
deleted file mode 100644
index da6d02d..0000000
--- a/labs/joyent-sdc/src/main/java/org/jclouds/joyent/sdc/v6_5/compute/options/SDCTemplateOptions.java
+++ /dev/null
@@ -1,337 +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.joyent.sdc.v6_5.compute.options;
-
-import static com.google.common.base.Objects.equal;
-
-import java.util.Map;
-
-import org.jclouds.compute.options.TemplateOptions;
-import org.jclouds.domain.LoginCredentials;
-import org.jclouds.scriptbuilder.domain.Statement;
-
-import com.google.common.base.Objects;
-import com.google.common.base.Objects.ToStringHelper;
-
-/**
- * Contains options supported in the {@code ComputeService#runNode} operation on the
- * "joyent-sdc" provider. <h2>Usage</h2> The recommended way to instantiate a
- * SDCTemplateOptions object is to statically import SDCTemplateOptions.* and invoke a static
- * creation method followed by an instance mutator (if needed):
- * <p/>
- * <code>
- * import static org.jclouds.aws.ec2.compute.options.SDCTemplateOptions.Builder.*;
- * <p/>
- * ComputeService client = // get connection
- * templateBuilder.options(inboundPorts(22, 80, 8080, 443));
- * Set<? extends NodeMetadata> set = client.createNodesInGroup(tag, 2, templateBuilder.build());
- * <code>
- * 
- * @author Adrian Cole
- */
-public class SDCTemplateOptions extends TemplateOptions implements Cloneable {
-   @Override
-   public SDCTemplateOptions clone() {
-      SDCTemplateOptions options = new SDCTemplateOptions();
-      copyTo(options);
-      return options;
-   }
-
-   @Override
-   public void copyTo(TemplateOptions to) {
-      super.copyTo(to);
-      if (to instanceof SDCTemplateOptions) {
-         SDCTemplateOptions eTo = SDCTemplateOptions.class.cast(to);
-         eTo.generateKey(shouldGenerateKey());
-      }
-   }
-
-   protected boolean generateKey = false;
-
-   @Override
-   public boolean equals(Object o) {
-      if (this == o)
-         return true;
-      if (o == null || getClass() != o.getClass())
-         return false;
-      SDCTemplateOptions that = SDCTemplateOptions.class.cast(o);
-      return super.equals(that) && equal(this.generateKey, that.generateKey);
-   }
-
-   @Override
-   public int hashCode() {
-      return Objects.hashCode(super.hashCode(), generateKey);
-   }
-
-   @Override
-   public ToStringHelper string() {
-      ToStringHelper toString = super.string();
-      if (generateKey)
-         toString.add("generateKey", generateKey);
-      return toString;
-   }
-
-   /**
-    * @see #shouldGenerateKey()
-    */
-   public SDCTemplateOptions generateKey(boolean enable) {
-      this.generateKey = enable;
-      return this;
-   }
-   
-   /**
-    *
-    * @return true if auto generation of keys is enabled
-    */
-   public boolean shouldGenerateKey() {
-      return generateKey;
-   }
-   
-   public static class Builder {
-
-      /**
-       * @see SDCTemplateOptions#shouldGenerateKey() 
-       */
-      public static SDCTemplateOptions generateKey(boolean enable) {
-         return new SDCTemplateOptions().generateKey(enable);
-      }
-      
-      // methods that only facilitate returning the correct object type
-
-      /**
-       * @see TemplateOptions#inboundPorts
-       */
-      public static SDCTemplateOptions inboundPorts(int... ports) {
-         SDCTemplateOptions options = new SDCTemplateOptions();
-         return SDCTemplateOptions.class.cast(options.inboundPorts(ports));
-      }
-
-      /**
-       * @see TemplateOptions#port
-       */
-      public static SDCTemplateOptions blockOnPort(int port, int seconds) {
-         SDCTemplateOptions options = new SDCTemplateOptions();
-         return SDCTemplateOptions.class.cast(options.blockOnPort(port, seconds));
-      }
-
-      /**
-       * @see TemplateOptions#installPrivateKey
-       */
-      public static SDCTemplateOptions installPrivateKey(String rsaKey) {
-         SDCTemplateOptions options = new SDCTemplateOptions();
-         return SDCTemplateOptions.class.cast(options.installPrivateKey(rsaKey));
-      }
-
-      /**
-       * @see TemplateOptions#authorizePublicKey
-       */
-      public static SDCTemplateOptions authorizePublicKey(String rsaKey) {
-         SDCTemplateOptions options = new SDCTemplateOptions();
-         return SDCTemplateOptions.class.cast(options.authorizePublicKey(rsaKey));
-      }
-
-      /**
-       * @see TemplateOptions#userMetadata
-       */
-      public static SDCTemplateOptions userMetadata(Map<String, String> userMetadata) {
-         SDCTemplateOptions options = new SDCTemplateOptions();
-         return SDCTemplateOptions.class.cast(options.userMetadata(userMetadata));
-      }
-
-      /**
-       * @see TemplateOptions#overrideLoginUser
-       */
-      public static SDCTemplateOptions overrideLoginUser(String user) {
-         SDCTemplateOptions options = new SDCTemplateOptions();
-         return options.overrideLoginUser(user);
-      }
-
-      /**
-       * @see TemplateOptions#overrideLoginPassword
-       */
-      public static SDCTemplateOptions overrideLoginPassword(String password) {
-         SDCTemplateOptions options = new SDCTemplateOptions();
-         return options.overrideLoginPassword(password);
-      }
-
-      /**
-       * @see TemplateOptions#overrideLoginPrivateKey
-       */
-      public static SDCTemplateOptions overrideLoginPrivateKey(String privateKey) {
-         SDCTemplateOptions options = new SDCTemplateOptions();
-         return options.overrideLoginPrivateKey(privateKey);
-      }
-
-      /**
-       * @see TemplateOptions#overrideAuthenticateSudo
-       */
-      public static SDCTemplateOptions overrideAuthenticateSudo(boolean authenticateSudo) {
-         SDCTemplateOptions options = new SDCTemplateOptions();
-         return options.overrideAuthenticateSudo(authenticateSudo);
-      }
-
-      /**
-       * @see TemplateOptions#overrideLoginCredentials
-       */
-      public static SDCTemplateOptions overrideLoginCredentials(LoginCredentials credentials) {
-         SDCTemplateOptions options = new SDCTemplateOptions();
-         return options.overrideLoginCredentials(credentials);
-      }
-      
-      /**
-       * @see TemplateOptions#blockUntilRunning
-       */
-      public static SDCTemplateOptions blockUntilRunning(boolean blockUntilRunning) {
-         SDCTemplateOptions options = new SDCTemplateOptions();
-         return options.blockUntilRunning(blockUntilRunning);
-      }
-
-   }
-
-   // methods that only facilitate returning the correct object type
-
-   /**
-    * {@inheritDoc}
-    */
-   @Override
-   public SDCTemplateOptions blockOnPort(int port, int seconds) {
-      return SDCTemplateOptions.class.cast(super.blockOnPort(port, seconds));
-   }
-
-   /**
-    * {@inheritDoc}
-    */
-   @Override
-   public SDCTemplateOptions inboundPorts(int... ports) {
-      return SDCTemplateOptions.class.cast(super.inboundPorts(ports));
-   }
-
-   /**
-    * {@inheritDoc}
-    */
-   @Override
-   public SDCTemplateOptions authorizePublicKey(String publicKey) {
-      return SDCTemplateOptions.class.cast(super.authorizePublicKey(publicKey));
-   }
-
-   /**
-    * {@inheritDoc}
-    */
-   @Override
-   public SDCTemplateOptions installPrivateKey(String privateKey) {
-      return SDCTemplateOptions.class.cast(super.installPrivateKey(privateKey));
-   }
-
-   /**
-    * {@inheritDoc}
-    */
-   @Override
-   public SDCTemplateOptions blockUntilRunning(boolean blockUntilRunning) {
-      return SDCTemplateOptions.class.cast(super.blockUntilRunning(blockUntilRunning));
-   }
-
-   /**
-    * {@inheritDoc}
-    */
-   @Override
-   public SDCTemplateOptions dontAuthorizePublicKey() {
-      return SDCTemplateOptions.class.cast(super.dontAuthorizePublicKey());
-   }
-
-   /**
-    * {@inheritDoc}
-    */
-   @Override
-   public SDCTemplateOptions nameTask(String name) {
-      return SDCTemplateOptions.class.cast(super.nameTask(name));
-   }
-
-   /**
-    * {@inheritDoc}
-    */
-   @Override
-   public SDCTemplateOptions runAsRoot(boolean runAsRoot) {
-      return SDCTemplateOptions.class.cast(super.runAsRoot(runAsRoot));
-   }
-
-   /**
-    * {@inheritDoc}
-    */
-   @Override
-   public SDCTemplateOptions runScript(Statement script) {
-      return SDCTemplateOptions.class.cast(super.runScript(script));
-   }
-
-   /**
-    * {@inheritDoc}
-    */
-   @Override
-   public SDCTemplateOptions overrideLoginCredentials(LoginCredentials overridingCredentials) {
-      return SDCTemplateOptions.class.cast(super.overrideLoginCredentials(overridingCredentials));
-   }
-
-   /**
-    * {@inheritDoc}
-    */
-   @Override
-   public SDCTemplateOptions overrideLoginPassword(String password) {
-      return SDCTemplateOptions.class.cast(super.overrideLoginPassword(password));
-   }
-
-   /**
-    * {@inheritDoc}
-    */
-   @Override
-   public SDCTemplateOptions overrideLoginPrivateKey(String privateKey) {
-      return SDCTemplateOptions.class.cast(super.overrideLoginPrivateKey(privateKey));
-   }
-
-   /**
-    * {@inheritDoc}
-    */
-   @Override
-   public SDCTemplateOptions overrideLoginUser(String loginUser) {
-      return SDCTemplateOptions.class.cast(super.overrideLoginUser(loginUser));
-   }
-
-   /**
-    * {@inheritDoc}
-    */
-   @Override
-   public SDCTemplateOptions overrideAuthenticateSudo(boolean authenticateSudo) {
-      return SDCTemplateOptions.class.cast(super.overrideAuthenticateSudo(authenticateSudo));
-   }
-
-   /**
-    * {@inheritDoc}
-    */
-   @Override
-   public SDCTemplateOptions userMetadata(Map<String, String> userMetadata) {
-      return SDCTemplateOptions.class.cast(super.userMetadata(userMetadata));
-   }
-
-   /**
-    * {@inheritDoc}
-    */
-   @Override
-   public SDCTemplateOptions userMetadata(String key, String value) {
-      return SDCTemplateOptions.class.cast(super.userMetadata(key, value));
-   }
-
-}
diff --git a/labs/joyent-sdc/src/main/resources/META-INF/services/org.jclouds.apis.ApiMetadata b/labs/joyent-sdc/src/main/resources/META-INF/services/org.jclouds.apis.ApiMetadata
deleted file mode 100644
index 88003aa..0000000
--- a/labs/joyent-sdc/src/main/resources/META-INF/services/org.jclouds.apis.ApiMetadata
+++ /dev/null
@@ -1 +0,0 @@
-org.jclouds.joyent.sdc.v6_5.SDCApiMetadata
diff --git a/labs/joyent-sdc/src/test/java/org/jclouds/joyent/sdc/v6_5/compute/SDCComputeServiceLiveTest.java b/labs/joyent-sdc/src/test/java/org/jclouds/joyent/sdc/v6_5/compute/SDCComputeServiceLiveTest.java
deleted file mode 100644
index dac1eef..0000000
--- a/labs/joyent-sdc/src/test/java/org/jclouds/joyent/sdc/v6_5/compute/SDCComputeServiceLiveTest.java
+++ /dev/null
@@ -1,26 +0,0 @@
-package org.jclouds.joyent.sdc.v6_5.compute;
-
-import org.jclouds.compute.internal.BaseComputeServiceLiveTest;
-import org.jclouds.sshj.config.SshjSshClientModule;
-import org.testng.annotations.Test;
-
-import com.google.inject.Module;
-
-/**
- * 
- * @author Adrian Cole
- */
-@Test(groups = "live", singleThreaded = true, testName = "SDCComputeServiceLiveTest")
-public class SDCComputeServiceLiveTest extends BaseComputeServiceLiveTest {
-
-   public SDCComputeServiceLiveTest() {
-      provider = "joyent-sdc";
-   }
-
-   @Override
-   protected Module getSshModule() {
-      return new SshjSshClientModule();
-   }
-   
-
-}
diff --git a/labs/joyentcloud/pom.xml b/labs/joyentcloud/pom.xml
index 94560ab..c30bbd7 100644
--- a/labs/joyentcloud/pom.xml
+++ b/labs/joyentcloud/pom.xml
@@ -50,12 +50,12 @@
   <dependencies>
     <dependency>
       <groupId>org.jclouds.labs</groupId>
-      <artifactId>joyent-sdc</artifactId>
+      <artifactId>joyent-cloudapi</artifactId>
       <version>${project.version}</version>
     </dependency>
     <dependency>
       <groupId>org.jclouds.labs</groupId>
-      <artifactId>joyent-sdc</artifactId>
+      <artifactId>joyent-cloudapi</artifactId>
       <version>${project.version}</version>
       <type>test-jar</type>
       <scope>test</scope>
diff --git a/labs/joyentcloud/src/main/java/org/jclouds/joyent/joyentcloud/JoyentCloudProviderMetadata.java b/labs/joyentcloud/src/main/java/org/jclouds/joyent/joyentcloud/JoyentCloudProviderMetadata.java
index 9b278a7..a26820d 100644
--- a/labs/joyentcloud/src/main/java/org/jclouds/joyent/joyentcloud/JoyentCloudProviderMetadata.java
+++ b/labs/joyentcloud/src/main/java/org/jclouds/joyent/joyentcloud/JoyentCloudProviderMetadata.java
@@ -25,7 +25,7 @@
 import java.net.URI;
 import java.util.Properties;
 
-import org.jclouds.joyent.sdc.v6_5.SDCApiMetadata;
+import org.jclouds.joyent.cloudapi.v6_5.JoyentCloudApiMetadata;
 import org.jclouds.providers.ProviderMetadata;
 import org.jclouds.providers.internal.BaseProviderMetadata;
 
@@ -70,7 +70,7 @@
       protected Builder() {
          id("joyentcloud")
          .name("JoyentCloud")
-         .apiMetadata(new SDCApiMetadata())
+         .apiMetadata(new JoyentCloudApiMetadata())
          .homepage(URI.create("http://www.joyent.com/products/smartdatacenter/"))
          .console(URI.create("https://my.joyentcloud.com/login"))
          .iso3166Codes("US-VA", "US-CA", "US-NV", "NL-NH")
diff --git a/labs/joyentcloud/src/test/java/org/jclouds/joyent/joyentcloud/JoyentCloudComputeServiceLiveTest.java b/labs/joyentcloud/src/test/java/org/jclouds/joyent/joyentcloud/JoyentCloudComputeServiceLiveTest.java
index 9522c5d..12175c0 100644
--- a/labs/joyentcloud/src/test/java/org/jclouds/joyent/joyentcloud/JoyentCloudComputeServiceLiveTest.java
+++ b/labs/joyentcloud/src/test/java/org/jclouds/joyent/joyentcloud/JoyentCloudComputeServiceLiveTest.java
@@ -18,7 +18,6 @@
  */
 package org.jclouds.joyent.joyentcloud;
 
-import org.jclouds.joyent.sdc.v6_5.compute.SDCComputeServiceLiveTest;
 import org.testng.annotations.Test;
 
 /**
@@ -26,7 +25,7 @@
  * @author Adrian Cole
  */
 @Test(groups = "live", singleThreaded = true, testName = "JoyentCloudComputeServiceLiveTest")
-public class JoyentCloudComputeServiceLiveTest extends SDCComputeServiceLiveTest {
+public class JoyentCloudComputeServiceLiveTest extends org.jclouds.joyent.cloudapi.v6_5.compute.JoyentCloudComputeServiceLiveTest {
 
    public JoyentCloudComputeServiceLiveTest() {
       provider = "joyentcloud";
diff --git a/labs/joyentcloud/src/test/java/org/jclouds/joyent/joyentcloud/JoyentCloudLiveTest.java b/labs/joyentcloud/src/test/java/org/jclouds/joyent/joyentcloud/JoyentCloudLiveTest.java
index bc282ed..bca4000 100644
--- a/labs/joyentcloud/src/test/java/org/jclouds/joyent/joyentcloud/JoyentCloudLiveTest.java
+++ b/labs/joyentcloud/src/test/java/org/jclouds/joyent/joyentcloud/JoyentCloudLiveTest.java
@@ -18,14 +18,14 @@
  */
 package org.jclouds.joyent.joyentcloud;
 
-import org.jclouds.joyent.sdc.v6_5.SDCClientLiveTest;
+import org.jclouds.joyent.cloudapi.v6_5.JoyentCloudClientLiveTest;
 import org.testng.annotations.Test;
 
 /**
  * @author Adrian Cole
  */
 @Test(groups = "live", testName = "JoyentCloudLiveTest")
-public class JoyentCloudLiveTest extends SDCClientLiveTest {
+public class JoyentCloudLiveTest extends JoyentCloudClientLiveTest {
    public JoyentCloudLiveTest() {
       provider = "joyentcloud";
    }
diff --git a/labs/joyentcloud/src/test/java/org/jclouds/joyent/joyentcloud/JoyentCloudProviderMetadataTest.java b/labs/joyentcloud/src/test/java/org/jclouds/joyent/joyentcloud/JoyentCloudProviderMetadataTest.java
index 9d99158..40c6f0d 100644
--- a/labs/joyentcloud/src/test/java/org/jclouds/joyent/joyentcloud/JoyentCloudProviderMetadataTest.java
+++ b/labs/joyentcloud/src/test/java/org/jclouds/joyent/joyentcloud/JoyentCloudProviderMetadataTest.java
@@ -18,7 +18,7 @@
  */
 package org.jclouds.joyent.joyentcloud;
 
-import org.jclouds.joyent.sdc.v6_5.SDCApiMetadata;
+import org.jclouds.joyent.cloudapi.v6_5.JoyentCloudApiMetadata;
 import org.jclouds.providers.internal.BaseProviderMetadataTest;
 import org.testng.annotations.Test;
 
@@ -30,6 +30,6 @@
 public class JoyentCloudProviderMetadataTest extends BaseProviderMetadataTest {
 
    public JoyentCloudProviderMetadataTest() {
-      super(new JoyentCloudProviderMetadata(), new SDCApiMetadata());
+      super(new JoyentCloudProviderMetadata(), new JoyentCloudApiMetadata());
    }
 }
diff --git a/labs/joyentcloud/src/test/java/org/jclouds/joyent/joyentcloud/features/JoyentCloudDatacenterClientLiveTest.java b/labs/joyentcloud/src/test/java/org/jclouds/joyent/joyentcloud/features/JoyentCloudDatacenterClientLiveTest.java
index c35790c..c996518 100644
--- a/labs/joyentcloud/src/test/java/org/jclouds/joyent/joyentcloud/features/JoyentCloudDatacenterClientLiveTest.java
+++ b/labs/joyentcloud/src/test/java/org/jclouds/joyent/joyentcloud/features/JoyentCloudDatacenterClientLiveTest.java
@@ -18,7 +18,7 @@
  */
 package org.jclouds.joyent.joyentcloud.features;
 
-import org.jclouds.joyent.sdc.v6_5.features.DatacenterClientLiveTest;
+import org.jclouds.joyent.cloudapi.v6_5.features.DatacenterClientLiveTest;
 import org.testng.annotations.Test;
 
 /**
diff --git a/labs/joyentcloud/src/test/java/org/jclouds/joyent/joyentcloud/features/JoyentCloudDatasetClientLiveTest.java b/labs/joyentcloud/src/test/java/org/jclouds/joyent/joyentcloud/features/JoyentCloudDatasetClientLiveTest.java
index 412ec8c..c3b45c9 100644
--- a/labs/joyentcloud/src/test/java/org/jclouds/joyent/joyentcloud/features/JoyentCloudDatasetClientLiveTest.java
+++ b/labs/joyentcloud/src/test/java/org/jclouds/joyent/joyentcloud/features/JoyentCloudDatasetClientLiveTest.java
@@ -18,7 +18,7 @@
  */
 package org.jclouds.joyent.joyentcloud.features;
 
-import org.jclouds.joyent.sdc.v6_5.features.DatasetClientLiveTest;
+import org.jclouds.joyent.cloudapi.v6_5.features.DatasetClientLiveTest;
 import org.testng.annotations.Test;
 
 /**
diff --git a/labs/joyentcloud/src/test/java/org/jclouds/joyent/joyentcloud/features/JoyentCloudKeyClientLiveTest.java b/labs/joyentcloud/src/test/java/org/jclouds/joyent/joyentcloud/features/JoyentCloudKeyClientLiveTest.java
index 5db0864..d6471c2 100644
--- a/labs/joyentcloud/src/test/java/org/jclouds/joyent/joyentcloud/features/JoyentCloudKeyClientLiveTest.java
+++ b/labs/joyentcloud/src/test/java/org/jclouds/joyent/joyentcloud/features/JoyentCloudKeyClientLiveTest.java
@@ -18,7 +18,7 @@
  */
 package org.jclouds.joyent.joyentcloud.features;
 
-import org.jclouds.joyent.sdc.v6_5.features.KeyClientLiveTest;
+import org.jclouds.joyent.cloudapi.v6_5.features.KeyClientLiveTest;
 import org.testng.annotations.Test;
 
 /**
diff --git a/labs/joyentcloud/src/test/java/org/jclouds/joyent/joyentcloud/features/JoyentCloudMachineClientLiveTest.java b/labs/joyentcloud/src/test/java/org/jclouds/joyent/joyentcloud/features/JoyentCloudMachineClientLiveTest.java
index 6307226..ecec937 100644
--- a/labs/joyentcloud/src/test/java/org/jclouds/joyent/joyentcloud/features/JoyentCloudMachineClientLiveTest.java
+++ b/labs/joyentcloud/src/test/java/org/jclouds/joyent/joyentcloud/features/JoyentCloudMachineClientLiveTest.java
@@ -18,7 +18,7 @@
  */
 package org.jclouds.joyent.joyentcloud.features;
 
-import org.jclouds.joyent.sdc.v6_5.features.MachineClientLiveTest;
+import org.jclouds.joyent.cloudapi.v6_5.features.MachineClientLiveTest;
 import org.testng.annotations.Test;
 
 /**
diff --git a/labs/joyentcloud/src/test/java/org/jclouds/joyent/joyentcloud/features/JoyentCloudPackageClientLiveTest.java b/labs/joyentcloud/src/test/java/org/jclouds/joyent/joyentcloud/features/JoyentCloudPackageClientLiveTest.java
index 0e2f42c..fa8e8a9 100644
--- a/labs/joyentcloud/src/test/java/org/jclouds/joyent/joyentcloud/features/JoyentCloudPackageClientLiveTest.java
+++ b/labs/joyentcloud/src/test/java/org/jclouds/joyent/joyentcloud/features/JoyentCloudPackageClientLiveTest.java
@@ -18,7 +18,7 @@
  */
 package org.jclouds.joyent.joyentcloud.features;
 
-import org.jclouds.joyent.sdc.v6_5.features.PackageClientLiveTest;
+import org.jclouds.joyent.cloudapi.v6_5.features.PackageClientLiveTest;
 import org.testng.annotations.Test;
 
 /**
diff --git a/labs/pom.xml b/labs/pom.xml
index 878c602..f304e72 100644
--- a/labs/pom.xml
+++ b/labs/pom.xml
@@ -45,7 +45,7 @@
        <module>jenkins</module>
        <module>cdmi</module>
        <module>openstack-glance</module>
-       <module>joyent-sdc</module>
+       <module>joyent-cloudapi</module>
        <module>joyentcloud</module>
        <module>openstack-quantum</module>
        <module>greenqloud-compute</module>
