diff --git a/CHANGELOG.md b/CHANGELOG.md
index 9c8a4f3..f7d487e 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,6 @@
+## 0.8.14
+- Support override metadata properties in `copyObject`.
+
 ## 0.8.13
 - Support the latest version `^13.0.0` of the `googleapis` package.
 
diff --git a/lib/src/storage_impl.dart b/lib/src/storage_impl.dart
index d2850d9..afaf8a7 100644
--- a/lib/src/storage_impl.dart
+++ b/lib/src/storage_impl.dart
@@ -106,11 +106,14 @@
   }
 
   @override
-  Future copyObject(String src, String dest) {
+  Future copyObject(String src, String dest, {ObjectMetadata? metadata}) {
     var srcName = _AbsoluteName.parse(src);
     var destName = _AbsoluteName.parse(dest);
+    metadata ??= _ObjectMetadata();
+    var objectMetadata = metadata as _ObjectMetadata;
+    final object = objectMetadata._object;
     return _api.objects
-        .copy(storage_api.Object(), srcName.bucketName, srcName.objectName,
+        .copy(object, srcName.bucketName, srcName.objectName,
             destName.bucketName, destName.objectName)
         .then((_) => null);
   }
diff --git a/lib/storage.dart b/lib/storage.dart
index 540c651..21e7705 100644
--- a/lib/storage.dart
+++ b/lib/storage.dart
@@ -561,7 +561,9 @@
   /// Copy object [src] to object [dest].
   ///
   /// The names of [src] and [dest] must be absolute.
-  Future copyObject(String src, String dest);
+  ///
+  /// [metadata] can be used to overwrite metadata properties.
+  Future copyObject(String src, String dest, {ObjectMetadata? metadata});
 }
 
 /// Information on a specific object.
diff --git a/pubspec.yaml b/pubspec.yaml
index b315607..542893f 100644
--- a/pubspec.yaml
+++ b/pubspec.yaml
@@ -1,5 +1,5 @@
 name: gcloud
-version: 0.8.13
+version: 0.8.14
 description: >-
   High level idiomatic Dart API for Google Cloud Storage, Pub-Sub and Datastore.
 repository: https://github.com/dart-lang/gcloud
diff --git a/test/storage/e2e_test.dart b/test/storage/e2e_test.dart
index b93453c..fa9a317 100644
--- a/test/storage/e2e_test.dart
+++ b/test/storage/e2e_test.dart
@@ -153,6 +153,52 @@
       testCreateReadDelete('test-2', bytesResumableUpload);
     });
 
+    testWithBucket('create-copy-read-delete', (bucket) async {
+      final bytes = [1, 2, 3];
+      final info = await bucket.writeBytes('test-for-copy', bytes);
+      expect(info, isNotNull);
+
+      await storage.copyObject(
+        bucket.absoluteObjectName('test-for-copy'),
+        bucket.absoluteObjectName('test'),
+      );
+
+      final result =
+          await bucket.read('test').fold<List<int>>([], (p, e) => p..addAll(e));
+      expect(result, bytes);
+
+      await bucket.delete('test');
+      await bucket.delete('test-for-copy');
+    });
+
+    testWithBucket('create-copy-metadata-read-delete', (bucket) async {
+      final bytes = [1, 2, 3];
+      final info = await bucket.writeBytes(
+        'test-for-copy',
+        bytes,
+        metadata: ObjectMetadata(contentType: 'text/plain'),
+      );
+      expect(info, isNotNull);
+
+      await storage.copyObject(
+        bucket.absoluteObjectName('test-for-copy'),
+        bucket.absoluteObjectName('test'),
+        metadata: ObjectMetadata(contentType: 'application/octet'),
+      );
+
+      final r1 = await bucket.info('test-for-copy');
+      expect(r1.metadata.contentType, 'text/plain');
+      final r2 = await bucket.info('test');
+      expect(r2.metadata.contentType, 'application/octet');
+
+      final result =
+          await bucket.read('test').fold<List<int>>([], (p, e) => p..addAll(e));
+      expect(result, bytes);
+
+      await bucket.delete('test');
+      await bucket.delete('test-for-copy');
+    });
+
     group('create-read-delete-streaming', () {
       void testCreateReadDelete(String name, List<int> bytes) {
         testWithBucket(name, (bucket) async {
