diff --git a/packages/db-manager/package.json b/packages/db-manager/package.json
index 12f0848ed4fafeeb5a529072a6062141bd11cdeb..c5f86250f9a7025adb2573bd0b88a8d5994b129d 100644
--- a/packages/db-manager/package.json
+++ b/packages/db-manager/package.json
@@ -36,7 +36,7 @@
     "lodash": "^4.17.11",
     "objection": "^1.3.0",
     "pg": "^7.4.1",
-    "tmp": "^0.0.33",
+    "tmp-promise": "^1.0.5",
     "umzug": "^2.1.0"
   },
   "peerDependencies": {
diff --git a/packages/db-manager/src/commands/migrate.js b/packages/db-manager/src/commands/migrate.js
index 4beb2fa0e031ca69c78f9ce894456178a82e41fd..25ca960db9c5b231ecf86629cb5f1a95c7ddc7a1 100644
--- a/packages/db-manager/src/commands/migrate.js
+++ b/packages/db-manager/src/commands/migrate.js
@@ -1,9 +1,9 @@
 const getUmzug = require('../helpers/umzug')
 const getMigrationPaths = require('../helpers/migrationPaths')
 
-const migrate = async () => {
-  const umzug = await getUmzug(getMigrationPaths())
-  await umzug.up()
+const migrate = async options => {
+  const { umzug, cleanup } = await getUmzug(getMigrationPaths())
+  await umzug.up(options).finally(() => cleanup())
 }
 
 module.exports = migrate
diff --git a/packages/db-manager/src/helpers/umzug.js b/packages/db-manager/src/helpers/umzug.js
index 26763b4640e2e9ea125de318cefc0aeb134518ed..ef1148691386ab384f2c7a84eea7023f6c1df5ab 100644
--- a/packages/db-manager/src/helpers/umzug.js
+++ b/packages/db-manager/src/helpers/umzug.js
@@ -2,13 +2,10 @@ const logger = require('@pubsweet/logger')
 const db = require('../db')
 const Umzug = require('umzug')
 const fs = require('fs-extra')
-const path = require('path')
-const tmp = require('tmp')
-const { promisify } = require('util')
+const { extname } = require('path')
+const tmp = require('tmp-promise')
 const storage = require('./umzugStorage')
 
-const makeTempDir = promisify(tmp.dir)
-
 // load SQL files as migrations
 const sqlResolver = filePath => ({
   up: async db => {
@@ -19,8 +16,8 @@ const sqlResolver = filePath => ({
 
 const getUmzug = async migrationsPaths => {
   // collect up all migrations to be run
-  const tempDir = await makeTempDir({
-    prefix: 'migrations-',
+  const { path, cleanup } = await tmp.dir({
+    prefix: '_migrations-',
     unsafeCleanup: true,
     dir: process.cwd(),
   })
@@ -29,26 +26,27 @@ const getUmzug = async migrationsPaths => {
   await Promise.all(
     migrationsPaths.map(async migrationPath => {
       if (await fs.exists(migrationPath)) {
-        await fs.copy(migrationPath, tempDir)
+        await fs.copy(migrationPath, path)
       }
     }),
   )
-
-  return new Umzug({
+  const umzug = new Umzug({
     storage,
     logging: logger.debug.bind(logger),
     migrations: {
-      path: tempDir,
+      path,
       params: [db],
       pattern: /\d+-[\w-]+\.(js|sql)/,
       customResolver: filePath => {
-        if (path.extname(filePath) === '.sql') {
+        if (extname(filePath) === '.sql') {
           return sqlResolver(filePath)
         }
         return require(filePath)
       },
     },
   })
+
+  return { cleanup, umzug }
 }
 
 module.exports = getUmzug
diff --git a/packages/server/test/helpers/db_cleaner.js b/packages/server/test/helpers/db_cleaner.js
index 455d631f2e7c5ecd89b8d59ca0a70a8fa160c946..1b1ab77ef8781edc4242a797489ee1796a8b280f 100644
--- a/packages/server/test/helpers/db_cleaner.js
+++ b/packages/server/test/helpers/db_cleaner.js
@@ -1,11 +1,11 @@
 const { db, migrate } = require('@pubsweet/db-manager')
 const logger = require('@pubsweet/logger')
 
-const dbCleaner = async () => {
+const dbCleaner = async options => {
   await db.raw('DROP SCHEMA public CASCADE;')
   await db.raw('CREATE SCHEMA public;')
   await db.raw('GRANT ALL ON SCHEMA public TO public;')
-  await migrate()
+  await migrate(options)
   logger.info('Dropped all tables and ran all migrations')
 }