diff --git a/agkyra/agkyra/syncer/localfs_client.py b/agkyra/agkyra/syncer/localfs_client.py
index 4a6cfa3b8f2b4299119f13b0e15d91e822379a59..81d2f4ccfe72292027e194faecc65253c4c2a413 100644
--- a/agkyra/agkyra/syncer/localfs_client.py
+++ b/agkyra/agkyra/syncer/localfs_client.py
@@ -235,6 +235,7 @@ class LocalfsTargetHandle(object):
         f = utils.hash_string(filename)
         hide_filename = utils.join_path(self.cache_hide_name, f)
         self.hidden_filename = hide_filename
+        self.hidden_path = self.get_path_in_cache(self.hidden_filename)
         if db.get_cachename(hide_filename):
             return False
         db.insert_cachename(hide_filename, self.SIGNATURE, filename)
@@ -245,8 +246,9 @@ class LocalfsTargetHandle(object):
         db = self.get_db()
         db.delete_cachename(hidden_filename)
         self.hidden_filename = None
+        self.hidden_path = None
 
-    def hide_file(self):
+    def move_file(self):
         fspath = self.fspath
         if file_is_open(fspath):
             raise common.BusyError("File '%s' is open. Aborting."
@@ -254,8 +256,7 @@ class LocalfsTargetHandle(object):
 
         new_registered = self.register_hidden_name(self.objname)
         hidden_filename = self.hidden_filename
-        hidden_path = self.get_path_in_cache(hidden_filename)
-        self.hidden_path = hidden_path
+        hidden_path = self.hidden_path
 
         if not new_registered:
             logger.warning("Hiding already registered for file %s" %
@@ -275,14 +276,19 @@ class LocalfsTargetHandle(object):
                 return
             else:
                 raise e
-        if file_is_open(hidden_path):
-            os.rename(hidden_path, fspath)
-            self.unregister_hidden_name(hidden_filename)
-            raise common.BusyError("File '%s' is open. Undoing." % hidden_path)
-        if path_status(hidden_path) == LOCAL_NONEMPTY_DIR:
-            os.rename(hidden_path, fspath)
-            self.unregister_hidden_name(hidden_filename)
-            raise common.ConflictError("'%s' is non-empty" % fspath)
+
+    def hide_file(self):
+        self.move_file()
+        if self.hidden_filename is not None:
+            if file_is_open(self.hidden_path):
+                os.rename(self.hidden_path, self.fspath)
+                self.unregister_hidden_name(self.hidden_filename)
+                raise common.BusyError("File '%s' is open. Undoing." %
+                                       self.hidden_path)
+            if path_status(self.hidden_path) == LOCAL_NONEMPTY_DIR:
+                os.rename(self.hidden_path, self.fspath)
+                self.unregister_hidden_name(self.hidden_filename)
+                raise common.ConflictError("'%s' is non-empty" % self.fspath)
 
     def apply(self, fetched_file, fetched_live_info, sync_state):
         local_status = path_status(self.fspath)
@@ -320,17 +326,21 @@ class LocalfsTargetHandle(object):
         logger.info("Finalizing file '%s'" % filename)
         if live_info == {}:
             return
-        if live_info[LOCALFS_TYPE] != common.T_DIR:
+        if live_info[LOCALFS_TYPE] == common.T_FILE:
             try:
                 link_file(filename, self.fspath)
             except DirMissing:
                 make_dirs(os.path.dirname(self.fspath))
                 link_file(filename, self.fspath)
-        else:
-            # assuming empty dir
+        elif live_info[LOCALFS_TYPE] == common.T_DIR:
             make_dirs(self.fspath)
+        else:
+            raise AssertionError("info for fetched file '%s' is %s" %
+                                 (filename, live_info))
 
     def cleanup(self, filename):
+        if filename is None:
+            return
         status = path_status(filename)
         if status == LOCAL_FILE:
             try: