diff --git a/src/main/java/com/google/firebase/FirebaseOptions.java b/src/main/java/com/google/firebase/FirebaseOptions.java
index 8e7a29ccb..a7aeed498 100644
--- a/src/main/java/com/google/firebase/FirebaseOptions.java
+++ b/src/main/java/com/google/firebase/FirebaseOptions.java
@@ -24,6 +24,7 @@
 import com.google.api.client.util.Key;
 import com.google.auth.oauth2.GoogleCredentials;
 import com.google.cloud.firestore.FirestoreOptions;
+import com.google.cloud.storage.StorageOptions;
 import com.google.common.base.Strings;
 import com.google.common.base.Supplier;
 import com.google.common.base.Suppliers;
@@ -86,6 +87,8 @@ public GoogleCredentials get() {
   private final ThreadManager threadManager;
   private final FirestoreOptions firestoreOptions;
 
+  private final StorageOptions storageOptions;
+
   private FirebaseOptions(@NonNull final FirebaseOptions.Builder builder) {
     this.databaseUrl = builder.databaseUrl;
     this.credentialsSupplier = checkNotNull(
@@ -113,6 +116,7 @@ private FirebaseOptions(@NonNull final FirebaseOptions.Builder builder) {
     checkArgument(builder.readTimeout >= 0);
     this.readTimeout = builder.readTimeout;
     this.firestoreOptions = builder.firestoreOptions;
+    this.storageOptions = builder.storageOptions;
   }
 
   /**
@@ -216,6 +220,10 @@ FirestoreOptions getFirestoreOptions() {
     return firestoreOptions;
   }
 
+  public StorageOptions getStorageOptions() {
+    return storageOptions;
+  }
+
   /**
    * Creates an empty builder.
    *
@@ -251,6 +259,8 @@ public static final class Builder {
     @Key("storageBucket")
     private String storageBucket;
 
+    private StorageOptions storageOptions;
+
     @Key("serviceAccountId")
     private String serviceAccountId;
     private Supplier<GoogleCredentials> credentialsSupplier;
@@ -290,6 +300,7 @@ public Builder(FirebaseOptions options) {
       connectTimeout = options.connectTimeout;
       readTimeout = options.readTimeout;
       firestoreOptions = options.firestoreOptions;
+      storageOptions = options.storageOptions;
     }
 
     /**
@@ -495,6 +506,11 @@ public Builder setReadTimeout(int readTimeout) {
       return this;
     }
 
+    public Builder setStorageOptions(StorageOptions storageOptions) {
+      this.storageOptions = storageOptions;
+      return this;
+    }
+
     /**
      * Builds the {@link FirebaseOptions} instance from the previously set options.
      *
diff --git a/src/main/java/com/google/firebase/cloud/StorageClient.java b/src/main/java/com/google/firebase/cloud/StorageClient.java
index 955abd7e2..a755c8d03 100644
--- a/src/main/java/com/google/firebase/cloud/StorageClient.java
+++ b/src/main/java/com/google/firebase/cloud/StorageClient.java
@@ -19,6 +19,8 @@
 import static com.google.common.base.Preconditions.checkArgument;
 import static com.google.common.base.Preconditions.checkNotNull;
 
+import com.google.cloud.firestore.Firestore;
+import com.google.cloud.firestore.FirestoreOptions;
 import com.google.cloud.storage.Bucket;
 import com.google.cloud.storage.Storage;
 import com.google.cloud.storage.StorageOptions;
@@ -27,6 +29,7 @@
 import com.google.firebase.FirebaseApp;
 import com.google.firebase.ImplFirebaseTrampolines;
 import com.google.firebase.internal.FirebaseService;
+import com.google.firebase.internal.NonNull;
 
 /**
  * StorageClient provides access to Google Cloud Storage APIs. You can specify a default cloud
@@ -56,8 +59,12 @@ public static synchronized StorageClient getInstance(FirebaseApp app) {
     StorageClientService service = ImplFirebaseTrampolines.getService(app, SERVICE_ID,
         StorageClientService.class);
     if (service == null) {
-      Storage storage = StorageOptions.newBuilder()
+      StorageOptions userOptions =  app.getOptions().getStorageOptions();
+      StorageOptions.Builder builder = userOptions != null ? userOptions.toBuilder() :
+          StorageOptions.newBuilder();
+      Storage storage = builder
           .setCredentials(ImplFirebaseTrampolines.getCredentials(app))
+          .setProjectId(ImplFirebaseTrampolines.getProjectId(app))
           .build()
           .getService();
       StorageClient client = new StorageClient(app, storage);
@@ -66,6 +73,16 @@ public static synchronized StorageClient getInstance(FirebaseApp app) {
     return service.getInstance();
   }
 
+  @NonNull
+  public static Storage getStorage(FirebaseApp app) {
+    return getInstance(app).storage;
+  }
+
+  @NonNull
+  public static Storage getStorage() {
+    return getStorage(FirebaseApp.getInstance());
+  }
+
   /**
    * Returns the default cloud storage bucket associated with the current app. This is the bucket
    * configured via {@link com.google.firebase.FirebaseOptions} when initializing the app. If
diff --git a/src/test/java/com/google/firebase/cloud/StorageClientIT.java b/src/test/java/com/google/firebase/cloud/StorageClientIT.java
index 57fe58b82..4f4791b42 100644
--- a/src/test/java/com/google/firebase/cloud/StorageClientIT.java
+++ b/src/test/java/com/google/firebase/cloud/StorageClientIT.java
@@ -21,10 +21,16 @@
 import static org.junit.Assert.assertTrue;
 import static org.junit.Assert.fail;
 
+import com.google.auth.oauth2.GoogleCredentials;
 import com.google.cloud.storage.Blob;
 import com.google.cloud.storage.Bucket;
+import com.google.cloud.storage.Storage;
+import com.google.cloud.storage.StorageOptions;
 import com.google.common.io.CharStreams;
+import com.google.firebase.FirebaseApp;
+import com.google.firebase.FirebaseOptions;
 import com.google.firebase.testing.IntegrationTestUtils;
+import com.google.firebase.testing.ServiceAccount;
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.InputStreamReader;
@@ -87,5 +93,4 @@ private Blob createTextBlob(Bucket bucket, String contents) {
     String fileName = "data_" + System.currentTimeMillis() + ".txt";
     return bucket.create(fileName, contents.getBytes(), "text/plain");
   }
-
 }
diff --git a/src/test/java/com/google/firebase/cloud/StorageClientTest.java b/src/test/java/com/google/firebase/cloud/StorageClientTest.java
index 190fad6cc..a59c8df3e 100644
--- a/src/test/java/com/google/firebase/cloud/StorageClientTest.java
+++ b/src/test/java/com/google/firebase/cloud/StorageClientTest.java
@@ -16,15 +16,19 @@
 
 package com.google.firebase.cloud;
 
+import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNotSame;
 import static org.junit.Assert.assertSame;
 import static org.junit.Assert.fail;
 
 import com.google.auth.oauth2.GoogleCredentials;
 import com.google.cloud.storage.Bucket;
 import com.google.cloud.storage.Storage;
+import com.google.cloud.storage.StorageOptions;
 import com.google.firebase.FirebaseApp;
 import com.google.firebase.FirebaseOptions;
+import com.google.firebase.ImplFirebaseTrampolines;
 import com.google.firebase.TestOnlyImplFirebaseTrampolines;
 import com.google.firebase.testing.ServiceAccount;
 import java.io.IOException;
@@ -126,4 +130,34 @@ public void testBucket() throws IOException {
     assertSame(mockBucket, client.bucket());
     assertSame(mockBucket, client.bucket("mock-bucket-name"));
   }
+
+  @Test
+  public void testAbsentStorageOptions() throws Exception {
+    String projectId = "test-proj";
+    FirebaseOptions options = FirebaseOptions.builder()
+        .setCredentials(GoogleCredentials.fromStream(ServiceAccount.EDITOR.asStream()))
+        .setProjectId(projectId)
+        .build();
+
+    FirebaseApp.initializeApp(options);
+    Storage storage = StorageClient.getStorage();
+    assertEquals(projectId, storage.getOptions().getProjectId());
+    assertEquals("https://storage.googleapis.com", storage.getOptions().getHost());
+  }
+
+  @Test
+  public void testStorageOptions() throws IOException {
+    FirebaseApp app = FirebaseApp.initializeApp(FirebaseOptions.builder()
+        .setCredentials(GoogleCredentials.fromStream(ServiceAccount.EDITOR.asStream()))
+        .setProjectId("explicit-project-id")
+        .setStorageOptions(StorageOptions.newBuilder()
+          .setHost("explicit-host")
+          .build())
+        .build());
+    Storage storage1 = StorageClient.getStorage(app);
+    assertEquals("explicit-project-id", storage1.getOptions().getProjectId());
+    assertEquals("explicit-host", storage1.getOptions().getHost());
+
+    assertSame(storage1, StorageClient.getStorage());
+  }
 }