diff --git a/app/src/main.rs b/app/src/main.rs
index 60969c3..52bd56c 100644
--- a/app/src/main.rs
+++ b/app/src/main.rs
@@ -232,7 +232,7 @@ fn main() {
 }
 
 fn read_from_db2(id: u32) -> Option<Question> {
-    let mut reader: db::Reader<Question> =
+    let reader: db::Reader<Question> =
         db::Reader::new(NEW_DB_FILENAME, 2048).expect("new db reader");
 
     let mut questions = reader.iter();
diff --git a/lib/src/db.rs b/lib/src/db.rs
index f8d9b27..d2b5396 100644
--- a/lib/src/db.rs
+++ b/lib/src/db.rs
@@ -3,6 +3,7 @@ use std::{
     io::{self, Cursor, Read, Write},
     marker::PhantomData,
     path::Path,
+    sync::Arc
 };
 
 use memmap::{Mmap, MmapOptions};
@@ -157,7 +158,7 @@ where
     mmap: Mmap,
     count: usize,
     first_pos: LSize,
-    _t: PhantomData<*const T>,
+    _t: Option<Arc<T>> // PhantomData replacement
 }
 
 impl<T> Reader<T>
@@ -178,7 +179,7 @@ where
             mmap,
             count,
             first_pos,
-            _t: PhantomData,
+            _t: None
         })
     }
 
@@ -190,7 +191,7 @@ where
         0 == self.len()
     }
 
-    pub fn get(&mut self, index: usize) -> Result<T, String> {
+    pub fn get(&self, index: usize) -> Result<T, String> {
         if index >= self.len() {
             return Err("index out of range".into());
         }
@@ -222,7 +223,7 @@ where
         Ok(item.0)
     }
 
-    pub fn iter(&mut self) -> ReaderIter<'_, T> {
+    pub fn iter(&self) -> ReaderIter<'_, T> {
         ReaderIter::new(self)
     }
 }
@@ -231,7 +232,7 @@ pub struct ReaderIter<'a, T>
 where
     T: bincode::Decode,
 {
-    reader: &'a mut Reader<T>,
+    reader: &'a Reader<T>,
     index: Option<usize>,
 }
 
@@ -239,7 +240,7 @@ impl<'a, T> ReaderIter<'a, T>
 where
     T: bincode::Decode,
 {
-    fn new(reader: &'a mut Reader<T>) -> Self {
+    fn new(reader: &'a Reader<T>) -> Self {
         ReaderIter {
             reader,
             index: None,
@@ -345,7 +346,7 @@ mod test {
         writer.load(&mut items.clone().into_iter()).expect("load");
         writer.finish().expect("finish write");
 
-        let mut reader: Reader<TestData> = Reader::new(&tmpfile, 2048).expect("new reader");
+        let reader: Reader<TestData> = Reader::new(&tmpfile, 2048).expect("new reader");
         assert_eq!(items.len(), reader.len());
 
         for (idx, item) in items.iter().enumerate() {
@@ -372,7 +373,7 @@ mod test {
         writer.load(&mut items.clone().into_iter()).expect("load");
         writer.finish().expect("finish write");
 
-        let mut reader: Reader<TestData> = Reader::new(&tmpfile, 2048).expect("new reader");
+        let reader: Reader<TestData> = Reader::new(&tmpfile, 2048).expect("new reader");
         assert_eq!(items.len(), reader.len());
 
         items.into_iter().zip(reader.iter()).for_each(|pair| {