diff --git a/src/cmd/mod.rs b/src/cmd/mod.rs
index 6c44b15a66b195ed99cfdf899c93ce0afc90e027..1637d1cd5ceab6f577813f1cc5cc6e0158bd7767 100644
--- a/src/cmd/mod.rs
+++ b/src/cmd/mod.rs
@@ -1,18 +1,18 @@
+#![allow(dead_code)]
+
 pub mod acl;
 pub mod package;
 
 use log::error;
 use std::{process::abort, string::String, sync::Arc};
 
-#[allow(dead_code)]
 #[derive(Clone)]
 enum CmdHandler {
-    Simple(Arc<dyn Fn(Vec<&str>) -> bool>),
-    Echo(Arc<dyn Fn(Vec<&str>) -> String>),
-    MultiEcho(Arc<dyn Fn(Vec<&str>) -> Vec<String>>),
+    Simple(Arc<dyn Fn(Vec<&str>) -> bool + Send + Sync>),
+    Echo(Arc<dyn Fn(Vec<&str>) -> String + Send + Sync>),
+    MultiEcho(Arc<dyn Fn(Vec<&str>) -> Vec<String> + Send + Sync>),
 }
 
-#[allow(dead_code)]
 #[derive(Clone)]
 pub struct Cmd {
     name: String,
@@ -20,16 +20,11 @@ pub struct Cmd {
     handler: CmdHandler,
 }
 
-unsafe impl Sync for Cmd {}
-unsafe impl Send for Cmd {}
-
 impl Cmd {
-    #[allow(dead_code)]
     pub fn matches(&self, name: &str, args: &Vec<&str>) -> bool {
         (self.name == *name) && (self.argc as usize == args.len())
     }
 
-    #[allow(dead_code)]
     pub fn exec(&self, args: Vec<&str>) -> String {
         if args.len() != self.argc as usize {
             error!("Arg count doesn't match");
@@ -46,13 +41,15 @@ impl Cmd {
         }
     }
 
-    #[allow(dead_code)]
     pub fn get_name(&self) -> &str {
         &self.name
     }
 
-    #[allow(dead_code)]
-    pub fn new_simple(name: String, argc: u32, f: Arc<dyn Fn(Vec<&str>) -> bool>) -> Cmd {
+    pub fn new_simple(
+        name: String,
+        argc: u32,
+        f: Arc<dyn Fn(Vec<&str>) -> bool + Send + Sync>,
+    ) -> Cmd {
         Cmd {
             name: name,
             argc: argc,
@@ -60,8 +57,11 @@ impl Cmd {
         }
     }
 
-    #[allow(dead_code)]
-    pub fn new_echo(name: String, argc: u32, f: Arc<dyn Fn(Vec<&str>) -> String>) -> Cmd {
+    pub fn new_echo(
+        name: String,
+        argc: u32,
+        f: Arc<dyn Fn(Vec<&str>) -> String + Send + Sync>,
+    ) -> Cmd {
         Cmd {
             name: name,
             argc: argc,
@@ -69,11 +69,10 @@ impl Cmd {
         }
     }
 
-    #[allow(dead_code)]
     pub fn new_multi_echo(
         name: String,
         argc: u32,
-        f: Arc<dyn Fn(Vec<&str>) -> Vec<String>>,
+        f: Arc<dyn Fn(Vec<&str>) -> Vec<String> + Send + Sync>,
     ) -> Cmd {
         Cmd {
             name: name,