diff --git a/pom.xml b/pom.xml
index fe545b0..92a85ff 100644
--- a/pom.xml
+++ b/pom.xml
@@ -58,6 +58,7 @@
     <module>openstack-swift</module>
     <module>openstack-marconi</module>
     <module>rackspace-autoscale</module>
+    <module>rackspace-autoscale-uk</module>
     <module>rackspace-autoscale-us</module>
     <module>rackspace-cloudqueues-us</module>
     <module>rackspace-cloudqueues-uk</module>
diff --git a/rackspace-autoscale-uk/README.md b/rackspace-autoscale-uk/README.md
new file mode 100644
index 0000000..8ecea5b
--- /dev/null
+++ b/rackspace-autoscale-uk/README.md
@@ -0,0 +1,7 @@
+Rackspace Cloud Auto Scale UK
+=============================
+
+The Rackspace Auto Scale UK Service
+
+Production ready?
+No
diff --git a/rackspace-autoscale-uk/pom.xml b/rackspace-autoscale-uk/pom.xml
new file mode 100644
index 0000000..4d2014b
--- /dev/null
+++ b/rackspace-autoscale-uk/pom.xml
@@ -0,0 +1,159 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+    Licensed to the Apache Software Foundation (ASF) under one or more
+    contributor license agreements.  See the NOTICE file distributed with
+    this work for additional information regarding copyright ownership.
+    The ASF licenses this file to You under the Apache License, Version 2.0
+    (the "License"); you may not use this file except in compliance with
+    the License.  You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+-->
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+  <parent>
+    <groupId>org.apache.jclouds</groupId>
+    <artifactId>jclouds-project</artifactId>
+    <version>1.8.0-SNAPSHOT</version>
+  </parent>
+
+  <!-- TODO: when out of labs, switch to org.jclouds.api -->
+   
+  <groupId>org.apache.jclouds.labs</groupId>
+  <artifactId>rackspace-autoscale-uk</artifactId>
+  <version>1.8.0-SNAPSHOT</version>
+  <name>jclouds Rackspace Auto Scale UK Provider</name>
+  <description>jclouds components to access Rackspace Auto Scale UK</description>
+  <packaging>bundle</packaging>
+
+  <properties>
+    <!-- keystone endpoint -->
+    <test.rackspace-autoscale.endpoint>http://localhost:5000/v2.0/</test.rackspace-autoscale.endpoint>
+    <!-- keystone version -->
+    <test.rackspace-autoscale.api-version>2.0</test.rackspace-autoscale.api-version>
+    <test.rackspace-autoscale.build-version />
+    <test.rackspace-autoscale.identity>FIXME_IDENTITY</test.rackspace-autoscale.identity>
+    <test.rackspace-autoscale.credential>FIXME_CREDENTIALS</test.rackspace-autoscale.credential>
+    <test.jclouds.keystone.credential-type>passwordCredentials</test.jclouds.keystone.credential-type>
+
+    <jclouds.osgi.export>org.jclouds.rackspace.autoscale.uk*;version="${project.version}"</jclouds.osgi.export>
+    <jclouds.osgi.import>
+      org.jclouds.rest.internal;version="${jclouds.version}",
+      org.jclouds.labs*;version="${project.version}",
+      org.jclouds*;version="${jclouds.version}",
+      *
+    </jclouds.osgi.import>
+  </properties>
+
+  <repositories>
+    <repository>
+      <id>apache-snapshots</id>
+      <url>https://repository.apache.org/content/repositories/snapshots</url>
+      <releases>
+        <enabled>false</enabled>
+      </releases>
+      <snapshots>
+        <enabled>true</enabled>
+      </snapshots>
+    </repository>
+  </repositories>
+
+  <dependencies>
+    <dependency>
+      <groupId>org.apache.jclouds.labs</groupId>
+      <artifactId>rackspace-autoscale</artifactId>
+      <version>${project.parent.version}</version>
+      <type>test-jar</type>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.jclouds.labs</groupId>
+      <artifactId>rackspace-autoscale</artifactId>
+      <version>${project.parent.version}</version>
+    </dependency>
+    <dependency>    
+      <groupId>org.apache.jclouds.api</groupId>
+      <artifactId>openstack-keystone</artifactId>
+      <version>${project.parent.version}</version>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.jclouds.api</groupId>
+      <artifactId>openstack-keystone</artifactId>
+      <version>${project.parent.version}</version>
+      <type>test-jar</type>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.jclouds</groupId>
+      <artifactId>jclouds-core</artifactId>
+      <version>${project.parent.version}</version>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.jclouds</groupId>
+      <artifactId>jclouds-core</artifactId>
+      <version>${project.parent.version}</version>
+      <type>test-jar</type>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.jclouds.driver</groupId>
+      <artifactId>jclouds-slf4j</artifactId>
+      <version>${project.parent.version}</version>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+      <groupId>ch.qos.logback</groupId>
+      <artifactId>logback-classic</artifactId>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+    	<groupId>org.apache.jclouds.api</groupId>
+    	<artifactId>rackspace-cloudidentity</artifactId>
+    	<version>${project.parent.version}</version>
+    </dependency>
+  </dependencies>
+
+  <profiles>
+    <profile>
+      <id>live</id>
+      <build>
+        <plugins>
+          <plugin>
+            <groupId>org.apache.maven.plugins</groupId>
+            <artifactId>maven-surefire-plugin</artifactId>
+            <executions>
+              <execution>
+                <id>integration</id>
+                <phase>integration-test</phase>
+                <goals>
+                  <goal>test</goal>
+                </goals>
+                <configuration>
+                  <forkCount>5</forkCount>
+                  <reuseForks>true</reuseForks>
+                  <parallel>classes</parallel>
+                  <systemPropertyVariables>
+                    <test.rackspace-autoscale.endpoint>${test.rackspace-autoscale-uk.endpoint}</test.rackspace-autoscale.endpoint>
+                    <test.rackspace-autoscale.api-version>${test.rackspace-autoscale-uk.api-version}</test.rackspace-autoscale.api-version>
+                    <test.rackspace-autoscale.build-version>${test.rackspace-autoscale-uk.build-version}</test.rackspace-autoscale.build-version>
+                    <test.rackspace-autoscale.identity>${test.rackspace-autoscale-uk.identity}</test.rackspace-autoscale.identity>
+                    <test.rackspace-autoscale.credential>${test.rackspace-autoscale-uk.credential}</test.rackspace-autoscale.credential>
+                  </systemPropertyVariables>
+                </configuration>
+              </execution>
+            </executions>
+          </plugin>
+        </plugins>
+      </build>
+    </profile>
+  </profiles>
+
+</project>
diff --git a/rackspace-autoscale-uk/src/main/java/org/jclouds/rackspace/autoscale/uk/AutoscaleUKProviderMetadata.java b/rackspace-autoscale-uk/src/main/java/org/jclouds/rackspace/autoscale/uk/AutoscaleUKProviderMetadata.java
new file mode 100644
index 0000000..710edfe
--- /dev/null
+++ b/rackspace-autoscale-uk/src/main/java/org/jclouds/rackspace/autoscale/uk/AutoscaleUKProviderMetadata.java
@@ -0,0 +1,116 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.jclouds.rackspace.autoscale.uk;
+
+import static org.jclouds.location.reference.LocationConstants.ISO3166_CODES;
+import static org.jclouds.location.reference.LocationConstants.PROPERTY_ZONE;
+import static org.jclouds.location.reference.LocationConstants.PROPERTY_ZONES;
+import static org.jclouds.openstack.keystone.v2_0.config.KeystoneProperties.CREDENTIAL_TYPE;
+import static org.jclouds.openstack.keystone.v2_0.config.KeystoneProperties.SERVICE_TYPE;
+
+import java.net.URI;
+import java.util.Properties;
+
+import org.jclouds.openstack.keystone.v2_0.config.KeystoneAuthenticationModule.ZoneModule;
+import org.jclouds.providers.ProviderMetadata;
+import org.jclouds.providers.internal.BaseProviderMetadata;
+import org.jclouds.rackspace.autoscale.v1.AutoscaleApiMetadata;
+import org.jclouds.rackspace.autoscale.v1.config.AutoscaleHttpApiModule;
+import org.jclouds.rackspace.autoscale.v1.config.AutoscaleParserModule;
+import org.jclouds.rackspace.cloudidentity.v2_0.ServiceType;
+import org.jclouds.rackspace.cloudidentity.v2_0.config.CloudIdentityAuthenticationApiModule;
+import org.jclouds.rackspace.cloudidentity.v2_0.config.CloudIdentityAuthenticationModule;
+import org.jclouds.rackspace.cloudidentity.v2_0.config.CloudIdentityCredentialTypes;
+
+import com.google.common.collect.ImmutableSet;
+import com.google.inject.Module;
+
+/**
+ * Implementation of {@link ProviderMetadata} for the Rackspace UK Auto Scale API.
+ */
+public class AutoscaleUKProviderMetadata extends BaseProviderMetadata {
+
+   public static Builder builder() {
+      return new Builder();
+   }
+
+   @Override
+   public Builder toBuilder() {
+      return builder().fromProviderMetadata(this);
+   }
+
+   public AutoscaleUKProviderMetadata() {
+      super(builder());
+   }
+
+   public AutoscaleUKProviderMetadata(Builder builder) {
+      super(builder);
+   }
+
+   public static Properties defaultProperties() {
+      Properties properties = new Properties();
+      properties.setProperty(CREDENTIAL_TYPE, CloudIdentityCredentialTypes.API_KEY_CREDENTIALS);
+      properties.setProperty(SERVICE_TYPE, ServiceType.AUTO_SCALE); 
+
+      properties.setProperty(PROPERTY_ZONES, "LON");
+      properties.setProperty(PROPERTY_ZONE + ".LON." + ISO3166_CODES, "GB-SLG");
+      return properties;
+   }
+
+   public static class Builder extends BaseProviderMetadata.Builder {
+
+      protected Builder(){
+         id("rackspace-autoscale-uk")
+         .name("Rackspace Auto Scale UK")
+         .apiMetadata(new AutoscaleApiMetadata().toBuilder()
+               .identityName("${userName}")
+               .credentialName("${apiKey}")
+               .defaultEndpoint("https://lon.identity.api.rackspacecloud.com/v2.0/")
+               .endpointName("Rackspace Cloud Identity service URL ending in /v2.0/")
+               .documentation(URI.create("http://docs.rackspace.com/cas/api/v1.0/autoscale-devguide/content/Overview.html"))
+               .version("1.0")
+               .defaultModules(ImmutableSet.<Class<? extends Module>>builder()
+                     .add(CloudIdentityAuthenticationApiModule.class)
+                     .add(CloudIdentityAuthenticationModule.class)
+                     .add(ZoneModule.class)
+                     .add(AutoscaleParserModule.class)
+                     .add(AutoscaleHttpApiModule.class)
+                     .build())
+               .build())
+         .homepage(URI.create("http://www.rackspace.com/cloud/autoscale/"))
+         .console(URI.create("https://mycloud.rackspace.co.uk"))
+         .linkedServices("rackspace-cloudbigdata-uk", "rackspace-cloudblockstorage-uk",
+               "rackspace-clouddatabases-uk", "rackspace-clouddns-uk", "rackspace-cloudfiles-uk",
+               "rackspace-cloudloadbalancers-uk", "rackspace-cloudqueues-uk",
+               "rackspace-cloudservers-uk")
+         .iso3166Codes("GB-SLG")
+         .endpoint("https://lon.identity.api.rackspacecloud.com/v2.0/")
+         .defaultProperties(AutoscaleUKProviderMetadata.defaultProperties());
+      }
+
+      @Override
+      public AutoscaleUKProviderMetadata build() {
+         return new AutoscaleUKProviderMetadata(this);
+      }
+
+      @Override
+      public Builder fromProviderMetadata(ProviderMetadata in) {
+         super.fromProviderMetadata(in);
+         return this;
+      }
+   }
+}
diff --git a/rackspace-autoscale-uk/src/main/resources/META-INF/services/org.jclouds.providers.ProviderMetadata b/rackspace-autoscale-uk/src/main/resources/META-INF/services/org.jclouds.providers.ProviderMetadata
new file mode 100644
index 0000000..237416e
--- /dev/null
+++ b/rackspace-autoscale-uk/src/main/resources/META-INF/services/org.jclouds.providers.ProviderMetadata
@@ -0,0 +1,18 @@
+#
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License.  You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+org.jclouds.rackspace.autoscale.uk.AutoscaleUKProviderMetadata
diff --git a/rackspace-autoscale-uk/src/test/java/org/jclouds/rackspace/autoscale/uk/AutoscaleUKProviderMetadataExpectTest.java b/rackspace-autoscale-uk/src/test/java/org/jclouds/rackspace/autoscale/uk/AutoscaleUKProviderMetadataExpectTest.java
new file mode 100644
index 0000000..6bbeba2
--- /dev/null
+++ b/rackspace-autoscale-uk/src/test/java/org/jclouds/rackspace/autoscale/uk/AutoscaleUKProviderMetadataExpectTest.java
@@ -0,0 +1,62 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.jclouds.rackspace.autoscale.uk;
+
+import static org.testng.Assert.assertEquals;
+
+import org.jclouds.http.HttpRequest;
+import org.jclouds.http.HttpResponse;
+import org.jclouds.rackspace.autoscale.v1.AutoscaleApi;
+import org.jclouds.rackspace.autoscale.v1.internal.BaseAutoscaleApiExpectTest;
+import org.testng.annotations.Test;
+
+import com.google.common.collect.ImmutableSet;
+
+/**
+ * This test ensures that the wiring in {@link AutoscaleUKProviderMetadata} is correct.
+ * 
+ */
+@Test(groups = "unit", testName = "AutoscaleUKProviderMetadataExpectTest")
+public class AutoscaleUKProviderMetadataExpectTest extends BaseAutoscaleApiExpectTest {
+
+   public AutoscaleUKProviderMetadataExpectTest() {
+      this.provider = "rackspace-autoscale-uk";
+      this.identity = "myUsername";
+      this.credential = "myApiKey";
+   }
+
+   public void testCanGetConfiguredZones() {
+
+      HttpRequest authenticate = HttpRequest.builder().method("POST")
+            .endpoint("https://lon.identity.api.rackspacecloud.com/v2.0/tokens")
+            .addHeader("Accept", "application/json")
+            .payload(payloadFromStringWithContentType(
+                  "{\"auth\":{\"RAX-KSKEY:apiKeyCredentials\":{\"username\":\"myUsername\",\"apiKey\":\"myApiKey\"}}}"
+                  , "application/json")).build();
+
+      HttpResponse authenticationResponse = HttpResponse.builder()
+            .statusCode(200)
+            .payload(payloadFromResourceWithContentType("/access_rax_uk.json", "application/json"))
+            .build();
+
+      AutoscaleApi whenNovaRegionExists = requestSendsResponse(authenticate, authenticationResponse);
+
+      assertEquals(whenNovaRegionExists.getConfiguredZones(), ImmutableSet.of("LON"));
+
+   }
+
+}
diff --git a/rackspace-autoscale-uk/src/test/java/org/jclouds/rackspace/autoscale/uk/AutoscaleUKProviderTest.java b/rackspace-autoscale-uk/src/test/java/org/jclouds/rackspace/autoscale/uk/AutoscaleUKProviderTest.java
new file mode 100644
index 0000000..e05d521
--- /dev/null
+++ b/rackspace-autoscale-uk/src/test/java/org/jclouds/rackspace/autoscale/uk/AutoscaleUKProviderTest.java
@@ -0,0 +1,32 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.jclouds.rackspace.autoscale.uk;
+
+import org.jclouds.providers.internal.BaseProviderMetadataTest;
+import org.jclouds.rackspace.autoscale.v1.AutoscaleApiMetadata;
+import org.testng.annotations.Test;
+
+/**
+ * Tests the Rackspace Auto Scale UK Provider Metadata.
+ */
+@Test(groups = "unit", testName = "AutoscaleUKProviderTest")
+public class AutoscaleUKProviderTest extends BaseProviderMetadataTest {
+
+   public AutoscaleUKProviderTest() {
+      super(new AutoscaleUKProviderMetadata(), new AutoscaleApiMetadata());
+   }
+}
diff --git a/rackspace-autoscale-uk/src/test/java/org/jclouds/rackspace/autoscale/uk/features/AutoscaleUKGroupApiLiveTest.java b/rackspace-autoscale-uk/src/test/java/org/jclouds/rackspace/autoscale/uk/features/AutoscaleUKGroupApiLiveTest.java
new file mode 100644
index 0000000..b6a6399
--- /dev/null
+++ b/rackspace-autoscale-uk/src/test/java/org/jclouds/rackspace/autoscale/uk/features/AutoscaleUKGroupApiLiveTest.java
@@ -0,0 +1,30 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.jclouds.rackspace.autoscale.uk.features;
+
+import org.jclouds.rackspace.autoscale.v1.features.GroupApiLiveTest;
+import org.testng.annotations.Test;
+
+/**
+ * Tests GroupApi - live
+ */
+@Test(groups = "live", testName = "AutoscaleUKGroupApiLiveTest", singleThreaded = true)
+public class AutoscaleUKGroupApiLiveTest extends GroupApiLiveTest {
+   public AutoscaleUKGroupApiLiveTest() {
+      provider = "rackspace-autoscale-uk";
+   }
+}
diff --git a/rackspace-autoscale-uk/src/test/java/org/jclouds/rackspace/autoscale/uk/features/AutoscaleUKScalingPolicyApiLiveTest.java b/rackspace-autoscale-uk/src/test/java/org/jclouds/rackspace/autoscale/uk/features/AutoscaleUKScalingPolicyApiLiveTest.java
new file mode 100644
index 0000000..7badb15
--- /dev/null
+++ b/rackspace-autoscale-uk/src/test/java/org/jclouds/rackspace/autoscale/uk/features/AutoscaleUKScalingPolicyApiLiveTest.java
@@ -0,0 +1,30 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.jclouds.rackspace.autoscale.uk.features;
+
+import org.jclouds.rackspace.autoscale.v1.features.ScalingPolicyApiLiveTest;
+import org.testng.annotations.Test;
+
+/**
+ * Tests Scaling Policy Api - live
+ */
+@Test(groups = "live", testName = "AutoscaleUKScalingPolicyApiLiveTest", singleThreaded = true)
+public class AutoscaleUKScalingPolicyApiLiveTest extends ScalingPolicyApiLiveTest {
+   public AutoscaleUKScalingPolicyApiLiveTest() {
+      provider = "rackspace-autoscale-uk";
+   }
+}
diff --git a/rackspace-autoscale-uk/src/test/java/org/jclouds/rackspace/autoscale/uk/features/AutoscaleUKWebhookApiLiveTest.java b/rackspace-autoscale-uk/src/test/java/org/jclouds/rackspace/autoscale/uk/features/AutoscaleUKWebhookApiLiveTest.java
new file mode 100644
index 0000000..65a8b00
--- /dev/null
+++ b/rackspace-autoscale-uk/src/test/java/org/jclouds/rackspace/autoscale/uk/features/AutoscaleUKWebhookApiLiveTest.java
@@ -0,0 +1,30 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.jclouds.rackspace.autoscale.uk.features;
+
+import org.jclouds.rackspace.autoscale.v1.features.WebhookApiLiveTest;
+import org.testng.annotations.Test;
+
+/**
+ * Tests WebhookApi - live
+ */
+@Test(groups = "live", testName = "AutoscaleUKWebhookApiLiveTest", singleThreaded = true)
+public class AutoscaleUKWebhookApiLiveTest extends WebhookApiLiveTest {
+   public AutoscaleUKWebhookApiLiveTest() {
+      provider = "rackspace-autoscale-uk";
+   }
+}
diff --git a/rackspace-autoscale-uk/src/test/resources/access_rax_uk.json b/rackspace-autoscale-uk/src/test/resources/access_rax_uk.json
new file mode 100644
index 0000000..584dd79
--- /dev/null
+++ b/rackspace-autoscale-uk/src/test/resources/access_rax_uk.json
@@ -0,0 +1,140 @@
+{
+    "access": {
+        "token": {
+            "id": "bdd18214-e266-4ad3-b985-d9bfb22c8da8",
+            "expires": "2012-10-01T02:11:16.000+01:00",
+            "tenant": {
+                "id": "10001786",
+                "name": "10001786"
+            }
+        },
+        "serviceCatalog": [
+            {
+                "endpoints": [
+                    {
+                        "region": "LON",
+                        "tenantId": "MossoCloudFS_83a9d536-2e25-4166-bd3b-a503a934f953",
+                        "publicURL": "https://storage101.lon3.clouddrive.com/v1/MossoCloudFS_83a9d536-2e25-4166-bd3b-a503a934f953",
+                        "internalURL": "https://snet-storage101.lon3.clouddrive.com/v1/MossoCloudFS_83a9d536-2e25-4166-bd3b-a503a934f953"
+                    }
+                ],
+                "name": "cloudFiles",
+                "type": "object-store"
+            },
+            {
+                "endpoints": [
+                    {
+                        "region": "LON",
+                        "tenantId": "MossoCloudFS_83a9d536-2e25-4166-bd3b-a503a934f953",
+                        "publicURL": "https://cdn3.clouddrive.com/v1/MossoCloudFS_83a9d536-2e25-4166-bd3b-a503a934f953"
+                    }
+                ],
+                "name": "cloudFilesCDN",
+                "type": "rax:object-cdn"
+            },
+            {
+                "endpoints": [
+                    {
+                        "tenantId": "10001786",
+                        "publicURL": "https://lon.servers.api.rackspacecloud.com/v1.0/10001786",
+                        "versionInfo": "https://lon.servers.api.rackspacecloud.com/v1.0",
+                        "versionList": "https://lon.servers.api.rackspacecloud.com/",
+                        "versionId": "1.0"
+                    }
+                ],
+                "name": "cloudServers",
+                "type": "compute"
+            },
+            {
+                "endpoints": [
+                    {
+                        "tenantId": "10001786",
+                        "publicURL": "https://lon.dns.api.rackspacecloud.com/v1.0/10001786"
+                    }
+                ],
+                "name": "cloudDNS",
+                "type": "rax:dns"
+            },
+            {
+                "endpoints": [
+                    {
+                        "region": "LON",
+                        "tenantId": "10001786",
+                        "publicURL": "https://lon.loadbalancers.api.rackspacecloud.com/v1.0/10001786"
+                    }
+                ],
+                "name": "cloudLoadBalancers",
+                "type": "rax:load-balancer"
+            },
+            {
+                "endpoints": [
+                    {
+                        "tenantId": "10001786",
+                        "publicURL": "https://monitoring.api.rackspacecloud.com/v1.0/10001786"
+                    }
+                ],
+                "name": "cloudMonitoring",
+                "type": "rax:monitor"
+            },
+            {
+                "endpoints": [
+                    {
+                        "region": "LON",
+                        "tenantId": "10001786",
+                        "publicURL": "https://lon.databases.api.rackspacecloud.com/v1.0/10001786"
+                    }
+                ],
+                "name": "cloudDatabases",
+                "type": "rax:database"
+            },
+            {
+                "endpoints": [
+                    {
+                        "region": "LON",
+                        "tenantId": "10001786",
+                        "publicURL": "https://lon.servers.api.rackspacecloud.com/v2/10001786",
+                        "versionInfo": "https://lon.servers.api.rackspacecloud.com/v2",
+                        "versionList": "https://lon.servers.api.rackspacecloud.com/",
+                        "versionId": "2"
+                    }
+                ],
+                "name": "cloudServersOpenStack",
+                "type": "compute"
+            },
+            {
+                "endpoints": [
+                    {
+                        "publicURL": "https://lon.blockstorage.api.rackspacecloud.com/v1/10001786",
+                        "tenantId": "10001786",
+                        "region": "LON"
+                    }
+                ],
+                "name": "cloudBlockStorage",
+                "type": "volume"
+            },
+            {
+                "endpoints": [
+                    {
+                        "region": "LON",
+                        "tenantId": "10001786",
+                        "publicURL": "https:\/\/lon.autoscale.api.rackspacecloud.com\/v1.0\/10001786"
+                    }
+                ],
+                "name": "autoscale",
+                "type": "rax:autoscale"
+            }
+        ],
+        "user": {
+            "id": "378",
+            "roles": [
+                {
+                    "id": "3",
+                    "description": "User Admin Role.",
+                    "name": "identity:user-admin"
+                }
+            ],
+            "name": "jclouds",
+            "RAX-AUTH:defaultRegion": ""
+        }
+    }
+}
\ No newline at end of file
diff --git a/rackspace-autoscale-uk/src/test/resources/logback.xml b/rackspace-autoscale-uk/src/test/resources/logback.xml
new file mode 100644
index 0000000..6559c23
--- /dev/null
+++ b/rackspace-autoscale-uk/src/test/resources/logback.xml
@@ -0,0 +1,69 @@
+<?xml version="1.0"?>
+<!--
+
+    Licensed to the Apache Software Foundation (ASF) under one or more
+    contributor license agreements.  See the NOTICE file distributed with
+    this work for additional information regarding copyright ownership.
+    The ASF licenses this file to You under the Apache License, Version 2.0
+    (the "License"); you may not use this file except in compliance with
+    the License.  You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+-->
+<configuration scan="false">
+    <appender name="FILE" class="ch.qos.logback.core.FileAppender">
+        <file>target/test-data/jclouds.log</file>
+
+        <encoder>
+            <Pattern>%d %-5p [%c] [%thread] %m%n</Pattern>
+        </encoder>
+    </appender>
+
+    <appender name="WIREFILE" class="ch.qos.logback.core.FileAppender">
+        <file>target/test-data/jclouds-wire.log</file>
+
+        <encoder>
+            <Pattern>%d %-5p [%c] [%thread] %m%n</Pattern>
+        </encoder>
+    </appender>
+
+    <appender name="BLOBSTOREFILE" class="ch.qos.logback.core.FileAppender">
+        <file>target/test-data/jclouds-blobstore.log</file>
+
+        <encoder>
+            <Pattern>%d %-5p [%c] [%thread] %m%n</Pattern>
+        </encoder>
+    </appender>
+
+    <root>
+        <level value="warn" />
+    </root>
+
+    <logger name="org.jclouds">
+        <level value="DEBUG" />
+        <appender-ref ref="FILE" />
+    </logger>
+
+    <logger name="jclouds.wire">
+        <level value="DEBUG" />
+        <appender-ref ref="WIREFILE" />
+    </logger>
+
+    <logger name="jclouds.headers">
+        <level value="DEBUG" />
+        <appender-ref ref="WIREFILE" />
+    </logger>
+
+    <logger name="jclouds.blobstore">
+        <level value="DEBUG" />
+        <appender-ref ref="BLOBSTOREFILE" />
+    </logger>
+
+</configuration>
diff --git a/rackspace-autoscale-us/pom.xml b/rackspace-autoscale-us/pom.xml
index 571f558..4f32b87 100644
--- a/rackspace-autoscale-us/pom.xml
+++ b/rackspace-autoscale-us/pom.xml
@@ -29,7 +29,7 @@
   <groupId>org.apache.jclouds.labs</groupId>
   <artifactId>rackspace-autoscale-us</artifactId>
   <version>1.8.0-SNAPSHOT</version>
-  <name>jclouds rackspace-autoscale api provider</name>
+  <name>jclouds Rackspace Auto Scale US Provider</name>
   <description>jclouds components to access Rackspace Autoscale</description>
   <packaging>bundle</packaging>
 
@@ -43,7 +43,7 @@
     <test.rackspace-autoscale.credential>FIXME_CREDENTIALS</test.rackspace-autoscale.credential>
     <test.jclouds.keystone.credential-type>passwordCredentials</test.jclouds.keystone.credential-type>
 
-    <jclouds.osgi.export>org.jclouds.rackspace.autoscale.v1_0*;version="${project.version}"</jclouds.osgi.export>
+    <jclouds.osgi.export>org.jclouds.rackspace.autoscale.us*;version="${project.version}"</jclouds.osgi.export>
     <jclouds.osgi.import>
       org.jclouds.rest.internal;version="${jclouds.version}",
       org.jclouds.labs*;version="${project.version}",
diff --git a/rackspace-autoscale-us/src/main/java/org/jclouds/rackspace/autoscale/us/AutoscaleUSProviderMetadata.java b/rackspace-autoscale-us/src/main/java/org/jclouds/rackspace/autoscale/us/AutoscaleUSProviderMetadata.java
new file mode 100644
index 0000000..5d5b1d5
--- /dev/null
+++ b/rackspace-autoscale-us/src/main/java/org/jclouds/rackspace/autoscale/us/AutoscaleUSProviderMetadata.java
@@ -0,0 +1,121 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.jclouds.rackspace.autoscale.us;
+
+import static org.jclouds.location.reference.LocationConstants.ISO3166_CODES;
+import static org.jclouds.location.reference.LocationConstants.PROPERTY_ZONE;
+import static org.jclouds.location.reference.LocationConstants.PROPERTY_ZONES;
+import static org.jclouds.openstack.keystone.v2_0.config.KeystoneProperties.CREDENTIAL_TYPE;
+import static org.jclouds.openstack.keystone.v2_0.config.KeystoneProperties.SERVICE_TYPE;
+
+import java.net.URI;
+import java.util.Properties;
+
+import org.jclouds.openstack.keystone.v2_0.config.KeystoneAuthenticationModule.ZoneModule;
+import org.jclouds.providers.ProviderMetadata;
+import org.jclouds.providers.internal.BaseProviderMetadata;
+import org.jclouds.rackspace.autoscale.v1.AutoscaleApiMetadata;
+import org.jclouds.rackspace.autoscale.v1.config.AutoscaleHttpApiModule;
+import org.jclouds.rackspace.autoscale.v1.config.AutoscaleParserModule;
+import org.jclouds.rackspace.cloudidentity.v2_0.ServiceType;
+import org.jclouds.rackspace.cloudidentity.v2_0.config.CloudIdentityAuthenticationApiModule;
+import org.jclouds.rackspace.cloudidentity.v2_0.config.CloudIdentityAuthenticationModule;
+import org.jclouds.rackspace.cloudidentity.v2_0.config.CloudIdentityCredentialTypes;
+
+import com.google.common.collect.ImmutableSet;
+import com.google.inject.Module;
+
+/**
+ * Implementation of {@link ProviderMetadata} for Rackspace US Auto Scale API.
+ */
+public class AutoscaleUSProviderMetadata extends BaseProviderMetadata {
+
+   public static Builder builder() {
+      return new Builder();
+   }
+
+   @Override
+   public Builder toBuilder() {
+      return builder().fromProviderMetadata(this);
+   }
+
+   public AutoscaleUSProviderMetadata() {
+      super(builder());
+   }
+
+   public AutoscaleUSProviderMetadata(Builder builder) {
+      super(builder);
+   }
+
+   public static Properties defaultProperties() {
+      Properties properties = new Properties();
+      properties.setProperty(CREDENTIAL_TYPE, CloudIdentityCredentialTypes.API_KEY_CREDENTIALS);
+      properties.setProperty(SERVICE_TYPE, ServiceType.AUTO_SCALE); 
+
+      properties.setProperty(PROPERTY_ZONES, "ORD,DFW,IAD,SYD,HKG");
+      properties.setProperty(PROPERTY_ZONE + ".ORD." + ISO3166_CODES, "US-IL");
+      properties.setProperty(PROPERTY_ZONE + ".DFW." + ISO3166_CODES, "US-TX");
+      properties.setProperty(PROPERTY_ZONE + ".IAD." + ISO3166_CODES, "US-VA");
+      properties.setProperty(PROPERTY_ZONE + ".SYD." + ISO3166_CODES, "AU-NSW");
+      properties.setProperty(PROPERTY_ZONE + ".HKG." + ISO3166_CODES, "HK");
+
+      return properties;
+   }
+
+   public static class Builder extends BaseProviderMetadata.Builder {
+
+      protected Builder(){
+         id("rackspace-autoscale-us")
+         .name("Rackspace Auto Scale US")
+         .apiMetadata(new AutoscaleApiMetadata().toBuilder()
+               .identityName("${userName}")
+               .credentialName("${apiKey}")
+               .defaultEndpoint("https://identity.api.rackspacecloud.com/v2.0/")
+               .endpointName("Rackspace Cloud Identity service URL ending in /v2.0/")
+               .documentation(URI.create("http://docs.rackspace.com/cas/api/v1.0/autoscale-devguide/content/Overview.html"))
+               .version("1.0")
+               .defaultModules(ImmutableSet.<Class<? extends Module>>builder()
+                     .add(CloudIdentityAuthenticationApiModule.class)
+                     .add(CloudIdentityAuthenticationModule.class)
+                     .add(ZoneModule.class)
+                     .add(AutoscaleParserModule.class)
+                     .add(AutoscaleHttpApiModule.class)
+                     .build())
+               .build())
+         .homepage(URI.create("http://www.rackspace.com/cloud/public/autoscale/"))
+         .console(URI.create("https://mycloud.rackspace.com"))
+         .linkedServices("rackspace-cloudbigdata-us", "rackspace-cloudblockstorage-us",
+               "rackspace-clouddatabases-us", "rackspace-clouddns-us", "rackspace-cloudfiles-us",
+               "rackspace-cloudloadbalancers-us", "rackspace-cloudqueues-us",
+               "rackspace-cloudservers-us")
+         .iso3166Codes("US-IL", "US-TX", "US-VA", "AU-NSW", "HK")
+         .endpoint("https://identity.api.rackspacecloud.com/v2.0/")
+         .defaultProperties(AutoscaleUSProviderMetadata.defaultProperties());
+      }
+
+      @Override
+      public AutoscaleUSProviderMetadata build() {
+         return new AutoscaleUSProviderMetadata(this);
+      }
+
+      @Override
+      public Builder fromProviderMetadata(ProviderMetadata in) {
+         super.fromProviderMetadata(in);
+         return this;
+      }
+   }
+}
diff --git a/rackspace-autoscale-us/src/main/java/org/jclouds/rackspace/autoscale/us/v1/AutoscaleUSProviderMetadata.java b/rackspace-autoscale-us/src/main/java/org/jclouds/rackspace/autoscale/us/v1/AutoscaleUSProviderMetadata.java
index ebf3b39..6d2b0d5 100644
--- a/rackspace-autoscale-us/src/main/java/org/jclouds/rackspace/autoscale/us/v1/AutoscaleUSProviderMetadata.java
+++ b/rackspace-autoscale-us/src/main/java/org/jclouds/rackspace/autoscale/us/v1/AutoscaleUSProviderMetadata.java
@@ -40,8 +40,12 @@
 import com.google.inject.Module;
 
 /**
- * Implementation of {@link ProviderMetadata} for Rackspace Autoscale API
+ * Implementation of {@link ProviderMetadata} for Rackspace US Auto Scale API.
+ *
+ * @deprecated Please use {@link org.jclouds.rackspace.autoscale.us.AutoscaleUSProviderMetadata} as
+ *             this method will be removed in jclouds 2.0.
  */
+@Deprecated
 public class AutoscaleUSProviderMetadata extends BaseProviderMetadata {
 
    public static Builder builder() {
@@ -61,16 +65,18 @@
       super(builder);
    }
 
-   // NOTE: SYD is disabled for now. Enable when service is enabled in SYD
    public static Properties defaultProperties() {
       Properties properties = new Properties();
       properties.setProperty(CREDENTIAL_TYPE, CloudIdentityCredentialTypes.API_KEY_CREDENTIALS);
-      properties.setProperty(SERVICE_TYPE, ServiceType.AUTO_SCALE); 
-      //properties.setProperty(PROPERTY_ZONES, "ORD,DFW,SYD");
-      properties.setProperty(PROPERTY_ZONES, "ORD,DFW");
+      properties.setProperty(SERVICE_TYPE, ServiceType.AUTO_SCALE);
+
+      properties.setProperty(PROPERTY_ZONES, "ORD,DFW,IAD,SYD,HKG");
       properties.setProperty(PROPERTY_ZONE + ".ORD." + ISO3166_CODES, "US-IL");
       properties.setProperty(PROPERTY_ZONE + ".DFW." + ISO3166_CODES, "US-TX");
-      //properties.setProperty(PROPERTY_ZONE + ".SYD." + ISO3166_CODES, "AU-NSW");
+      properties.setProperty(PROPERTY_ZONE + ".IAD." + ISO3166_CODES, "US-VA");
+      properties.setProperty(PROPERTY_ZONE + ".SYD." + ISO3166_CODES, "AU-NSW");
+      properties.setProperty(PROPERTY_ZONE + ".HKG." + ISO3166_CODES, "HK");
+
       return properties;
    }
 
@@ -78,27 +84,31 @@
 
       protected Builder(){
          id("rackspace-autoscale-us")
-         .name("Rackspace autoscale US")
+         .name("Rackspace Auto Scale US")
          .apiMetadata(new AutoscaleApiMetadata().toBuilder()
                .identityName("${userName}")
                .credentialName("${apiKey}")
                .defaultEndpoint("https://identity.api.rackspacecloud.com/v2.0/")
-               .endpointName("identity service url ending in /v2.0/")
-               .documentation(URI.create("http://docs.rackspace.com/cbs/api/v1.0/cbs-devguide/content/overview.html"))
+               .endpointName("Rackspace Cloud Identity service URL ending in /v2.0/")
+               .documentation(URI.create("http://docs.rackspace.com/cas/api/v1.0/autoscale-devguide/content/Overview.html"))
+               .version("1.0")
                .defaultModules(ImmutableSet.<Class<? extends Module>>builder()
                      .add(CloudIdentityAuthenticationApiModule.class)
                      .add(CloudIdentityAuthenticationModule.class)
                      .add(ZoneModule.class)
                      .add(AutoscaleParserModule.class)
-                     .add(AutoscaleHttpApiModule.class).build())
+                     .add(AutoscaleHttpApiModule.class)
                      .build())
-                     .homepage(URI.create("http://www.rackspace.com/cloud/public/autoscale/"))
-                     .console(URI.create("https://mycloud.rackspace.com"))
-                     .linkedServices("rackspace-cloudservers-us", "cloudfiles-us")
-                     //.iso3166Codes("US-IL", "US-TX", "AU-NSW")
-                     .iso3166Codes("US-IL", "US-TX")
-                     .endpoint("https://identity.api.rackspacecloud.com/v2.0/")
-                     .defaultProperties(AutoscaleUSProviderMetadata.defaultProperties());
+               .build())
+         .homepage(URI.create("http://www.rackspace.com/cloud/public/autoscale/"))
+         .console(URI.create("https://mycloud.rackspace.com"))
+         .linkedServices("rackspace-cloudbigdata-us", "rackspace-cloudblockstorage-us",
+               "rackspace-clouddatabases-us", "rackspace-clouddns-us", "rackspace-cloudfiles-us",
+               "rackspace-cloudloadbalancers-us", "rackspace-cloudqueues-us",
+               "rackspace-cloudservers-us")
+         .iso3166Codes("US-IL", "US-TX", "US-VA", "AU-NSW", "HK")
+         .endpoint("https://identity.api.rackspacecloud.com/v2.0/")
+         .defaultProperties(AutoscaleUSProviderMetadata.defaultProperties());
       }
 
       @Override
diff --git a/rackspace-autoscale-us/src/main/resources/META-INF/services/org.jclouds.providers.ProviderMetadata b/rackspace-autoscale-us/src/main/resources/META-INF/services/org.jclouds.providers.ProviderMetadata
index 1717af9..5b557fc 100644
--- a/rackspace-autoscale-us/src/main/resources/META-INF/services/org.jclouds.providers.ProviderMetadata
+++ b/rackspace-autoscale-us/src/main/resources/META-INF/services/org.jclouds.providers.ProviderMetadata
@@ -14,5 +14,4 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 #
-
-org.jclouds.rackspace.autoscale.us.v1.AutoscaleUSProviderMetadata
+org.jclouds.rackspace.autoscale.us.AutoscaleUSProviderMetadata
diff --git a/rackspace-autoscale-us/src/test/java/org/jclouds/rackspace/autoscale/us/v1/AutoscaleUSProviderMetadataExpectTest.java b/rackspace-autoscale-us/src/test/java/org/jclouds/rackspace/autoscale/us/v1/AutoscaleUSProviderMetadataExpectTest.java
index c4399e4..8dab4c2 100644
--- a/rackspace-autoscale-us/src/test/java/org/jclouds/rackspace/autoscale/us/v1/AutoscaleUSProviderMetadataExpectTest.java
+++ b/rackspace-autoscale-us/src/test/java/org/jclouds/rackspace/autoscale/us/v1/AutoscaleUSProviderMetadataExpectTest.java
@@ -55,7 +55,7 @@
 
       AutoscaleApi whenNovaRegionExists = requestSendsResponse(authenticate, authenticationResponse);
 
-      assertEquals(whenNovaRegionExists.getConfiguredZones(), ImmutableSet.of("ORD", "DFW"));
+      assertEquals(whenNovaRegionExists.getConfiguredZones(), ImmutableSet.of("DFW", "ORD", "IAD"));
 
    }
 
diff --git a/rackspace-autoscale-us/src/test/resources/access_rax_us.json b/rackspace-autoscale-us/src/test/resources/access_rax_us.json
index 2fba05d..c66d300 100644
--- a/rackspace-autoscale-us/src/test/resources/access_rax_us.json
+++ b/rackspace-autoscale-us/src/test/resources/access_rax_us.json
@@ -151,26 +151,25 @@
                 "type":"compute"
             },
             {
-                "name":"autoscale",
-                "endpoints":[
+                "name": "autoscale",
+                "endpoints": [
                     {
-                        "region":"ORD",
-                        "tenantId":"888888",
-                        "publicURL":"https:\/\/ord.autoscale.api.rackspacecloud.com\/v1.0\/888888",
-                        "versionInfo":null,
-                        "versionList":null,
-                        "versionId":"1.0"
+                        "region": "DFW",
+                        "tenantId": "888888",
+                        "publicURL": "https:\/\/dfw.autoscale.api.rackspacecloud.com\/v1.0\/888888"
                     },
                     {
-                        "region":"DFW",
-                        "tenantId":"888888",
-                        "publicURL":"https:\/\/dfw.autoscale.api.rackspacecloud.com\/v1.0\/888888",
-                        "versionInfo":null,
-                        "versionList":null,
-                        "versionId":"1.0"
+                        "region": "ORD",
+                        "tenantId": "888888",
+                        "publicURL": "https:\/\/ord.autoscale.api.rackspacecloud.com\/v1.0\/888888"
+                    },
+                    {
+                        "region": "IAD",
+                        "tenantId": "888888",
+                        "publicURL": "https:\/\/iad.autoscale.api.rackspacecloud.com\/v1.0\/888888"
                     }
                 ],
-                "type":"rax:autoscale"
+                "type": "rax:autoscale"
             },
             {
                 "name":"cloudMonitoring",
diff --git a/rackspace-autoscale/pom.xml b/rackspace-autoscale/pom.xml
index 67f1f95..6d4ada8 100644
--- a/rackspace-autoscale/pom.xml
+++ b/rackspace-autoscale/pom.xml
@@ -29,7 +29,7 @@
   <groupId>org.apache.jclouds.labs</groupId>
   <artifactId>rackspace-autoscale</artifactId>
   <version>1.8.0-SNAPSHOT</version>
-  <name>jclouds rackspace-autoscale api</name>
+  <name>jclouds Rackspace Auto Scale API</name>
   <description>jclouds components to access Rackspace Autoscale</description>
   <packaging>bundle</packaging>
 
diff --git a/rackspace-autoscale/src/test/java/org/jclouds/rackspace/autoscale/v1/features/GroupApiLiveTest.java b/rackspace-autoscale/src/test/java/org/jclouds/rackspace/autoscale/v1/features/GroupApiLiveTest.java
index 9476c3e..0d2e07c 100644
--- a/rackspace-autoscale/src/test/java/org/jclouds/rackspace/autoscale/v1/features/GroupApiLiveTest.java
+++ b/rackspace-autoscale/src/test/java/org/jclouds/rackspace/autoscale/v1/features/GroupApiLiveTest.java
@@ -26,6 +26,9 @@
 import java.util.Map;
 
 import org.jclouds.openstack.v2_0.domain.Link;
+import org.jclouds.rackspace.autoscale.v1.domain.CreateScalingPolicy;
+import org.jclouds.rackspace.autoscale.v1.domain.CreateScalingPolicy.ScalingPolicyTargetType;
+import org.jclouds.rackspace.autoscale.v1.domain.CreateScalingPolicy.ScalingPolicyType;
 import org.jclouds.rackspace.autoscale.v1.domain.Group;
 import org.jclouds.rackspace.autoscale.v1.domain.GroupConfiguration;
 import org.jclouds.rackspace.autoscale.v1.domain.GroupState;
@@ -33,9 +36,6 @@
 import org.jclouds.rackspace.autoscale.v1.domain.LaunchConfiguration.LaunchConfigurationType;
 import org.jclouds.rackspace.autoscale.v1.domain.LoadBalancer;
 import org.jclouds.rackspace.autoscale.v1.domain.Personality;
-import org.jclouds.rackspace.autoscale.v1.domain.CreateScalingPolicy;
-import org.jclouds.rackspace.autoscale.v1.domain.CreateScalingPolicy.ScalingPolicyTargetType;
-import org.jclouds.rackspace.autoscale.v1.domain.CreateScalingPolicy.ScalingPolicyType;
 import org.jclouds.rackspace.autoscale.v1.internal.BaseAutoscaleApiLiveTest;
 import org.testng.annotations.AfterClass;
 import org.testng.annotations.BeforeClass;
@@ -73,7 +73,7 @@
                .builder()
                .loadBalancers(ImmutableList.of(LoadBalancer.builder().port(8080).id(9099).build()))
                .serverName("autoscale_server")
-               .serverImageRef("57b8a366-ab2c-454b-939f-215303a4431f")
+               .serverImageRef("5cc098a5-7286-4b96-b3a2-49f4c4f82537")
                .serverFlavorRef("2")
                .serverDiskConfig("AUTO")
                .serverMetadata(
@@ -235,7 +235,7 @@
                .builder()
                .loadBalancers(ImmutableList.of(LoadBalancer.builder().port(8080).id(9099).build()))
                .serverName("autoscale_server")
-               .serverImageRef("57b8a366-ab2c-454b-939f-215303a4431f")
+               .serverImageRef("5cc098a5-7286-4b96-b3a2-49f4c4f82537")
                .serverFlavorRef("2")
                .serverDiskConfig("AUTO")
                .serverMetadata(
diff --git a/rackspace-autoscale/src/test/java/org/jclouds/rackspace/autoscale/v1/features/ScalingPolicyApiLiveTest.java b/rackspace-autoscale/src/test/java/org/jclouds/rackspace/autoscale/v1/features/ScalingPolicyApiLiveTest.java
index df24f3e..a1c440c 100644
--- a/rackspace-autoscale/src/test/java/org/jclouds/rackspace/autoscale/v1/features/ScalingPolicyApiLiveTest.java
+++ b/rackspace-autoscale/src/test/java/org/jclouds/rackspace/autoscale/v1/features/ScalingPolicyApiLiveTest.java
@@ -74,7 +74,7 @@
                .builder()
                .loadBalancers(ImmutableList.of(LoadBalancer.builder().port(8080).id(9099).build()))
                .serverName("autoscale_server")
-               .serverImageRef("c52a0ca6-c1f2-4cd1-b7d6-afbcd1ebda22")
+               .serverImageRef("5cc098a5-7286-4b96-b3a2-49f4c4f82537")
                .serverFlavorRef("2")
                .serverDiskConfig("AUTO")
                .serverMetadata(
diff --git a/rackspace-autoscale/src/test/java/org/jclouds/rackspace/autoscale/v1/features/WebhookApiLiveTest.java b/rackspace-autoscale/src/test/java/org/jclouds/rackspace/autoscale/v1/features/WebhookApiLiveTest.java
index 8498863..4393ef8 100644
--- a/rackspace-autoscale/src/test/java/org/jclouds/rackspace/autoscale/v1/features/WebhookApiLiveTest.java
+++ b/rackspace-autoscale/src/test/java/org/jclouds/rackspace/autoscale/v1/features/WebhookApiLiveTest.java
@@ -81,7 +81,7 @@
                .builder()
                .loadBalancers(ImmutableList.of(LoadBalancer.builder().port(8080).id(9099).build()))
                .serverName("autoscale_server")
-               .serverImageRef("c52a0ca6-c1f2-4cd1-b7d6-afbcd1ebda22")
+               .serverImageRef("5cc098a5-7286-4b96-b3a2-49f4c4f82537")
                .serverFlavorRef("2")
                .serverDiskConfig("AUTO")
                .serverMetadata(
