diff --git a/app/src/main/java/com/futo/polycentric/core/ApiMethods.kt b/app/src/main/java/com/futo/polycentric/core/ApiMethods.kt
index 5cff890a5b6d7864f0ce23b8eb2bb38243f5c230..9b3b50d560a15bc64040378335994fe11ebd0b1f 100644
--- a/app/src/main/java/com/futo/polycentric/core/ApiMethods.kt
+++ b/app/src/main/java/com/futo/polycentric/core/ApiMethods.kt
@@ -16,17 +16,34 @@ import userpackage.Protocol
 import java.nio.ByteBuffer
 import kotlin.coroutines.resume
 import kotlin.coroutines.resumeWithException
+import okhttp3.Cache
+import java.io.File
+import java.util.concurrent.TimeUnit
 
 class ApiMethods {
     companion object {
         var UserAgent = "Grayjay Android";
 
         private const val TAG = "ApiMethods"
-        private val client = OkHttpClient()
+        private var client: OkHttpClient = OkHttpClient.Builder()
+            .connectTimeout(3, TimeUnit.SECONDS)
+            .build()
+
+        fun initCache(cacheDir: File) {
+            client = OkHttpClient.Builder()
+                .connectTimeout(3, TimeUnit.SECONDS)
+                .cache(Cache(
+                    directory = File(cacheDir, "http_cache"),
+                    maxSize = 25L * 1024L * 1024L // 25 MiB
+                ))
+                .build()
+        }
+
         private val MEDIA_TYPE_OCTET_STREAM = "application/octet-stream".toMediaType()
 
         fun getRequestBuilder(url: String): Request.Builder = Request.Builder().url(url).header("x-polycentric-user-agent", UserAgent)
 
+
         suspend fun postEvents(server: String, events: Protocol.Events): Unit = withContext(Dispatchers.IO) {
             val body = events.toByteArray().toRequestBody(MEDIA_TYPE_OCTET_STREAM)
             val request = getRequestBuilder("$server/events").post(body).build()