diff --git a/CHANGELOG_COMPOSE.md b/CHANGELOG_COMPOSE.md
index 0e6f88d..b2c37fc 100644
--- a/CHANGELOG_COMPOSE.md
+++ b/CHANGELOG_COMPOSE.md
@@ -1,7 +1,7 @@
 #### Note: For the time being, we won't provide numbered releases for every new Jetpack Compose
 version. Check out our [snapshot builds](https://github.com/airbnb/lottie/blob/master/android-compose.md#getting-started) instead.
 
-# 1.0.0-beta09-1
+# 1.0.0-rc01-1
 ## Breaking Changes
 `LottieAnimation` now takes a progress float instead of driving the animation internally.
 The driving of animations has been split into a new `LottieAnimatable` class and
diff --git a/lottie-compose/gradle.properties b/lottie-compose/gradle.properties
index 9a30505..311e384 100644
--- a/lottie-compose/gradle.properties
+++ b/lottie-compose/gradle.properties
@@ -4,4 +4,4 @@
 POM_ARTIFACT_ID=lottie-compose
 POM_PACKAGING=aar
 GROUP=com.airbnb.android
-VERSION_NAME=1.0.0-beta09-1-SNAPSHOT
+VERSION_NAME=1.0.0-rc01-1-SNAPSHOT
diff --git a/lottie/src/main/java/com/airbnb/lottie/LottieDrawable.java b/lottie/src/main/java/com/airbnb/lottie/LottieDrawable.java
index 9fd83c0..7631b62 100644
--- a/lottie/src/main/java/com/airbnb/lottie/LottieDrawable.java
+++ b/lottie/src/main/java/com/airbnb/lottie/LottieDrawable.java
@@ -1100,7 +1100,7 @@
       return bm.bitmapForId(id);
     }
     LottieImageAsset imageAsset = composition == null ? null : composition.getImages().get(id);
-    if (imageAsset != null && imageAsset.getBitmap() != null) {
+    if (imageAsset != null) {
       return imageAsset.getBitmap();
     }
     return null;
diff --git a/lottie/src/main/java/com/airbnb/lottie/manager/ImageAssetManager.java b/lottie/src/main/java/com/airbnb/lottie/manager/ImageAssetManager.java
index 2ac1dad..d28061d 100644
--- a/lottie/src/main/java/com/airbnb/lottie/manager/ImageAssetManager.java
+++ b/lottie/src/main/java/com/airbnb/lottie/manager/ImageAssetManager.java
@@ -20,16 +20,16 @@
 public class ImageAssetManager {
   private static final Object bitmapHashLock = new Object();
   private final Context context;
-  private String imagesFolder;
+  private final String imagesFolder;
   @Nullable private ImageAssetDelegate delegate;
   private final Map<String, LottieImageAsset> imageAssets;
 
   public ImageAssetManager(Drawable.Callback callback, String imagesFolder,
       ImageAssetDelegate delegate, Map<String, LottieImageAsset> imageAssets) {
-    this.imagesFolder = imagesFolder;
-    if (!TextUtils.isEmpty(imagesFolder) &&
-        this.imagesFolder.charAt(this.imagesFolder.length() - 1) != '/') {
-      this.imagesFolder += '/';
+    if (!TextUtils.isEmpty(imagesFolder) && imagesFolder.charAt(imagesFolder.length() - 1) != '/') {
+      this.imagesFolder = imagesFolder + '/';
+    } else {
+      this.imagesFolder = imagesFolder;
     }
     if (!(callback instanceof View)) {
       Logger.warning("LottieDrawable must be inside of a view for images to work.");
@@ -85,6 +85,7 @@
     BitmapFactory.Options opts = new BitmapFactory.Options();
     opts.inScaled = true;
     opts.inDensity = 160;
+
     if (filename.startsWith("data:") && filename.indexOf("base64,") > 0) {
       // Contents look like a base64 data URI, with the format data:image/png;base64,<data>.
       byte[] data;
@@ -130,4 +131,4 @@
       return bitmap;
     }
   }
-}
\ No newline at end of file
+}
diff --git a/sample-compose/src/main/java/com/airbnb/lottie/sample/compose/examples/ImagesExamplesPage.kt b/sample-compose/src/main/java/com/airbnb/lottie/sample/compose/examples/ImagesExamplesPage.kt
index c6a69b5..c9046dd 100644
--- a/sample-compose/src/main/java/com/airbnb/lottie/sample/compose/examples/ImagesExamplesPage.kt
+++ b/sample-compose/src/main/java/com/airbnb/lottie/sample/compose/examples/ImagesExamplesPage.kt
@@ -79,9 +79,8 @@
     val imageAsset by derivedStateOf { composition?.images?.get("image_0") }
     val context = LocalContext.current
     LaunchedEffect(imageAsset) {
-        val ia = imageAsset ?: return@LaunchedEffect
         withContext(Dispatchers.IO) {
-            ia.bitmap = loadBitmapFromAssets(context, ia)
+            imageAsset?.bitmap = loadBitmapFromAssets(context, imageAsset)
         }
     }
     LottieAnimation(
@@ -90,7 +89,8 @@
     )
 }
 
-private fun loadBitmapFromAssets(context: Context, asset: LottieImageAsset): Bitmap? {
+private fun loadBitmapFromAssets(context: Context, asset: LottieImageAsset?): Bitmap? {
+    asset ?: return null
     return try {
         val inputSteam = context.assets.open("Images/WeAccept/${asset.fileName}")
         val opts = BitmapFactory.Options()
