diff --git a/README.md b/README.md
index 2656b6ef0..f0546c011 100644
--- a/README.md
+++ b/README.md
@@ -1,4 +1,4 @@
-<h1 align="left">Firebase Kotlin SDK <img alt="GitHub last commit" src="https://img.shields.io/github/last-commit/gitliveapp/firebase-kotlin-sdk?style=flat-square"> <a href="https://git.live"><img src="https://img.shields.io/badge/GitLive-45_active_forks-blueviolet?style=flat-square"></a></h1>
+<h1 align="left">Firebase Kotlin SDK <img alt="GitHub last commit" src="https://img.shields.io/github/last-commit/gitliveapp/firebase-kotlin-sdk?style=flat-square"> <a href="https://git.live"><img src="https://img.shields.io/endpoint?style=flatsquare&url=https%3A%2F%2Fteamhub-dev.web.app%2Fbadge%3Forg%3DGitLiveApp%26repo%3Dfirebase-kotlin-sdk"></a></h1>
 <img align="left" width="75px" src="https://avatars2.githubusercontent.com/u/42865805?s=200&v=4"> 
   <b>Built and maintained with 🧡 by <a href="https://git.live">GitLive</a></b><br/>
   <i>Development teams merge faster with GitLive</i><br/>
@@ -76,7 +76,7 @@ plugins {
 }
 ```
 
-Then mark you custom classes `@Serializable`:
+Then mark your custom classes `@Serializable`:
 
 ```kotlin
 @Serializable
@@ -269,9 +269,13 @@ These properties are only accessible from the equivalent target's source set. Fo
           .build()
 ```
 
+### Running on Android
+
+On android, some modules (`config`) require you to enable [Core library desugaring](https://developer.android.com/studio/write/java8-support#library-desugaring) if you have a *minSDK lower than API 26*.
+
 ### Running on iOS
 
-On iOS the official [Firebase iOS SDK](https://github.com/firebase/firebase-ios-sdk) in not linked as a transtive dependency. Therefore, any project using this SDK needs to link the actual Firestore SDK as well. This can be done through your preferred installation method (Cocoapods/SPM).
+On iOS the official [Firebase iOS SDK](https://github.com/firebase/firebase-ios-sdk) in not linked as a transitive dependency. Therefore, any project using this SDK needs to link the actual Firestore SDK as well. This can be done through your preferred installation method (Cocoapods/SPM).
 
 Similarly, tests require linking as well. Make sure to add the required frameworks to the search path of your test targets. This can be done by specifying a `cocoapods` block in your `build.gradle`:
 ```kotlin
