diff --git a/temerity/src/androidMain/kotlin/edu/ucsc/its/temerity/di/PlatformModule.android.kt b/temerity/src/androidMain/kotlin/edu/ucsc/its/temerity/di/PlatformModule.android.kt
index 36750b7e61051c66cde75e30b06cf92ebf0ae224..1f3994819517bc487b1b88a47077c10fcb72ec73 100644
--- a/temerity/src/androidMain/kotlin/edu/ucsc/its/temerity/di/PlatformModule.android.kt
+++ b/temerity/src/androidMain/kotlin/edu/ucsc/its/temerity/di/PlatformModule.android.kt
@@ -17,17 +17,12 @@
  */
 package edu.ucsc.its.temerity.di
 
-import edu.ucsc.its.temerity.extensions.coroutines.createDispatcher
 import io.ktor.client.engine.android.Android
 import kotlinx.coroutines.CoroutineDispatcher
-import kotlinx.coroutines.Dispatchers
 import org.koin.core.qualifier.named
 import org.koin.dsl.module
 
 internal actual fun platformModule() = module {
-  single(named("libraryCoroutineDispatcher")) { (threadCount: Int, dispatcherName: String) ->
-    createDispatcher(Dispatchers.IO, threadCount, dispatcherName)
-  }
   single(named("httpClientEngine")) { (libraryCoroutineDispatcher: CoroutineDispatcher) ->
     Android.create {
       dispatcher = libraryCoroutineDispatcher
diff --git a/temerity/src/commonMain/kotlin/edu/ucsc/its/temerity/core/Temerity.kt b/temerity/src/commonMain/kotlin/edu/ucsc/its/temerity/core/Temerity.kt
index 5c7e2c59ea88ca06dfd4446fff2c5ffda54d99fd..6fedf33c4489f5a7e29b573a1464872ba4640354 100644
--- a/temerity/src/commonMain/kotlin/edu/ucsc/its/temerity/core/Temerity.kt
+++ b/temerity/src/commonMain/kotlin/edu/ucsc/its/temerity/core/Temerity.kt
@@ -69,6 +69,7 @@ import kotlinx.coroutines.CoroutineScope
 import kotlinx.coroutines.async
 import kotlinx.coroutines.awaitAll
 import kotlinx.coroutines.delay
+import kotlinx.coroutines.withContext
 import kotlinx.datetime.DateTimeUnit
 import kotlinx.datetime.LocalDate
 import kotlinx.datetime.LocalTime
@@ -89,11 +90,11 @@ import org.koin.core.logger.Level.WARNING
 import org.koin.core.logger.Logger
 import org.koin.core.logger.MESSAGE
 import org.koin.core.parameter.parametersOf
+import org.koin.core.qualifier.named
 import org.koin.dsl.koinApplication
 import kotlin.time.Duration
 import kotlin.time.Duration.Companion.minutes
 import kotlin.time.DurationUnit.MILLISECONDS
-import org.koin.core.qualifier.named
 import co.touchlab.kermit.Logger as KermitLogger
 import io.ktor.client.plugins.logging.Logger as KtorLogger
 
@@ -115,16 +116,16 @@ public class Temerity internal constructor(
     // TODO: Use this as cache4k expiration time
     public val DEFAULT_CACHE_EXPIRATION: Duration = 15.minutes
     internal const val DEFAULT_MINIMUM_THREAD_COUNT: Int = 2
-    
+
     @JvmStatic
     internal fun createLogger(
       tag: String?,
       config: TemClientConfig?,
-      supportKtxNotebook: Boolean
+      supportKtxNotebook: Boolean,
     ): KermitLogger = LoggerFactory.createLogger(
       tag = tag,
       config = config,
-      supportKtxNotebook = supportKtxNotebook
+      supportKtxNotebook = supportKtxNotebook,
     )
 
     @JvmStatic
@@ -170,7 +171,7 @@ public class Temerity internal constructor(
   }
 
   override val version: String = BuildConfig.LIB_VERSION
-  
+
   /**
    * Kotlinx-serialization [Json] encoder/decoder object used for serializing/deserializing JSON object responses
    */
@@ -253,9 +254,9 @@ public class Temerity internal constructor(
     }
   }
 
-  public override suspend fun getUsers(): List<User> {
+  public override suspend fun getUsers(): List<User> = withContext(libraryCoroutineDispatcher) {
     val userRequest = platformApi.getUsers()
-    return decodeResponseCatching(userRequest.executeApiResponse<String>())
+    decodeResponseCatching(userRequest.executeApiResponse<String>())
   }
 
   public override suspend fun getUser(userId: Long): User =
diff --git a/temerity/src/commonMain/kotlin/edu/ucsc/its/temerity/di/LibModule.kt b/temerity/src/commonMain/kotlin/edu/ucsc/its/temerity/di/LibModule.kt
index d27f07b4d96509c2a08c512186290d464e125c73..95de7e10c5db7a34ff987e93e3163c075aa19b46 100644
--- a/temerity/src/commonMain/kotlin/edu/ucsc/its/temerity/di/LibModule.kt
+++ b/temerity/src/commonMain/kotlin/edu/ucsc/its/temerity/di/LibModule.kt
@@ -24,16 +24,17 @@ import edu.ucsc.its.temerity.api.PlatformApi
 import edu.ucsc.its.temerity.api.createPlatformApi
 import edu.ucsc.its.temerity.core.buildHttpClient
 import edu.ucsc.its.temerity.core.createCommonLogger
+import edu.ucsc.its.temerity.extensions.coroutines.createDispatcher
 import edu.ucsc.its.temerity.extensions.coroutines.createLibraryScope
 import io.ktor.client.HttpClient
 import io.ktor.client.engine.HttpClientEngine
 import kotlinx.coroutines.CoroutineDispatcher
+import kotlinx.coroutines.Dispatchers
 import org.koin.core.parameter.parametersOf
 import org.koin.core.qualifier.named
 import org.koin.dsl.module
 import co.touchlab.kermit.Logger as KermitLogger
 
-
 internal object LibModule {
   /**
    * This function provides the Koin module for the Temerity library.
@@ -43,6 +44,9 @@ internal object LibModule {
     single(named("libraryLogger")) { (tag: String?, config: TemClientConfig?) ->
       createCommonLogger(tag = tag, config = config)
     }
+    single(named("libraryCoroutineDispatcher")) { (threadCount: Int, dispatcherName: String) ->
+      createDispatcher(Dispatchers.IO, threadCount, dispatcherName)
+    }
     single(named("libraryCoroutineScope")) { (dispatcher: CoroutineDispatcher) ->
       createLibraryScope(dispatcher)
     }
diff --git a/temerity/src/jvmMain/kotlin/edu/ucsc/its/temerity/extensions/log/WrappingFormatter.kt b/temerity/src/commonMain/kotlin/edu/ucsc/its/temerity/extensions/log/WrappingFormatter.kt
similarity index 100%
rename from temerity/src/jvmMain/kotlin/edu/ucsc/its/temerity/extensions/log/WrappingFormatter.kt
rename to temerity/src/commonMain/kotlin/edu/ucsc/its/temerity/extensions/log/WrappingFormatter.kt
diff --git a/temerity/src/jvmMain/kotlin/edu/ucsc/its/temerity/di/PlatformModule.jvm.kt b/temerity/src/jvmMain/kotlin/edu/ucsc/its/temerity/di/PlatformModule.jvm.kt
index 31a96ac9a19833ca0defc30204aa282f80319f21..a9845defa0bd8148131c81826c2f120f22642902 100644
--- a/temerity/src/jvmMain/kotlin/edu/ucsc/its/temerity/di/PlatformModule.jvm.kt
+++ b/temerity/src/jvmMain/kotlin/edu/ucsc/its/temerity/di/PlatformModule.jvm.kt
@@ -17,17 +17,12 @@
  */
 package edu.ucsc.its.temerity.di
 
-import edu.ucsc.its.temerity.extensions.coroutines.createDispatcher
 import io.ktor.client.engine.java.Java
 import kotlinx.coroutines.CoroutineDispatcher
-import kotlinx.coroutines.Dispatchers
 import org.koin.core.qualifier.named
 import org.koin.dsl.module
 
 internal actual fun platformModule() = module {
-  single(named("libraryCoroutineDispatcher")) { (threadCount: Int, dispatcherName: String) ->
-    createDispatcher(Dispatchers.IO, threadCount, dispatcherName)
-  }
   factory(named("httpClientEngine")) { (libraryCoroutineDispatcher: CoroutineDispatcher) ->
     Java.create {
       dispatcher = libraryCoroutineDispatcher