diff --git a/providers/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/domain/DomainResourceReferences.java b/providers/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/domain/DomainResourceReferences.java
index 28e7287..def10f1 100644
--- a/providers/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/domain/DomainResourceReferences.java
+++ b/providers/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/domain/DomainResourceReferences.java
@@ -86,6 +86,7 @@
    }
 
    public enum StorageClass {
+      ARCHIVE(Tier.ARCHIVE),
       COLDLINE(Tier.ARCHIVE),
       DURABLE_REDUCED_AVAILABILITY(Tier.STANDARD),
       MULTI_REGIONAL(Tier.STANDARD),
@@ -103,7 +104,7 @@
          switch (tier) {
          case STANDARD: return StorageClass.STANDARD;
          case INFREQUENT: return StorageClass.NEARLINE;
-         case ARCHIVE: return StorageClass.COLDLINE;
+         case ARCHIVE: return StorageClass.ARCHIVE;
          }
          throw new IllegalArgumentException("invalid tier: " + tier);
       }
diff --git a/providers/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/features/BucketApiLiveTest.java b/providers/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/features/BucketApiLiveTest.java
index c59a82f..2639f21 100644
--- a/providers/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/features/BucketApiLiveTest.java
+++ b/providers/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/features/BucketApiLiveTest.java
@@ -60,6 +60,8 @@
 
    private static final String BUCKET_NAME_COLDLINE = "jcloudstestbucketcoldline" + (int) (Math.random() * 10000);
 
+   private static final String BUCKET_NAME_ARCHIVE = "jcloudstestbucketarchive" + (int) (Math.random() * 10000);
+
    private static final String BUCKET_NAME_MULTI_REGIONAL = "jcloudstestbucketmultiregional" + (int) (Math.random() * 10000);
 
    private static final String BUCKET_NAME_NEARLINE = "jcloudstestbucketnearline" + (int) (Math.random() * 10000);
@@ -142,6 +144,23 @@
    }
 
    @Test(groups = "live")
+   public void testCreateBucketArchive() {
+      BucketTemplate template = new BucketTemplate()
+               .name(BUCKET_NAME_ARCHIVE)
+               .location(Location.US)
+               .storageClass(StorageClass.ARCHIVE);
+
+      Bucket response = api().createBucket(PROJECT_NUMBER, template);
+
+      assertNotNull(response);
+      assertEquals(response.name(), BUCKET_NAME_ARCHIVE);
+      assertEquals(response.location(), Location.US);
+      assertThat(response.storageClass()).isEqualTo(StorageClass.ARCHIVE);
+
+      api().deleteBucket(BUCKET_NAME_ARCHIVE);
+   }
+
+   @Test(groups = "live")
    public void testCreateBucketMultiregional() {
       BucketTemplate template = new BucketTemplate()
                .name(BUCKET_NAME_MULTI_REGIONAL)
diff --git a/providers/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/features/ObjectApiLiveTest.java b/providers/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/features/ObjectApiLiveTest.java
index 5d44d58..46a5f18 100644
--- a/providers/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/features/ObjectApiLiveTest.java
+++ b/providers/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/features/ObjectApiLiveTest.java
@@ -449,6 +449,48 @@
                ByteStreams2.toByteArrayAndClose(payloadImpl.getPayload().openStream()));
    }
 
+   @Test(groups = "live", dependsOnMethods = "testPatchObjectsWithOptions")
+   public void testMultipartJpegUploadArchive() throws IOException {
+      long contentLength = 32 * 1024L;
+      ByteSource byteSource = TestUtils.randomByteSource().slice(0, contentLength);
+      ByteSourcePayload payload = Payloads.newByteSourcePayload(byteSource);
+      PayloadEnclosing payloadImpl = new PayloadEnclosingImpl(payload);
+
+      ObjectTemplate template = new ObjectTemplate();
+
+      ObjectAccessControls oacl = ObjectAccessControls.builder().bucket(BUCKET_NAME).entity("allUsers")
+               .role(ObjectRole.OWNER).build();
+
+      // This would trigger server side validation of md5
+      md5Hash = base64().encode(byteSource.hash(Hashing.md5()).asBytes());
+      // TODO: crc32c = without making a compile dep on guava 18
+
+      template.contentType("image/jpeg").addAcl(oacl).size(contentLength).name(MULTIPART_UPLOAD_OBJECT)
+               .contentLanguage("en").contentDisposition("attachment").md5Hash(md5Hash)
+               .storageClass(StorageClass.ARCHIVE)
+               .customMetadata("custommetakey1", "custommetavalue1").crc32c(crc32c)
+               .customMetadata(ImmutableMap.of("Adrian", "powderpuff"));
+
+      GoogleCloudStorageObject gcsObject = api().multipartUpload(BUCKET_NAME, template, payloadImpl.getPayload());
+
+      assertThat(gcsObject.bucket()).isEqualTo(BUCKET_NAME);
+      assertThat(gcsObject.name()).isEqualTo(MULTIPART_UPLOAD_OBJECT);
+      checkHashCodes(gcsObject);
+
+      assertThat(gcsObject.metadata()).contains(entry("custommetakey1", "custommetavalue1"),
+               entry("Adrian", "powderpuff")).doesNotContainKey("adrian");
+
+      gcsObject = api().getObject(BUCKET_NAME, MULTIPART_UPLOAD_OBJECT, null);
+
+      assertThat(gcsObject).isNotNull();
+      assertThat(gcsObject.storageClass()).isEqualTo(StorageClass.ARCHIVE);
+
+      PayloadEnclosing impl = api().download(BUCKET_NAME, MULTIPART_UPLOAD_OBJECT);
+
+      assertThat(ByteStreams2.toByteArrayAndClose(impl.getPayload().openStream())).isEqualTo(
+               ByteStreams2.toByteArrayAndClose(payloadImpl.getPayload().openStream()));
+   }
+
    private void checkHashCodes(GoogleCloudStorageObject gcsObject) {
       assertEquals(gcsObject.md5Hash(), md5Hash);
       if (crc32c != null) {
