diff --git a/index.js b/index.js
index d8043e0e9031e5122a9df27da1924b3da01c7dd8..e4afe5411b0da01194257641f1d94198706bd399 100644
--- a/index.js
+++ b/index.js
@@ -32,7 +32,7 @@ module.exports = {
       onConfiguredExecute: (server, conf, program, params) => co(function*() {
         yield server.checkConfig()
         const daemon = server.getDaemon('direct_webstart', 'webstart')
-        yield startDaemon(daemon)
+        yield startDaemon(program, daemon)
       })
     }, {
 
@@ -43,7 +43,7 @@ module.exports = {
         yield server.checkConfig()
         const daemon = server.getDaemon('direct_webstart', 'webrestart')
         yield stopDaemon(daemon)
-        yield startDaemon(daemon)
+        yield startDaemon(program, daemon)
       })
     }, {
       name: 'direct_webstart',
@@ -99,11 +99,46 @@ module.exports = {
   }
 };
 
-function startDaemon(daemon) {
-  return new Promise((resolve, reject) => daemon.start((err) => {
-    if (err) return reject(err)
-    resolve()
-  }))
+function startDaemon(program, daemon) {
+  return co(function*() {
+
+    const PORT = program.webmport || 9220
+
+    const isPortAlreadyTaken = yield new Promise((resolve) => {
+      isPortTaken(PORT, (err, taken) => err ? reject(err) : resolve(taken))
+    })
+
+    if (isPortAlreadyTaken) {
+      console.error('Port ' + PORT + ' already used.')
+      process.exit(3)
+    }
+
+    return new Promise((resolve, reject) => daemon.start((err) => {
+      if (err) return reject(err)
+      resolve()
+    }))
+  })
+}
+
+/**
+ * Checks if a port is already taken by another app.
+ *
+ * Source: https://gist.github.com/timoxley/1689041
+ * @param port
+ * @param fn
+ */
+function isPortTaken(port, fn) {
+  const net = require('net')
+  const tester = net.createServer()
+    .once('error', function (err) {
+      if (err.code != 'EADDRINUSE') return fn(err)
+      fn(null, true)
+    })
+    .once('listening', function() {
+      tester.once('close', function() { fn(null, false) })
+        .close()
+    })
+    .listen(port)
 }
 
 function stopDaemon(daemon) {