diff --git a/src/cache.rs b/src/cache.rs
index 040ec373d0a66e5b19ad85dbf5eae3f51b1f69a4..db9a71a6e694264c42e650faede7c142ea2c1797 100644
--- a/src/cache.rs
+++ b/src/cache.rs
@@ -17,7 +17,7 @@ use crate::BASE_NAME;
 
 use lazy_static::lazy_static;
 use std::collections::HashMap;
-use std::sync::{Mutex, MutexGuard};
+use std::sync::{RwLock, RwLockReadGuard};
 
 use libc::{geteuid, seteuid, getpwnam, uid_t};
 use std::ffi::{CStr, CString};
@@ -144,7 +144,7 @@ impl Cache {
         }
     }
 
-    pub fn load_user_token(&mut self, owner: &String) -> Option<&BasicTokenResponse> {
+    pub fn load_user_token(&self, owner: &String) -> Option<&BasicTokenResponse> {
         if !self.user_tokens.contains_key(owner) {
             debug!("No token for {} in memory, trying to load from file", owner);
 
@@ -160,7 +160,7 @@ impl Cache {
 
             match new_token {
                 Some(t) => {
-                    self.user_tokens.insert(owner.to_string(), t);
+                    CACHE.write().unwrap().user_tokens.insert(owner.to_string(), t);
                     self.user_tokens.get(owner)
                 },
                 None => None
@@ -171,8 +171,8 @@ impl Cache {
         }
     }
 
-    pub fn save_user_token(&mut self, owner: &String, token: BasicTokenResponse) -> Result<(), io::Error> {
-        self.user_tokens.insert(owner.to_string(), token.clone());
+    pub fn save_user_token(&self, owner: &String, token: BasicTokenResponse) -> Result<(), io::Error> {
+        CACHE.write().unwrap().user_tokens.insert(owner.to_string(), token.clone());
         debug!("Saved token for {} in memory", owner);
 
         // Try to write user's token cache file
@@ -190,8 +190,8 @@ impl Cache {
         return res;
     }
 
-    pub fn delete_user_token(&mut self, owner: &String) {
-        self.user_tokens.remove(owner);
+    pub fn delete_user_token(&self, owner: &String) {
+        CACHE.write().unwrap().user_tokens.remove(owner);
         debug!("Token for {} removed from memory", owner);
 
         // Try to remove user's token cache file
@@ -227,9 +227,9 @@ fn save_json<O: Serialize>(path: PathBuf, obj: O) -> Result<(), io::Error> {
 }
 
 lazy_static! {
-    static ref CACHE: Mutex<Cache> = Mutex::new(Cache::new());
+    static ref CACHE: RwLock<Cache> = RwLock::new(Cache::new());
 }
 
-pub fn get_cache() -> MutexGuard<'static, Cache> {
-    CACHE.lock().unwrap()
+pub fn get_cache() -> RwLockReadGuard<'static, Cache> {
+    CACHE.read().unwrap()
 }