diff --git a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/service/DownloadFile.kt b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/service/DownloadFile.kt
index 0b4dbbcc..ca9517c5 100644
--- a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/service/DownloadFile.kt
+++ b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/service/DownloadFile.kt
@@ -69,7 +69,13 @@ class DownloadFile(
 
     val progress: MutableLiveData<Int> = MutableLiveData(0)
 
-    val lazyStatus: Lazy<DownloadStatus> = lazy {
+    // We must be able to query if the status is initialized.
+    // The status is lazy because DownloadFiles are usually created in bulk, and
+    // checking their status possibly means a slow SAF operation.
+    val isStatusInitialized: Boolean
+        get() = lazyInitialStatus.isInitialized()
+
+    private val lazyInitialStatus: Lazy<DownloadStatus> = lazy {
         when {
             Storage.isPathExists(saveFile) -> {
                 DownloadStatus.PINNED
@@ -84,7 +90,7 @@ class DownloadFile(
     }
 
     val status: MutableLiveData<DownloadStatus> by lazy {
-        MutableLiveData(lazyStatus.value)
+        MutableLiveData(lazyInitialStatus.value)
     }
 
     init {
diff --git a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/service/Downloader.kt b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/service/Downloader.kt
index bbc60775..d2c0ea22 100644
--- a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/service/Downloader.kt
+++ b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/service/Downloader.kt
@@ -267,7 +267,7 @@ class Downloader(
             temp.addAll(downloadQueue)
             temp.addAll(
                 playlist.filter {
-                    if (!it.lazyStatus.isInitialized()) false
+                    if (!it.isStatusInitialized) false
                     else when (it.status.value) {
                         DownloadStatus.DOWNLOADING -> true
                         else -> false
diff --git a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/util/AbstractFile.kt b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/util/AbstractFile.kt
index 10e374e8..282dcdc8 100644
--- a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/util/AbstractFile.kt
+++ b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/util/AbstractFile.kt
@@ -12,6 +12,9 @@ import java.io.IOException
 import java.io.InputStream
 import java.io.OutputStream
 
+/**
+ * Contains the abstract file operations which Ultrasonic uses during the media store access
+ */
 abstract class AbstractFile : Comparable<AbstractFile> {
     abstract val name: String
     abstract val isDirectory: Boolean
diff --git a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/util/JavaFile.kt b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/util/JavaFile.kt
index 9cfc32a6..fda48969 100644
--- a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/util/JavaFile.kt
+++ b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/util/JavaFile.kt
@@ -16,6 +16,10 @@ import java.io.InputStream
 import java.io.OutputStream
 import org.moire.ultrasonic.app.UApp
 
+/**
+ * The java.io.File based implementation of AbstractFile
+ * This class is used when the Ultrasonic directory is set as media storage
+ */
 class JavaFile(override val parent: AbstractFile?, val file: File) : AbstractFile() {
     override val name: String = file.name
     override val isDirectory: Boolean = file.isDirectory
diff --git a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/util/ResettableLazy.kt b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/util/ResettableLazy.kt
index 9d77b8d9..a52f8de8 100644
--- a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/util/ResettableLazy.kt
+++ b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/util/ResettableLazy.kt
@@ -1,8 +1,18 @@
+/*
+ * ResettableLazy.kt
+ * Copyright (C) 2009-2021 Ultrasonic developers
+ *
+ * Distributed under terms of the GNU GPLv3 license.
+ */
+
 package org.moire.ultrasonic.util
 
 import java.util.concurrent.atomic.AtomicReference
 import kotlin.reflect.KProperty
 
+/**
+ * This class is similar to Lazy, but its value can be reset and then reinitialized
+ */
 class ResettableLazy<T>(private val initializer: () -> T) {
     private val lazyRef: AtomicReference<Lazy<T>> = AtomicReference(
         lazy(
diff --git a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/util/Storage.kt b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/util/Storage.kt
index 64c5c4e0..27c9ea66 100644
--- a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/util/Storage.kt
+++ b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/util/Storage.kt
@@ -24,21 +24,6 @@ object Storage {
         getRoot()!!
     }
 
-    private fun getRoot(): AbstractFile? {
-        return if (Settings.cacheLocation.isUri()) {
-            val documentFile = DocumentFile.fromTreeUri(
-                UApp.applicationContext(),
-                Uri.parse(Settings.cacheLocation)
-            ) ?: return null
-            if (!documentFile.exists()) return null
-            StorageFile(null, documentFile.uri, documentFile.name!!, documentFile.isDirectory)
-        } else {
-            val file = File(Settings.cacheLocation)
-            if (!file.exists()) return null
-            JavaFile(null, file)
-        }
-    }
-
     fun reset() {
         StorageFile.storageFilePathDictionary.clear()
         StorageFile.notExistingPathDictionary.clear()
@@ -74,6 +59,21 @@ object Storage {
     fun rename(pathFrom: AbstractFile, pathTo: String) {
         mediaRoot.value.rename(pathFrom, pathTo)
     }
+
+    private fun getRoot(): AbstractFile? {
+        return if (Settings.cacheLocation.isUri()) {
+            val documentFile = DocumentFile.fromTreeUri(
+                UApp.applicationContext(),
+                Uri.parse(Settings.cacheLocation)
+            ) ?: return null
+            if (!documentFile.exists()) return null
+            StorageFile(null, documentFile.uri, documentFile.name!!, documentFile.isDirectory)
+        } else {
+            val file = File(Settings.cacheLocation)
+            if (!file.exists()) return null
+            JavaFile(null, file)
+        }
+    }
 }
 
 fun String.isUri(): Boolean {
diff --git a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/util/StorageFile.kt b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/util/StorageFile.kt
index ca1bb857..714c6df9 100644
--- a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/util/StorageFile.kt
+++ b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/util/StorageFile.kt
@@ -18,6 +18,10 @@ import java.util.concurrent.ConcurrentHashMap
 import org.moire.ultrasonic.app.UApp
 import timber.log.Timber
 
+/**
+ * The DocumentsContract based implementation of AbstractFile
+ * This class is used when a user selected directory is set as media storage
+ */
 class StorageFile(
     override val parent: StorageFile?,
     var uri: Uri,