diff --git a/firebase-common-internal/package.json b/firebase-common-internal/package.json
index c1a555b9e..9548da6c3 100644
--- a/firebase-common-internal/package.json
+++ b/firebase-common-internal/package.json
@@ -1,6 +1,6 @@
 {
   "name": "@gitlive/firebase-common-internal",
-  "version": "2.0.0",
+  "version": "2.1.0",
   "description": "Wrapper around firebase for usage in Kotlin Multiplatform projects",
   "main": "firebase-common-internal.js",
   "scripts": {
@@ -23,7 +23,7 @@
   },
   "homepage": "https://github.com/GitLiveApp/firebase-kotlin-multiplatform-sdk",
   "dependencies": {
-    "@gitlive/firebase-common": "2.0.0",
+    "@gitlive/firebase-common": "2.1.0",
     "firebase": "9.19.1",
     "kotlin": "1.8.20",
     "kotlinx-coroutines-core": "1.6.4",
diff --git a/firebase-config/build.gradle.kts b/firebase-config/build.gradle.kts
index a28086463..f942264e4 100644
--- a/firebase-config/build.gradle.kts
+++ b/firebase-config/build.gradle.kts
@@ -29,7 +29,6 @@ android {
     }
 
     compileOptions {
-        isCoreLibraryDesugaringEnabled = true
         sourceCompatibility = JavaVersion.VERSION_17
         targetCompatibility = JavaVersion.VERSION_17
     }
@@ -45,10 +44,6 @@ android {
     }
 }
 
-dependencies {
-    coreLibraryDesugaring(libs.android.desugarjdk)
-}
-
 val supportIosTarget = project.property("skipIosTarget") != "true"
 
 kotlin {
diff --git a/firebase-crashlytics/src/iosMain/kotlin/dev/gitlive/firebase/crashlytics/crashlytics.kt b/firebase-crashlytics/src/iosMain/kotlin/dev/gitlive/firebase/crashlytics/crashlytics.kt
index 6c6d16bec..5445ceb6e 100644
--- a/firebase-crashlytics/src/iosMain/kotlin/dev/gitlive/firebase/crashlytics/crashlytics.kt
+++ b/firebase-crashlytics/src/iosMain/kotlin/dev/gitlive/firebase/crashlytics/crashlytics.kt
@@ -37,22 +37,22 @@ public actual class FirebaseCrashlytics internal constructor(internal val ios: F
     }
     public actual fun didCrashOnPreviousExecution(): Boolean = ios.didCrashDuringPreviousExecution()
     public actual fun setCustomKey(key: String, value: String) {
-        ios.setCustomValue(key, value)
+        ios.setCustomValue(value, key)
     }
     public actual fun setCustomKey(key: String, value: Boolean) {
-        ios.setCustomValue(key, value.toString())
+        ios.setCustomValue(value.toString(), key)
     }
     public actual fun setCustomKey(key: String, value: Double) {
-        ios.setCustomValue(key, value.toString())
+        ios.setCustomValue(value.toString(), key)
     }
     public actual fun setCustomKey(key: String, value: Float) {
-        ios.setCustomValue(key, value.toString())
+        ios.setCustomValue(value.toString(), key)
     }
     public actual fun setCustomKey(key: String, value: Int) {
-        ios.setCustomValue(key, value.toString())
+        ios.setCustomValue(value.toString(), key)
     }
     public actual fun setCustomKey(key: String, value: Long) {
-        ios.setCustomValue(key, value.toString())
+        ios.setCustomValue(value.toString(), key)
     }
 
     @Suppress("UNCHECKED_CAST")
diff --git a/firebase-storage/api/android/firebase-storage.api b/firebase-storage/api/android/firebase-storage.api
index 4715f8dcf..3613f5aab 100644
--- a/firebase-storage/api/android/firebase-storage.api
+++ b/firebase-storage/api/android/firebase-storage.api
@@ -13,6 +13,7 @@ public final class dev/gitlive/firebase/storage/FirebaseStorage {
 	public final fun getMaxOperationRetryTime-UwyO8pc ()J
 	public final fun getMaxUploadRetryTime-UwyO8pc ()J
 	public final fun getReference ()Ldev/gitlive/firebase/storage/StorageReference;
+	public final fun getReferenceFromUrl (Ljava/lang/String;)Ldev/gitlive/firebase/storage/StorageReference;
 	public final fun reference (Ljava/lang/String;)Ldev/gitlive/firebase/storage/StorageReference;
 	public final fun setMaxOperationRetryTime-LRDsOJo (J)V
 	public final fun setMaxUploadRetryTime-LRDsOJo (J)V
diff --git a/firebase-storage/api/jvm/firebase-storage.api b/firebase-storage/api/jvm/firebase-storage.api
index e94fb4ab9..eaa50149c 100644
--- a/firebase-storage/api/jvm/firebase-storage.api
+++ b/firebase-storage/api/jvm/firebase-storage.api
@@ -11,6 +11,7 @@ public final class dev/gitlive/firebase/storage/FirebaseStorage {
 	public final fun getMaxOperationRetryTime-UwyO8pc ()J
 	public final fun getMaxUploadRetryTime-UwyO8pc ()J
 	public final fun getReference ()Ldev/gitlive/firebase/storage/StorageReference;
+	public final fun getReferenceFromUrl (Ljava/lang/String;)Ldev/gitlive/firebase/storage/StorageReference;
 	public final fun reference (Ljava/lang/String;)Ldev/gitlive/firebase/storage/StorageReference;
 	public final fun setMaxOperationRetryTime-LRDsOJo (J)V
 	public final fun setMaxUploadRetryTime-LRDsOJo (J)V
diff --git a/firebase-storage/src/androidMain/kotlin/dev/gitlive/firebase/storage/storage.kt b/firebase-storage/src/androidMain/kotlin/dev/gitlive/firebase/storage/storage.kt
index 8d435afed..41c906c45 100644
--- a/firebase-storage/src/androidMain/kotlin/dev/gitlive/firebase/storage/storage.kt
+++ b/firebase-storage/src/androidMain/kotlin/dev/gitlive/firebase/storage/storage.kt
@@ -55,6 +55,8 @@ public actual class FirebaseStorage(internal val android: com.google.firebase.st
     public actual val reference: StorageReference get() = StorageReference(android.reference)
 
     public actual fun reference(location: String): StorageReference = StorageReference(android.getReference(location))
+
+    public actual fun getReferenceFromUrl(fullUrl: String): StorageReference = StorageReference(android.getReferenceFromUrl(fullUrl))
 }
 
 public val StorageReference.android: com.google.firebase.storage.StorageReference get() = android
diff --git a/firebase-storage/src/commonMain/kotlin/dev/gitlive/firebase/storage/storage.kt b/firebase-storage/src/commonMain/kotlin/dev/gitlive/firebase/storage/storage.kt
index 8485adc51..57d311fed 100644
--- a/firebase-storage/src/commonMain/kotlin/dev/gitlive/firebase/storage/storage.kt
+++ b/firebase-storage/src/commonMain/kotlin/dev/gitlive/firebase/storage/storage.kt
@@ -86,6 +86,16 @@ public expect class FirebaseStorage {
      * @return An instance of [StorageReference] at the given child path.
      */
     public fun reference(location: String): StorageReference
+
+    /**
+     * Creates a [StorageReference] given a gs:// or https:// URL pointing to a Firebase Storage location.
+     *
+     * @param fullUrl A gs:// or http[s]:// URL used to initialize the reference. For example, you can pass
+     *     in a download URL retrieved from getDownloadUrl or the uri retrieved from toString An error is
+     *     thrown if fullUrl is not associated with the FirebaseApp used to initialize this FirebaseStorage.
+     * @return An instance of [StorageReference] at the given url.
+     */
+    public fun getReferenceFromUrl(fullUrl: String): StorageReference
 }
 
 @Deprecated("Deprecated to use Kotlin Duration", replaceWith = ReplaceWith("maxOperationRetryTime"))
diff --git a/firebase-storage/src/iosMain/kotlin/dev/gitlive/firebase/storage/storage.kt b/firebase-storage/src/iosMain/kotlin/dev/gitlive/firebase/storage/storage.kt
index 0a0c1afab..46dcbe97e 100644
--- a/firebase-storage/src/iosMain/kotlin/dev/gitlive/firebase/storage/storage.kt
+++ b/firebase-storage/src/iosMain/kotlin/dev/gitlive/firebase/storage/storage.kt
@@ -67,6 +67,8 @@ public actual class FirebaseStorage(internal val ios: FIRStorage) {
     public actual val reference: StorageReference get() = StorageReference(ios.reference())
 
     public actual fun reference(location: String): StorageReference = StorageReference(ios.referenceWithPath(location))
+
+    public actual fun getReferenceFromUrl(fullUrl: String): StorageReference = StorageReference(ios.referenceForURL(fullUrl))
 }
 
 public val StorageReference.ios: FIRStorageReference get() = ios
diff --git a/firebase-storage/src/jsMain/kotlin/dev/gitlive/firebase/storage/storage.kt b/firebase-storage/src/jsMain/kotlin/dev/gitlive/firebase/storage/storage.kt
index 14a7897b3..5337601ae 100644
--- a/firebase-storage/src/jsMain/kotlin/dev/gitlive/firebase/storage/storage.kt
+++ b/firebase-storage/src/jsMain/kotlin/dev/gitlive/firebase/storage/storage.kt
@@ -51,6 +51,8 @@ public actual class FirebaseStorage(internal val js: dev.gitlive.firebase.storag
     public actual val reference: StorageReference get() = StorageReference(ref(js))
 
     public actual fun reference(location: String): StorageReference = rethrow { StorageReference(ref(js, location)) }
+
+    public actual fun getReferenceFromUrl(fullUrl: String): StorageReference = rethrow { StorageReference(ref(js, fullUrl)) }
 }
 
 public val StorageReference.js get() = js
diff --git a/firebase-storage/src/jvmMain/kotlin/dev/gitlive/firebase/storage/storage.jvm.kt b/firebase-storage/src/jvmMain/kotlin/dev/gitlive/firebase/storage/storage.jvm.kt
index 9d4f16ab8..c3674a728 100644
--- a/firebase-storage/src/jvmMain/kotlin/dev/gitlive/firebase/storage/storage.jvm.kt
+++ b/firebase-storage/src/jvmMain/kotlin/dev/gitlive/firebase/storage/storage.jvm.kt
@@ -37,6 +37,10 @@ public actual class FirebaseStorage {
     public actual fun reference(location: String): StorageReference {
         TODO("Not yet implemented")
     }
+
+    public actual fun getReferenceFromUrl(fullUrl: String): StorageReference {
+        TODO("Not yet implemented")
+    }
 }
 
 public actual class StorageReference {
diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml
index c2a38ad9b..ed0772a45 100644
--- a/gradle/libs.versions.toml
+++ b/gradle/libs.versions.toml
@@ -1,26 +1,25 @@
 [versions]
-agp = "8.5.2"
+agp = "8.6.0"
 androidx-test-core = "1.6.1"
 androidx-test-junit = "1.2.1"
 androidx-test-runner = "1.6.2"
 ben-manes-versions = "0.51.0"
 firebase-bom = "33.2.0"
-gitlive-firebase-java-sdk = "0.4.5"
+gitlive-firebase-java-sdk = "0.4.6"
 gson = "2.11.0"
 junit = "4.13.2"
-kotlin = "2.0.20"
-kotlinx-coroutines = "1.9.0-RC.2"
-kotlinx-serialization = "1.7.1"
+kotlin = "2.0.21"
+kotlinx-coroutines = "1.9.0"
+kotlinx-serialization = "1.7.2"
 kotlinx-binarycompatibilityvalidator = "0.16.3"
 kotlinx-datetime = "0.6.1"
 kotlinter = "4.4.1"
 settings-api = "2.0"
 settings-language = "2.0"
-firebase-cocoapods = "11.1.0"
+firebase-cocoapods = "11.4.0"
 ios-deploymentTarget = "13.0"
 test-logger-plugin = "4.0.0"
 dokka = "1.9.20"
-desugar-libs = "2.1.0"
 
 [libraries]
 android-gradle-plugin = { module = "com.android.tools.build:gradle", version.ref = "agp" }
@@ -50,7 +49,6 @@ kotlinx-coroutines-swing = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-
 kotlinx-serialization-core = { module = "org.jetbrains.kotlinx:kotlinx-serialization-core", version.ref = "kotlinx-serialization" }
 kotlinx-datetime = { module = "org.jetbrains.kotlinx:kotlinx-datetime", version.ref = "kotlinx-datetime" }
 dokka-base = { module = "org.jetbrains.dokka:dokka-base", version.ref = "dokka" }
-android-desugarjdk = { module = "com.android.tools:desugar_jdk_libs", version.ref = "desugar-libs" }
 
 [plugins]
 android-application = { id = "com.android.application", version.ref = "agp" }