diff --git a/xtrn/maze/service.js b/xtrn/maze/service.js
index 9ab279fcc972c86b7033d8e22055b572b4df84bb..2ed94efcc1ef1b43df1075dd489c5b0eed5725bb 100644
--- a/xtrn/maze/service.js
+++ b/xtrn/maze/service.js
@@ -1,6 +1,7 @@
 var root = argv[0];
 js.branch_limit = 0;
 
+load("backgroundlog.js");
 load("json-client.js");
 load("event-timer.js");
 load("funclib.js");
@@ -100,7 +101,7 @@ function handleDisco(update) {
 
 /* delete a game */
 function deleteGame(gameNumber) {
-	log(LOG_WARNING,"removing empty game #" + gameNumber);
+	log(LOG_DEBUG,"removing empty game #" + gameNumber);
 	client.remove(game_id,"games." + gameNumber,2);
 	if(data.timers[gameNumber])
 		data.timers[gameNumber].abort = true;
@@ -109,7 +110,7 @@ function deleteGame(gameNumber) {
 
 /* delete a player */
 function deletePlayer(gameNumber,playerName) {
-	log(LOG_WARNING,"removing player from game " + gameNumber);
+	log(LOG_DEBUG,"removing player from game " + gameNumber);
 	client.remove(game_id,"games." + gameNumber + ".players." + playerName,2)
 	delete data.games[gameNumber].players[playerName];
 }
@@ -170,7 +171,7 @@ function getReady(game) {
 function startGame(game) {
 	/* verify that the game is still ready */
 	if(game.status == status.STARTING) {
-		log("starting race: " + game.gameNumber);
+		log(LOG_DEBUG,"starting race: " + game.gameNumber);
 		client.lock("mazerace","games." + game.gameNumber + ".status",2);
 		game.status = status.RACING;
 		createMaze(game);
@@ -229,7 +230,7 @@ function init() {
 
 /* main loop */
 function main() {
-	while(client.socket.is_connected && !js.terminated && !parent_queue.poll()) {
+	while(!js.terminated && !parent_queue.poll()) {
 		if(client.socket.poll(.1))
 			client.cycle();
 		timer.cycle();
@@ -248,4 +249,4 @@ function Race(gameNumber,players,damage,fog,maze,start,finish) {
 }
 
 init();
-main();
+main();
\ No newline at end of file
diff --git a/xtrn/synchronetris/service.js b/xtrn/synchronetris/service.js
index a11d0340d596846ba30892cf9ea7f9356b87a8ec..7e5ee45caa9a9bc3e2266ffbf0abf1ddda52d2fc 100644
--- a/xtrn/synchronetris/service.js
+++ b/xtrn/synchronetris/service.js
@@ -1,5 +1,15 @@
 var root = argv[0];
+if(!file_exists(root + "server.ini")) {
+	throw("server initialization file missing");
+}
+/* load server connection information from server.ini */
+var server_file = new File(root + "server.ini");
+server_file.open('r',true);
+var serverAddr=server_file.iniGetValue(null,"host");
+var serverPort=server_file.iniGetValue(null,"port");
+server_file.close();
 
+load("backgroundlog.js");
 load("json-client.js");
 load("event-timer.js");
 load("funclib.js");
@@ -7,12 +17,12 @@ load("sbbsdefs.js");
 
 var game_id = "synchronetris";
 var timer = new Timer();
-var client = new JSONClient("localhost",10088);
+var client = new JSONClient(serverAddr,serverPort);
 var settings = loadSettings();
 
 var data = { 
-	games:client.read(game_id,"games",1),
-	players:client.read(game_id,"players",1),
+	players:{},
+	games:{},
 	timers:{}
 };
 
@@ -88,7 +98,7 @@ function handleDisco(subscription) {
 
 /* delete a game */
 function deleteGame(gameNumber) {
-	log(LOG_WARNING,"removing empty game #" + gameNumber);
+	log(LOG_DEBUG,"removing empty game #" + gameNumber);
 	client.remove(game_id,"games." + gameNumber,2);
 	if(data.timers[gameNumber])
 		data.timers[gameNumber].abort = true;
@@ -97,7 +107,7 @@ function deleteGame(gameNumber) {
 
 /* delete a player */
 function deletePlayer(gameNumber,playerName) {
-	log(LOG_WARNING,"removing player from game " + gameNumber);
+	log(LOG_DEBUG,"removing player from game " + gameNumber);
 	client.remove(game_id,"games." + gameNumber + ".players." + playerName,2)
 	delete data.games[gameNumber].players[playerName];
 }
@@ -218,14 +228,15 @@ function init() {
 	client.subscribe(game_id,"games");
 	client.subscribe(game_id,"players");
 	client.write(game_id,"settings",settings,2);
+	client.write(game_id,"games",{},2);
 	client.callback = processUpdate;
-	if(!data.games)
-		data.games = {};
+	data.players=client.read(game_id,"players",1);
 	if(!data.players)
 		data.players = {};
 	log(LOG_INFO,"Synchronetris background service initialized");
 }
 
+/* load game settings */
 function loadSettings() {
 	var file=new File(root + "synchronetris.ini");
 	file.open('r',true);
@@ -236,7 +247,7 @@ function loadSettings() {
 
 /* main loop */
 function main() {
-	while(client.socket_is_connected && !js.terminated && !parent_queue.poll()) {
+	while(!js.terminated && !parent_queue.poll()) {
 		if(client.socket.poll(.1))
 			client.cycle();
 		timer.cycle();
@@ -244,4 +255,4 @@ function main() {
 }
 
 init();
-main();
+main();
\ No newline at end of file