diff --git a/core/src/main/java/org/jclouds/reflect/FunctionalReflection.java b/core/src/main/java/org/jclouds/reflect/FunctionalReflection.java
index 96c29e7..31a1b43 100644
--- a/core/src/main/java/org/jclouds/reflect/FunctionalReflection.java
+++ b/core/src/main/java/org/jclouds/reflect/FunctionalReflection.java
@@ -16,6 +16,19 @@
  */
 package org.jclouds.reflect;
 
+import com.google.common.annotations.Beta;
+import com.google.common.base.Function;
+import com.google.common.base.Objects;
+import com.google.common.collect.ImmutableList;
+import com.google.common.reflect.Invokable;
+import com.google.common.reflect.TypeToken;
+
+import java.lang.reflect.Method;
+import java.lang.reflect.Proxy;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
+
 import static com.google.common.base.Objects.equal;
 import static com.google.common.base.Preconditions.checkArgument;
 import static com.google.common.base.Preconditions.checkNotNull;
@@ -26,19 +39,6 @@ import static org.jclouds.reflect.Reflection2.method;
 import static org.jclouds.reflect.Reflection2.typeToken;
 import static org.jclouds.util.Throwables2.propagateIfPossible;
 
-import java.lang.reflect.Method;
-import java.lang.reflect.Proxy;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.List;
-
-import com.google.common.annotations.Beta;
-import com.google.common.base.Function;
-import com.google.common.base.Objects;
-import com.google.common.collect.ImmutableList;
-import com.google.common.reflect.Invokable;
-import com.google.common.reflect.TypeToken;
-
 /**
  * Static utilities relating to functional Java reflection.
  * 
diff --git a/providers/aws-ec2/pom.xml b/providers/aws-ec2/pom.xml
index 4104aee..3b5d261 100644
--- a/providers/aws-ec2/pom.xml
+++ b/providers/aws-ec2/pom.xml
@@ -33,7 +33,7 @@
 
   <properties>
     <test.aws-ec2.endpoint>https://ec2.us-east-1.amazonaws.com</test.aws-ec2.endpoint>
-    <test.aws-ec2.api-version>2012-06-01</test.aws-ec2.api-version>
+    <test.aws-ec2.api-version>2014-02-01</test.aws-ec2.api-version>
     <test.aws-ec2.build-version />
     <test.aws-ec2.identity>${test.aws.identity}</test.aws-ec2.identity>
     <test.aws-ec2.credential>${test.aws.credential}</test.aws-ec2.credential>
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 7cb4c83..3ef2970 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
@@ -16,11 +16,8 @@
  */
 package org.jclouds.aws.ec2;
 
-import static org.jclouds.ec2.reference.EC2Constants.PROPERTY_EC2_AMI_OWNERS;
-
-import java.net.URI;
-import java.util.Properties;
-
+import com.google.common.collect.ImmutableSet;
+import com.google.inject.Module;
 import org.jclouds.aws.ec2.compute.AWSEC2ComputeServiceContext;
 import org.jclouds.aws.ec2.compute.config.AWSEC2ComputeServiceContextModule;
 import org.jclouds.aws.ec2.config.AWSEC2HttpApiModule;
@@ -28,8 +25,10 @@ import org.jclouds.ec2.EC2ApiMetadata;
 import org.jclouds.ec2.compute.config.EC2ResolveImagesModule;
 import org.jclouds.rest.internal.BaseHttpApiMetadata;
 
-import com.google.common.collect.ImmutableSet;
-import com.google.inject.Module;
+import java.net.URI;
+import java.util.Properties;
+
+import static org.jclouds.ec2.reference.EC2Constants.PROPERTY_EC2_AMI_OWNERS;
 
 public final class AWSEC2ApiMetadata extends BaseHttpApiMetadata<AWSEC2Api> {
 
@@ -59,7 +58,7 @@ public final class AWSEC2ApiMetadata extends BaseHttpApiMetadata<AWSEC2Api> {
    public static final class Builder extends BaseHttpApiMetadata.Builder<AWSEC2Api, Builder> {
       public Builder() {
          id("aws-ec2")
-         .version("2012-06-01")
+         .version("2014-02-01")
          .name("Amazon-specific EC2 API")
          .identityName("Access Key ID")
          .credentialName("Secret Access Key")
diff --git a/providers/aws-ec2/src/main/java/org/jclouds/aws/ec2/binders/BindLaunchSpecificationToFormParams.java b/providers/aws-ec2/src/main/java/org/jclouds/aws/ec2/binders/BindLaunchSpecificationToFormParams.java
index 77f9d9d..705da99 100644
--- a/providers/aws-ec2/src/main/java/org/jclouds/aws/ec2/binders/BindLaunchSpecificationToFormParams.java
+++ b/providers/aws-ec2/src/main/java/org/jclouds/aws/ec2/binders/BindLaunchSpecificationToFormParams.java
@@ -16,24 +16,22 @@
  */
 package org.jclouds.aws.ec2.binders;
 
-import static com.google.common.base.Preconditions.checkArgument;
-import static com.google.common.base.Preconditions.checkNotNull;
-
-import java.util.Map;
-import java.util.Map.Entry;
-
-import javax.inject.Singleton;
-
+import com.google.common.base.Function;
+import com.google.common.collect.ImmutableMap;
+import com.google.common.collect.ImmutableMap.Builder;
+import com.google.common.collect.Multimaps;
 import org.jclouds.aws.ec2.domain.LaunchSpecification;
 import org.jclouds.aws.ec2.domain.LaunchSpecification.IAMInstanceProfileRequest;
 import org.jclouds.aws.ec2.options.AWSRunInstancesOptions;
 import org.jclouds.http.HttpRequest;
 import org.jclouds.rest.Binder;
 
-import com.google.common.base.Function;
-import com.google.common.collect.ImmutableMap;
-import com.google.common.collect.ImmutableMap.Builder;
-import com.google.common.collect.Multimaps;
+import javax.inject.Singleton;
+import java.util.Map;
+import java.util.Map.Entry;
+
+import static com.google.common.base.Preconditions.checkArgument;
+import static com.google.common.base.Preconditions.checkNotNull;
 
 /**
  * 
@@ -65,8 +63,17 @@ public class BindLaunchSpecificationToFormParams implements Binder, Function<Lau
       if (launchSpec.getSecurityGroupIds().size() > 0)
          options.withSecurityGroupIds(launchSpec.getSecurityGroupIds());
       options.asType(checkNotNull(launchSpec.getInstanceType(), "instanceType"));
-      if (launchSpec.getSubnetId() != null)
-         options.withSubnetId(launchSpec.getSubnetId());
+      if (launchSpec.getSubnetId() != null){
+         if (Boolean.TRUE.equals(launchSpec.isPublicIpAddressAssociated()))  {
+            options.associatePublicIpAddressAndSubnetId(launchSpec.getSubnetId());
+            if (launchSpec.getSecurityGroupIds().size() > 0){
+                options.withSecurityGroupIdsForNetworkInterface(launchSpec.getSecurityGroupIds());
+            }
+         }
+         else{
+             options.withSubnetId(launchSpec.getSubnetId());
+         }
+      }
       if (launchSpec.getKernelId() != null)
          options.withKernelId(launchSpec.getKernelId());
       if (launchSpec.getKeyName() != null)
diff --git a/providers/aws-ec2/src/main/java/org/jclouds/aws/ec2/compute/AWSEC2TemplateOptions.java b/providers/aws-ec2/src/main/java/org/jclouds/aws/ec2/compute/AWSEC2TemplateOptions.java
index d419291..0fd958c 100644
--- a/providers/aws-ec2/src/main/java/org/jclouds/aws/ec2/compute/AWSEC2TemplateOptions.java
+++ b/providers/aws-ec2/src/main/java/org/jclouds/aws/ec2/compute/AWSEC2TemplateOptions.java
@@ -77,6 +77,8 @@ public class AWSEC2TemplateOptions extends EC2TemplateOptions implements Cloneab
             eTo.iamInstanceProfileName(getIAMInstanceProfileName());
          if (isMonitoringEnabled())
             eTo.enableMonitoring();
+         if (isPublicIpAddressAssociated())
+            eTo.associatePublicIpAddress();
          if (!shouldAutomaticallyCreatePlacementGroup())
             eTo.noPlacementGroup();
          if (getPlacementGroup() != null)
@@ -91,6 +93,7 @@ public class AWSEC2TemplateOptions extends EC2TemplateOptions implements Cloneab
    }
 
    private boolean monitoringEnabled;
+   private boolean publicIpAddressAssociated;
    private String placementGroup = null;
    private boolean noPlacementGroup;
    private String subnetId;
@@ -108,6 +111,7 @@ public class AWSEC2TemplateOptions extends EC2TemplateOptions implements Cloneab
          return false;
       AWSEC2TemplateOptions that = AWSEC2TemplateOptions.class.cast(o);
       return super.equals(that) && equal(this.monitoringEnabled, that.monitoringEnabled)
+               && equal(this.publicIpAddressAssociated, that.publicIpAddressAssociated)
                && equal(this.placementGroup, that.placementGroup)
                && equal(this.noPlacementGroup, that.noPlacementGroup) && equal(this.subnetId, that.subnetId)
                && equal(this.spotPrice, that.spotPrice) && equal(this.spotOptions, that.spotOptions)
@@ -117,7 +121,7 @@ public class AWSEC2TemplateOptions extends EC2TemplateOptions implements Cloneab
 
    @Override
    public int hashCode() {
-      return Objects.hashCode(super.hashCode(), monitoringEnabled, placementGroup, noPlacementGroup, subnetId,
+      return Objects.hashCode(super.hashCode(), monitoringEnabled, publicIpAddressAssociated, placementGroup, noPlacementGroup, subnetId,
                spotPrice, spotOptions, groupIds, iamInstanceProfileArn, iamInstanceProfileName);
    }
 
@@ -126,6 +130,8 @@ public class AWSEC2TemplateOptions extends EC2TemplateOptions implements Cloneab
       ToStringHelper toString = super.string();
       if (monitoringEnabled)
          toString.add("monitoringEnabled", monitoringEnabled);
+      if (publicIpAddressAssociated)
+         toString.add("publicIpAddressAssociated", publicIpAddressAssociated);
       toString.add("placementGroup", placementGroup);
       if (noPlacementGroup)
          toString.add("noPlacementGroup", noPlacementGroup);
@@ -152,6 +158,15 @@ public class AWSEC2TemplateOptions extends EC2TemplateOptions implements Cloneab
       return this;
    }
 
+    /**
+     * Associate a public Ip Address
+     *
+     */
+    public AWSEC2TemplateOptions associatePublicIpAddress() {
+       this.publicIpAddressAssociated = true;
+       return this;
+    }
+
    /**
     * Specifies the keypair used to run instances with
     */
@@ -182,7 +197,7 @@ public class AWSEC2TemplateOptions extends EC2TemplateOptions implements Cloneab
    /**
     * @see org.jclouds.aws.ec2.options.AWSRunInstancesOptions#withIAMInstanceProfileArn(String)
     */
-   @SinceApiVersion("2012-06-01")
+   @SinceApiVersion("2014-02-01")
    public AWSEC2TemplateOptions iamInstanceProfileArn(String arn) {
       this.iamInstanceProfileArn = checkNotNull(emptyToNull(arn), "arn must be defined");
       return this;
@@ -191,7 +206,7 @@ public class AWSEC2TemplateOptions extends EC2TemplateOptions implements Cloneab
    /**
     * @see org.jclouds.aws.ec2.options.AWSRunInstancesOptions#withIAMInstanceProfileName(String)
     */
-   @SinceApiVersion("2012-06-01")
+   @SinceApiVersion("2014-02-01")
    public AWSEC2TemplateOptions iamInstanceProfileName(String name) {
       this.iamInstanceProfileName = checkNotNull(emptyToNull(name), "name must be defined");
       return this;
@@ -377,13 +392,22 @@ public class AWSEC2TemplateOptions extends EC2TemplateOptions implements Cloneab
          return options.noPlacementGroup();
       }
 
-      /**
-       * @see AWSEC2TemplateOptions#enableMonitoring
-       */
-      public static AWSEC2TemplateOptions enableMonitoring() {
-         AWSEC2TemplateOptions options = new AWSEC2TemplateOptions();
-         return options.enableMonitoring();
-      }
+       /**
+        * @see AWSEC2TemplateOptions#enableMonitoring
+        */
+       public static AWSEC2TemplateOptions enableMonitoring() {
+          AWSEC2TemplateOptions options = new AWSEC2TemplateOptions();
+          return options.enableMonitoring();
+       }
+
+
+       /**
+        * @see AWSEC2TemplateOptions#associatePublicIpAddress
+        */
+       public static AWSEC2TemplateOptions associatePublicIpAddress() {
+          AWSEC2TemplateOptions options = new AWSEC2TemplateOptions();
+          return options.associatePublicIpAddress();
+       }
 
       // methods that only facilitate returning the correct object type
       /**
@@ -429,7 +453,7 @@ public class AWSEC2TemplateOptions extends EC2TemplateOptions implements Cloneab
       /**
        * @see AWSEC2TemplateOptions#iamInstanceProfileArn
        */
-      @SinceApiVersion("2012-06-01")
+      @SinceApiVersion("2014-02-01")
       public static AWSEC2TemplateOptions iamInstanceProfileArn(String arn) {
          AWSEC2TemplateOptions options = new AWSEC2TemplateOptions();
          return options.iamInstanceProfileArn(arn);
@@ -438,7 +462,7 @@ public class AWSEC2TemplateOptions extends EC2TemplateOptions implements Cloneab
       /**
        * @see AWSEC2TemplateOptions#iamInstanceProfileName
        */
-      @SinceApiVersion("2012-06-01")
+      @SinceApiVersion("2014-02-01")
       public static AWSEC2TemplateOptions iamInstanceProfileName(String name) {
          AWSEC2TemplateOptions options = new AWSEC2TemplateOptions();
          return options.iamInstanceProfileName(name);
@@ -751,6 +775,13 @@ public class AWSEC2TemplateOptions extends EC2TemplateOptions implements Cloneab
    }
 
    /**
+    * @return true (default is false) if we are supposed to associate a public ip address
+    */
+   public boolean isPublicIpAddressAssociated() {
+      return publicIpAddressAssociated;
+   }
+
+   /**
     * @return subnetId to use when running the instance or null.
     */
    public String getSubnetId() {
@@ -776,7 +807,7 @@ public class AWSEC2TemplateOptions extends EC2TemplateOptions implements Cloneab
     * 
     * @see org.jclouds.aws.ec2.options.AWSRunInstancesOptions#withIAMInstanceProfileArn(String)
     */
-   @SinceApiVersion("2012-06-01")
+   @SinceApiVersion("2014-02-01")
    public String getIAMInstanceProfileArn() {
       return iamInstanceProfileArn;
    }
@@ -786,7 +817,7 @@ public class AWSEC2TemplateOptions extends EC2TemplateOptions implements Cloneab
     * 
     * @see org.jclouds.aws.ec2.options.AWSRunInstancesOptions#withIAMInstanceProfileName(String)
     */
-   @SinceApiVersion("2012-06-01")
+   @SinceApiVersion("2014-02-01")
    public String getIAMInstanceProfileName() {
       return iamInstanceProfileName;
    }
diff --git a/providers/aws-ec2/src/main/java/org/jclouds/aws/ec2/compute/strategy/AWSEC2CreateNodesInGroupThenAddToSet.java b/providers/aws-ec2/src/main/java/org/jclouds/aws/ec2/compute/strategy/AWSEC2CreateNodesInGroupThenAddToSet.java
index 5faaba6..1cf8836 100644
--- a/providers/aws-ec2/src/main/java/org/jclouds/aws/ec2/compute/strategy/AWSEC2CreateNodesInGroupThenAddToSet.java
+++ b/providers/aws-ec2/src/main/java/org/jclouds/aws/ec2/compute/strategy/AWSEC2CreateNodesInGroupThenAddToSet.java
@@ -15,20 +15,12 @@
  * limitations under the License.
  */
 package org.jclouds.aws.ec2.compute.strategy;
-import static com.google.common.base.Preconditions.checkNotNull;
-import static com.google.common.collect.Iterables.transform;
-import static org.jclouds.compute.config.ComputeServiceProperties.TIMEOUT_NODE_RUNNING;
-import static org.jclouds.ec2.reference.EC2Constants.PROPERTY_EC2_GENERATE_INSTANCE_NAMES;
-
-import java.util.Map;
-import java.util.Set;
-import java.util.concurrent.atomic.AtomicReference;
-
-import javax.annotation.Resource;
-import javax.inject.Inject;
-import javax.inject.Named;
-import javax.inject.Singleton;
-
+import com.google.common.annotations.VisibleForTesting;
+import com.google.common.base.Function;
+import com.google.common.base.Optional;
+import com.google.common.base.Predicate;
+import com.google.common.cache.LoadingCache;
+import com.google.common.collect.ImmutableSet;
 import org.jclouds.aws.ec2.AWSEC2Api;
 import org.jclouds.aws.ec2.compute.AWSEC2TemplateOptions;
 import org.jclouds.aws.ec2.compute.functions.PresentSpotRequestsAndInstances;
@@ -49,12 +41,18 @@ import org.jclouds.ec2.domain.RunningInstance;
 import org.jclouds.ec2.options.RunInstancesOptions;
 import org.jclouds.logging.Logger;
 
-import com.google.common.annotations.VisibleForTesting;
-import com.google.common.base.Function;
-import com.google.common.base.Optional;
-import com.google.common.base.Predicate;
-import com.google.common.cache.LoadingCache;
-import com.google.common.collect.ImmutableSet;
+import javax.annotation.Resource;
+import javax.inject.Inject;
+import javax.inject.Named;
+import javax.inject.Singleton;
+import java.util.Map;
+import java.util.Set;
+import java.util.concurrent.atomic.AtomicReference;
+
+import static com.google.common.base.Preconditions.checkNotNull;
+import static com.google.common.collect.Iterables.transform;
+import static org.jclouds.compute.config.ComputeServiceProperties.TIMEOUT_NODE_RUNNING;
+import static org.jclouds.ec2.reference.EC2Constants.PROPERTY_EC2_GENERATE_INSTANCE_NAMES;
 
 /**
  * 
@@ -97,6 +95,7 @@ public class AWSEC2CreateNodesInGroupThenAddToSet extends EC2CreateNodesInGroupT
          AWSEC2TemplateOptions awsOptions = AWSEC2TemplateOptions.class.cast(template.getOptions());
          LaunchSpecification spec = AWSRunInstancesOptions.class.cast(instanceOptions).getLaunchSpecificationBuilder()
                .imageId(template.getImage().getProviderId()).availabilityZone(zone).subnetId(awsOptions.getSubnetId())
+                 .publicIpAddressAssociated(awsOptions.isPublicIpAddressAssociated())
                .iamInstanceProfileArn(awsOptions.getIAMInstanceProfileArn())
                .iamInstanceProfileName(awsOptions.getIAMInstanceProfileName()).build();
          RequestSpotInstancesOptions options = awsOptions.getSpotOptions();
diff --git a/providers/aws-ec2/src/main/java/org/jclouds/aws/ec2/compute/strategy/CreateKeyPairPlacementAndSecurityGroupsAsNeededAndReturnRunOptions.java b/providers/aws-ec2/src/main/java/org/jclouds/aws/ec2/compute/strategy/CreateKeyPairPlacementAndSecurityGroupsAsNeededAndReturnRunOptions.java
index e6fb402..92668d6 100644
--- a/providers/aws-ec2/src/main/java/org/jclouds/aws/ec2/compute/strategy/CreateKeyPairPlacementAndSecurityGroupsAsNeededAndReturnRunOptions.java
+++ b/providers/aws-ec2/src/main/java/org/jclouds/aws/ec2/compute/strategy/CreateKeyPairPlacementAndSecurityGroupsAsNeededAndReturnRunOptions.java
@@ -178,12 +178,22 @@ public class CreateKeyPairPlacementAndSecurityGroupsAsNeededAndReturnRunOptions
    protected void addSecurityGroups(String region, String group, Template template, RunInstancesOptions instanceOptions) {
       AWSEC2TemplateOptions awsTemplateOptions = AWSEC2TemplateOptions.class.cast(template.getOptions());
       AWSRunInstancesOptions awsInstanceOptions = AWSRunInstancesOptions.class.cast(instanceOptions);
-      if (awsTemplateOptions.getGroupIds().size() > 0)
-         awsInstanceOptions.withSecurityGroupIds(awsTemplateOptions.getGroupIds());
+
       String subnetId = awsTemplateOptions.getSubnetId();
+      boolean associatePublicIpAddress = awsTemplateOptions.isPublicIpAddressAssociated();
       if (subnetId != null) {
-         AWSRunInstancesOptions.class.cast(instanceOptions).withSubnetId(subnetId);
+          if(associatePublicIpAddress){
+              AWSRunInstancesOptions.class.cast(instanceOptions).associatePublicIpAddressAndSubnetId(subnetId);
+              if (awsTemplateOptions.getGroupIds().size() > 0)
+                 awsInstanceOptions.withSecurityGroupIdsForNetworkInterface(awsTemplateOptions.getGroupIds());
+          }else{
+              AWSRunInstancesOptions.class.cast(instanceOptions).withSubnetId(subnetId);
+              if (awsTemplateOptions.getGroupIds().size() > 0)
+                 awsInstanceOptions.withSecurityGroupIds(awsTemplateOptions.getGroupIds());
+          }
       } else {
+          if (awsTemplateOptions.getGroupIds().size() > 0)
+             awsInstanceOptions.withSecurityGroupIds(awsTemplateOptions.getGroupIds());
          super.addSecurityGroups(region, group, template, instanceOptions);
       }
    }
diff --git a/providers/aws-ec2/src/main/java/org/jclouds/aws/ec2/domain/AWSRunningInstance.java b/providers/aws-ec2/src/main/java/org/jclouds/aws/ec2/domain/AWSRunningInstance.java
index 03b8188..d59aad4 100644
--- a/providers/aws-ec2/src/main/java/org/jclouds/aws/ec2/domain/AWSRunningInstance.java
+++ b/providers/aws-ec2/src/main/java/org/jclouds/aws/ec2/domain/AWSRunningInstance.java
@@ -64,6 +64,7 @@ public class AWSRunningInstance extends RunningInstance {
       private Set<String> productCodes = Sets.newLinkedHashSet();
       private String subnetId;
       private String spotInstanceRequestId;
+      private boolean associatedPublicIpAddress;
       private String vpcId;
       private Hypervisor hypervisor;
       private Map<String, String> securityGroupIdToNames = Maps.newLinkedHashMap();
@@ -108,6 +109,12 @@ public class AWSRunningInstance extends RunningInstance {
          return this;
       }
 
+
+      public Builder associatedPublicIpAddress(boolean associatedPublicIpAddress) {
+         this.associatedPublicIpAddress = associatedPublicIpAddress;
+         return this;
+      }
+
       public Builder spotInstanceRequestId(String spotInstanceRequestId) {
          this.spotInstanceRequestId = spotInstanceRequestId;
          return this;
@@ -150,7 +157,7 @@ public class AWSRunningInstance extends RunningInstance {
                instanceState, rawState, instanceType, ipAddress, kernelId, keyName, launchTime, availabilityZone,
                virtualizationType, platform, privateDnsName, privateIpAddress, ramdiskId, reason, rootDeviceType,
                rootDeviceName, ebsBlockDevices, monitoringState, placementGroup, productCodes, subnetId,
-               spotInstanceRequestId, vpcId, hypervisor, tags, iamInstanceProfile);
+               spotInstanceRequestId, vpcId, hypervisor, tags, iamInstanceProfile, associatedPublicIpAddress);
       }
       
       @Override
@@ -159,7 +166,7 @@ public class AWSRunningInstance extends RunningInstance {
          if (in instanceof AWSRunningInstance) {
             AWSRunningInstance awsIn = AWSRunningInstance.class.cast(in);
             monitoringState(awsIn.monitoringState).placementGroup(awsIn.placementGroup)
-                  .productCodes(awsIn.productCodes).subnetId(awsIn.subnetId)
+                  .productCodes(awsIn.productCodes).subnetId(awsIn.subnetId).associatedPublicIpAddress(awsIn.associatedPublicIpAddress)
                   .spotInstanceRequestId(awsIn.spotInstanceRequestId).vpcId(awsIn.vpcId).hypervisor(awsIn.hypervisor)
                   .securityGroupIdToNames(awsIn.securityGroupIdToNames);
             if (awsIn.getIAMInstanceProfile().isPresent()) {
@@ -183,6 +190,7 @@ public class AWSRunningInstance extends RunningInstance {
    private final Set<String> productCodes;
    @Nullable
    private final String subnetId;
+   private final boolean associatedPublicIpAddress;
    @Nullable
    private final String spotInstanceRequestId;
    @Nullable
@@ -192,17 +200,18 @@ public class AWSRunningInstance extends RunningInstance {
    private final Optional<IAMInstanceProfile> iamInstanceProfile;
 
    protected AWSRunningInstance(String region, Map<String, String> securityGroupIdToNames, String amiLaunchIndex,
-            String dnsName, String imageId, String instanceId, InstanceState instanceState, String rawState,
-            String instanceType, String ipAddress, String kernelId, String keyName, Date launchTime,
-            String availabilityZone, String virtualizationType, String platform, String privateDnsName,
-            String privateIpAddress, String ramdiskId, String reason, RootDeviceType rootDeviceType,
-            String rootDeviceName, Map<String, BlockDevice> ebsBlockDevices, MonitoringState monitoringState,
-            String placementGroup, Iterable<String> productCodes, String subnetId, String spotInstanceRequestId,
-            String vpcId, Hypervisor hypervisor, Map<String, String> tags, Optional<IAMInstanceProfile> iamInstanceProfile) {
+      String dnsName, String imageId, String instanceId, InstanceState instanceState, String rawState,
+      String instanceType, String ipAddress, String kernelId, String keyName, Date launchTime,
+      String availabilityZone, String virtualizationType, String platform, String privateDnsName,
+      String privateIpAddress, String ramdiskId, String reason, RootDeviceType rootDeviceType,
+      String rootDeviceName, Map<String, BlockDevice> ebsBlockDevices, MonitoringState monitoringState,
+      String placementGroup, Iterable<String> productCodes, String subnetId, String spotInstanceRequestId,
+      String vpcId, Hypervisor hypervisor, Map<String, String> tags, Optional<IAMInstanceProfile> iamInstanceProfile, boolean associatedPublicIpAddress) {
       super(region, securityGroupIdToNames.values(), amiLaunchIndex, dnsName, imageId, instanceId, instanceState,
                rawState, instanceType, ipAddress, kernelId, keyName, launchTime, availabilityZone, virtualizationType,
                platform, privateDnsName, privateIpAddress, ramdiskId, reason, rootDeviceType, rootDeviceName,
                ebsBlockDevices, tags);
+      this.associatedPublicIpAddress = associatedPublicIpAddress;
       this.monitoringState = checkNotNull(monitoringState, "monitoringState");
       this.placementGroup = placementGroup;
       this.productCodes = ImmutableSet.copyOf(checkNotNull(productCodes, "productCodes"));
@@ -275,7 +284,7 @@ public class AWSRunningInstance extends RunningInstance {
    /**
     * The IAM Instance Profile (IIP) associated with the instance.
     */
-   @SinceApiVersion("2012-06-01")
+   @SinceApiVersion("2014-02-01")
    public Optional<IAMInstanceProfile> getIAMInstanceProfile() {
       return iamInstanceProfile;
    }
diff --git a/providers/aws-ec2/src/main/java/org/jclouds/aws/ec2/domain/LaunchSpecification.java b/providers/aws-ec2/src/main/java/org/jclouds/aws/ec2/domain/LaunchSpecification.java
index 34c46be..f2f3588 100644
--- a/providers/aws-ec2/src/main/java/org/jclouds/aws/ec2/domain/LaunchSpecification.java
+++ b/providers/aws-ec2/src/main/java/org/jclouds/aws/ec2/domain/LaunchSpecification.java
@@ -16,14 +16,11 @@
  */
 package org.jclouds.aws.ec2.domain;
 
-import static com.google.common.base.Objects.equal;
-import static com.google.common.base.Objects.toStringHelper;
-import static com.google.common.base.Preconditions.checkNotNull;
-
-import java.util.Arrays;
-import java.util.Map;
-import java.util.Set;
-
+import com.google.common.base.Objects;
+import com.google.common.base.Optional;
+import com.google.common.collect.ImmutableMap;
+import com.google.common.collect.ImmutableSet;
+import com.google.common.collect.ImmutableSortedSet;
 import org.jclouds.ec2.domain.BlockDeviceMapping;
 import org.jclouds.ec2.domain.BlockDeviceMapping.MapEBSSnapshotToDevice;
 import org.jclouds.ec2.domain.BlockDeviceMapping.MapEphemeralDeviceToDevice;
@@ -31,11 +28,13 @@ import org.jclouds.ec2.domain.BlockDeviceMapping.MapNewVolumeToDevice;
 import org.jclouds.javax.annotation.Nullable;
 import org.jclouds.rest.annotations.SinceApiVersion;
 
-import com.google.common.base.Objects;
-import com.google.common.base.Optional;
-import com.google.common.collect.ImmutableMap;
-import com.google.common.collect.ImmutableSet;
-import com.google.common.collect.ImmutableSortedSet;
+import java.util.Arrays;
+import java.util.Map;
+import java.util.Set;
+
+import static com.google.common.base.Objects.equal;
+import static com.google.common.base.Objects.toStringHelper;
+import static com.google.common.base.Preconditions.checkNotNull;
 
 /**
  * 
@@ -60,6 +59,7 @@ public class LaunchSpecification {
       protected String subnetId;
       protected String ramdiskId;
       protected Boolean monitoringEnabled;
+      protected Boolean publicIpAddressAssociated;
       protected ImmutableSet.Builder<BlockDeviceMapping> blockDeviceMappings = ImmutableSet
             .builder();
       protected ImmutableSet.Builder<String> securityGroupIds = ImmutableSet.builder();
@@ -78,6 +78,7 @@ public class LaunchSpecification {
          subnetId = null;
          ramdiskId = null;
          monitoringEnabled = false;
+         publicIpAddressAssociated = false;
          blockDeviceMappings = ImmutableSet.builder();
          securityGroupIds = ImmutableSet.builder();
          securityGroupNames = ImmutableSet.builder();
@@ -107,6 +108,12 @@ public class LaunchSpecification {
          return this;
       }
 
+
+      public Builder publicIpAddressAssociated(Boolean publicIpAddressAssociated) {
+        this.publicIpAddressAssociated = publicIpAddressAssociated;
+        return this;
+      }
+
       public Builder instanceType(String instanceType) {
          this.instanceType = instanceType;
          return this;
@@ -131,7 +138,7 @@ public class LaunchSpecification {
          this.subnetId = subnetId;
          return this;
       }
-      
+
       public Builder ramdiskId(String ramdiskId) {
          this.ramdiskId = ramdiskId;
          return this;
@@ -219,7 +226,7 @@ public class LaunchSpecification {
             iamInstanceProfile = Optional.absent();
          }
          return new LaunchSpecification(instanceType, imageId, kernelId, ramdiskId, availabilityZone, subnetId,
-               keyName, securityGroupIdToNames.build(), blockDeviceMappings.build(), monitoringEnabled,
+               keyName, securityGroupIdToNames.build(), blockDeviceMappings.build(), monitoringEnabled, publicIpAddressAssociated,
                securityGroupIds.build(), securityGroupNames.build(), userData, iamInstanceProfile);
       }
 
@@ -230,7 +237,7 @@ public class LaunchSpecification {
                .keyName(in.getKeyName()).securityGroupIdToNames(in.getSecurityGroupIdToNames())
                .securityGroupIds(in.getSecurityGroupIds()).securityGroupNames(in.getSecurityGroupNames())
                .blockDeviceMappings(in.getBlockDeviceMappings()).monitoringEnabled(in.isMonitoringEnabled())
-               .userData(in.getUserData());
+               .publicIpAddressAssociated(in.publicIpAddressAssociated).userData(in.getUserData());
          if (in.getIAMInstanceProfile().isPresent()) {
             builder.iamInstanceProfileArn(in.getIAMInstanceProfile().get().getArn().orNull());
             builder.iamInstanceProfileName(in.getIAMInstanceProfile().get().getName().orNull());
@@ -251,14 +258,16 @@ public class LaunchSpecification {
    protected final Set<String> securityGroupIds;
    protected final Set<String> securityGroupNames;
    protected final Boolean monitoringEnabled;
+   protected final Boolean publicIpAddressAssociated;
    protected final byte[] userData;
    protected final Optional<IAMInstanceProfileRequest> iamInstanceProfile;
 
    public LaunchSpecification(String instanceType, String imageId, String kernelId, String ramdiskId,
          String availabilityZone, String subnetId, String keyName, Map<String, String> securityGroupIdToNames,
-         Iterable<? extends BlockDeviceMapping> blockDeviceMappings, Boolean monitoringEnabled,
+         Iterable<? extends BlockDeviceMapping> blockDeviceMappings, Boolean monitoringEnabled, Boolean publicIpAddressAssociated,
          Set<String> securityGroupIds, Set<String> securityGroupNames, byte[] userData,
          Optional<IAMInstanceProfileRequest> iamInstanceProfile) {
+      this.publicIpAddressAssociated = publicIpAddressAssociated;
       this.instanceType = checkNotNull(instanceType, "instanceType");
       this.imageId = checkNotNull(imageId, "imageId");
       this.kernelId = kernelId;
@@ -293,6 +302,14 @@ public class LaunchSpecification {
       return monitoringEnabled;
    }
 
+
+   /**
+    * Public ip address associated
+    */
+   public Boolean isPublicIpAddressAssociated() {
+      return publicIpAddressAssociated;
+   }
+
    /**
     * The instance type.
     */
@@ -368,7 +385,7 @@ public class LaunchSpecification {
    /**
     * The IAM Instance Profile (IIP) associated with the instance.
     */
-   @SinceApiVersion("2012-06-01")
+   @SinceApiVersion("2014-02-01")
    public Optional<IAMInstanceProfileRequest> getIAMInstanceProfile() {
       return iamInstanceProfile;
    }
@@ -439,11 +456,16 @@ public class LaunchSpecification {
       } else if (!keyName.equals(other.keyName))
          return false;
       if (monitoringEnabled == null) {
-         if (other.monitoringEnabled != null)
+            if (other.monitoringEnabled != null)
+               return false;
+         } else if (!monitoringEnabled.equals(other.monitoringEnabled))
             return false;
-      } else if (!monitoringEnabled.equals(other.monitoringEnabled))
-         return false;
-      if (ramdiskId == null) {
+      if (publicIpAddressAssociated == null) {
+            if (other.publicIpAddressAssociated != null)
+               return false;
+         } else if (!publicIpAddressAssociated.equals(other.publicIpAddressAssociated))
+            return false;
+       if (ramdiskId == null) {
          if (other.ramdiskId != null)
             return false;
       } else if (!ramdiskId.equals(other.ramdiskId))
@@ -487,7 +509,7 @@ public class LaunchSpecification {
             + ", iamInstanceProfile=" + iamInstanceProfile.orNull() + "]";
    }
 
-   @SinceApiVersion("2012-06-01")
+   @SinceApiVersion("2014-02-01")
    public static class IAMInstanceProfileRequest {
 
       public static IAMInstanceProfileRequest forArn(String arn) {
diff --git a/providers/aws-ec2/src/main/java/org/jclouds/aws/ec2/options/AWSRunInstancesOptions.java b/providers/aws-ec2/src/main/java/org/jclouds/aws/ec2/options/AWSRunInstancesOptions.java
index a11ac54..6c8d88d 100644
--- a/providers/aws-ec2/src/main/java/org/jclouds/aws/ec2/options/AWSRunInstancesOptions.java
+++ b/providers/aws-ec2/src/main/java/org/jclouds/aws/ec2/options/AWSRunInstancesOptions.java
@@ -16,16 +16,15 @@
  */
 package org.jclouds.aws.ec2.options;
 
-import static com.google.common.base.Preconditions.checkNotNull;
-
-import java.util.Set;
-
+import com.google.common.collect.ImmutableSet;
 import org.jclouds.aws.ec2.domain.LaunchSpecification;
 import org.jclouds.ec2.domain.BlockDeviceMapping;
 import org.jclouds.ec2.options.RunInstancesOptions;
 import org.jclouds.rest.annotations.SinceApiVersion;
 
-import com.google.common.collect.ImmutableSet;
+import java.util.Set;
+
+import static com.google.common.base.Preconditions.checkNotNull;
 
 /**
  * Contains options supported in the Form API for the RunInstances operation. <h2>
@@ -70,6 +69,18 @@ public class AWSRunInstancesOptions extends RunInstancesOptions {
       return this;
    }
 
+
+    /**
+     * Associate public ip for the instance
+     */
+   public AWSRunInstancesOptions associatePublicIpAddressAndSubnetId(String subnetId) {
+       formParameters.put("NetworkInterface.0.DeviceIndex", "0");
+       formParameters.put("NetworkInterface.0.AssociatePublicIpAddress", "true");
+       formParameters.put("NetworkInterface.0.SubnetId", checkNotNull(subnetId, "subnetId"));
+       launchSpecificationBuilder.publicIpAddressAssociated(true);
+       return this;
+   }
+
    /**
     * Specifies the subnet ID within which to launch the instance(s) for Amazon Virtual Private
     * Cloud.
@@ -89,16 +100,27 @@ public class AWSRunInstancesOptions extends RunInstancesOptions {
       return this;
    }
 
+
+   public AWSRunInstancesOptions withSecurityGroupIdsForNetworkInterface(Iterable<String> securityGroupIds) {
+      launchSpecificationBuilder.securityGroupIds(securityGroupIds);
+      indexFormValuesWithPrefix("NetworkInterface.0.SecurityGroupId", securityGroupIds);
+      return this;
+   }
+
    public AWSRunInstancesOptions withSecurityGroupIds(String... securityGroupIds) {
       return withSecurityGroupIds(ImmutableSet.copyOf(securityGroupIds));
    }
 
+   public AWSRunInstancesOptions withSecurityGroupIdsForNetworkInterface(String... securityGroupIds) {
+      return withSecurityGroupIdsForNetworkInterface(ImmutableSet.copyOf(securityGroupIds));
+   }
+
    /**
     * Amazon resource name (ARN) of the IAM Instance Profile (IIP) to associate with the instances.
     * 
     * @see org.jclouds.aws.ec2.domain.AWSRunningInstance#getIAMInstanceProfile()
     */
-   @SinceApiVersion("2012-06-01")
+   @SinceApiVersion("2014-02-01")
    public AWSRunInstancesOptions withIAMInstanceProfileArn(String arn) {
       formParameters.put("IamInstanceProfile.Arn", checkNotNull(arn, "arn"));
       return this;
@@ -109,7 +131,7 @@ public class AWSRunInstancesOptions extends RunInstancesOptions {
     * 
     * @see org.jclouds.aws.ec2.domain.AWSRunningInstance#getIAMInstanceProfile()
     */
-   @SinceApiVersion("2012-06-01")
+   @SinceApiVersion("2014-02-01")
    public AWSRunInstancesOptions withIAMInstanceProfileName(String name) {
       formParameters.put("IamInstanceProfile.Name", checkNotNull(name, "name"));
       return this;
diff --git a/providers/aws-ec2/src/main/java/org/jclouds/aws/ec2/xml/LaunchSpecificationHandler.java b/providers/aws-ec2/src/main/java/org/jclouds/aws/ec2/xml/LaunchSpecificationHandler.java
index e9f79e8..02e3486 100644
--- a/providers/aws-ec2/src/main/java/org/jclouds/aws/ec2/xml/LaunchSpecificationHandler.java
+++ b/providers/aws-ec2/src/main/java/org/jclouds/aws/ec2/xml/LaunchSpecificationHandler.java
@@ -16,11 +16,6 @@
  */
 package org.jclouds.aws.ec2.xml;
 
-import static org.jclouds.util.SaxUtils.equalsOrSuffix;
-
-import javax.annotation.Resource;
-import javax.inject.Inject;
-
 import org.jclouds.aws.ec2.domain.LaunchSpecification;
 import org.jclouds.aws.ec2.domain.LaunchSpecification.Builder;
 import org.jclouds.date.DateCodec;
@@ -30,6 +25,11 @@ import org.jclouds.http.functions.ParseSax.HandlerForGeneratedRequestWithResult;
 import org.jclouds.logging.Logger;
 import org.xml.sax.Attributes;
 
+import javax.annotation.Resource;
+import javax.inject.Inject;
+
+import static org.jclouds.util.SaxUtils.equalsOrSuffix;
+
 /**
  * 
  * @author Adrian Cole
@@ -124,9 +124,13 @@ public class LaunchSpecificationHandler extends HandlerForGeneratedRequestWithRe
       } else if (qName.equals("ramdiskId")) {
          builder.ramdiskId(currentOrNull());
       } else if (qName.equals("enabled")) {
-         String monitoringEnabled = currentOrNull();
-         if (monitoringEnabled != null)
-            builder.monitoringEnabled(Boolean.valueOf(monitoringEnabled));
+           String monitoringEnabled = currentOrNull();
+           if (monitoringEnabled != null)           {
+              builder.monitoringEnabled(Boolean.valueOf(monitoringEnabled));}
+      }else if (qName.equals("publicIpAddressAssociated")) {
+           String publicIpAddressAssociated = currentOrNull();
+           if (publicIpAddressAssociated != null)
+              builder.publicIpAddressAssociated(Boolean.valueOf(publicIpAddressAssociated));
       }
       currentText = new StringBuilder();
    }
diff --git a/providers/aws-ec2/src/test/java/org/jclouds/aws/ec2/features/PlacementGroupApiExpectTest.java b/providers/aws-ec2/src/test/java/org/jclouds/aws/ec2/features/PlacementGroupApiExpectTest.java
index c48e6a8..dcb070b 100644
--- a/providers/aws-ec2/src/test/java/org/jclouds/aws/ec2/features/PlacementGroupApiExpectTest.java
+++ b/providers/aws-ec2/src/test/java/org/jclouds/aws/ec2/features/PlacementGroupApiExpectTest.java
@@ -16,9 +16,8 @@
  */
 package org.jclouds.aws.ec2.features;
 
-import static com.google.common.collect.Iterables.getOnlyElement;
-import static org.testng.Assert.assertEquals;
-
+import com.google.common.collect.ImmutableMultimap;
+import com.google.common.collect.ImmutableSet;
 import org.jclouds.aws.ec2.AWSEC2Api;
 import org.jclouds.aws.ec2.compute.internal.BaseAWSEC2ComputeServiceExpectTest;
 import org.jclouds.aws.ec2.domain.PlacementGroup;
@@ -26,8 +25,8 @@ import org.jclouds.http.HttpRequest;
 import org.jclouds.http.HttpResponse;
 import org.testng.annotations.Test;
 
-import com.google.common.collect.ImmutableMultimap;
-import com.google.common.collect.ImmutableSet;
+import static com.google.common.collect.Iterables.getOnlyElement;
+import static org.testng.Assert.assertEquals;
 
 /**
  * @author Andrew Bayer
@@ -41,11 +40,11 @@ public class PlacementGroupApiExpectTest extends BaseAWSEC2ComputeServiceExpectT
            .addFormParam("Action", "DescribePlacementGroups")
            .addFormParam("Filter.1.Name", "strategy")
            .addFormParam("Filter.1.Value.1", "cluster")
-           .addFormParam("Signature", "SaA7Un1BE3m9jIEKyjXNdQPzFh/QAJSCebvKXiwUEK0%3D")
+           .addFormParam("Signature", "mAMdRgaHRw8LAAF2hzTC79yNHmuOwH7S8D%2BiTDi30nU%3D")
            .addFormParam("SignatureMethod", "HmacSHA256")
            .addFormParam("SignatureVersion", "2")
            .addFormParam("Timestamp", "2012-04-16T15%3A54%3A08.897Z")
-           .addFormParam("Version", "2012-06-01")
+           .addFormParam("Version", "2014-02-01")
            .addFormParam("AWSAccessKeyId", "identity").build();
 
    public void testFilterWhenResponseIs2xx() {
diff --git a/providers/aws-ec2/src/test/java/org/jclouds/aws/ec2/features/SpotInstanceApiExpectTest.java b/providers/aws-ec2/src/test/java/org/jclouds/aws/ec2/features/SpotInstanceApiExpectTest.java
index f15c7c7..2b746ea 100644
--- a/providers/aws-ec2/src/test/java/org/jclouds/aws/ec2/features/SpotInstanceApiExpectTest.java
+++ b/providers/aws-ec2/src/test/java/org/jclouds/aws/ec2/features/SpotInstanceApiExpectTest.java
@@ -16,9 +16,8 @@
  */
 package org.jclouds.aws.ec2.features;
 
-import static com.google.common.collect.Iterables.getOnlyElement;
-import static org.testng.Assert.assertEquals;
-
+import com.google.common.collect.ImmutableMultimap;
+import com.google.common.collect.ImmutableSet;
 import org.jclouds.aws.ec2.AWSEC2Api;
 import org.jclouds.aws.ec2.compute.internal.BaseAWSEC2ComputeServiceExpectTest;
 import org.jclouds.aws.ec2.domain.SpotInstanceRequest;
@@ -26,8 +25,8 @@ import org.jclouds.http.HttpRequest;
 import org.jclouds.http.HttpResponse;
 import org.testng.annotations.Test;
 
-import com.google.common.collect.ImmutableMultimap;
-import com.google.common.collect.ImmutableSet;
+import static com.google.common.collect.Iterables.getOnlyElement;
+import static org.testng.Assert.assertEquals;
 
 /**
  * @author Andrew Bayer
@@ -41,11 +40,11 @@ public class SpotInstanceApiExpectTest extends BaseAWSEC2ComputeServiceExpectTes
            .addFormParam("Action", "DescribeSpotInstanceRequests")
            .addFormParam("Filter.1.Name", "instance-id")
            .addFormParam("Filter.1.Value.1", "i-ef308e8e")
-           .addFormParam("Signature", "wQtGpumMCDEzvlldKepCKeEjD9iE7eAyiRBlQztcJMA%3D")
+           .addFormParam("Signature", "M4wqA0OGm%2BNgKatZdB80udvU3gsTFKTGyvNA7Qf9isg%3D")
            .addFormParam("SignatureMethod", "HmacSHA256")
            .addFormParam("SignatureVersion", "2")
            .addFormParam("Timestamp", "2012-04-16T15%3A54%3A08.897Z")
-           .addFormParam("Version", "2012-06-01")
+           .addFormParam("Version", "2014-02-01")
            .addFormParam("AWSAccessKeyId", "identity").build();
 
    public void testFilterWhenResponseIs2xx() {
diff --git a/providers/aws-ec2/src/test/java/org/jclouds/aws/ec2/functions/SpotInstanceRequestToAWSRunningInstanceTest.java b/providers/aws-ec2/src/test/java/org/jclouds/aws/ec2/functions/SpotInstanceRequestToAWSRunningInstanceTest.java
index d3f6188..1d9283c 100644
--- a/providers/aws-ec2/src/test/java/org/jclouds/aws/ec2/functions/SpotInstanceRequestToAWSRunningInstanceTest.java
+++ b/providers/aws-ec2/src/test/java/org/jclouds/aws/ec2/functions/SpotInstanceRequestToAWSRunningInstanceTest.java
@@ -16,8 +16,6 @@
  */
 package org.jclouds.aws.ec2.functions;
 
-import static org.testng.Assert.assertEquals;
-
 import org.jclouds.aws.ec2.domain.AWSRunningInstance;
 import org.jclouds.aws.ec2.domain.LaunchSpecification;
 import org.jclouds.aws.ec2.domain.MonitoringState;
@@ -29,6 +27,8 @@ import org.jclouds.ec2.domain.Hypervisor;
 import org.jclouds.ec2.domain.InstanceState;
 import org.testng.annotations.Test;
 
+import static org.testng.Assert.assertEquals;
+
 /**
  * Tests behavior of {@code SpotInstanceRequestToAWSRunningInstance}
  * 
diff --git a/providers/aws-ec2/src/test/resources/describe_instances_1.xml b/providers/aws-ec2/src/test/resources/describe_instances_1.xml
index 5d6bf68..889c30f 100644
--- a/providers/aws-ec2/src/test/resources/describe_instances_1.xml
+++ b/providers/aws-ec2/src/test/resources/describe_instances_1.xml
@@ -1,4 +1,4 @@
-<DescribeInstancesResponse xmlns="http://ec2.amazonaws.com/doc/2012-06-01/">
+<DescribeInstancesResponse xmlns="http://ec2.amazonaws.com/doc/2014-02-01/">
     <requestId>b3e1c7ee-1f34-4582-9493-695c9425c679</requestId>
     <reservationSet>
         <item>
diff --git a/providers/aws-ec2/src/test/resources/describe_instances_2.xml b/providers/aws-ec2/src/test/resources/describe_instances_2.xml
index 380a5bf..38a2504 100644
--- a/providers/aws-ec2/src/test/resources/describe_instances_2.xml
+++ b/providers/aws-ec2/src/test/resources/describe_instances_2.xml
@@ -1,4 +1,4 @@
-<DescribeInstancesResponse xmlns="http://ec2.amazonaws.com/doc/2012-06-01/">
+<DescribeInstancesResponse xmlns="http://ec2.amazonaws.com/doc/2014-02-01/">
     <requestId>b2238f71-750f-4eed-8f5c-eb4e6f66b687</requestId>
     <reservationSet>
         <item>
diff --git a/providers/aws-ec2/src/test/resources/describe_instances_3.xml b/providers/aws-ec2/src/test/resources/describe_instances_3.xml
index 1e15ce9..b03ea7d 100644
--- a/providers/aws-ec2/src/test/resources/describe_instances_3.xml
+++ b/providers/aws-ec2/src/test/resources/describe_instances_3.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<DescribeInstancesResponse xmlns="http://ec2.amazonaws.com/doc/2012-06-01/">
+<DescribeInstancesResponse xmlns="http://ec2.amazonaws.com/doc/2014-02-01/">
     <requestId>440faed2-0331-488d-a04d-d8c9aba85307</requestId>
     <reservationSet/>
 </DescribeInstancesResponse>
diff --git a/providers/aws-ec2/src/test/resources/describe_instances_latest.xml b/providers/aws-ec2/src/test/resources/describe_instances_latest.xml
index 9d606b8..1664ac9 100644
--- a/providers/aws-ec2/src/test/resources/describe_instances_latest.xml
+++ b/providers/aws-ec2/src/test/resources/describe_instances_latest.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<DescribeInstancesResponse xmlns="http://ec2.amazonaws.com/doc/2012-06-01/">
+<DescribeInstancesResponse xmlns="http://ec2.amazonaws.com/doc/2014-02-01/">
     <requestId>a03c1896-0543-485f-a732-ebc83873a3ca</requestId>
     <reservationSet>
         <item>
diff --git a/providers/aws-ec2/src/test/resources/describe_instances_pending.xml b/providers/aws-ec2/src/test/resources/describe_instances_pending.xml
index 0013106..2793e54 100644
--- a/providers/aws-ec2/src/test/resources/describe_instances_pending.xml
+++ b/providers/aws-ec2/src/test/resources/describe_instances_pending.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<DescribeInstancesResponse xmlns="http://ec2.amazonaws.com/doc/2012-06-01/">
+<DescribeInstancesResponse xmlns="http://ec2.amazonaws.com/doc/2014-02-01/">
     <requestId>dcd37ecf-e5b6-462b-99a8-112427b3e3a2</requestId>
     <reservationSet>
         <item>
diff --git a/providers/aws-ec2/src/test/resources/describe_security_groups_vpc.xml b/providers/aws-ec2/src/test/resources/describe_security_groups_vpc.xml
index e444aa5..99f7678 100644
--- a/providers/aws-ec2/src/test/resources/describe_security_groups_vpc.xml
+++ b/providers/aws-ec2/src/test/resources/describe_security_groups_vpc.xml
@@ -1,4 +1,4 @@
-<DescribeSecurityGroupsResponse xmlns="http://ec2.amazonaws.com/doc/2012-06-01/">
+<DescribeSecurityGroupsResponse xmlns="http://ec2.amazonaws.com/doc/2014-02-01/">
         <requestId>xxxxxxxxxxxxxxxx</requestId>
         <securityGroupInfo>
             <item>
diff --git a/providers/aws-ec2/src/test/resources/describe_spot_instance.xml b/providers/aws-ec2/src/test/resources/describe_spot_instance.xml
index 964b246..084bcca 100644
--- a/providers/aws-ec2/src/test/resources/describe_spot_instance.xml
+++ b/providers/aws-ec2/src/test/resources/describe_spot_instance.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<DescribeSpotInstanceRequestsResponse xmlns="http://ec2.amazonaws.com/doc/2012-06-01/">
+<DescribeSpotInstanceRequestsResponse xmlns="http://ec2.amazonaws.com/doc/2014-02-01/">
     <requestId>d9da716a-5cd4-492e-83b9-6777ac16d6cf</requestId>
     <spotInstanceRequestSet>
         <item>
diff --git a/providers/aws-ec2/src/test/resources/describe_spot_instance_requests.xml b/providers/aws-ec2/src/test/resources/describe_spot_instance_requests.xml
index e6598ee..7e4dea8 100644
--- a/providers/aws-ec2/src/test/resources/describe_spot_instance_requests.xml
+++ b/providers/aws-ec2/src/test/resources/describe_spot_instance_requests.xml
@@ -1,4 +1,4 @@
-<DescribeSpotInstanceRequestsResponse xmlns="http://ec2.amazonaws.com/doc/2012-06-01/">
+<DescribeSpotInstanceRequestsResponse xmlns="http://ec2.amazonaws.com/doc/2014-02-01/">
     <requestId>7c4dd2bd-106d-4cd3-987c-35ee819180a6</requestId>
     <spotInstanceRequestSet>
         <item>
diff --git a/providers/aws-ec2/src/test/resources/describe_spot_instance_tags.xml b/providers/aws-ec2/src/test/resources/describe_spot_instance_tags.xml
index 2b1a1a1..75930bc 100644
--- a/providers/aws-ec2/src/test/resources/describe_spot_instance_tags.xml
+++ b/providers/aws-ec2/src/test/resources/describe_spot_instance_tags.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<DescribeSpotInstanceRequestsResponse xmlns="http://ec2.amazonaws.com/doc/2012-06-01/">
+<DescribeSpotInstanceRequestsResponse xmlns="http://ec2.amazonaws.com/doc/2014-02-01/">
     <requestId>f2247378-7df0-4725-b55f-8ef58b557dcd</requestId>
     <spotInstanceRequestSet>
         <item>
diff --git a/providers/aws-ec2/src/test/resources/describe_spot_instances_1.xml b/providers/aws-ec2/src/test/resources/describe_spot_instances_1.xml
index 5cb54ba..8791115 100644
--- a/providers/aws-ec2/src/test/resources/describe_spot_instances_1.xml
+++ b/providers/aws-ec2/src/test/resources/describe_spot_instances_1.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<DescribeSpotInstanceRequestsResponse xmlns="http://ec2.amazonaws.com/doc/2012-06-01/">
+<DescribeSpotInstanceRequestsResponse xmlns="http://ec2.amazonaws.com/doc/2014-02-01/">
     <requestId>f2247378-7df0-4725-b55f-8ef58b557dcd</requestId>
     <spotInstanceRequestSet>
         <item>
diff --git a/providers/aws-ec2/src/test/resources/describe_spot_price_history.xml b/providers/aws-ec2/src/test/resources/describe_spot_price_history.xml
index c25a536..e3a37ba 100644
--- a/providers/aws-ec2/src/test/resources/describe_spot_price_history.xml
+++ b/providers/aws-ec2/src/test/resources/describe_spot_price_history.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<DescribeSpotPriceHistoryResponse xmlns="http://ec2.amazonaws.com/doc/2012-06-01/">
+<DescribeSpotPriceHistoryResponse xmlns="http://ec2.amazonaws.com/doc/2014-02-01/">
     <requestId>99777a75-2a2b-4296-a305-650c442d2d63</requestId>
     <spotPriceHistorySet>
         <item>
diff --git a/providers/aws-ec2/src/test/resources/request_spot_instances-ebs.xml b/providers/aws-ec2/src/test/resources/request_spot_instances-ebs.xml
index 7f64608..b8ae440 100644
--- a/providers/aws-ec2/src/test/resources/request_spot_instances-ebs.xml
+++ b/providers/aws-ec2/src/test/resources/request_spot_instances-ebs.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<RequestSpotInstancesResponse xmlns="http://ec2.amazonaws.com/doc/2012-06-01/">
+<RequestSpotInstancesResponse xmlns="http://ec2.amazonaws.com/doc/2014-02-01/">
     <requestId>02401e8e-a4f5-4285-8ea8-6d742fbaadd8</requestId>
     <spotInstanceRequestSet>
         <item>
diff --git a/providers/aws-ec2/src/test/resources/request_spot_instances.xml b/providers/aws-ec2/src/test/resources/request_spot_instances.xml
index deca9e5..977168a 100644
--- a/providers/aws-ec2/src/test/resources/request_spot_instances.xml
+++ b/providers/aws-ec2/src/test/resources/request_spot_instances.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<RequestSpotInstancesResponse xmlns="http://ec2.amazonaws.com/doc/2012-06-01/">
+<RequestSpotInstancesResponse xmlns="http://ec2.amazonaws.com/doc/2014-02-01/">
     <requestId>2ffc645f-6835-4d23-bd18-f6f53c253067</requestId>
     <spotInstanceRequestSet>
         <item>
diff --git a/providers/aws-ec2/src/test/resources/run_instances_1.xml b/providers/aws-ec2/src/test/resources/run_instances_1.xml
index 50ff562..0ea2ece 100644
--- a/providers/aws-ec2/src/test/resources/run_instances_1.xml
+++ b/providers/aws-ec2/src/test/resources/run_instances_1.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<RunInstancesResponse xmlns="http://ec2.amazonaws.com/doc/2012-06-01/">
+<RunInstancesResponse xmlns="http://ec2.amazonaws.com/doc/2014-02-01/">
     <requestId>7faf9500-67ef-484b-9fa5-73b6df638bc8</requestId>
     <reservationId>r-d3b815bc</reservationId>
     <ownerId>993194456877</ownerId>
