diff --git a/exec/json-service.js b/exec/json-service.js
index 8a29199b8be72cef4158f85511a14a3f6c4fde7d..4f0d6a47aaa4110e8a4520642d437d115138abe0 100644
--- a/exec/json-service.js
+++ b/exec/json-service.js
@@ -449,7 +449,6 @@ admin = new (function() {
 /* module handler */
 engine = new (function() {
 	this.modules = [];
-	this.queue = undefined;
 	this.file = new File(serviceIniFile);
 
 	/* load module list */
@@ -461,12 +460,12 @@ engine = new (function() {
 		var modules=this.file.iniGetAllObjects();
 		this.file.close();
 		for each(var m in modules) {
-      try {
-  			this.modules[m.name.toUpperCase()]=new Module(m.name,m.dir,m.read,m.write);
-  			log(LOG_DEBUG,"loaded module: " + m.name);
-      } catch (err) {
-        log(LOG_ERROR, 'Failed to load module: ' + m.name + ', ' + err);
-      }
+			try {
+				this.modules[m.name.toUpperCase()]=new Module(m.name,m.dir,m.read,m.write);
+				log(LOG_DEBUG,"loaded module: " + m.name);
+			} catch (err) {
+				log(LOG_ERROR, 'Failed to load module: ' + m.name + ', ' + err);
+			}
 		}
 	}
 
@@ -475,6 +474,7 @@ engine = new (function() {
 		for each(var m in this.modules) {
 			if(!m.online)
 				continue;
+			m.poll();
 			m.db.cycle();
 		}
 	}
@@ -600,6 +600,28 @@ engine = new (function() {
 		this.read = read;
 		this.write = write;
 		this.db;
+		
+		this.poll = function() {
+			if(this.queue != undefined) {
+				var type = this.queue.poll();
+				switch(type) {
+					case "log":
+						var data = this.queue.read(type);
+						log(data.LOG_LEVEL,data.message);
+						break;
+					case true:
+						var data = this.queue.read();
+						//log(LOG_INFO,JSON.stringify(data));
+						break;
+					case false:
+						break;
+					default:
+						var data = this.queue.read(type);
+						log(LOG_ERROR,"unknown data received from background service: " + type);
+						break;
+				}
+			}
+		}
 
 		this.init = function() {
 			this.db=new JSONdb(this.dir+this.name+".json", this.name);
diff --git a/exec/load/backgroundlog.js b/exec/load/backgroundlog.js
new file mode 100644
index 0000000000000000000000000000000000000000..0dcae5f38f7b334e9d10cf9a125d249140bf186b
--- /dev/null
+++ b/exec/load/backgroundlog.js
@@ -0,0 +1,42 @@
+load("sbbsdefs.js");
+
+js.global.log = function(log_level, message) { 
+	if(js.global.parent_queue != undefined) {
+		parent_queue.write({LOG_LEVEL:log_level,message:message},"log");
+	}
+	else {
+		var ef = new File(exec_path + "/e.log");
+		var log_type = "";
+		switch(log_level) {
+			case LOG_EMERG:
+				log_type = "EMERGENCY";
+				break;
+			case LOG_ALERT:
+				log_type = "EMERGENCY";
+				break;
+			case LOG_CRIT:
+				log_type = "CRITICAL";
+				break;
+			case LOG_ERR:
+				log_type = "ERROR";
+				break;
+			case LOG_WARNING:
+				log_type = "WARNING";
+				break;
+			case LOG_NOTICE:
+				log_type = "NOTICE";
+				break;
+			case LOG_DEBUG:
+				log_type = "DEBUG";
+				break;
+			case LOG_INFO:
+			default:
+				log_type = "INFO";
+				break;
+		}
+		ef.open('a',true);
+		ef.writeln(system.timestr() + ": " + log_type + ": " + message);
+		ef.close();
+	}
+};
+