diff --git a/lib/apiserver/routers/smstools-config.js b/lib/apiserver/routers/smstools-config.js
index 17e2529..13950f7 100644
--- a/lib/apiserver/routers/smstools-config.js
+++ b/lib/apiserver/routers/smstools-config.js
@@ -7,9 +7,11 @@ const config = require('komodo-sdk/config');
 const logger = require('komodo-sdk/logger');
 
 const smstoolsConfig = require('../../smstools-config');
+const smstoolsConfigData = require('../../smstools-config/config-file');
 const smstoolsConfigCreator = require('../../smstools-config/creator');
 const smstoolsConfigSetter = require('../../smstools-config/setter');
-const smstoolsConfigData = require('../../smstools-config/config-file');
+const queuesAndProviders = require('../../smstools-config/queues-and-providers');
+
 
 const router = express.Router();
 module.exports = router;
@@ -151,16 +153,8 @@ async function pageInstallConfig(req, res) {
     });
 }
 
-function pageSmsdLog(req, res) {
-    // deprecated
-    const maxLines = (req.params.maxLines || 200);
-    childProcess.exec(`tail -n ${maxLines} /var/log/smsd/smsd.log | tac`, (err, stdout, stderr) => {
-        res.json({
-            err,
-            stdout,
-            stderr,
-        });
-    });
+function pageQueuesAndProviders(req, res) {
+    res.end(queuesAndProviders.dump);
 }
 
 router.get('/', pageIndex);
@@ -172,5 +166,4 @@ router.post('/modem/set/:modemName', bodyParser.json({ type: '*/json' }), pageMo
 router.post('/modem/set-single-value/:modemName', bodyParser.json({ type: '*/json' }), pageModemSetSingleValue);
 router.get('/modem/delete/:modemName', pageModemDelete);
 router.get('/install-config', pageInstallConfig);
-router.get('/smsd-log/:maxLines', pageSmsdLog);
-router.get('/smsd-log', pageSmsdLog);
+router.get('/queues-and-providers', pageQueuesAndProviders);
diff --git a/lib/smstools-config/queues-and-providers.js b/lib/smstools-config/queues-and-providers.js
new file mode 100644
index 0000000..5e3573c
--- /dev/null
+++ b/lib/smstools-config/queues-and-providers.js
@@ -0,0 +1,89 @@
+const fs = require('fs');
+
+const config = require('komodo-sdk/config');
+const logger = require('komodo-sdk/logger');
+const smstoolsConfig = require('./config-file');
+
+const queuesBaseDir = config.smstools_queues_base_dir || '/var/spool/sms';
+
+function composeQueueDir(queueName) {
+    return `${queuesBaseDir}/${queueName}`;
+}
+
+async function createDirectory(dirname) {
+    let isExists = true;
+    try {
+        await fs.promises.access(dirname);
+    } catch (e) {
+        isExists = false;
+    }
+
+    if (isExists) return;
+
+    try {
+        fs.promises.mkdir(dirname, { recursive: true, mode: 0o770 });
+    } catch (e) {
+        logger.warn('QUEUES-AND-PROVIDERS: Exception on creating directory', {
+            dirname,
+            e: e.message || e.toString(),
+        });
+    }
+}
+
+function queuesSorted(queuesArray) {
+    const result = (queuesArray || smstoolsConfig.queues || []).sort((a, b) => {
+        const orderA = (a && Number(a.order)) || 0;
+        const orderB = (b && Number(b.order)) || 0;
+
+        if (orderA < orderB) return -1;
+        if (orderA > orderB) return 1;
+        return 0;
+    });
+
+    return result;
+}
+
+exports.dump = async (mkdirIfQueueDirNotExists) => {
+    if (config.smstools_disable_queue) return '';
+
+    const queues = queuesSorted();
+    const queuesCount = queues.length;
+
+    const configLines = ['[queues]'];
+    const providerLines = ['[providers]'];
+    const queuesDirs = [];
+    let hasQueues = false;
+    let hasProviders = false;
+    for (let i = 0; i < queuesCount; i += 1) {
+        const queue = queues[i];
+
+        // eslint-disable-next-line no-continue
+        if (!queue.name || !queue.enabled) continue;
+
+        const queueDir = composeQueueDir(queue.name);
+        queuesDirs.push(queueDir);
+        if (mkdirIfQueueDirNotExists) {
+            // eslint-disable-next-line no-await-in-loop
+            await createDirectory(queueDir);
+        }
+
+        const line = `${queue.name} = ${queueDir}`;
+        configLines.push(line);
+        hasQueues = true;
+
+        const hasPrefix = (!queue.prefix || !queue.prefix.length);
+        if (hasPrefix) {
+            const providerLine = `${queue.name} = ${queue.prefix.join(', ')}`;
+            providerLines.push(providerLine);
+            hasProviders = true;
+        }
+    }
+
+    if (!hasQueues) return '';
+
+    if (!hasProviders) {
+        return configLines.join('\n');
+    }
+
+    return `${configLines.join('\n')}\n${providerLines.join('\n')}`;
+};