diff --git a/server/initializers/database.ts b/server/initializers/database.ts
index 0ab9e98db..1662c1968 100644
--- a/server/initializers/database.ts
+++ b/server/initializers/database.ts
@@ -1,6 +1,7 @@
 import * as fs from 'fs'
 import { join } from 'path'
 import * as Sequelize from 'sequelize'
+import { each } from 'async'
 
 import { CONFIG } from './constants'
 // Do not use barrel, we need to load database first
@@ -72,24 +73,13 @@ const sequelize = new Sequelize(dbname, username, password, {
 database.sequelize = sequelize
 
 database.init = function (silent: boolean, callback: (err: Error) => void) {
-
   const modelDirectory = join(__dirname, '..', 'models')
-  fs.readdir(modelDirectory, function (err, files) {
+
+  getModelFiles(modelDirectory, function (err, filePaths) {
     if (err) throw err
 
-    files.filter(function (file) {
-      // For all models but not utils.js
-      if (
-        file === 'index.js' || file === 'index.ts' ||
-        file === 'utils.js' || file === 'utils.ts' ||
-        file.endsWith('-interface.js') || file.endsWith('-interface.ts') ||
-        file.endsWith('.js.map')
-      ) return false
-
-      return true
-    })
-    .forEach(function (file) {
-      const model = sequelize.import(join(modelDirectory, file))
+    filePaths.forEach(function (filePath) {
+      const model = sequelize.import(filePath)
 
       database[model['name']] = model
     })
@@ -111,3 +101,51 @@ database.init = function (silent: boolean, callback: (err: Error) => void) {
 export {
   database
 }
+
+// ---------------------------------------------------------------------------
+
+function getModelFiles (modelDirectory: string, callback: (err: Error, filePaths: string[]) => void) {
+  fs.readdir(modelDirectory, function (err, files) {
+    if (err) throw err
+
+    const directories = files.filter(function (directory) {
+      // For all models but not utils.js
+      if (
+        directory === 'index.js' || directory === 'index.ts' ||
+        directory === 'utils.js' || directory === 'utils.ts'
+      ) return false
+
+      return true
+    })
+
+    let modelFilePaths: string[] = []
+
+    // For each directory we read it and append model in the modelFilePaths array
+    each(directories, function (directory: string, eachCallback: ErrorCallback<Error>) {
+      const modelDirectoryPath = join(modelDirectory, directory)
+
+      fs.readdir(modelDirectoryPath, function (err, files) {
+        if (err) return eachCallback(err)
+
+        const filteredFiles = files.filter(file => {
+          if (
+            file === 'index.js' || file === 'index.ts' ||
+            file === 'utils.js' || file === 'utils.ts' ||
+            file.endsWith('-interface.js') || file.endsWith('-interface.ts') ||
+            file.endsWith('.js.map')
+          ) return false
+
+          return true
+        }).map(file => {
+          return join(modelDirectoryPath, file)
+        })
+
+        modelFilePaths = modelFilePaths.concat(filteredFiles)
+
+        return eachCallback(null)
+      })
+    }, function(err: Error) {
+      return callback(err, modelFilePaths)
+    })
+  })
+}
diff --git a/server/models/application-interface.ts b/server/models/application/application-interface.ts
similarity index 100%
rename from server/models/application-interface.ts
rename to server/models/application/application-interface.ts
diff --git a/server/models/application.ts b/server/models/application/application.ts
similarity index 97%
rename from server/models/application.ts
rename to server/models/application/application.ts
index 55bb40d84..0e9a1ebb3 100644
--- a/server/models/application.ts
+++ b/server/models/application/application.ts
@@ -1,6 +1,6 @@
 import * as Sequelize from 'sequelize'
 
-import { addMethodsToModel } from './utils'
+import { addMethodsToModel } from '../utils'
 import {
   ApplicationClass,
   ApplicationAttributes,
diff --git a/server/models/application/index.ts b/server/models/application/index.ts
new file mode 100644
index 000000000..706f85cb9
--- /dev/null
+++ b/server/models/application/index.ts
@@ -0,0 +1 @@
+export * from './application-interface'
diff --git a/server/models/index.ts b/server/models/index.ts
index 432c0dc4a..b392a8a77 100644
--- a/server/models/index.ts
+++ b/server/models/index.ts
@@ -1,17 +1,7 @@
-export * from './application-interface'
-export * from './author-interface'
-export * from './job-interface'
-export * from './oauth-client-interface'
-export * from './oauth-token-interface'
-export * from './pod-interface'
-export * from './request-interface'
-export * from './request-to-pod-interface'
-export * from './request-video-event-interface'
-export * from './request-video-qadu-interface'
-export * from './tag-interface'
-export * from './user-video-rate-interface'
-export * from './user-interface'
-export * from './video-abuse-interface'
-export * from './video-blacklist-interface'
-export * from './video-tag-interface'
-export * from './video-interface'
+export * from './application'
+export * from './job'
+export * from './oauth'
+export * from './pod'
+export * from './request'
+export * from './user'
+export * from './video'
diff --git a/server/models/job/index.ts b/server/models/job/index.ts
new file mode 100644
index 000000000..56925fd32
--- /dev/null
+++ b/server/models/job/index.ts
@@ -0,0 +1 @@
+export * from './job-interface'
diff --git a/server/models/job-interface.ts b/server/models/job/job-interface.ts
similarity index 100%
rename from server/models/job-interface.ts
rename to server/models/job/job-interface.ts
diff --git a/server/models/job.ts b/server/models/job/job.ts
similarity index 93%
rename from server/models/job.ts
rename to server/models/job/job.ts
index d4380a575..60a6c551b 100644
--- a/server/models/job.ts
+++ b/server/models/job/job.ts
@@ -1,9 +1,9 @@
 import { values } from 'lodash'
 import * as Sequelize from 'sequelize'
 
-import { JOB_STATES } from '../initializers'
+import { JOB_STATES } from '../../initializers'
 
-import { addMethodsToModel } from './utils'
+import { addMethodsToModel } from '../utils'
 import {
   JobClass,
   JobInstance,
diff --git a/server/models/oauth/index.ts b/server/models/oauth/index.ts
new file mode 100644
index 000000000..a20d3a56a
--- /dev/null
+++ b/server/models/oauth/index.ts
@@ -0,0 +1,2 @@
+export * from './oauth-client-interface'
+export * from './oauth-token-interface'
diff --git a/server/models/oauth-client-interface.ts b/server/models/oauth/oauth-client-interface.ts
similarity index 100%
rename from server/models/oauth-client-interface.ts
rename to server/models/oauth/oauth-client-interface.ts
diff --git a/server/models/oauth-client.ts b/server/models/oauth/oauth-client.ts
similarity index 97%
rename from server/models/oauth-client.ts
rename to server/models/oauth/oauth-client.ts
index a5438f45a..fbc2a3393 100644
--- a/server/models/oauth-client.ts
+++ b/server/models/oauth/oauth-client.ts
@@ -1,6 +1,6 @@
 import * as Sequelize from 'sequelize'
 
-import { addMethodsToModel } from './utils'
+import { addMethodsToModel } from '../utils'
 import {
   OAuthClientClass,
   OAuthClientInstance,
diff --git a/server/models/oauth-token-interface.ts b/server/models/oauth/oauth-token-interface.ts
similarity index 97%
rename from server/models/oauth-token-interface.ts
rename to server/models/oauth/oauth-token-interface.ts
index 88526697e..815ad5eef 100644
--- a/server/models/oauth-token-interface.ts
+++ b/server/models/oauth/oauth-token-interface.ts
@@ -1,7 +1,7 @@
 import * as Sequelize from 'sequelize'
 import * as Bluebird from 'bluebird'
 
-import { UserModel } from './user-interface'
+import { UserModel } from '../user'
 
 export type OAuthTokenInfo = {
   refreshToken: string
diff --git a/server/models/oauth-token.ts b/server/models/oauth/oauth-token.ts
similarity index 97%
rename from server/models/oauth-token.ts
rename to server/models/oauth/oauth-token.ts
index 91cef11dd..eab9cf858 100644
--- a/server/models/oauth-token.ts
+++ b/server/models/oauth/oauth-token.ts
@@ -1,8 +1,8 @@
 import * as Sequelize from 'sequelize'
 
-import { logger } from '../helpers'
+import { logger } from '../../helpers'
 
-import { addMethodsToModel } from './utils'
+import { addMethodsToModel } from '../utils'
 import {
   OAuthTokenClass,
   OAuthTokenInstance,
diff --git a/server/models/pod/index.ts b/server/models/pod/index.ts
new file mode 100644
index 000000000..d2bf50d4d
--- /dev/null
+++ b/server/models/pod/index.ts
@@ -0,0 +1 @@
+export * from './pod-interface'
diff --git a/server/models/pod-interface.ts b/server/models/pod/pod-interface.ts
similarity index 97%
rename from server/models/pod-interface.ts
rename to server/models/pod/pod-interface.ts
index 8f362bd5c..01ccda64c 100644
--- a/server/models/pod-interface.ts
+++ b/server/models/pod/pod-interface.ts
@@ -1,7 +1,7 @@
 import * as Sequelize from 'sequelize'
 
 // Don't use barrel, import just what we need
-import { Pod as FormatedPod } from '../../shared/models/pod.model'
+import { Pod as FormatedPod } from '../../../shared/models/pod.model'
 
 export namespace PodMethods {
   export type ToFormatedJSON = () => FormatedPod
diff --git a/server/models/pod.ts b/server/models/pod/pod.ts
similarity index 97%
rename from server/models/pod.ts
rename to server/models/pod/pod.ts
index fef9d4da6..4c6e63024 100644
--- a/server/models/pod.ts
+++ b/server/models/pod/pod.ts
@@ -2,10 +2,10 @@ import { each, waterfall } from 'async'
 import { map } from 'lodash'
 import * as Sequelize from 'sequelize'
 
-import { FRIEND_SCORE, PODS_SCORE } from '../initializers'
-import { logger, isHostValid } from '../helpers'
+import { FRIEND_SCORE, PODS_SCORE } from '../../initializers'
+import { logger, isHostValid } from '../../helpers'
 
-import { addMethodsToModel } from './utils'
+import { addMethodsToModel } from '../utils'
 import {
   PodClass,
   PodInstance,
diff --git a/server/models/request/index.ts b/server/models/request/index.ts
new file mode 100644
index 000000000..824c140f5
--- /dev/null
+++ b/server/models/request/index.ts
@@ -0,0 +1,4 @@
+export * from './request-interface'
+export * from './request-to-pod-interface'
+export * from './request-video-event-interface'
+export * from './request-video-qadu-interface'
diff --git a/server/models/request-interface.ts b/server/models/request/request-interface.ts
similarity index 96%
rename from server/models/request-interface.ts
rename to server/models/request/request-interface.ts
index 4bbd79966..70fd734e1 100644
--- a/server/models/request-interface.ts
+++ b/server/models/request/request-interface.ts
@@ -1,6 +1,6 @@
 import * as Sequelize from 'sequelize'
 
-import { PodInstance, PodAttributes } from './pod-interface'
+import { PodInstance, PodAttributes } from '../pod'
 
 export type RequestsGrouped = {
   [ podId: number ]: {
diff --git a/server/models/request-to-pod-interface.ts b/server/models/request/request-to-pod-interface.ts
similarity index 100%
rename from server/models/request-to-pod-interface.ts
rename to server/models/request/request-to-pod-interface.ts
diff --git a/server/models/request-to-pod.ts b/server/models/request/request-to-pod.ts
similarity index 96%
rename from server/models/request-to-pod.ts
rename to server/models/request/request-to-pod.ts
index d2f31463c..67331be1d 100644
--- a/server/models/request-to-pod.ts
+++ b/server/models/request/request-to-pod.ts
@@ -1,6 +1,6 @@
 import * as Sequelize from 'sequelize'
 
-import { addMethodsToModel } from './utils'
+import { addMethodsToModel } from '../utils'
 import {
   RequestToPodClass,
   RequestToPodInstance,
diff --git a/server/models/request-video-event-interface.ts b/server/models/request/request-video-event-interface.ts
similarity index 94%
rename from server/models/request-video-event-interface.ts
rename to server/models/request/request-video-event-interface.ts
index ad576a2b1..219d8edc0 100644
--- a/server/models/request-video-event-interface.ts
+++ b/server/models/request/request-video-event-interface.ts
@@ -1,7 +1,7 @@
 import * as Sequelize from 'sequelize'
 
-import { VideoInstance } from './video-interface'
-import { PodInstance } from './pod-interface'
+import { VideoInstance } from '../video'
+import { PodInstance } from '../pod'
 
 export type RequestsVideoEventGrouped = {
   [ podId: number ]: {
diff --git a/server/models/request-video-event.ts b/server/models/request/request-video-event.ts
similarity index 95%
rename from server/models/request-video-event.ts
rename to server/models/request/request-video-event.ts
index 32438b581..f552ef50b 100644
--- a/server/models/request-video-event.ts
+++ b/server/models/request/request-video-event.ts
@@ -5,10 +5,10 @@
 import { values } from 'lodash'
 import * as Sequelize from 'sequelize'
 
-import { database as db } from '../initializers/database'
-import { REQUEST_VIDEO_EVENT_TYPES } from '../initializers'
-import { isVideoEventCountValid } from '../helpers'
-import { addMethodsToModel } from './utils'
+import { database as db } from '../../initializers/database'
+import { REQUEST_VIDEO_EVENT_TYPES } from '../../initializers'
+import { isVideoEventCountValid } from '../../helpers'
+import { addMethodsToModel } from '../utils'
 import {
   RequestVideoEventClass,
   RequestVideoEventInstance,
diff --git a/server/models/request-video-qadu-interface.ts b/server/models/request/request-video-qadu-interface.ts
similarity index 94%
rename from server/models/request-video-qadu-interface.ts
rename to server/models/request/request-video-qadu-interface.ts
index 04de7f159..625b063dc 100644
--- a/server/models/request-video-qadu-interface.ts
+++ b/server/models/request/request-video-qadu-interface.ts
@@ -1,7 +1,7 @@
 import * as Sequelize from 'sequelize'
 
-import { VideoInstance } from './video-interface'
-import { PodInstance } from './pod-interface'
+import { VideoInstance } from '../video'
+import { PodInstance } from '../pod'
 
 export type RequestsVideoQaduGrouped = {
   [ podId: number ]: {
diff --git a/server/models/request-video-qadu.ts b/server/models/request/request-video-qadu.ts
similarity index 96%
rename from server/models/request-video-qadu.ts
rename to server/models/request/request-video-qadu.ts
index 27ce0ff29..da62239f5 100644
--- a/server/models/request-video-qadu.ts
+++ b/server/models/request/request-video-qadu.ts
@@ -12,9 +12,9 @@
 import { values } from 'lodash'
 import * as Sequelize from 'sequelize'
 
-import { database as db } from '../initializers/database'
-import { REQUEST_VIDEO_QADU_TYPES } from '../initializers'
-import { addMethodsToModel } from './utils'
+import { database as db } from '../../initializers/database'
+import { REQUEST_VIDEO_QADU_TYPES } from '../../initializers'
+import { addMethodsToModel } from '../utils'
 import {
   RequestVideoQaduClass,
   RequestVideoQaduInstance,
diff --git a/server/models/request.ts b/server/models/request/request.ts
similarity index 95%
rename from server/models/request.ts
rename to server/models/request/request.ts
index e6c367f28..66e7da845 100644
--- a/server/models/request.ts
+++ b/server/models/request/request.ts
@@ -1,9 +1,9 @@
 import { values } from 'lodash'
 import * as Sequelize from 'sequelize'
 
-import { database as db } from '../initializers/database'
-import { REQUEST_ENDPOINTS } from '../initializers'
-import { addMethodsToModel } from './utils'
+import { database as db } from '../../initializers/database'
+import { REQUEST_ENDPOINTS } from '../../initializers'
+import { addMethodsToModel } from '../utils'
 import {
   RequestClass,
   RequestInstance,
diff --git a/server/models/user/index.ts b/server/models/user/index.ts
new file mode 100644
index 000000000..ed3689518
--- /dev/null
+++ b/server/models/user/index.ts
@@ -0,0 +1,2 @@
+export * from './user-video-rate-interface'
+export * from './user-interface'
diff --git a/server/models/user-interface.ts b/server/models/user/user-interface.ts
similarity index 96%
rename from server/models/user-interface.ts
rename to server/models/user/user-interface.ts
index 98963b743..1ba4bd800 100644
--- a/server/models/user-interface.ts
+++ b/server/models/user/user-interface.ts
@@ -2,7 +2,7 @@ import * as Sequelize from 'sequelize'
 import * as Bluebird from 'bluebird'
 
 // Don't use barrel, import just what we need
-import { User as FormatedUser } from '../../shared/models/user.model'
+import { User as FormatedUser } from '../../../shared/models/user.model'
 
 export namespace UserMethods {
   export type IsPasswordMatchCallback = (err: Error, same: boolean) => void
diff --git a/server/models/user-video-rate-interface.ts b/server/models/user/user-video-rate-interface.ts
similarity index 100%
rename from server/models/user-video-rate-interface.ts
rename to server/models/user/user-video-rate-interface.ts
diff --git a/server/models/user-video-rate.ts b/server/models/user/user-video-rate.ts
similarity index 94%
rename from server/models/user-video-rate.ts
rename to server/models/user/user-video-rate.ts
index 0326e1796..68be62fc2 100644
--- a/server/models/user-video-rate.ts
+++ b/server/models/user/user-video-rate.ts
@@ -5,9 +5,9 @@
 import { values } from 'lodash'
 import * as Sequelize from 'sequelize'
 
-import { VIDEO_RATE_TYPES } from '../initializers'
+import { VIDEO_RATE_TYPES } from '../../initializers'
 
-import { addMethodsToModel } from './utils'
+import { addMethodsToModel } from '../utils'
 import {
   UserVideoRateClass,
   UserVideoRateInstance,
diff --git a/server/models/user.ts b/server/models/user/user.ts
similarity index 97%
rename from server/models/user.ts
rename to server/models/user/user.ts
index 1a56a6dc3..d78f5f845 100644
--- a/server/models/user.ts
+++ b/server/models/user/user.ts
@@ -1,17 +1,17 @@
 import { values } from 'lodash'
 import * as Sequelize from 'sequelize'
 
-import { getSort } from './utils'
-import { USER_ROLES } from '../initializers'
+import { getSort } from '../utils'
+import { USER_ROLES } from '../../initializers'
 import {
   cryptPassword,
   comparePassword,
   isUserPasswordValid,
   isUserUsernameValid,
   isUserDisplayNSFWValid
-} from '../helpers'
+} from '../../helpers'
 
-import { addMethodsToModel } from './utils'
+import { addMethodsToModel } from '../utils'
 import {
   UserClass,
   UserInstance,
diff --git a/server/models/author-interface.ts b/server/models/video/author-interface.ts
similarity index 94%
rename from server/models/author-interface.ts
rename to server/models/video/author-interface.ts
index b57ce2a6b..c1b30848c 100644
--- a/server/models/author-interface.ts
+++ b/server/models/video/author-interface.ts
@@ -1,6 +1,6 @@
 import * as Sequelize from 'sequelize'
 
-import { PodInstance } from './pod-interface'
+import { PodInstance } from '../pod'
 
 export namespace AuthorMethods {
   export type FindOrCreateAuthorCallback = (err: Error, authorInstance?: AuthorInstance) => void
diff --git a/server/models/author.ts b/server/models/video/author.ts
similarity index 95%
rename from server/models/author.ts
rename to server/models/video/author.ts
index e0fb250f9..4a115e328 100644
--- a/server/models/author.ts
+++ b/server/models/video/author.ts
@@ -1,8 +1,8 @@
 import * as Sequelize from 'sequelize'
 
-import { isUserUsernameValid } from '../helpers'
+import { isUserUsernameValid } from '../../helpers'
 
-import { addMethodsToModel } from './utils'
+import { addMethodsToModel } from '../utils'
 import {
   AuthorClass,
   AuthorInstance,
diff --git a/server/models/video/index.ts b/server/models/video/index.ts
new file mode 100644
index 000000000..84b801c72
--- /dev/null
+++ b/server/models/video/index.ts
@@ -0,0 +1,6 @@
+export * from './author-interface'
+export * from './tag-interface'
+export * from './video-abuse-interface'
+export * from './video-blacklist-interface'
+export * from './video-tag-interface'
+export * from './video-interface'
diff --git a/server/models/tag-interface.ts b/server/models/video/tag-interface.ts
similarity index 100%
rename from server/models/tag-interface.ts
rename to server/models/video/tag-interface.ts
diff --git a/server/models/tag.ts b/server/models/video/tag.ts
similarity index 97%
rename from server/models/tag.ts
rename to server/models/video/tag.ts
index 54a5f79e5..3c657d751 100644
--- a/server/models/tag.ts
+++ b/server/models/video/tag.ts
@@ -1,7 +1,7 @@
 import { each } from 'async'
 import * as Sequelize from 'sequelize'
 
-import { addMethodsToModel } from './utils'
+import { addMethodsToModel } from '../utils'
 import {
   TagClass,
   TagInstance,
diff --git a/server/models/video-abuse-interface.ts b/server/models/video/video-abuse-interface.ts
similarity index 90%
rename from server/models/video-abuse-interface.ts
rename to server/models/video/video-abuse-interface.ts
index d9cb93b42..4b7f2a2ec 100644
--- a/server/models/video-abuse-interface.ts
+++ b/server/models/video/video-abuse-interface.ts
@@ -1,7 +1,7 @@
 import * as Sequelize from 'sequelize'
 
 // Don't use barrel, import just what we need
-import { VideoAbuse as FormatedVideoAbuse } from '../../shared/models/video-abuse.model'
+import { VideoAbuse as FormatedVideoAbuse } from '../../../shared/models/video-abuse.model'
 
 export namespace VideoAbuseMethods {
   export type toFormatedJSON = () => FormatedVideoAbuse
diff --git a/server/models/video-abuse.ts b/server/models/video/video-abuse.ts
similarity index 95%
rename from server/models/video-abuse.ts
rename to server/models/video/video-abuse.ts
index 5602ef968..e0e0bcfe6 100644
--- a/server/models/video-abuse.ts
+++ b/server/models/video/video-abuse.ts
@@ -1,9 +1,9 @@
 import * as Sequelize from 'sequelize'
 
-import { CONFIG } from '../initializers'
-import { isVideoAbuseReporterUsernameValid, isVideoAbuseReasonValid } from '../helpers'
+import { CONFIG } from '../../initializers'
+import { isVideoAbuseReporterUsernameValid, isVideoAbuseReasonValid } from '../../helpers'
 
-import { addMethodsToModel, getSort } from './utils'
+import { addMethodsToModel, getSort } from '../utils'
 import {
   VideoAbuseClass,
   VideoAbuseInstance,
diff --git a/server/models/video-blacklist-interface.ts b/server/models/video/video-blacklist-interface.ts
similarity index 97%
rename from server/models/video-blacklist-interface.ts
rename to server/models/video/video-blacklist-interface.ts
index 974718192..37f579422 100644
--- a/server/models/video-blacklist-interface.ts
+++ b/server/models/video/video-blacklist-interface.ts
@@ -1,7 +1,7 @@
 import * as Sequelize from 'sequelize'
 
 // Don't use barrel, import just what we need
-import { BlacklistedVideo as FormatedBlacklistedVideo } from '../../shared/models/video-blacklist.model'
+import { BlacklistedVideo as FormatedBlacklistedVideo } from '../../../shared/models/video-blacklist.model'
 
 export namespace BlacklistedVideoMethods {
   export type ToFormatedJSON = () => FormatedBlacklistedVideo
diff --git a/server/models/video-blacklist.ts b/server/models/video/video-blacklist.ts
similarity index 97%
rename from server/models/video-blacklist.ts
rename to server/models/video/video-blacklist.ts
index 040ed03d7..f4479986c 100644
--- a/server/models/video-blacklist.ts
+++ b/server/models/video/video-blacklist.ts
@@ -1,6 +1,6 @@
 import * as Sequelize from 'sequelize'
 
-import { addMethodsToModel, getSort } from './utils'
+import { addMethodsToModel, getSort } from '../utils'
 import {
   BlacklistedVideoClass,
   BlacklistedVideoInstance,
diff --git a/server/models/video-interface.ts b/server/models/video/video-interface.ts
similarity index 98%
rename from server/models/video-interface.ts
rename to server/models/video/video-interface.ts
index 7120f91cd..71b9b0a69 100644
--- a/server/models/video-interface.ts
+++ b/server/models/video/video-interface.ts
@@ -4,7 +4,7 @@ import { AuthorInstance } from './author-interface'
 import { VideoTagInstance } from './video-tag-interface'
 
 // Don't use barrel, import just what we need
-import { Video as FormatedVideo } from '../../shared/models/video.model'
+import { Video as FormatedVideo } from '../../../shared/models/video.model'
 
 export type FormatedAddRemoteVideo = {
   name: string
diff --git a/server/models/video-tag-interface.ts b/server/models/video/video-tag-interface.ts
similarity index 100%
rename from server/models/video-tag-interface.ts
rename to server/models/video/video-tag-interface.ts
diff --git a/server/models/video-tag.ts b/server/models/video/video-tag.ts
similarity index 92%
rename from server/models/video-tag.ts
rename to server/models/video/video-tag.ts
index 514eede25..71ca85332 100644
--- a/server/models/video-tag.ts
+++ b/server/models/video/video-tag.ts
@@ -1,6 +1,6 @@
 import * as Sequelize from 'sequelize'
 
-import { addMethodsToModel } from './utils'
+import { addMethodsToModel } from '../utils'
 import {
   VideoTagClass,
   VideoTagInstance,
diff --git a/server/models/video.ts b/server/models/video/video.ts
similarity index 99%
rename from server/models/video.ts
rename to server/models/video/video.ts
index 78119f516..866b380cc 100644
--- a/server/models/video.ts
+++ b/server/models/video/video.ts
@@ -10,7 +10,7 @@ import * as parseTorrent from 'parse-torrent'
 import { join } from 'path'
 import * as Sequelize from 'sequelize'
 
-import { database as db } from '../initializers/database'
+import { database as db } from '../../initializers/database'
 import { VideoTagInstance } from './video-tag-interface'
 import {
   logger,
@@ -22,7 +22,7 @@ import {
   isVideoDescriptionValid,
   isVideoInfoHashValid,
   isVideoDurationValid
-} from '../helpers'
+} from '../../helpers'
 import {
   CONSTRAINTS_FIELDS,
   CONFIG,
@@ -32,10 +32,10 @@ import {
   VIDEO_LICENCES,
   VIDEO_LANGUAGES,
   THUMBNAILS_SIZE
-} from '../initializers'
-import { JobScheduler, removeVideoToFriends } from '../lib'
+} from '../../initializers'
+import { JobScheduler, removeVideoToFriends } from '../../lib'
 
-import { addMethodsToModel, getSort } from './utils'
+import { addMethodsToModel, getSort } from '../utils'
 import {
   VideoClass,
   VideoInstance,