diff --git a/src/main.rs b/src/main.rs
index fbf09b4..d47e151 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -2,6 +2,7 @@
 extern crate rocket;
 
 use rocket::fs::FileServer;
+use rocket::futures::FutureExt;
 use rocket::response::Redirect;
 use rocket::State;
 use rocket_dyn_templates::tera;
@@ -86,28 +87,45 @@ async fn show_question_details(
     cache: &TemplateCache,
     id: usize,
 ) -> Template {
-    if let Some(value) = cache.get(&id) {
-        return value.render(template_name);
-    }
+    let cache_cloned = cache.clone();
 
-    match get_question(&data.db, id).await {
-        Ok(question) => {
-            let mut context = tera::to_value(question).expect("question serialize");
-            if context.is_object() {
-                let next_id = random_question_id(&data.database_distribution);
-                context["next"] = tera::to_value(next_id).expect("question id serialize");
+    let from_cache = rocket::tokio::spawn(async move { cache_cloned.get(&id) }).fuse();
+    let from_db = async move {
+        match get_question(&data.db, id).await {
+            Ok(question) => {
+                let mut context = tera::to_value(question).expect("question serialize");
+                if context.is_object() {
+                    let next_id = random_question_id(&data.database_distribution);
+                    context["next"] = tera::to_value(next_id).expect("question id serialize");
+                }
+
+                let value = ArcTemplateData::new(context);
+                let result = value.render(template_name);
+                cache.insert(id, value);
+
+                result
+            }
+            Err(_) => {
+                use std::collections::HashMap;
+                let context: HashMap<String, String> = HashMap::new();
+                Template::render("404", context)
             }
-
-            let value = ArcTemplateData::new(context);
-            let result = value.render(template_name);
-            cache.insert(id, value);
-
-            result
         }
-        Err(_) => {
-            use std::collections::HashMap;
-            let context: HashMap<String, String> = HashMap::new();
-            Template::render("404", context)
+    }
+    .fuse();
+
+    loop {
+        rocket::tokio::select! {
+            biased;
+
+            Ok(Some(template)) = from_cache => {
+                println!("from cache");
+                break template.render(template_name)
+            },
+            template = from_db => {
+                println!("from db");
+                break template
+            }
         }
     }
 }