diff --git a/src/modules/api/submodules/userFiles.ts b/src/modules/api/submodules/userFiles.ts
index d7b4679..c5aa9e4 100644
--- a/src/modules/api/submodules/userFiles.ts
+++ b/src/modules/api/submodules/userFiles.ts
@@ -1,7 +1,11 @@
+import fs from 'fs'
+
 import logger from '../../../utils/logger'
 import utils from '../../../utils/utils'
 import { Request, SubmoduleData } from '../../../types/basicTypes'
 
+const usersFileName = '.users.json'
+
 function setup(data: SubmoduleData): void {
   const { app, /* userDB, url, */ publicdirs /* moduleSpecificData */ } = data
 
@@ -9,16 +13,64 @@ function setup(data: SubmoduleData): void {
 
   const userFilesDir = publicDir + 'userFiles'
 
-  app.get('/listUserFiles', (req: Request, res) => {
+  app.get('/listUserDir', (req: Request, res) => {
     logger.LogReq(req)
 
-    if (!utils.FileExists(userFilesDir)) {
-      utils.CreatePath(userFilesDir, true)
-    }
+    const subdir: any = req.query.subdir
 
-    res.json({
-      files: utils.ReadDir(userFilesDir),
-    })
+    if (subdir) {
+      const safeSubdir = subdir.replace(/\./g, '').replace(/\/+/g, '')
+      const dir = userFilesDir + '/' + safeSubdir
+      const usersFile = dir + '/' + usersFileName
+
+      if (!utils.FileExists(usersFile)) {
+        utils.WriteFile('{}', usersFile)
+      }
+      const users = utils.ReadJSON(usersFile)
+
+      if (!utils.FileExists(dir)) {
+        res.json({
+          success: false,
+          msg: `Path '${safeSubdir}' does not exists`,
+        })
+        return
+      }
+
+      res.json({
+        files: utils.ReadDir(dir).reduce((acc, file) => {
+          const stat = fs.lstatSync(dir + '/' + file)
+
+          acc.push({
+            name: file,
+            path: dir.replace(publicDir, '') + '/' + file,
+            size: stat.size,
+            uploadDate: stat.mtime.getTime(),
+            user: users[file],
+          })
+          return acc
+        }, []),
+      })
+    } else {
+      if (!utils.FileExists(userFilesDir)) {
+        utils.CreatePath(userFilesDir, true)
+      }
+
+      res.json({
+        dirs: utils.ReadDir(userFilesDir).reduce((acc, file) => {
+          const stat = fs.lstatSync(userFilesDir + '/' + file)
+
+          if (!stat.isDirectory()) {
+            return acc
+          }
+
+          acc.push({
+            name: file,
+            date: stat.mtime.getTime(),
+          })
+          return acc
+        }, []),
+      })
+    }
   })
 }
 
diff --git a/src/server.ts b/src/server.ts
index 56afff9..46d0964 100755
--- a/src/server.ts
+++ b/src/server.ts
@@ -281,8 +281,8 @@ function rotateLog() {
     utils.CopyFile(vlogFile, logger.vlogDir + fname)
   }
 
-  utils.WriteFile(fname, logger.logDir + fname)
-  utils.WriteFile(fname, logger.vlogDir + fname)
+  utils.WriteFile(fname, logFile)
+  utils.WriteFile(fname, vlogFile)
 }
 
 function LogTimerAction() {
diff --git a/src/utils/utils.ts b/src/utils/utils.ts
index bf96fa4..5bec6f3 100755
--- a/src/utils/utils.ts
+++ b/src/utils/utils.ts
@@ -70,8 +70,14 @@ function CopyFile(from: string, to: string): void {
   fs.copyFileSync(from, to)
 }
 
-function ReadDir(path: string): Array<string> {
-  return fs.readdirSync(path)
+function ReadDir(path: string, listHidden?: boolean): Array<string> {
+  if (listHidden) {
+    return fs.readdirSync(path)
+  } else {
+    return fs.readdirSync(path).filter((file) => {
+      return !file.startsWith('.')
+    })
+  }
 }
 
 function ReadJSON(name: string): any {