diff --git a/apis/atmos/src/main/java/org/jclouds/atmos/config/AtmosRestClientModule.java b/apis/atmos/src/main/java/org/jclouds/atmos/config/AtmosRestClientModule.java
index b9d52d4..469922a 100644
--- a/apis/atmos/src/main/java/org/jclouds/atmos/config/AtmosRestClientModule.java
+++ b/apis/atmos/src/main/java/org/jclouds/atmos/config/AtmosRestClientModule.java
@@ -50,9 +50,6 @@
  */
 @ConfiguresRestClient
 public class AtmosRestClientModule extends RestClientModule<AtmosClient, AtmosAsyncClient> {
-   public AtmosRestClientModule() {
-      super(AtmosClient.class, AtmosAsyncClient.class);
-   }
 
    @Override
    protected void configure() {
diff --git a/apis/cloudfiles/src/main/java/org/jclouds/cloudfiles/config/CloudFilesRestClientModule.java b/apis/cloudfiles/src/main/java/org/jclouds/cloudfiles/config/CloudFilesRestClientModule.java
index cdbc74d..bbaffb5 100644
--- a/apis/cloudfiles/src/main/java/org/jclouds/cloudfiles/config/CloudFilesRestClientModule.java
+++ b/apis/cloudfiles/src/main/java/org/jclouds/cloudfiles/config/CloudFilesRestClientModule.java
@@ -54,10 +54,6 @@
 @ConfiguresRestClient
 public class CloudFilesRestClientModule extends RestClientModule<CloudFilesClient, CloudFilesAsyncClient> {
 
-   public CloudFilesRestClientModule() {
-      super(CloudFilesClient.class, CloudFilesAsyncClient.class);
-   }
-
    @Provides
    @Singleton
    CommonSwiftClient provideCommonSwiftClient(CloudFilesClient in) {
diff --git a/apis/cloudloadbalancers/src/main/java/org/jclouds/cloudloadbalancers/config/CloudLoadBalancersRestClientModule.java b/apis/cloudloadbalancers/src/main/java/org/jclouds/cloudloadbalancers/config/CloudLoadBalancersRestClientModule.java
index bd9e8ce..f7bc1f3 100644
--- a/apis/cloudloadbalancers/src/main/java/org/jclouds/cloudloadbalancers/config/CloudLoadBalancersRestClientModule.java
+++ b/apis/cloudloadbalancers/src/main/java/org/jclouds/cloudloadbalancers/config/CloudLoadBalancersRestClientModule.java
@@ -73,7 +73,7 @@
             .build();
 
    public CloudLoadBalancersRestClientModule() {
-      super(CloudLoadBalancersClient.class, CloudLoadBalancersAsyncClient.class, DELEGATE_MAP);
+      super(DELEGATE_MAP);
    }
 
    protected void installLocations() {
diff --git a/apis/cloudservers/src/main/java/org/jclouds/cloudservers/config/CloudServersRestClientModule.java b/apis/cloudservers/src/main/java/org/jclouds/cloudservers/config/CloudServersRestClientModule.java
index 13f267c..bb0399d 100644
--- a/apis/cloudservers/src/main/java/org/jclouds/cloudservers/config/CloudServersRestClientModule.java
+++ b/apis/cloudservers/src/main/java/org/jclouds/cloudservers/config/CloudServersRestClientModule.java
@@ -54,10 +54,6 @@
 @ConfiguresRestClient
 public class CloudServersRestClientModule extends RestClientModule<CloudServersClient, CloudServersAsyncClient> {
 
-   public CloudServersRestClientModule() {
-      super(CloudServersClient.class, CloudServersAsyncClient.class);
-   }
-
    @Override
    protected void configure() {
       bind(DateAdapter.class).to(Iso8601DateAdapter.class);
diff --git a/apis/cloudsigma/src/main/java/org/jclouds/cloudsigma/config/CloudSigmaRestClientModule.java b/apis/cloudsigma/src/main/java/org/jclouds/cloudsigma/config/CloudSigmaRestClientModule.java
index ce17878..a8ca588 100644
--- a/apis/cloudsigma/src/main/java/org/jclouds/cloudsigma/config/CloudSigmaRestClientModule.java
+++ b/apis/cloudsigma/src/main/java/org/jclouds/cloudsigma/config/CloudSigmaRestClientModule.java
@@ -57,10 +57,6 @@
 @ConfiguresRestClient
 public class CloudSigmaRestClientModule extends RestClientModule<CloudSigmaClient, CloudSigmaAsyncClient> {
 
-   public CloudSigmaRestClientModule() {
-      super(CloudSigmaClient.class, CloudSigmaAsyncClient.class);
-   }
-
    @Override
    protected void bindErrorHandlers() {
       bind(HttpErrorHandler.class).annotatedWith(Redirection.class).to(CloudSigmaErrorHandler.class);
diff --git a/apis/cloudstack/src/main/java/org/jclouds/cloudstack/config/CloudStackRestClientModule.java b/apis/cloudstack/src/main/java/org/jclouds/cloudstack/config/CloudStackRestClientModule.java
index a5b63e1..7bf1afd 100644
--- a/apis/cloudstack/src/main/java/org/jclouds/cloudstack/config/CloudStackRestClientModule.java
+++ b/apis/cloudstack/src/main/java/org/jclouds/cloudstack/config/CloudStackRestClientModule.java
@@ -221,7 +221,7 @@
    }
 
    public CloudStackRestClientModule() {
-      super(CloudStackClient.class, CloudStackAsyncClient.class, DELEGATE_MAP);
+      super(DELEGATE_MAP);
    }
 
    @Override
diff --git a/apis/cloudwatch/src/main/java/org/jclouds/cloudwatch/config/CloudWatchRestClientModule.java b/apis/cloudwatch/src/main/java/org/jclouds/cloudwatch/config/CloudWatchRestClientModule.java
index ebede44..7905335 100644
--- a/apis/cloudwatch/src/main/java/org/jclouds/cloudwatch/config/CloudWatchRestClientModule.java
+++ b/apis/cloudwatch/src/main/java/org/jclouds/cloudwatch/config/CloudWatchRestClientModule.java
@@ -30,8 +30,5 @@
  */
 @ConfiguresRestClient
 public class CloudWatchRestClientModule extends FormSigningRestClientModule<CloudWatchClient, CloudWatchAsyncClient> {
-   public CloudWatchRestClientModule() {
-      super(CloudWatchClient.class, CloudWatchAsyncClient.class);
-   }
 
 }
diff --git a/apis/deltacloud/src/main/java/org/jclouds/deltacloud/config/DeltacloudRestClientModule.java b/apis/deltacloud/src/main/java/org/jclouds/deltacloud/config/DeltacloudRestClientModule.java
index 8a1664d..73974a0 100644
--- a/apis/deltacloud/src/main/java/org/jclouds/deltacloud/config/DeltacloudRestClientModule.java
+++ b/apis/deltacloud/src/main/java/org/jclouds/deltacloud/config/DeltacloudRestClientModule.java
@@ -63,10 +63,6 @@
 @ConfiguresRestClient
 public class DeltacloudRestClientModule extends RestClientModule<DeltacloudClient, DeltacloudAsyncClient> {
 
-   public DeltacloudRestClientModule() {
-      super(DeltacloudClient.class, DeltacloudAsyncClient.class);
-   }
-
    @Override
    protected void bindErrorHandlers() {
       bind(HttpErrorHandler.class).annotatedWith(Redirection.class).to(DeltacloudErrorHandler.class);
diff --git a/apis/ec2/src/main/java/org/jclouds/ec2/EC2ApiMetadata.java b/apis/ec2/src/main/java/org/jclouds/ec2/EC2ApiMetadata.java
index b15f956..2964886 100644
--- a/apis/ec2/src/main/java/org/jclouds/ec2/EC2ApiMetadata.java
+++ b/apis/ec2/src/main/java/org/jclouds/ec2/EC2ApiMetadata.java
@@ -62,7 +62,7 @@
    /** The serialVersionUID */
    private static final long serialVersionUID = 4424763314988423886L;
    
-   public static final TypeToken<RestContext<EC2Client, EC2AsyncClient>> CONTEXT_TOKEN = new TypeToken<RestContext<EC2Client, EC2AsyncClient>>() {
+   public static final TypeToken<RestContext<? extends EC2Client, ? extends EC2AsyncClient>> CONTEXT_TOKEN = new TypeToken<RestContext<? extends EC2Client, ? extends EC2AsyncClient>>() {
       private static final long serialVersionUID = -5070937833892503232L;
    };
 
@@ -103,6 +103,7 @@
          .documentation(URI.create("http://docs.amazonwebservices.com/AWSEC2/latest/APIReference"))
          .version(EC2AsyncClient.VERSION)
          .defaultProperties(EC2ApiMetadata.defaultProperties())
+         .context(CONTEXT_TOKEN)
          .wrapper(EC2ComputeServiceContext.class)
          .defaultModules(ImmutableSet.<Class<? extends Module>>of(EC2RestClientModule.class, EC2ResolveImagesModule.class, EC2ComputeServiceContextModule.class));
       }
diff --git a/apis/ec2/src/main/java/org/jclouds/ec2/config/EC2RestClientModule.java b/apis/ec2/src/main/java/org/jclouds/ec2/config/EC2RestClientModule.java
index aad33fa..48047b3 100644
--- a/apis/ec2/src/main/java/org/jclouds/ec2/config/EC2RestClientModule.java
+++ b/apis/ec2/src/main/java/org/jclouds/ec2/config/EC2RestClientModule.java
@@ -49,6 +49,7 @@
 import org.jclouds.rest.ConfiguresRestClient;
 
 import com.google.common.collect.ImmutableMap;
+import com.google.common.reflect.TypeToken;
 import com.google.inject.Scopes;
 
 /**
@@ -59,26 +60,28 @@
 @ConfiguresRestClient
 public class EC2RestClientModule<S extends EC2Client, A extends EC2AsyncClient> extends
          WithZonesFormSigningRestClientModule<S, A> {
-
    public static final Map<Class<?>, Class<?>> DELEGATE_MAP = ImmutableMap.<Class<?>, Class<?>> builder()//
-            .put(AMIClient.class, AMIAsyncClient.class)//
-            .put(ElasticIPAddressClient.class, ElasticIPAddressAsyncClient.class)//
-            .put(InstanceClient.class, InstanceAsyncClient.class)//
-            .put(KeyPairClient.class, KeyPairAsyncClient.class)//
-            .put(SecurityGroupClient.class, SecurityGroupAsyncClient.class)//
-            .put(WindowsClient.class, WindowsAsyncClient.class)//
-            .put(AvailabilityZoneAndRegionClient.class, AvailabilityZoneAndRegionAsyncClient.class)//
-            .put(ElasticBlockStoreClient.class, ElasticBlockStoreAsyncClient.class)//
-            .build();
-
+   .put(AMIClient.class, AMIAsyncClient.class)//
+   .put(ElasticIPAddressClient.class, ElasticIPAddressAsyncClient.class)//
+   .put(InstanceClient.class, InstanceAsyncClient.class)//
+   .put(KeyPairClient.class, KeyPairAsyncClient.class)//
+   .put(SecurityGroupClient.class, SecurityGroupAsyncClient.class)//
+   .put(WindowsClient.class, WindowsAsyncClient.class)//
+   .put(AvailabilityZoneAndRegionClient.class, AvailabilityZoneAndRegionAsyncClient.class)//
+   .put(ElasticBlockStoreClient.class, ElasticBlockStoreAsyncClient.class)//
+   .build();
+   
    @SuppressWarnings("unchecked")
    public EC2RestClientModule() {
-      this((Class) EC2Client.class, (Class) EC2AsyncClient.class, DELEGATE_MAP);
+      super((TypeToken) TypeToken.of(EC2Client.class), (TypeToken) TypeToken.of(EC2AsyncClient.class), DELEGATE_MAP);
    }
 
-   public EC2RestClientModule(Class<S> sync, Class<A> async, Map<Class<?>, Class<?>> delegateMap) {
-      super(sync, async, delegateMap);
+   protected EC2RestClientModule(TypeToken<S> syncClientType, TypeToken<A> asyncClientType,
+            Map<Class<?>, Class<?>> sync2Async) {
+      super(syncClientType, asyncClientType, sync2Async);
    }
+   
+
 
    @Override
    protected void installLocations() {
diff --git a/apis/ec2/src/test/java/org/jclouds/ec2/services/BaseEC2AsyncClientTest.java b/apis/ec2/src/test/java/org/jclouds/ec2/services/BaseEC2AsyncClientTest.java
index 7d3f66c..2890eae 100644
--- a/apis/ec2/src/test/java/org/jclouds/ec2/services/BaseEC2AsyncClientTest.java
+++ b/apis/ec2/src/test/java/org/jclouds/ec2/services/BaseEC2AsyncClientTest.java
@@ -62,13 +62,9 @@
  */
 @Test(groups = "unit")
 public abstract class BaseEC2AsyncClientTest<T> extends BaseAsyncClientTest<T> {
-      @ConfiguresRestClient
+   @ConfiguresRestClient
    protected static class StubEC2RestClientModule extends EC2RestClientModule<EC2Client, EC2AsyncClient> {
 
-      public StubEC2RestClientModule() {
-         super(EC2Client.class, EC2AsyncClient.class, DELEGATE_MAP);
-      }
-
       @Provides
       @Singleton
       LoadingCache<RegionAndName, Image> provide(){
diff --git a/apis/elasticstack/src/main/java/org/jclouds/elasticstack/config/ElasticStackRestClientModule.java b/apis/elasticstack/src/main/java/org/jclouds/elasticstack/config/ElasticStackRestClientModule.java
index 93781f3..38b3a85 100644
--- a/apis/elasticstack/src/main/java/org/jclouds/elasticstack/config/ElasticStackRestClientModule.java
+++ b/apis/elasticstack/src/main/java/org/jclouds/elasticstack/config/ElasticStackRestClientModule.java
@@ -57,10 +57,6 @@
 @ConfiguresRestClient
 public class ElasticStackRestClientModule extends RestClientModule<ElasticStackClient, ElasticStackAsyncClient> {
 
-   public ElasticStackRestClientModule() {
-      super(ElasticStackClient.class, ElasticStackAsyncClient.class);
-   }
-
    @Override
    protected void configure() {
       super.configure();
diff --git a/apis/nova/src/main/java/org/jclouds/openstack/nova/config/NovaRestClientModule.java b/apis/nova/src/main/java/org/jclouds/openstack/nova/config/NovaRestClientModule.java
index e1c3186..d82c9f0 100644
--- a/apis/nova/src/main/java/org/jclouds/openstack/nova/config/NovaRestClientModule.java
+++ b/apis/nova/src/main/java/org/jclouds/openstack/nova/config/NovaRestClientModule.java
@@ -51,7 +51,6 @@
    private final OpenStackAuthenticationModule module;
 
    public NovaRestClientModule(OpenStackAuthenticationModule module) {
-      super(NovaClient.class, NovaAsyncClient.class);
       this.module = module;
    }
 
diff --git a/apis/openstack-nova-ec2/src/main/java/org/jclouds/openstack/nova/ec2/config/NovaEC2RestClientModule.java b/apis/openstack-nova-ec2/src/main/java/org/jclouds/openstack/nova/ec2/config/NovaEC2RestClientModule.java
index 6ea5685..5d6358b 100644
--- a/apis/openstack-nova-ec2/src/main/java/org/jclouds/openstack/nova/ec2/config/NovaEC2RestClientModule.java
+++ b/apis/openstack-nova-ec2/src/main/java/org/jclouds/openstack/nova/ec2/config/NovaEC2RestClientModule.java
@@ -41,10 +41,6 @@
 @ConfiguresRestClient
 public class NovaEC2RestClientModule extends EC2RestClientModule<EC2Client, EC2AsyncClient> {
 
-   public NovaEC2RestClientModule() {
-      super(EC2Client.class, EC2AsyncClient.class, DELEGATE_MAP);
-   }
-
    @Override
    protected void configure() {
       super.configure();
diff --git a/apis/openstack-nova/src/main/java/org/jclouds/openstack/nova/v1_1/config/NovaRestClientModule.java b/apis/openstack-nova/src/main/java/org/jclouds/openstack/nova/v1_1/config/NovaRestClientModule.java
index 32c8513..c9f603d 100644
--- a/apis/openstack-nova/src/main/java/org/jclouds/openstack/nova/v1_1/config/NovaRestClientModule.java
+++ b/apis/openstack-nova/src/main/java/org/jclouds/openstack/nova/v1_1/config/NovaRestClientModule.java
@@ -78,7 +78,7 @@
          .put(KeyPairClient.class, KeyPairAsyncClient.class).build();
 
    public NovaRestClientModule() {
-      super(NovaClient.class, NovaAsyncClient.class, DELEGATE_MAP);
+      super(DELEGATE_MAP);
    }
 
    @Override
diff --git a/apis/s3/src/main/java/org/jclouds/s3/S3ApiMetadata.java b/apis/s3/src/main/java/org/jclouds/s3/S3ApiMetadata.java
index 10f0ce4..ae09127 100644
--- a/apis/s3/src/main/java/org/jclouds/s3/S3ApiMetadata.java
+++ b/apis/s3/src/main/java/org/jclouds/s3/S3ApiMetadata.java
@@ -65,7 +65,7 @@
    /** The serialVersionUID */
    private static final long serialVersionUID = 820062881469203616L;
    
-   public static final TypeToken<RestContext<S3Client, S3AsyncClient>> CONTEXT_TOKEN = new TypeToken<RestContext<S3Client, S3AsyncClient>>() {
+   public static final TypeToken<RestContext<? extends S3Client,? extends  S3AsyncClient>> CONTEXT_TOKEN = new TypeToken<RestContext<? extends S3Client,? extends  S3AsyncClient>>() {
       private static final long serialVersionUID = -5070937833892503232L;
    };
 
@@ -107,6 +107,7 @@
          .documentation(URI.create("http://docs.amazonwebservices.com/AmazonS3/latest/API"))
          .version(S3AsyncClient.VERSION)
          .defaultProperties(S3ApiMetadata.defaultProperties())
+         .context(CONTEXT_TOKEN)
          .wrapper(TypeToken.of(S3BlobStoreContext.class))
          .defaultModules(ImmutableSet.<Class<? extends Module>>of(S3RestClientModule.class, S3BlobStoreContextModule.class));
       }
diff --git a/apis/s3/src/main/java/org/jclouds/s3/config/S3RestClientModule.java b/apis/s3/src/main/java/org/jclouds/s3/config/S3RestClientModule.java
index a1c4450..57978bf 100644
--- a/apis/s3/src/main/java/org/jclouds/s3/config/S3RestClientModule.java
+++ b/apis/s3/src/main/java/org/jclouds/s3/config/S3RestClientModule.java
@@ -46,6 +46,7 @@
 import com.google.common.base.Supplier;
 import com.google.common.base.Suppliers;
 import com.google.common.collect.Maps;
+import com.google.common.reflect.TypeToken;
 import com.google.inject.Provides;
 import com.google.inject.Scopes;
 
@@ -59,11 +60,11 @@
 
    @SuppressWarnings("unchecked")
    public S3RestClientModule() {
-      this((Class) S3Client.class, (Class) S3AsyncClient.class);
+      this((TypeToken) TypeToken.of(S3Client.class), (TypeToken) TypeToken.of(S3AsyncClient.class));
    }
 
-   public S3RestClientModule(Class<S> sync, Class<A> async) {
-      super(sync, async);
+   protected S3RestClientModule(TypeToken<S> syncClientType, TypeToken<A> asyncClientType) {
+      super(syncClientType, asyncClientType);
    }
 
    @Provides
@@ -82,10 +83,10 @@
 
    @Override
    protected void configure() {
+      super.configure();
       install(new S3ObjectModule());
       install(new S3ParserModule());
       bind(RequestAuthorizeSignature.class).in(Scopes.SINGLETON);
-      super.configure();
    }
 
    @Override
diff --git a/apis/s3/src/test/java/org/jclouds/s3/S3AsyncClientTest.java b/apis/s3/src/test/java/org/jclouds/s3/S3AsyncClientTest.java
index 5e54b10..70b8b7c 100644
--- a/apis/s3/src/test/java/org/jclouds/s3/S3AsyncClientTest.java
+++ b/apis/s3/src/test/java/org/jclouds/s3/S3AsyncClientTest.java
@@ -478,13 +478,9 @@
       checkFilters(request);
    }
 
-      @ConfiguresRestClient
+   @ConfiguresRestClient
    private static final class TestS3RestClientModule extends S3RestClientModule<S3Client, S3AsyncClient> {
 
-      public TestS3RestClientModule() {
-         super(S3Client.class, S3AsyncClient.class);
-      }
-
       @Override
       protected String provideTimeStamp(@TimeStamp Supplier<String> cache) {
          return "2009-11-08T15:54:08.897Z";
diff --git a/apis/s3/src/test/java/org/jclouds/s3/blobstore/S3BlobRequestSignerTest.java b/apis/s3/src/test/java/org/jclouds/s3/blobstore/S3BlobRequestSignerTest.java
index edc9b03..b2f8bd5 100644
--- a/apis/s3/src/test/java/org/jclouds/s3/blobstore/S3BlobRequestSignerTest.java
+++ b/apis/s3/src/test/java/org/jclouds/s3/blobstore/S3BlobRequestSignerTest.java
@@ -118,10 +118,6 @@
    @ConfiguresRestClient
    private static final class TestS3RestClientModule extends S3RestClientModule<S3Client, S3AsyncClient> {
 
-      public TestS3RestClientModule() {
-         super(S3Client.class, S3AsyncClient.class);
-      }
-
       @Override
       protected String provideTimeStamp(@TimeStamp Supplier<String> cache) {
          return "Thu, 05 Jun 2008 16:38:19 GMT";
diff --git a/apis/s3/src/test/java/org/jclouds/s3/internal/BaseS3ClientExpectTest.java b/apis/s3/src/test/java/org/jclouds/s3/internal/BaseS3ClientExpectTest.java
index f38e1e4..5fd0cbb 100644
--- a/apis/s3/src/test/java/org/jclouds/s3/internal/BaseS3ClientExpectTest.java
+++ b/apis/s3/src/test/java/org/jclouds/s3/internal/BaseS3ClientExpectTest.java
@@ -40,10 +40,6 @@
       @ConfiguresRestClient
    private static final class TestS3RestClientModule extends S3RestClientModule<S3Client, S3AsyncClient> {
 
-      public TestS3RestClientModule() {
-         super(S3Client.class, S3AsyncClient.class);
-      }
-
       @Override
       protected String provideTimeStamp(@TimeStamp Supplier<String> cache) {
          return CONSTANT_DATE;
diff --git a/apis/swift/src/main/java/org/jclouds/openstack/swift/config/BaseSwiftRestClientModule.java b/apis/swift/src/main/java/org/jclouds/openstack/swift/config/BaseSwiftRestClientModule.java
index 4dd9137..c84c046 100644
--- a/apis/swift/src/main/java/org/jclouds/openstack/swift/config/BaseSwiftRestClientModule.java
+++ b/apis/swift/src/main/java/org/jclouds/openstack/swift/config/BaseSwiftRestClientModule.java
@@ -50,13 +50,11 @@
          RestClientModule<S, A> {
    private final OpenStackAuthenticationModule module;
 
-   public BaseSwiftRestClientModule(Class<S> syncClientType, Class<A> asyncClientType) {
-      this(new OpenStackAuthenticationModule(), syncClientType, asyncClientType);
+   public BaseSwiftRestClientModule() {
+      this(new OpenStackAuthenticationModule());
    }
 
-   public BaseSwiftRestClientModule(OpenStackAuthenticationModule module, Class<S> syncClientType,
-            Class<A> asyncClientType) {
-      super(syncClientType, asyncClientType);
+   public BaseSwiftRestClientModule(OpenStackAuthenticationModule module) {
       this.module = module;
    }
 
diff --git a/apis/swift/src/main/java/org/jclouds/openstack/swift/config/SwiftRestClientModule.java b/apis/swift/src/main/java/org/jclouds/openstack/swift/config/SwiftRestClientModule.java
index a647924..ebbaab3 100644
--- a/apis/swift/src/main/java/org/jclouds/openstack/swift/config/SwiftRestClientModule.java
+++ b/apis/swift/src/main/java/org/jclouds/openstack/swift/config/SwiftRestClientModule.java
@@ -35,10 +35,6 @@
 @ConfiguresRestClient
 public class SwiftRestClientModule extends BaseSwiftRestClientModule<SwiftClient, SwiftAsyncClient> {
 
-   public SwiftRestClientModule() {
-      super(SwiftClient.class, SwiftAsyncClient.class);
-   }
-
    @Provides
    @Singleton
    CommonSwiftClient provideCommonSwiftClient(SwiftClient in) {
diff --git a/apis/swift/src/test/java/org/jclouds/openstack/swift/CommonSwiftClientTest.java b/apis/swift/src/test/java/org/jclouds/openstack/swift/CommonSwiftClientTest.java
index ced9b5f..cc74c18 100644
--- a/apis/swift/src/test/java/org/jclouds/openstack/swift/CommonSwiftClientTest.java
+++ b/apis/swift/src/test/java/org/jclouds/openstack/swift/CommonSwiftClientTest.java
@@ -67,7 +67,7 @@
    protected static class TestSwiftRestClientModule extends
             BaseSwiftRestClientModule<SwiftClient, SwiftAsyncClient> {
       private TestSwiftRestClientModule() {
-         super(new TestOpenStackAuthenticationModule(), SwiftClient.class, SwiftAsyncClient.class);
+         super(new TestOpenStackAuthenticationModule());
       }
       @Provides
       @Singleton
diff --git a/apis/vcloud/src/main/java/org/jclouds/vcloud/config/VCloudRestClientModule.java b/apis/vcloud/src/main/java/org/jclouds/vcloud/config/VCloudRestClientModule.java
index a7131c8..96d82e0 100644
--- a/apis/vcloud/src/main/java/org/jclouds/vcloud/config/VCloudRestClientModule.java
+++ b/apis/vcloud/src/main/java/org/jclouds/vcloud/config/VCloudRestClientModule.java
@@ -144,7 +144,7 @@
             .build();
 
    public VCloudRestClientModule() {
-      super(VCloudClient.class, VCloudAsyncClient.class, DELEGATE_MAP);
+      super(DELEGATE_MAP);
    }
 
    @Provides
diff --git a/apis/walrus/src/main/java/org/jclouds/walrus/config/WalrusRestClientModule.java b/apis/walrus/src/main/java/org/jclouds/walrus/config/WalrusRestClientModule.java
index 9cf9b55..b5c75f3 100644
--- a/apis/walrus/src/main/java/org/jclouds/walrus/config/WalrusRestClientModule.java
+++ b/apis/walrus/src/main/java/org/jclouds/walrus/config/WalrusRestClientModule.java
@@ -26,6 +26,7 @@
 import org.jclouds.s3.config.S3RestClientModule;
 import org.jclouds.walrus.WalrusAsyncClient;
 
+import com.google.common.reflect.TypeToken;
 import com.google.inject.Provides;
 
 /**
@@ -34,9 +35,8 @@
  */
 @ConfiguresRestClient
 public class WalrusRestClientModule extends S3RestClientModule<S3Client, WalrusAsyncClient> {
-
    public WalrusRestClientModule() {
-      super(S3Client.class, WalrusAsyncClient.class);
+      super(TypeToken.of(S3Client.class), TypeToken.of(WalrusAsyncClient.class));
    }
 
    @Provides
diff --git a/common/aws/src/main/java/org/jclouds/aws/config/AWSRestClientModule.java b/common/aws/src/main/java/org/jclouds/aws/config/AWSRestClientModule.java
index 62772ab..7915b4f 100644
--- a/common/aws/src/main/java/org/jclouds/aws/config/AWSRestClientModule.java
+++ b/common/aws/src/main/java/org/jclouds/aws/config/AWSRestClientModule.java
@@ -31,22 +31,32 @@
 import org.jclouds.rest.ConfiguresRestClient;
 import org.jclouds.rest.config.RestClientModule;
 
+import com.google.common.reflect.TypeToken;
+
 
 /**
  * 
  * @author Adrian Cole
  */
 @ConfiguresRestClient
-public class AWSRestClientModule<S, A> extends RestClientModule<S, A> {
+public abstract class AWSRestClientModule<S, A> extends RestClientModule<S, A> {
 
-   public AWSRestClientModule(Class<S> syncClientType, Class<A> asyncClientType, Map<Class<?>, Class<?>> delegates) {
-      super(syncClientType, asyncClientType, delegates);
+   protected AWSRestClientModule(Map<Class<?>, Class<?>> delegates) {
+      super(delegates);
    }
 
-   public AWSRestClientModule(Class<S> syncClientType, Class<A> asyncClientType) {
+   protected AWSRestClientModule() {
+   }
+
+   protected AWSRestClientModule(TypeToken<S> syncClientType, TypeToken<A> asyncClientType) {
       super(syncClientType, asyncClientType);
    }
 
+   protected AWSRestClientModule(TypeToken<S> syncClientType, TypeToken<A> asyncClientType,
+            Map<Class<?>, Class<?>> sync2Async) {
+      super(syncClientType, asyncClientType, sync2Async);
+   }
+   
    @Override
    protected void bindErrorHandlers() {
       bind(HttpErrorHandler.class).annotatedWith(Redirection.class).to(ParseAWSErrorFromXmlContent.class);
diff --git a/common/aws/src/main/java/org/jclouds/aws/config/FormSigningRestClientModule.java b/common/aws/src/main/java/org/jclouds/aws/config/FormSigningRestClientModule.java
index cda15e2..12b90f3 100644
--- a/common/aws/src/main/java/org/jclouds/aws/config/FormSigningRestClientModule.java
+++ b/common/aws/src/main/java/org/jclouds/aws/config/FormSigningRestClientModule.java
@@ -31,6 +31,7 @@
 import org.jclouds.rest.ConfiguresRestClient;
 import org.jclouds.rest.RequestSigner;
 
+import com.google.common.reflect.TypeToken;
 import com.google.inject.Provides;
 
 /**
@@ -38,17 +39,24 @@
  * @author Adrian Cole
  */
 @ConfiguresRestClient
-public class FormSigningRestClientModule<S, A> extends AWSRestClientModule<S, A> {
+public abstract class FormSigningRestClientModule<S, A> extends AWSRestClientModule<S, A> {
 
-   public FormSigningRestClientModule(Class<S> syncClientType, Class<A> asyncClientType,
-         Map<Class<?>, Class<?>> delegates) {
-      super(syncClientType, asyncClientType, delegates);
+   protected FormSigningRestClientModule(Map<Class<?>, Class<?>> delegates) {
+      super(delegates);
    }
 
-   public FormSigningRestClientModule(Class<S> syncClientType, Class<A> asyncClientType) {
+   protected FormSigningRestClientModule() {
+   }
+
+   protected FormSigningRestClientModule(TypeToken<S> syncClientType, TypeToken<A> asyncClientType) {
       super(syncClientType, asyncClientType);
    }
 
+   protected FormSigningRestClientModule(TypeToken<S> syncClientType, TypeToken<A> asyncClientType,
+            Map<Class<?>, Class<?>> sync2Async) {
+      super(syncClientType, asyncClientType, sync2Async);
+   }
+   
    @Provides
    @TimeStamp
    protected String provideTimeStamp(final DateService dateService,
diff --git a/common/aws/src/main/java/org/jclouds/aws/config/WithZonesFormSigningRestClientModule.java b/common/aws/src/main/java/org/jclouds/aws/config/WithZonesFormSigningRestClientModule.java
index de77334..e41fd7a 100644
--- a/common/aws/src/main/java/org/jclouds/aws/config/WithZonesFormSigningRestClientModule.java
+++ b/common/aws/src/main/java/org/jclouds/aws/config/WithZonesFormSigningRestClientModule.java
@@ -23,21 +23,29 @@
 
 import org.jclouds.rest.ConfiguresRestClient;
 
+import com.google.common.reflect.TypeToken;
+
 
 /**
  * 
  * @author Adrian Cole
  */
 @ConfiguresRestClient
-public class WithZonesFormSigningRestClientModule<S, A> extends FormSigningRestClientModule<S, A> {
-
-   public WithZonesFormSigningRestClientModule(Class<S> syncClientType, Class<A> asyncClientType,
-            Map<Class<?>, Class<?>> delegates) {
-      super(syncClientType, asyncClientType, delegates);
+public abstract class WithZonesFormSigningRestClientModule<S, A> extends FormSigningRestClientModule<S, A> {
+   protected WithZonesFormSigningRestClientModule(Map<Class<?>, Class<?>> delegates) {
+      super(delegates);
    }
 
-   public WithZonesFormSigningRestClientModule(Class<S> syncClientType, Class<A> asyncClientType) {
+   protected WithZonesFormSigningRestClientModule() {
+   }
+
+   protected WithZonesFormSigningRestClientModule(TypeToken<S> syncClientType, TypeToken<A> asyncClientType) {
       super(syncClientType, asyncClientType);
    }
 
+   protected WithZonesFormSigningRestClientModule(TypeToken<S> syncClientType, TypeToken<A> asyncClientType,
+            Map<Class<?>, Class<?>> sync2Async) {
+      super(syncClientType, asyncClientType, sync2Async);
+   }
+
 }
\ No newline at end of file
diff --git a/common/azure/src/main/java/org/jclouds/azure/storage/config/AzureStorageRestClientModule.java b/common/azure/src/main/java/org/jclouds/azure/storage/config/AzureStorageRestClientModule.java
index 2a8ed8c..86f871f 100644
--- a/common/azure/src/main/java/org/jclouds/azure/storage/config/AzureStorageRestClientModule.java
+++ b/common/azure/src/main/java/org/jclouds/azure/storage/config/AzureStorageRestClientModule.java
@@ -38,6 +38,7 @@
 
 import com.google.common.base.Supplier;
 import com.google.common.base.Suppliers;
+import com.google.common.reflect.TypeToken;
 import com.google.inject.Provides;
 
 /**
@@ -47,8 +48,11 @@
  */
 @ConfiguresRestClient
 public class AzureStorageRestClientModule<S, A> extends RestClientModule<S, A> {
+   protected AzureStorageRestClientModule() {
 
-   public AzureStorageRestClientModule(Class<S> syncClientType, Class<A> asyncClientType) {
+   }
+
+   public AzureStorageRestClientModule(TypeToken<S> syncClientType, TypeToken<A> asyncClientType) {
       super(syncClientType, asyncClientType);
    }
 
diff --git a/common/azure/src/test/java/org/jclouds/azure/storage/filters/SharedKeyLiteAuthenticationTest.java b/common/azure/src/test/java/org/jclouds/azure/storage/filters/SharedKeyLiteAuthenticationTest.java
index 4f9c8b6..74898ea 100644
--- a/common/azure/src/test/java/org/jclouds/azure/storage/filters/SharedKeyLiteAuthenticationTest.java
+++ b/common/azure/src/test/java/org/jclouds/azure/storage/filters/SharedKeyLiteAuthenticationTest.java
@@ -39,6 +39,7 @@
 import org.testng.annotations.Test;
 
 import com.google.common.collect.ImmutableSet;
+import com.google.common.reflect.TypeToken;
 import com.google.inject.Injector;
 import com.google.inject.Module;
 
@@ -140,8 +141,9 @@
             .credentials(ACCOUNT, "credential")
             .modules(
                   ImmutableSet.<Module> of(new MockModule(), new NullLoggingModule(),
-                        new AzureStorageRestClientModule<IntegrationTestClient, IntegrationTestAsyncClient>(
-                              IntegrationTestClient.class, IntegrationTestAsyncClient.class))).buildInjector();
+                        new AzureStorageRestClientModule<IntegrationTestClient, IntegrationTestAsyncClient>(TypeToken
+                                 .of(IntegrationTestClient.class), TypeToken.of(IntegrationTestAsyncClient.class))))
+               .buildInjector();
       filter = injector.getInstance(SharedKeyLiteAuthentication.class);
    }
 }
\ No newline at end of file
diff --git a/common/trmk/src/main/java/org/jclouds/trmk/vcloud_0_8/config/TerremarkVCloudRestClientModule.java b/common/trmk/src/main/java/org/jclouds/trmk/vcloud_0_8/config/TerremarkVCloudRestClientModule.java
index 3936909..37de990 100644
--- a/common/trmk/src/main/java/org/jclouds/trmk/vcloud_0_8/config/TerremarkVCloudRestClientModule.java
+++ b/common/trmk/src/main/java/org/jclouds/trmk/vcloud_0_8/config/TerremarkVCloudRestClientModule.java
@@ -96,13 +96,11 @@
 
 public class TerremarkVCloudRestClientModule<S, A> extends RestClientModule<S, A> {
 
-   public TerremarkVCloudRestClientModule(Class<S> syncClientType, Class<A> asyncClientType) {
-      super(syncClientType, asyncClientType);
+   public TerremarkVCloudRestClientModule() {
    }
 
-   public TerremarkVCloudRestClientModule(Class<S> syncClientType, Class<A> asyncClientType,
-         Map<Class<?>, Class<?>> delegateMap) {
-      super(syncClientType, asyncClientType, delegateMap);
+   public TerremarkVCloudRestClientModule(Map<Class<?>, Class<?>> delegateMap) {
+      super(delegateMap);
    }
 
    @Override
diff --git a/compute/src/test/resources/initscript_with_java.sh b/compute/src/test/resources/initscript_with_java.sh
index e1f991b..d7bbeed 100644
--- a/compute/src/test/resources/initscript_with_java.sh
+++ b/compute/src/test/resources/initscript_with_java.sh
@@ -84,13 +84,13 @@
    exit 1
 }
 alias apt-get-install="apt-get install -f -y -qq --force-yes"
-alias apt-get-upgrade="(apt-get update -qq&&apt-get upgrade -y -qq)"
+alias apt-get-update="apt-get update -qq"
 
 function ensure_cmd_or_install_package_apt(){
   local cmd=$1
   local pkg=$2
   
-  hash $cmd 2>/dev/null || apt-get-install $pkg || ( apt-get-upgrade && apt-get-install $pkg )
+  hash $cmd 2>/dev/null || apt-get-install $pkg || ( apt-get-update && apt-get-install $pkg )
 }
 
 function ensure_cmd_or_install_package_yum(){
@@ -155,7 +155,7 @@
 function installOpenJDK() {
   if hash apt-get 2>/dev/null; then
     export JAVA_HOME=${JAVA_HOME:-/usr/lib/jvm/java-6-openjdk}
-    test -d $JAVA_HOME || apt-get-install openjdk-6-jdk
+    test -d $JAVA_HOME || apt-get-install openjdk-6-jdk || ( apt-get-update && apt-get-install openjdk-6-jdk )
   elif hash yum 2>/dev/null; then
     export pkg=java-1.6.0-openjdk-devel
     yum --nogpgcheck -y install $pkg &&
diff --git a/compute/src/test/resources/initscript_with_jboss.sh b/compute/src/test/resources/initscript_with_jboss.sh
index e700985..edec50e 100644
--- a/compute/src/test/resources/initscript_with_jboss.sh
+++ b/compute/src/test/resources/initscript_with_jboss.sh
@@ -84,13 +84,13 @@
    exit 1
 }
 alias apt-get-install="apt-get install -f -y -qq --force-yes"
-alias apt-get-upgrade="(apt-get update -qq&&apt-get upgrade -y -qq)"
+alias apt-get-update="apt-get update -qq"
 
 function ensure_cmd_or_install_package_apt(){
   local cmd=$1
   local pkg=$2
   
-  hash $cmd 2>/dev/null || apt-get-install $pkg || ( apt-get-upgrade && apt-get-install $pkg )
+  hash $cmd 2>/dev/null || apt-get-install $pkg || ( apt-get-update && apt-get-install $pkg )
 }
 
 function ensure_cmd_or_install_package_yum(){
@@ -155,7 +155,7 @@
 function installOpenJDK() {
   if hash apt-get 2>/dev/null; then
     export JAVA_HOME=${JAVA_HOME:-/usr/lib/jvm/java-6-openjdk}
-    test -d $JAVA_HOME || apt-get-install openjdk-6-jdk
+    test -d $JAVA_HOME || apt-get-install openjdk-6-jdk || ( apt-get-update && apt-get-install openjdk-6-jdk )
   elif hash yum 2>/dev/null; then
     export pkg=java-1.6.0-openjdk-devel
     yum --nogpgcheck -y install $pkg &&
diff --git a/compute/src/test/resources/runscript.sh b/compute/src/test/resources/runscript.sh
index 082c625..1c45816 100644
--- a/compute/src/test/resources/runscript.sh
+++ b/compute/src/test/resources/runscript.sh
@@ -84,13 +84,13 @@
    exit 1
 }
 alias apt-get-install="apt-get install -f -y -qq --force-yes"
-alias apt-get-upgrade="(apt-get update -qq&&apt-get upgrade -y -qq)"
+alias apt-get-update="apt-get update -qq"
 
 function ensure_cmd_or_install_package_apt(){
   local cmd=$1
   local pkg=$2
   
-  hash $cmd 2>/dev/null || apt-get-install $pkg || ( apt-get-upgrade && apt-get-install $pkg )
+  hash $cmd 2>/dev/null || apt-get-install $pkg || ( apt-get-update && apt-get-install $pkg )
 }
 
 function ensure_cmd_or_install_package_yum(){
@@ -155,7 +155,7 @@
 function installOpenJDK() {
   if hash apt-get 2>/dev/null; then
     export JAVA_HOME=${JAVA_HOME:-/usr/lib/jvm/java-6-openjdk}
-    test -d $JAVA_HOME || apt-get-install openjdk-6-jdk
+    test -d $JAVA_HOME || apt-get-install openjdk-6-jdk || ( apt-get-update && apt-get-install openjdk-6-jdk )
   elif hash yum 2>/dev/null; then
     export pkg=java-1.6.0-openjdk-devel
     yum --nogpgcheck -y install $pkg &&
diff --git a/core/src/main/java/org/jclouds/ContextBuilder.java b/core/src/main/java/org/jclouds/ContextBuilder.java
index b3ed279..b57dd40 100644
--- a/core/src/main/java/org/jclouds/ContextBuilder.java
+++ b/core/src/main/java/org/jclouds/ContextBuilder.java
@@ -68,6 +68,8 @@
 import org.jclouds.rest.config.CredentialStoreModule;
 import org.jclouds.rest.config.RestClientModule;
 import org.jclouds.rest.config.RestModule;
+import org.jclouds.rest.internal.BaseRestApiMetadata;
+import org.jclouds.rest.internal.RestContextImpl;
 import org.nnsoft.guice.rocoto.Rocoto;
 import org.nnsoft.guice.rocoto.configuration.ConfigurationModule;
 
@@ -93,6 +95,7 @@
 import com.google.inject.Provides;
 import com.google.inject.Stage;
 import com.google.inject.TypeLiteral;
+import com.google.inject.util.Types;
 
 /**
  * Creates {@link RestContext} or {@link Injector} instances based on the most commonly requested
@@ -109,6 +112,37 @@
  */
 public final class ContextBuilder {
 
+   static class ResolveRestContextModule extends AbstractModule {
+      private final RestApiMetadata restApiMetadata;
+
+      ResolveRestContextModule(RestApiMetadata restApiMetadata) {
+         this.restApiMetadata = restApiMetadata;
+      }
+
+      @SuppressWarnings("unchecked")
+      @Override
+      protected void configure() {
+         if (restApiMetadata.getContext().getRawType().equals(RestContext.class)) {
+            TypeToken concreteType = BaseRestApiMetadata.contextToken(TypeToken.of(restApiMetadata.getApi()), TypeToken
+                     .of(restApiMetadata.getAsyncApi()));
+            // bind explicit type
+            bind(TypeLiteral.get(concreteType.getType())).to(
+                     (TypeLiteral) TypeLiteral.get(Types.newParameterizedType(RestContextImpl.class, restApiMetadata
+                              .getApi(), restApiMetadata.getAsyncApi())));
+            // bind potentially wildcard type
+            if (!concreteType.equals(restApiMetadata.getContext())) {
+               bind(TypeLiteral.get(restApiMetadata.getContext().getType())).to(
+                        (TypeLiteral) TypeLiteral.get(Types.newParameterizedType(RestContextImpl.class, restApiMetadata
+                                 .getApi(), restApiMetadata.getAsyncApi())));
+            }
+            // bind w/o types
+            bind(TypeLiteral.get(RestContext.class)).to(
+                     (TypeLiteral) TypeLiteral.get(Types.newParameterizedType(RestContextImpl.class, restApiMetadata
+                              .getApi(), restApiMetadata.getAsyncApi())));
+         }
+      }
+   }
+
    private final class BindDefaultContextQualifiedToProvider extends AbstractModule {
       @Override
       protected void configure() {
@@ -301,6 +335,7 @@
       Iterable<Module> defaultModules = ifSpecifiedByUserDontIncludeDefaultRestModule(restModuleSpecifiedByUser);
       Iterables.addAll(modules, defaultModules);
       addClientModuleIfNotPresent(modules);
+      addRestContextBinding();
       addLoggingModuleIfNotPresent(modules);
       addHttpModuleIfNeededAndNotPresent(modules);
       addExecutorServiceIfNotPresent(modules);
@@ -314,6 +349,12 @@
       return returnVal;
    }
 
+   void addRestContextBinding() {
+      if (apiMetadata instanceof RestApiMetadata) {
+         modules.add(new ResolveRestContextModule(RestApiMetadata.class.cast(apiMetadata)));
+      }
+   }
+
    private Iterable<Module> ifSpecifiedByUserDontIncludeDefaultRestModule(boolean restModuleSpecifiedByUser) {
       Iterable<Module> defaultModules = Iterables.transform(apiMetadata.getDefaultModules(),
                new Function<Class<? extends Module>, Module>() {
@@ -384,13 +425,13 @@
    protected void addClientModule(List<Module> modules) {
       // TODO: move this up
       if (apiMetadata instanceof RestApiMetadata) {
-         final RestApiMetadata rest = RestApiMetadata.class.cast(apiMetadata);
-         modules.add(new RestClientModule(rest.getApi(), rest.getAsyncApi()));
+         RestApiMetadata rest = RestApiMetadata.class.cast(apiMetadata);
+         modules.add(new RestClientModule(TypeToken.of(rest.getApi()), TypeToken.of(rest.getAsyncApi())));
       } else {
          modules.add(new RestModule());
       }
    }
-
+   
    @VisibleForTesting
    protected void addEventBusIfNotPresent(List<Module> modules) {
       if (!any(modules, new Predicate<Module>() {
diff --git a/core/src/main/java/org/jclouds/rest/config/RestClientModule.java b/core/src/main/java/org/jclouds/rest/config/RestClientModule.java
index cf0cc4b..a2af4eb 100644
--- a/core/src/main/java/org/jclouds/rest/config/RestClientModule.java
+++ b/core/src/main/java/org/jclouds/rest/config/RestClientModule.java
@@ -21,13 +21,10 @@
 import java.util.Map;
 
 import org.jclouds.rest.ConfiguresRestClient;
-import org.jclouds.rest.RestContext;
-import org.jclouds.rest.internal.RestContextImpl;
+import org.jclouds.util.TypeTokens2;
 
 import com.google.common.collect.ImmutableMap;
-import com.google.inject.Scopes;
-import com.google.inject.TypeLiteral;
-import com.google.inject.util.Types;
+import com.google.common.reflect.TypeToken;
 
 /**
  * 
@@ -35,50 +32,65 @@
  */
 @ConfiguresRestClient
 public class RestClientModule<S, A> extends RestModule {
-   protected final Class<A> asyncClientType;
-   protected final Class<S> syncClientType;
-   
-   public RestClientModule(Class<S> syncClientType, Class<A> asyncClientType,
-         Map<Class<?>, Class<?>> sync2Async) {
+   protected final TypeToken<S> syncClientType;
+   protected final TypeToken<A> asyncClientType;
+
+   /**
+    * Note that this ctor requires that you instantiate w/resolved generic params. For example, via
+    * a subclass of a bound type, or natural instantiation w/resolved type params.
+    */
+   protected RestClientModule(Map<Class<?>, Class<?>> sync2Async) {
       super(sync2Async);
-      this.asyncClientType = asyncClientType;
-      this.syncClientType = syncClientType;
+      this.syncClientType = TypeTokens2.checkBound(new TypeToken<S>(getClass()) {
+         private static final long serialVersionUID = 7519656925453755752L;
+      });
+      this.asyncClientType = TypeTokens2.checkBound(new TypeToken<A>(getClass()) {
+         private static final long serialVersionUID = -4420015967358511548L;
+      });
    }
 
-   public RestClientModule(Class<S> syncClientType, Class<A> asyncClientType) {
-      this(syncClientType, asyncClientType, ImmutableMap
-            .<Class<?>, Class<?>> of(syncClientType, asyncClientType));
+   /**
+    * @see #RestClientModule(Map)
+    */
+   protected RestClientModule() {
+      this(ImmutableMap.<Class<?>, Class<?>> of());
    }
-   
-   @SuppressWarnings( { "unchecked", "rawtypes" })
+
+   /**
+    * @see #RestClientModule(TypeToken, TypeToken, Map)
+    */
+   public RestClientModule(TypeToken<S> syncClientType, TypeToken<A> asyncClientType) {
+      this(syncClientType, asyncClientType, ImmutableMap.<Class<?>, Class<?>> of());
+   }
+
+   /**
+    * only necessary when type params are not resolvable at runtime.
+    */
+   public RestClientModule(TypeToken<S> syncClientType, TypeToken<A> asyncClientType, Map<Class<?>, Class<?>> sync2Async) {
+      super(sync2Async);
+      this.syncClientType = TypeTokens2.checkBound(syncClientType);
+      this.asyncClientType = TypeTokens2.checkBound(asyncClientType);
+   }
+
    @Override
    protected void configure() {
       super.configure();
-      // Ensures the restcontext can be looked up without generic types.
-      bind(new TypeLiteral<RestContext>() {
-      }).to(
-            (TypeLiteral) TypeLiteral.get(Types.newParameterizedType(
-                  RestContextImpl.class, syncClientType, asyncClientType))).in(
-            Scopes.SINGLETON);
-      bind(TypeLiteral.get(Types.newParameterizedType(RestContext.class, syncClientType, asyncClientType))).to(
-               (TypeLiteral) TypeLiteral.get(Types.newParameterizedType(RestContextImpl.class, syncClientType,
-                        asyncClientType))).in(Scopes.SINGLETON);
       bindAsyncClient();
       bindClient();
       bindErrorHandlers();
       bindRetryHandlers();
    }
 
+
+
    /**
     * overrides this to change the default retry handlers for the http engine
     * 
     * ex.
     * 
     * <pre>
-    * bind(HttpRetryHandler.class).annotatedWith(Redirection.class).to(
-    *       AWSRedirectionRetryHandler.class);
-    * bind(HttpRetryHandler.class).annotatedWith(ClientError.class).to(
-    *       AWSClientErrorRetryHandler.class);
+    * bind(HttpRetryHandler.class).annotatedWith(Redirection.class).to(AWSRedirectionRetryHandler.class);
+    * bind(HttpRetryHandler.class).annotatedWith(ClientError.class).to(AWSClientErrorRetryHandler.class);
     * </pre>
     * 
     */
@@ -91,12 +103,9 @@
     * ex.
     * 
     * <pre>
-    * bind(HttpErrorHandler.class).annotatedWith(Redirection.class).to(
-    *       ParseAWSErrorFromXmlContent.class);
-    * bind(HttpErrorHandler.class).annotatedWith(ClientError.class).to(
-    *       ParseAWSErrorFromXmlContent.class);
-    * bind(HttpErrorHandler.class).annotatedWith(ServerError.class).to(
-    *       ParseAWSErrorFromXmlContent.class);
+    * bind(HttpErrorHandler.class).annotatedWith(Redirection.class).to(ParseAWSErrorFromXmlContent.class);
+    * bind(HttpErrorHandler.class).annotatedWith(ClientError.class).to(ParseAWSErrorFromXmlContent.class);
+    * bind(HttpErrorHandler.class).annotatedWith(ServerError.class).to(ParseAWSErrorFromXmlContent.class);
     * </pre>
     * 
     * 
@@ -105,12 +114,11 @@
    }
 
    protected void bindAsyncClient() {
-      BinderUtils.bindAsyncClient(binder(), asyncClientType);
+      BinderUtils.bindAsyncClient(binder(), asyncClientType.getRawType());
    }
 
    protected void bindClient() {
-      BinderUtils.bindClient(binder(), syncClientType, asyncClientType,
-            sync2Async);
+      BinderUtils.bindClient(binder(), syncClientType.getRawType(), asyncClientType.getRawType(), sync2Async);
    }
 
 }
\ No newline at end of file
diff --git a/core/src/main/java/org/jclouds/rest/internal/BaseRestApiMetadata.java b/core/src/main/java/org/jclouds/rest/internal/BaseRestApiMetadata.java
index 2f2478a..1aa9075 100644
--- a/core/src/main/java/org/jclouds/rest/internal/BaseRestApiMetadata.java
+++ b/core/src/main/java/org/jclouds/rest/internal/BaseRestApiMetadata.java
@@ -67,6 +67,14 @@
       return props;
    }
    
+   public static <S, A> TypeToken<RestContext<S, A>> contextToken(TypeToken<S> apiToken, TypeToken<A> asyncApiToken) {
+      return new TypeToken<RestContext<S, A>>() {
+         private static final long serialVersionUID = 1L;
+      }.where(new TypeParameter<S>() {
+      }, apiToken).where(new TypeParameter<A>() {
+      }, asyncApiToken);
+   }
+   
    public static class Builder extends BaseApiMetadata.Builder implements RestApiMetadata.Builder {
       protected Class<?> api;
       protected Class<?> asyncApi;
@@ -80,14 +88,6 @@
          .context(contextToken(TypeToken.of(api), TypeToken.of(asyncApi)))
          .defaultProperties(BaseRestApiMetadata.defaultProperties());
       }
-      
-      protected <S, A> TypeToken<RestContext<S, A>> contextToken(TypeToken<S> apiToken, TypeToken<A> asyncApiToken) {
-         return new TypeToken<RestContext<S, A>>() {
-            private static final long serialVersionUID = 1L;
-         }.where(new TypeParameter<S>() {
-         }, apiToken).where(new TypeParameter<A>() {
-         }, asyncApiToken);
-      }
 
       /**
        * {@inheritDoc}
diff --git a/core/src/main/java/org/jclouds/util/TypeTokens2.java b/core/src/main/java/org/jclouds/util/TypeTokens2.java
new file mode 100644
index 0000000..05dad33
--- /dev/null
+++ b/core/src/main/java/org/jclouds/util/TypeTokens2.java
@@ -0,0 +1,40 @@
+/**
+ * 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.util;
+
+import static com.google.common.base.Preconditions.checkState;
+
+import java.lang.reflect.TypeVariable;
+
+import com.google.common.reflect.TypeToken;
+
+/**
+ * 
+ * @author Adrian Cole
+ */
+public class TypeTokens2 {
+   /**
+    * @throws IllegalStateException if the type is an instanceof {@link TypeVariable}
+    */
+   public static <T> TypeToken<T> checkBound(TypeToken<T> type) throws IllegalStateException {
+      checkState(!(type.getType() instanceof TypeVariable<?>),
+               "unbound type variable: %s, use ctor that explicitly assigns this", type);
+      return type;
+   }
+}
diff --git a/core/src/test/java/org/jclouds/http/handlers/BackoffLimitedRetryHandlerTest.java b/core/src/test/java/org/jclouds/http/handlers/BackoffLimitedRetryHandlerTest.java
index 457a812..2c9ac3d 100644
--- a/core/src/test/java/org/jclouds/http/handlers/BackoffLimitedRetryHandlerTest.java
+++ b/core/src/test/java/org/jclouds/http/handlers/BackoffLimitedRetryHandlerTest.java
@@ -54,7 +54,7 @@
 import com.google.inject.TypeLiteral;
 import com.sun.jersey.api.uri.UriBuilderImpl;
 
-@Test(groups = "unit")
+@Test(groups = "unit", testName = "BackoffLimitedRetryHandlerTest")
 public class BackoffLimitedRetryHandlerTest {
 
    BackoffLimitedRetryHandler handler = new BackoffLimitedRetryHandler();
diff --git a/core/src/test/java/org/jclouds/rest/internal/RestAnnotationProcessorTest.java b/core/src/test/java/org/jclouds/rest/internal/RestAnnotationProcessorTest.java
index 1a97fda..bf21b33 100644
--- a/core/src/test/java/org/jclouds/rest/internal/RestAnnotationProcessorTest.java
+++ b/core/src/test/java/org/jclouds/rest/internal/RestAnnotationProcessorTest.java
@@ -176,7 +176,7 @@
    @ConfiguresRestClient
    protected static class CallerModule extends RestClientModule<Caller, AsyncCaller> {
       CallerModule() {
-         super(Caller.class, AsyncCaller.class, ImmutableMap.<Class<?>, Class<?>> of(Callee.class, AsyncCallee.class, Callee2.class, AsyncCallee2.class));
+         super(ImmutableMap.<Class<?>, Class<?>> of(Callee.class, AsyncCallee.class, Callee2.class, AsyncCallee2.class));
       }
 
       @Override
diff --git a/labs/elb/src/main/java/org/jclouds/elb/config/ELBRestClientModule.java b/labs/elb/src/main/java/org/jclouds/elb/config/ELBRestClientModule.java
index 8319a69..cf67ae6 100644
--- a/labs/elb/src/main/java/org/jclouds/elb/config/ELBRestClientModule.java
+++ b/labs/elb/src/main/java/org/jclouds/elb/config/ELBRestClientModule.java
@@ -30,8 +30,5 @@
  */
 @ConfiguresRestClient
 public class ELBRestClientModule extends FormSigningRestClientModule<ELBClient, ELBAsyncClient> {
-   public ELBRestClientModule() {
-      super(ELBClient.class, ELBAsyncClient.class);
-   }
 
 }
diff --git a/labs/glesys/src/main/java/org/jclouds/glesys/config/GleSYSRestClientModule.java b/labs/glesys/src/main/java/org/jclouds/glesys/config/GleSYSRestClientModule.java
index a069b43..aafb715 100644
--- a/labs/glesys/src/main/java/org/jclouds/glesys/config/GleSYSRestClientModule.java
+++ b/labs/glesys/src/main/java/org/jclouds/glesys/config/GleSYSRestClientModule.java
@@ -64,7 +64,7 @@
          .build();
 
    public GleSYSRestClientModule() {
-      super(GleSYSClient.class, GleSYSAsyncClient.class, DELEGATE_MAP);
+      super(DELEGATE_MAP);
    }
 
    @Override
diff --git a/labs/opsource-servers/src/main/java/org/jclouds/opsource/servers/config/OpSourceServersRestClientModule.java b/labs/opsource-servers/src/main/java/org/jclouds/opsource/servers/config/OpSourceServersRestClientModule.java
index 99cd087..1c7aa1a 100644
--- a/labs/opsource-servers/src/main/java/org/jclouds/opsource/servers/config/OpSourceServersRestClientModule.java
+++ b/labs/opsource-servers/src/main/java/org/jclouds/opsource/servers/config/OpSourceServersRestClientModule.java
@@ -56,7 +56,7 @@
          .build();
 
    public OpSourceServersRestClientModule() {
-      super(OpSourceServersClient.class, OpSourceServersAsyncClient.class, DELEGATE_MAP);
+      super(DELEGATE_MAP);
    }
 
    @Override
diff --git a/labs/savvis-symphonyvpdc/src/main/java/org/jclouds/savvis/vpdc/config/VPDCRestClientModule.java b/labs/savvis-symphonyvpdc/src/main/java/org/jclouds/savvis/vpdc/config/VPDCRestClientModule.java
index 98bd9e0..ddae92f 100644
--- a/labs/savvis-symphonyvpdc/src/main/java/org/jclouds/savvis/vpdc/config/VPDCRestClientModule.java
+++ b/labs/savvis-symphonyvpdc/src/main/java/org/jclouds/savvis/vpdc/config/VPDCRestClientModule.java
@@ -147,7 +147,7 @@
             .build();
 
    public VPDCRestClientModule() {
-      super(VPDCClient.class, VPDCAsyncClient.class, DELEGATE_MAP);
+      super(DELEGATE_MAP);
    }
 
    @Singleton
diff --git a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/config/VCloudDirectorRestClientModule.java b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/config/VCloudDirectorRestClientModule.java
index f1826f9..c6c4df7 100644
--- a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/config/VCloudDirectorRestClientModule.java
+++ b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/config/VCloudDirectorRestClientModule.java
@@ -152,7 +152,7 @@
    }
    
    public VCloudDirectorRestClientModule() {
-      super(VCloudDirectorClient.class, VCloudDirectorAsyncClient.class, ADMIN_DELEGATE_MAP);
+      super(ADMIN_DELEGATE_MAP);
    }
    
    @Override
diff --git a/labs/virtualbox/src/test/resources/test_guest_additions_installer_init.sh b/labs/virtualbox/src/test/resources/test_guest_additions_installer_init.sh
index 47c37db..cccddd0 100644
--- a/labs/virtualbox/src/test/resources/test_guest_additions_installer_init.sh
+++ b/labs/virtualbox/src/test/resources/test_guest_additions_installer_init.sh
@@ -84,13 +84,13 @@
    exit 1
 }
 alias apt-get-install="apt-get install -f -y -qq --force-yes"
-alias apt-get-upgrade="(apt-get update -qq&&apt-get upgrade -y -qq)"
+alias apt-get-update="apt-get update -qq"
 
 function ensure_cmd_or_install_package_apt(){
   local cmd=$1
   local pkg=$2
   
-  hash $cmd 2>/dev/null || apt-get-install $pkg || ( apt-get-upgrade && apt-get-install $pkg )
+  hash $cmd 2>/dev/null || apt-get-install $pkg || ( apt-get-update && apt-get-install $pkg )
 }
 
 function ensure_cmd_or_install_package_yum(){
diff --git a/providers/aws-ec2/src/main/java/org/jclouds/aws/ec2/AWSEC2ApiMetadata.java b/providers/aws-ec2/src/main/java/org/jclouds/aws/ec2/AWSEC2ApiMetadata.java
index e89fe71..8431b17 100644
--- a/providers/aws-ec2/src/main/java/org/jclouds/aws/ec2/AWSEC2ApiMetadata.java
+++ b/providers/aws-ec2/src/main/java/org/jclouds/aws/ec2/AWSEC2ApiMetadata.java
@@ -82,6 +82,7 @@
          .version(AWSEC2AsyncClient.VERSION)
          .name("Amazon-specific EC2 API")
          .wrapper(AWSEC2ComputeServiceContext.class)
+         .context(CONTEXT_TOKEN)
          .defaultProperties(AWSEC2ApiMetadata.defaultProperties())
          .defaultModules(ImmutableSet.<Class<? extends Module>>of(AWSEC2RestClientModule.class, EC2ResolveImagesModule.class, AWSEC2ComputeServiceContextModule.class));
       }
diff --git a/providers/aws-ec2/src/main/java/org/jclouds/aws/ec2/config/AWSEC2RestClientModule.java b/providers/aws-ec2/src/main/java/org/jclouds/aws/ec2/config/AWSEC2RestClientModule.java
index 90072be..119e0f1 100644
--- a/providers/aws-ec2/src/main/java/org/jclouds/aws/ec2/config/AWSEC2RestClientModule.java
+++ b/providers/aws-ec2/src/main/java/org/jclouds/aws/ec2/config/AWSEC2RestClientModule.java
@@ -64,6 +64,7 @@
 import org.jclouds.rest.ConfiguresRestClient;
 
 import com.google.common.collect.ImmutableMap;
+import com.google.common.reflect.TypeToken;
 import com.google.inject.Provides;
 
 /**
@@ -90,7 +91,7 @@
          .build();
 
    public AWSEC2RestClientModule() {
-      super(AWSEC2Client.class, AWSEC2AsyncClient.class, DELEGATE_MAP);
+      super(TypeToken.of(AWSEC2Client.class), TypeToken.of(AWSEC2AsyncClient.class), DELEGATE_MAP);
    }
 
    @Singleton
diff --git a/providers/aws-ec2/src/test/java/org/jclouds/aws/ec2/compute/AWSEC2TemplateBuilderLiveTest.java b/providers/aws-ec2/src/test/java/org/jclouds/aws/ec2/compute/AWSEC2TemplateBuilderLiveTest.java
index b02b379..55e762f 100644
--- a/providers/aws-ec2/src/test/java/org/jclouds/aws/ec2/compute/AWSEC2TemplateBuilderLiveTest.java
+++ b/providers/aws-ec2/src/test/java/org/jclouds/aws/ec2/compute/AWSEC2TemplateBuilderLiveTest.java
@@ -28,11 +28,13 @@
 import java.util.Set;
 
 import org.jclouds.aws.domain.Region;
+import org.jclouds.aws.ec2.AWSEC2ApiMetadata;
 import org.jclouds.aws.ec2.reference.AWSEC2Constants;
 import org.jclouds.compute.ComputeServiceContext;
 import org.jclouds.compute.domain.OsFamily;
 import org.jclouds.compute.domain.OsFamilyVersion64Bit;
 import org.jclouds.compute.domain.Template;
+import org.jclouds.ec2.EC2ApiMetadata;
 import org.jclouds.ec2.compute.EC2TemplateBuilderLiveTest;
 import org.jclouds.ec2.compute.predicates.EC2ImagePredicates;
 import org.jclouds.ec2.domain.InstanceType;
@@ -365,6 +367,12 @@
       assert (defaultTemplate.getImage().getProviderId().startsWith("ami-")) : defaultTemplate;
       assertEquals(defaultTemplate.getImage().getId(), imageId);
    }
+   
+   @Test
+   public void testAssignability() {
+      context.unwrap(EC2ApiMetadata.CONTEXT_TOKEN);
+      context.unwrap(AWSEC2ApiMetadata.CONTEXT_TOKEN);
+   }
 
    @Override
    protected Set<String> getIso3166Codes() {
diff --git a/providers/aws-s3/src/main/java/org/jclouds/aws/s3/AWSS3ApiMetadata.java b/providers/aws-s3/src/main/java/org/jclouds/aws/s3/AWSS3ApiMetadata.java
index 165792f..b05dff5 100644
--- a/providers/aws-s3/src/main/java/org/jclouds/aws/s3/AWSS3ApiMetadata.java
+++ b/providers/aws-s3/src/main/java/org/jclouds/aws/s3/AWSS3ApiMetadata.java
@@ -73,6 +73,7 @@
          id("aws-s3")
          .name("Amazon-specific S3 API")
          .defaultProperties(AWSS3ApiMetadata.defaultProperties())
+         .context(CONTEXT_TOKEN)
          .wrapper(TypeToken.of(AWSS3BlobStoreContext.class))
          .defaultModules(ImmutableSet.<Class<? extends Module>>of(AWSS3RestClientModule.class, AWSS3BlobStoreContextModule.class));
       }
diff --git a/providers/aws-s3/src/main/java/org/jclouds/aws/s3/config/AWSS3RestClientModule.java b/providers/aws-s3/src/main/java/org/jclouds/aws/s3/config/AWSS3RestClientModule.java
index f468441..93e4538 100644
--- a/providers/aws-s3/src/main/java/org/jclouds/aws/s3/config/AWSS3RestClientModule.java
+++ b/providers/aws-s3/src/main/java/org/jclouds/aws/s3/config/AWSS3RestClientModule.java
@@ -41,6 +41,7 @@
 
 import com.google.common.base.Supplier;
 import com.google.common.base.Suppliers;
+import com.google.common.reflect.TypeToken;
 import com.google.inject.Provides;
 
 /**
@@ -50,7 +51,11 @@
  */
 @ConfiguresRestClient
 public class AWSS3RestClientModule extends S3RestClientModule<AWSS3Client, AWSS3AsyncClient> {
-
+   
+   public AWSS3RestClientModule() {
+      super(TypeToken.of(AWSS3Client.class), TypeToken.of(AWSS3AsyncClient.class));
+   }
+   
    @Override
    protected Supplier<String> defaultRegionForBucket(@Region Supplier<String> defaultRegion) {
       return Suppliers.ofInstance(US_STANDARD);
@@ -68,11 +73,7 @@
    protected Supplier<URI> provideBucketURI(@Named(PROPERTY_REGION + "." + US_STANDARD + "." + ENDPOINT) String endpoint){
       return Suppliers.ofInstance(URI.create(endpoint));
    }
-   
-   public AWSS3RestClientModule() {
-      super(AWSS3Client.class, AWSS3AsyncClient.class);
-   }
-
+  
    @Singleton
    @Provides
    S3Client provide(AWSS3Client in) {
diff --git a/providers/azureblob/src/main/java/org/jclouds/azureblob/config/AzureBlobRestClientModule.java b/providers/azureblob/src/main/java/org/jclouds/azureblob/config/AzureBlobRestClientModule.java
index c94667f..a7ab369 100644
--- a/providers/azureblob/src/main/java/org/jclouds/azureblob/config/AzureBlobRestClientModule.java
+++ b/providers/azureblob/src/main/java/org/jclouds/azureblob/config/AzureBlobRestClientModule.java
@@ -36,10 +36,6 @@
 @ConfiguresRestClient
 public class AzureBlobRestClientModule extends AzureStorageRestClientModule<AzureBlobClient, AzureBlobAsyncClient> {
 
-   public AzureBlobRestClientModule() {
-      super(AzureBlobClient.class, AzureBlobAsyncClient.class);
-   }
-
    @Override
    protected void configure() {
       install(new AzureBlobModule());
diff --git a/providers/gogrid/src/main/java/org/jclouds/gogrid/config/GoGridRestClientModule.java b/providers/gogrid/src/main/java/org/jclouds/gogrid/config/GoGridRestClientModule.java
index 8e97f21..3c16eb7 100644
--- a/providers/gogrid/src/main/java/org/jclouds/gogrid/config/GoGridRestClientModule.java
+++ b/providers/gogrid/src/main/java/org/jclouds/gogrid/config/GoGridRestClientModule.java
@@ -71,7 +71,7 @@
          .build();
 
    public GoGridRestClientModule() {
-      super(GoGridClient.class, GoGridAsyncClient.class, DELEGATE_MAP);
+      super(DELEGATE_MAP);
    }
 
    @Provides
diff --git a/providers/hpcloud-objectstorage/src/main/java/org/jclouds/hpcloud/objectstorage/config/HPCloudObjectStorageRestClientModule.java b/providers/hpcloud-objectstorage/src/main/java/org/jclouds/hpcloud/objectstorage/config/HPCloudObjectStorageRestClientModule.java
index a6ab327..1419e37 100644
--- a/providers/hpcloud-objectstorage/src/main/java/org/jclouds/hpcloud/objectstorage/config/HPCloudObjectStorageRestClientModule.java
+++ b/providers/hpcloud-objectstorage/src/main/java/org/jclouds/hpcloud/objectstorage/config/HPCloudObjectStorageRestClientModule.java
@@ -67,7 +67,7 @@
             HPCloudCDNClient.class, HPCloudCDNAsyncClient.class).build();
 
    public HPCloudObjectStorageRestClientModule() {
-      super(HPCloudObjectStorageClient.class, HPCloudObjectStorageAsyncClient.class, DELEGATE_MAP);
+      super(DELEGATE_MAP);
    }
 
    protected void configure() {
diff --git a/providers/rimuhosting/src/main/java/org/jclouds/rimuhosting/miro/config/RimuHostingRestClientModule.java b/providers/rimuhosting/src/main/java/org/jclouds/rimuhosting/miro/config/RimuHostingRestClientModule.java
index e572fd6..aedde4e 100644
--- a/providers/rimuhosting/src/main/java/org/jclouds/rimuhosting/miro/config/RimuHostingRestClientModule.java
+++ b/providers/rimuhosting/src/main/java/org/jclouds/rimuhosting/miro/config/RimuHostingRestClientModule.java
@@ -48,10 +48,6 @@
 @ConfiguresRestClient
 public class RimuHostingRestClientModule extends RestClientModule<RimuHostingClient, RimuHostingAsyncClient> {
 
-   public RimuHostingRestClientModule() {
-      super(RimuHostingClient.class, RimuHostingAsyncClient.class);
-   }
-
    @Override
    protected void configure() {
       bind(DateAdapter.class).to(RimuIso8601DateAdapter.class);
diff --git a/providers/slicehost/src/main/java/org/jclouds/slicehost/config/SlicehostRestClientModule.java b/providers/slicehost/src/main/java/org/jclouds/slicehost/config/SlicehostRestClientModule.java
index b1e5ef9..aa91891 100644
--- a/providers/slicehost/src/main/java/org/jclouds/slicehost/config/SlicehostRestClientModule.java
+++ b/providers/slicehost/src/main/java/org/jclouds/slicehost/config/SlicehostRestClientModule.java
@@ -35,10 +35,6 @@
 @ConfiguresRestClient
 public class SlicehostRestClientModule extends RestClientModule<SlicehostClient, SlicehostAsyncClient> {
 
-   public SlicehostRestClientModule() {
-      super(SlicehostClient.class, SlicehostAsyncClient.class);
-   }
-
    @Override
    protected void bindErrorHandlers() {
       bind(HttpErrorHandler.class).annotatedWith(Redirection.class).to(ParseSlicehostErrorFromHttpResponse.class);
diff --git a/providers/softlayer/src/main/java/org/jclouds/softlayer/config/SoftLayerRestClientModule.java b/providers/softlayer/src/main/java/org/jclouds/softlayer/config/SoftLayerRestClientModule.java
index 03e07d1..b2eadbe 100644
--- a/providers/softlayer/src/main/java/org/jclouds/softlayer/config/SoftLayerRestClientModule.java
+++ b/providers/softlayer/src/main/java/org/jclouds/softlayer/config/SoftLayerRestClientModule.java
@@ -62,7 +62,7 @@
             .build();
 
    public SoftLayerRestClientModule() {
-      super(SoftLayerClient.class, SoftLayerAsyncClient.class, DELEGATE_MAP);
+      super(DELEGATE_MAP);
    }
 
    @Override
diff --git a/providers/trmk-ecloud/src/main/java/org/jclouds/trmk/ecloud/config/TerremarkECloudRestClientModule.java b/providers/trmk-ecloud/src/main/java/org/jclouds/trmk/ecloud/config/TerremarkECloudRestClientModule.java
index c777657..d761013 100644
--- a/providers/trmk-ecloud/src/main/java/org/jclouds/trmk/ecloud/config/TerremarkECloudRestClientModule.java
+++ b/providers/trmk-ecloud/src/main/java/org/jclouds/trmk/ecloud/config/TerremarkECloudRestClientModule.java
@@ -61,7 +61,7 @@
          .build();
 
    public TerremarkECloudRestClientModule() {
-      super(TerremarkECloudClient.class, TerremarkECloudAsyncClient.class, DELEGATE_MAP);
+      super(DELEGATE_MAP);
    }
 
    @Provides
diff --git a/providers/trmk-vcloudexpress/src/main/java/org/jclouds/trmk/vcloudexpress/config/TerremarkVCloudExpressRestClientModule.java b/providers/trmk-vcloudexpress/src/main/java/org/jclouds/trmk/vcloudexpress/config/TerremarkVCloudExpressRestClientModule.java
index 6a618b5..7889a33 100644
--- a/providers/trmk-vcloudexpress/src/main/java/org/jclouds/trmk/vcloudexpress/config/TerremarkVCloudExpressRestClientModule.java
+++ b/providers/trmk-vcloudexpress/src/main/java/org/jclouds/trmk/vcloudexpress/config/TerremarkVCloudExpressRestClientModule.java
@@ -39,10 +39,6 @@
 public class TerremarkVCloudExpressRestClientModule extends
       TerremarkVCloudRestClientModule<TerremarkVCloudExpressClient, TerremarkVCloudExpressAsyncClient> {
 
-   public TerremarkVCloudExpressRestClientModule() {
-      super(TerremarkVCloudExpressClient.class, TerremarkVCloudExpressAsyncClient.class);
-   }
-
    @Provides
    @Singleton
    protected TerremarkVCloudAsyncClient provideVCloudAsyncClient(TerremarkVCloudExpressAsyncClient in) {
diff --git a/scriptbuilder/src/main/resources/functions/installOpenJDK.sh b/scriptbuilder/src/main/resources/functions/installOpenJDK.sh
index 2013913..71539db 100644
--- a/scriptbuilder/src/main/resources/functions/installOpenJDK.sh
+++ b/scriptbuilder/src/main/resources/functions/installOpenJDK.sh
@@ -20,7 +20,7 @@
 function installOpenJDK() {
   if hash apt-get 2>/dev/null; then
     export JAVA_HOME=${JAVA_HOME:-/usr/lib/jvm/java-6-openjdk}
-    test -d $JAVA_HOME || apt-get-install openjdk-6-jdk
+    test -d $JAVA_HOME || apt-get-install openjdk-6-jdk || ( apt-get-update && apt-get-install openjdk-6-jdk )
   elif hash yum 2>/dev/null; then
     export pkg=java-1.6.0-openjdk-devel
     yum --nogpgcheck -y install $pkg &&
diff --git a/scriptbuilder/src/main/resources/functions/setupPublicCurl.sh b/scriptbuilder/src/main/resources/functions/setupPublicCurl.sh
index ad72ddb..b0854d7 100644
--- a/scriptbuilder/src/main/resources/functions/setupPublicCurl.sh
+++ b/scriptbuilder/src/main/resources/functions/setupPublicCurl.sh
@@ -1,11 +1,11 @@
 alias apt-get-install="apt-get install -f -y -qq --force-yes"
-alias apt-get-upgrade="(apt-get update -qq&&apt-get upgrade -y -qq)"
+alias apt-get-update="apt-get update -qq"
 
 function ensure_cmd_or_install_package_apt(){
   local cmd=$1
   local pkg=$2
   
-  hash $cmd 2>/dev/null || apt-get-install $pkg || ( apt-get-upgrade && apt-get-install $pkg )
+  hash $cmd 2>/dev/null || apt-get-install $pkg || ( apt-get-update && apt-get-install $pkg )
 }
 
 function ensure_cmd_or_install_package_yum(){
diff --git a/scriptbuilder/src/test/resources/test_install_jdk_scriptbuilder.sh b/scriptbuilder/src/test/resources/test_install_jdk_scriptbuilder.sh
index f3a502a..52c1074 100644
--- a/scriptbuilder/src/test/resources/test_install_jdk_scriptbuilder.sh
+++ b/scriptbuilder/src/test/resources/test_install_jdk_scriptbuilder.sh
@@ -84,13 +84,13 @@
    exit 1
 }
 alias apt-get-install="apt-get install -f -y -qq --force-yes"
-alias apt-get-upgrade="(apt-get update -qq&&apt-get upgrade -y -qq)"
+alias apt-get-update="apt-get update -qq"
 
 function ensure_cmd_or_install_package_apt(){
   local cmd=$1
   local pkg=$2
   
-  hash $cmd 2>/dev/null || apt-get-install $pkg || ( apt-get-upgrade && apt-get-install $pkg )
+  hash $cmd 2>/dev/null || apt-get-install $pkg || ( apt-get-update && apt-get-install $pkg )
 }
 
 function ensure_cmd_or_install_package_yum(){
@@ -155,7 +155,7 @@
 function installOpenJDK() {
   if hash apt-get 2>/dev/null; then
     export JAVA_HOME=${JAVA_HOME:-/usr/lib/jvm/java-6-openjdk}
-    test -d $JAVA_HOME || apt-get-install openjdk-6-jdk
+    test -d $JAVA_HOME || apt-get-install openjdk-6-jdk || ( apt-get-update && apt-get-install openjdk-6-jdk )
   elif hash yum 2>/dev/null; then
     export pkg=java-1.6.0-openjdk-devel
     yum --nogpgcheck -y install $pkg &&
