diff --git a/scripts/tests/eressea.lua b/scripts/tests/eressea.lua
index 9b3d1316d..f33726886 100644
--- a/scripts/tests/eressea.lua
+++ b/scripts/tests/eressea.lua
@@ -3,13 +3,13 @@ require "lunit"
 module("tests.e3.e2features", package.seeall, lunit.testcase )
 
 function setup()
-    free_game()
-    settings.set("nmr.timeout", "0")
-    settings.set("rules.economy.food", "4")
+    eressea.free_game()
+    eressea.settings.set("nmr.timeout", "0")
+    eressea.settings.set("rules.economy.food", "4")
 end
 
 function test_learn()
-    settings.set("study.random_progress", "0")
+    eressea.settings.set("study.random_progress", "0")
     local r = region.create(0, 0, "plain")
     local f = faction.create("noreply@eressea.de", "human", "de")
     f.age = 20
@@ -28,7 +28,7 @@ function test_learn()
 end
 
 function test_teach()
-    settings.set("study.random_progress", "0")
+    eressea.settings.set("study.random_progress", "0")
     local r = region.create(0, 0, "plain")
     local f = faction.create("noreply@eressea.de", "human", "de")
     f.age = 20
diff --git a/scripts/tests/spells-e2.lua b/scripts/tests/spells-e2.lua
index 9f6865c01..a8ff7b943 100644
--- a/scripts/tests/spells-e2.lua
+++ b/scripts/tests/spells-e2.lua
@@ -5,10 +5,10 @@ module("tests.e3.spells-e2", package.seeall, lunit.testcase)
 local r, f, u
 
 function setup()
-    free_game()
-    settings.set("magic.regeneration.enable", "0")
-    settings.set("magic.fumble.enable", "0")
-    settings.set("rules.economy.food", "4")
+    eressea.free_game()
+    eressea.settings.set("magic.regeneration.enable", "0")
+    eressea.settings.set("magic.fumble.enable", "0")
+    eressea.settings.set("rules.economy.food", "4")
 
     r = region.create(0, 0, "plain")
     f = faction.create("spell_payment@eressea.de", "elf", "de")
diff --git a/scripts/tests/spells.lua b/scripts/tests/spells.lua
index 727658a35..7a1cb6d86 100644
--- a/scripts/tests/spells.lua
+++ b/scripts/tests/spells.lua
@@ -3,12 +3,12 @@ require "lunit"
 module("tests.e3.spells", package.seeall, lunit.testcase)
 
 function setup()
-    free_game()
-    settings.set("magic.fumble.enable", "0")
+    eressea.free_game()
+    eressea.settings.set("magic.fumble.enable", "0")
 end
 
 function test_blessedharvest_lasts_n_turn()
-    free_game()
+    eressea.free_game()
     local r = region.create(0, 0, "plain")
     local f = faction.create("noreply@eressea.de", "halfling", "de")
     local u = unit.create(f, r)
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index b57a782a8..0f3f8de00 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -44,6 +44,7 @@ set (SERVER_SRC
 add_executable(server ${SERVER_SRC})
 target_link_libraries(server
   ${ERESSEA_LIBRARY}
+  ${BINDINGS_LIBRARY}
   ${TOLUA_LIBRARIES}
   ${SQLITE3_LIBRARIES}
 )
diff --git a/src/main.c b/src/main.c
index c79f1e38b..5180af4b0 100644
--- a/src/main.c
+++ b/src/main.c
@@ -4,7 +4,7 @@
 #include <kernel/types.h>
 #include <kernel/config.h>
 #include <kernel/save.h>
-
+#include <bindings/bindings.h>
 #include <eressea.h>
 #include <gmtool.h>
 
@@ -12,6 +12,7 @@
 #include "spells/spells.h"
 #include "curses.h"
 
+#include <lua.h>
 #include <assert.h>
 #include <locale.h>
 #include <wctype.h>
@@ -194,9 +195,10 @@ extern void bind_eressea(struct lua_State *L);
 int main(int argc, char **argv)
 {
   int err, result = 0;
+  lua_State *L;
 
   setup_signal_handler();
-
+  log_open("eressea.log");
   parse_config(inifile);
 
   err = parse_args(argc, argv, &result);
@@ -204,24 +206,20 @@ int main(int argc, char **argv)
     return result;
   }
 
-  log_open("eressea.log");
   locale_init();
 
 #ifdef CRTDBG
   init_crtdbg();
 #endif
 
-  err = eressea_init();
-  if (err) {
-    log_error("initialization failed with code %d\n", err);
-    return err;
-  }
+  L = lua_init();
+  game_init();
   register_races();
   register_curses();
   register_spells();
-  bind_eressea((struct lua_State *)global.vm_state);
+  bind_eressea(L);
 
-  err = eressea_run(luafile, entry_point);
+  err = eressea_run(L, luafile, entry_point);
   if (err) {
     log_error("server execution failed with code %d\n", err);
     return err;
@@ -230,7 +228,8 @@ int main(int argc, char **argv)
   malloc_stats();
 #endif
 
-  eressea_done();
+  game_done();
+  lua_done(L);
   log_close();
   if (global.inifile)
     iniparser_free(global.inifile);