diff --git a/daemon/gvfsbackendftp.c b/daemon/gvfsbackendftp.c
index 9f3be7e..0e4f031 100644
--- a/daemon/gvfsbackendftp.c
+++ b/daemon/gvfsbackendftp.c
@@ -2142,6 +2142,43 @@ create_file_info (GVfsBackendFtp *ftp, FtpConnection *conn, const char *filename
     }
   ftp->dir_ops->iter_free (iter);
   g_static_rw_lock_reader_unlock (&ftp->directory_cache_lock);
+
+  /* try to find hidden file/directory */
+  if (info == NULL && ftp_connection_try_cd (conn, file))
+    {
+      char *tmp;
+
+      info = g_file_info_new ();
+
+      tmp = g_path_get_basename (filename);
+      g_file_info_set_name (info, tmp);
+      g_free (tmp);
+
+      gvfs_file_info_populate_default (info, filename, G_FILE_TYPE_DIRECTORY);
+
+      g_file_info_set_is_hidden (info, TRUE);
+    }
+  else if (info == NULL && (conn->features & FTP_FEATURE_SIZE))
+    {
+      if (213 == ftp_connection_send (conn, RESPONSE_PASS_550, "SIZE %s", file))
+        {
+          char *tmp;
+
+          info = g_file_info_new ();
+
+          tmp = g_path_get_basename (filename);
+          g_file_info_set_name (info, tmp);
+          g_free (tmp);
+
+          gvfs_file_info_populate_default (info, filename, G_FILE_TYPE_REGULAR);
+
+          if (g_str_has_prefix (conn->read_buffer, "213 "))
+            g_file_info_set_size (info, strtoul (conn->read_buffer+4, NULL, 0));
+
+          g_file_info_set_is_hidden (info, TRUE);
+        }
+    }
+
   g_free (dir);
   g_free (file);
   return info;
