diff --git a/primary.py b/primary.py
index bfacebb2c35c46a4b229fc20ab652890229910d0..fb86f6b0c540980587149c6a6457c349c773e3f7 100644
--- a/primary.py
+++ b/primary.py
@@ -46,7 +46,7 @@ class Server:
         self.socket_path = '/tmp/%s_server' % (self.uuid)
         self.mutex = threading.Lock()
         self.thread_md5 = None
-        self.thread_cpio = None
+        self.thread_star = None
         self.thread_server = threading.Thread(daemon=True, target=self.run)
         self.thread_server.start()
         
@@ -66,12 +66,12 @@ class Server:
                                                args=(config_MD5_socket,))
             self.thread_md5.start()
 
-        cpio_socket,_ = server.accept()
-        self.log.DEBUG('CPIO', cpio_socket)
+        star_socket,_ = server.accept()
+        self.log.DEBUG('CPIO', star_socket)
         with self.mutex:
             self.thread_md5 = threading.Thread(daemon=True,
-                                               target=self.run_cpio,
-                                               args=(cpio_socket,))
+                                               target=self.run_star,
+                                               args=(star_socket,))
             self.thread_md5.start()
         
         cond_unlink(self.socket_path, self.log)
@@ -79,7 +79,7 @@ class Server:
     def pending(self):
         with self.mutex:
             return ((self.thread_md5 and self.thread_md5.thread.is_alive()) or
-                    (self.thread_cpio and self.thread_cpio.thread.is_alive()) or
+                    (self.thread_star and self.thread_star.thread.is_alive()) or
                     (self.thread_server.is_alive()))
         
     def send_MD5(self, config_MD5):
@@ -102,23 +102,24 @@ class Server:
             config_MD5.shutdown(socket.SHUT_RDWR)
             config_MD5.close()
             
-    def run_cpio(self, cpio_socket):
-        self.log.DEBUG('START run_cpio',
+    def run_star(self, star_socket):
+        self.log.DEBUG('START run_star',
                        self.config.primary.mount.path,
                        self.path)
-        cmd = [ '/bin/cpio', '-oc', '--quiet' ]
+        cmd = [ '/bin/star', '-c', '-acl', '-Hexustar', '-list=-',
+                '-no-statistics' ]
         cwd = os.path.join(self.config.primary.mount.path, self.path)
-        stdin =  cpio_socket.makefile('rb')
-        stdout =  cpio_socket.makefile('wb')
+        stdin =  star_socket.makefile('rb')
+        stdout =  star_socket.makefile('wb')
         try:
             subprocess.check_call(cmd, cwd=cwd,
                                   stdin=stdin,
                                   stdout=stdout,
                                   stderr=self.log.makefile(encoding='utf-8'))
-            self.log.DEBUG('OK run_cpio', cmd, cwd)
+            self.log.DEBUG('OK run_star', cmd, cwd)
         finally:
-            cpio_socket.shutdown(socket.SHUT_RDWR)
-        self.log.DEBUG('DONE run_cpio', cmd, cwd)
+            star_socket.shutdown(socket.SHUT_RDWR)
+        self.log.DEBUG('DONE run_star', cmd, cwd)
 
 class Client:
 
diff --git a/secondary.py b/secondary.py
index 6fbe1fecf1fccceeb19971068b1bc4203aa9627a..83ea317c01a537c3791546ade75fa5b86b30c20b 100644
--- a/secondary.py
+++ b/secondary.py
@@ -40,10 +40,10 @@ class Status:
         
 class Backup:
 
-    def __init__(self, primary_cpio, mount, path, status, log):
-        self.primary_cpio = primary_cpio
-        self.primary_in = primary_cpio.makefile('wb')
-        self.primary_out = primary_cpio.makefile('rb')
+    def __init__(self, primary_star, mount, path, status, log):
+        self.primary_star = primary_star
+        self.primary_in = primary_star.makefile('wb')
+        self.primary_out = primary_star.makefile('rb')
         self.mount = mount
         self.path = path
         self.status = status
@@ -52,11 +52,7 @@ class Backup:
         self.trash_root = os.path.join(mount, 'TRASH').encode('utf-8')
         self.trash = os.path.join(self.trash_root,
                                   str(int(time.time())).encode('utf-8'))
-        extract_cmd = [ '/bin/cpio',
-                        '-idmu',
-                        '--quiet',
-                        '--no-absolute-filenames',
-                        '--preserve-modification-time' ]
+        extract_cmd = [ '/bin/star', '-x', '-nowarn', '-no-statistics' ]
         self.extract = subprocess.Popen(extract_cmd,
                                         cwd=os.path.join(mount, path),
                                         stdin=self.primary_out)
@@ -64,7 +60,7 @@ class Backup:
 
     def close(self):
         self.primary_in.flush()
-        self.primary_cpio.shutdown(socket.SHUT_WR)
+        self.primary_star.shutdown(socket.SHUT_WR)
         self.status.extract_OK = self.extract.wait()
 
     def check(self, src, dst):
@@ -177,11 +173,11 @@ def do_backup(options, socket_path, mount, path):
     atexit.register(cond_kill, p)
     dst = md5toc.MD5TOC(p.stdout)
             
-    # Connect to server cpio socket
-    primary_cpio = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
-    primary_cpio.connect(socket_path)
+    # Connect to server star socket
+    primary_star = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
+    primary_star.connect(socket_path)
     
-    backup = Backup(primary_cpio=primary_cpio,
+    backup = Backup(primary_star=primary_star,
                     mount=mount, path=path, status=status, log=log)
     while True:
         if src.name == None and dst.name == None: