diff --git a/authfs/src/file/remote_file.rs b/authfs/src/file/remote_file.rs
index 0b6c007..037b8ec 100644
--- a/authfs/src/file/remote_file.rs
+++ b/authfs/src/file/remote_file.rs
@@ -17,13 +17,12 @@
 use std::cmp::min;
 use std::convert::TryFrom;
 use std::io;
-use std::sync::{Arc, Mutex};
 
 use super::{ChunkBuffer, RandomWrite, ReadByChunk, VirtFdService};
 use crate::common::CHUNK_SIZE;
 
 fn remote_read_chunk(
-    service: &Arc<Mutex<VirtFdService>>,
+    service: &VirtFdService,
     remote_fd: i32,
     chunk_index: u64,
     buf: &mut ChunkBuffer,
@@ -32,8 +31,6 @@
         .map_err(|_| io::Error::from_raw_os_error(libc::EOVERFLOW))?;
 
     let chunk = service
-        .lock()
-        .unwrap()
         .readFile(remote_fd, offset, buf.len() as i32)
         .map_err(|e| io::Error::new(io::ErrorKind::Other, e.get_description()))?;
     let size = min(buf.len(), chunk.len());
@@ -43,12 +40,12 @@
 
 pub struct RemoteFileReader {
     // This needs to have Sync trait to be used in fuse::worker::start_message_loop.
-    service: Arc<Mutex<VirtFdService>>,
+    service: VirtFdService,
     file_fd: i32,
 }
 
 impl RemoteFileReader {
-    pub fn new(service: Arc<Mutex<VirtFdService>>, file_fd: i32) -> Self {
+    pub fn new(service: VirtFdService, file_fd: i32) -> Self {
         RemoteFileReader { service, file_fd }
     }
 }
@@ -61,13 +58,12 @@
 
 pub struct RemoteMerkleTreeReader {
     // This needs to be a Sync to be used in fuse::worker::start_message_loop.
-    // TODO(victorhsieh): change to Strong<> once binder supports it.
-    service: Arc<Mutex<VirtFdService>>,
+    service: VirtFdService,
     file_fd: i32,
 }
 
 impl RemoteMerkleTreeReader {
-    pub fn new(service: Arc<Mutex<VirtFdService>>, file_fd: i32) -> Self {
+    pub fn new(service: VirtFdService, file_fd: i32) -> Self {
         RemoteMerkleTreeReader { service, file_fd }
     }
 }
@@ -79,8 +75,6 @@
 
         let chunk = self
             .service
-            .lock()
-            .unwrap()
             .readFsverityMerkleTree(self.file_fd, offset, buf.len() as i32)
             .map_err(|e| io::Error::new(io::ErrorKind::Other, e.get_description()))?;
         let size = min(buf.len(), chunk.len());
@@ -91,12 +85,12 @@
 
 pub struct RemoteFileEditor {
     // This needs to have Sync trait to be used in fuse::worker::start_message_loop.
-    service: Arc<Mutex<VirtFdService>>,
+    service: VirtFdService,
     file_fd: i32,
 }
 
 impl RemoteFileEditor {
-    pub fn new(service: Arc<Mutex<VirtFdService>>, file_fd: i32) -> Self {
+    pub fn new(service: VirtFdService, file_fd: i32) -> Self {
         RemoteFileEditor { service, file_fd }
     }
 }
@@ -107,8 +101,6 @@
             i64::try_from(offset).map_err(|_| io::Error::from_raw_os_error(libc::EOVERFLOW))?;
         let size = self
             .service
-            .lock()
-            .unwrap()
             .writeFile(self.file_fd, &buf, offset)
             .map_err(|e| io::Error::new(io::ErrorKind::Other, e.get_description()))?;
         Ok(size as usize) // within range because size is supposed to <= buf.len(), which is a usize
@@ -118,8 +110,6 @@
         let size =
             i64::try_from(size).map_err(|_| io::Error::from_raw_os_error(libc::EOVERFLOW))?;
         self.service
-            .lock()
-            .unwrap()
             .resize(self.file_fd, size)
             .map_err(|e| io::Error::new(io::ErrorKind::Other, e.get_description()))?;
         Ok(())
diff --git a/authfs/src/main.rs b/authfs/src/main.rs
index d03e3ca..9d36c3f 100644
--- a/authfs/src/main.rs
+++ b/authfs/src/main.rs
@@ -32,7 +32,6 @@
 use std::fs::File;
 use std::io::Read;
 use std::path::{Path, PathBuf};
-use std::sync::{Arc, Mutex};
 use structopt::StructOpt;
 
 mod auth;
@@ -224,15 +223,14 @@
 ) -> Result<FileConfig> {
     let signature = service.readFsveritySignature(remote_id).context("Failed to read signature")?;
 
-    let service = Arc::new(Mutex::new(service));
     let authenticator = FakeAuthenticator::always_succeed();
     Ok(FileConfig::RemoteVerifiedReadonlyFile {
         reader: VerifiedFileReader::new(
             &authenticator,
-            RemoteFileReader::new(Arc::clone(&service), remote_id),
+            RemoteFileReader::new(service.clone(), remote_id),
             file_size,
             signature,
-            RemoteMerkleTreeReader::new(Arc::clone(&service), remote_id),
+            RemoteMerkleTreeReader::new(service.clone(), remote_id),
         )?,
         file_size,
     })
@@ -243,7 +241,7 @@
     remote_id: i32,
     file_size: u64,
 ) -> Result<FileConfig> {
-    let reader = RemoteFileReader::new(Arc::new(Mutex::new(service)), remote_id);
+    let reader = RemoteFileReader::new(service, remote_id);
     Ok(FileConfig::RemoteUnverifiedReadonlyFile { reader, file_size })
 }
 
@@ -274,7 +272,7 @@
     service: file::VirtFdService,
     remote_id: i32,
 ) -> Result<FileConfig> {
-    let remote_file = RemoteFileEditor::new(Arc::new(Mutex::new(service)), remote_id);
+    let remote_file = RemoteFileEditor::new(service, remote_id);
     Ok(FileConfig::RemoteVerifiedNewFile { editor: VerifiedFileEditor::new(remote_file) })
 }
 
