diff --git a/src/tarantool_lua_info.h b/include/lua/info.h
similarity index 100%
rename from src/tarantool_lua_info.h
rename to include/lua/info.h
diff --git a/include/tarantool_lua.h b/include/lua/init.h
similarity index 100%
rename from include/tarantool_lua.h
rename to include/lua/init.h
diff --git a/src/tarantool_lua_slab.h b/include/lua/slab.h
similarity index 100%
rename from src/tarantool_lua_slab.h
rename to include/lua/slab.h
diff --git a/src/tarantool_lua_stat.h b/include/lua/stat.h
similarity index 100%
rename from src/tarantool_lua_stat.h
rename to include/lua/stat.h
diff --git a/src/box/box_lua_uuid.h b/include/lua/uuid.h
similarity index 96%
rename from src/box/box_lua_uuid.h
rename to include/lua/uuid.h
index 2bd9bd75388d22533f5cb7decac7e12ff6cbe0d6..9b1f1d87668741540a42ebce8e49a30cad81f6e4 100644
--- a/src/box/box_lua_uuid.h
+++ b/include/lua/uuid.h
@@ -36,4 +36,7 @@ lbox_uuid(struct lua_State *L);
 int
 lbox_uuid_hex(struct lua_State *L);
 
+void
+tarantool_lua_uuid_init(struct lua_State *L);
+
 #endif /* INCLUDES_TARANTOOL_MOD_BOX_LUA_UUID_H */
diff --git a/mod/CMakeLists.txt b/mod/CMakeLists.txt
deleted file mode 100644
index 6500f26142c7e589185c9d4e6632c8f8d653ea75..0000000000000000000000000000000000000000
--- a/mod/CMakeLists.txt
+++ /dev/null
@@ -1,39 +0,0 @@
-
-function(tarantool_module mod)
-    set (module_sources ${ARGN})
-    set_source_files_properties(
-        ${CMAKE_SOURCE_DIR}/cfg/tarantool_${mod}_cfg.c
-        PROPERTIES COMPILE_FLAGS "-Wno-unused" GENERATED True)
-    add_executable(tarantool_${mod}
-        ${module_sources}
-        ${CMAKE_SOURCE_DIR}/cfg/tarantool_${mod}_cfg.c)
-
-    set_source_files_properties(${recompiled_sources}
-        PROPERTIES OBJECT_DEPENDS
-        ${CMAKE_SOURCE_DIR}/cfg/tarantool_${mod}_cfg.h)
-
-    add_library(lt${mod} STATIC ${recompiled_sources})
-    set_target_properties(lt${mod} PROPERTIES COMPILE_FLAGS
-        "${core_cflags} ${GCOV_C_FLAGS} -DTARANTOOL_CONFIG='<cfg/tarantool_${mod}_cfg.h>'")
-    add_dependencies(lt${mod} generate_headers generate_admin_m build_bundled_libs)
-
-    target_link_libraries(tarantool_${mod} lt${mod} ${GCOV_LDFLAGS} ${common_libraries})
-    set_target_properties(tarantool_${mod} PROPERTIES COMPILE_FLAGS
-        "${core_cflags} ${GCOV_C_FLAGS}")
-
-    if (ENABLE_STATIC)
-        set_target_properties(tarantool_${mod} PROPERTIES
-            LINK_SEARCH_END_STATIC ON)
-        set (module_link_flags "${module_link_flags} -static")
-    endif()
-
-    if (module_link_flags)
-        set_target_properties(tarantool_${mod} PROPERTIES
-            LINK_FLAGS ${module_link_flags})
-    endif()
-    install (TARGETS tarantool_${mod} DESTINATION bin)
-endfunction()
-
-foreach (module ${TARANTOOL_MODULES})
-add_subdirectory(${module})
-endforeach()
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index 24f5e046dc90d64f30306cae6bc31b612ea07387..04a8be1db618370bb50c1b34e5f7691bd68b57db 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -72,7 +72,7 @@ set_property(DIRECTORY PROPERTY CLEAN_NO_CUSTOM 1)
 #
 set (recompiled_sources
      ${CMAKE_SOURCE_DIR}/src/tarantool.m
-     ${CMAKE_SOURCE_DIR}/src/tarantool_lua.m
+     ${CMAKE_SOURCE_DIR}/src/lua/init.m
      ${CMAKE_SOURCE_DIR}/src/say.m
      ${CMAKE_SOURCE_DIR}/src/assoc.m
      ${CMAKE_SOURCE_DIR}/src/admin.m
@@ -105,9 +105,10 @@ set (common_sources
      fio.c
      crc32.c
      rope.c
-     tarantool_lua_info.m
-     tarantool_lua_stat.m
-     tarantool_lua_slab.m)
+     lua/info.m
+     lua/stat.m
+     lua/slab.m
+     lua/uuid.m)
 
 if (ENABLE_TRACE)
     set (common_sources ${common_sources} trace.m)
diff --git a/src/admin.m b/src/admin.m
index 8ccc3702835170269ec4b63d233bec9ad90d8271..517e1586bfac8657290d1fa4e9073ef89836d0b9 100644
--- a/src/admin.m
+++ b/src/admin.m
@@ -40,7 +40,7 @@
 #include <say.h>
 #include <stat.h>
 #include <tarantool.h>
-#include <tarantool_lua.h>
+#include "lua/init.h"
 #include <recovery.h>
 #include TARANTOOL_CONFIG
 #include <tbuf.h>
diff --git a/src/admin.rl b/src/admin.rl
index 08871e189f44c09e57502a31f80eafe173bed486..cef2a70e5116ea4ccda1870bd6064a00a0245a62 100644
--- a/src/admin.rl
+++ b/src/admin.rl
@@ -38,7 +38,7 @@
 #include <say.h>
 #include <stat.h>
 #include <tarantool.h>
-#include <tarantool_lua.h>
+#include "lua/init.h"
 #include <recovery.h>
 #include TARANTOOL_CONFIG
 #include <tbuf.h>
diff --git a/src/box/CMakeLists.txt b/src/box/CMakeLists.txt
index 1aa732791c3a1ed932cbe7eb67ba3771869a7443..26ff67e63fc8d28af383fd6950316c0a1d17bf9c 100644
--- a/src/box/CMakeLists.txt
+++ b/src/box/CMakeLists.txt
@@ -48,5 +48,4 @@ set_source_files_properties(memcached.m
     PROPERTIES COMPILE_FLAGS "-Wno-uninitialized")
 
 tarantool_module("box" tuple.m index.m tree.m space.m port.m request.m
-    txn.m box.m ${lua_sources} box_lua.m memcached.m memcached-grammar.m
-    box_lua_uuid.m)
+    txn.m box.m ${lua_sources} box_lua.m memcached.m memcached-grammar.m)
diff --git a/src/box/box_lua.m b/src/box/box_lua.m
index 8199e8eb3af32cb08990abfa550b2769d6ee0a65..617bada74c8298e2ce758ddfcea70267c85deb49 100644
--- a/src/box/box_lua.m
+++ b/src/box/box_lua.m
@@ -27,8 +27,7 @@
  * SUCH DAMAGE.
  */
 #include "box_lua.h"
-#import "object.h"
-#include <tarantool_lua.h>
+#include "lua/init.h"
 #include <fiber.h>
 #include "box.h"
 #include "request.h"
@@ -46,7 +45,6 @@
 #include "tuple.h"
 #include "space.h"
 #include "port.h"
-#include "box_lua_uuid.h"
 
 /* contents of box.lua */
 extern const char box_lua[];
@@ -1141,8 +1139,6 @@ static int lbox_process(lua_State *L)
 
 static const struct luaL_reg boxlib[] = {
 	{"process", lbox_process},
-	{"uuid", lbox_uuid},
-	{"uuid_hex", lbox_uuid_hex},
 	{NULL, NULL}
 };
 
diff --git a/src/tarantool_lua_info.m b/src/lua/info.m
similarity index 98%
rename from src/tarantool_lua_info.m
rename to src/lua/info.m
index 58e1c168a82254cbdbf487f4aab072677415cb17..8b6106f5e84c07520b58607a8e0f6eed9a1025bd 100644
--- a/src/tarantool_lua_info.m
+++ b/src/lua/info.m
@@ -27,11 +27,13 @@
  * SUCH DAMAGE.
  */
 
-#include "tarantool_lua_info.h"
+#include "lua/info.h"
+#include "lua/init.h"
+
 #include "lua.h"
 #include "lauxlib.h"
 #include "lualib.h"
-#include <tarantool_lua.h>
+
 #include <tarantool.h>
 #include <say.h>
 #include <string.h>
diff --git a/src/tarantool_lua.m b/src/lua/init.m
similarity index 99%
rename from src/tarantool_lua.m
rename to src/lua/init.m
index 50b01436921b83a5c3c5afe501cad9919465adc2..55dde6c2d68a9a634f20813ca25319400fe5f9c0 100644
--- a/src/tarantool_lua.m
+++ b/src/lua/init.m
@@ -26,8 +26,8 @@
  * THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
  */
-#include <tarantool_lua.h>
-#include <tarantool.h>
+#include "lua/init.h"
+#include "tarantool.h"
 #include "tbuf.h"
 
 #include "lua.h"
@@ -43,9 +43,10 @@
 #include "pickle.h"
 #include "fiber.h"
 #include <ctype.h>
-#include "tarantool_lua_info.h"
-#include "tarantool_lua_slab.h"
-#include "tarantool_lua_stat.h"
+#include "lua/info.h"
+#include "lua/slab.h"
+#include "lua/stat.h"
+#include "lua/uuid.h"
 
 #include TARANTOOL_CONFIG
 
@@ -1258,6 +1259,7 @@ tarantool_lua_init()
 	tarantool_lua_info_init(L);
 	tarantool_lua_slab_init(L);
 	tarantool_lua_stat_init(L);
+	tarantool_lua_uuid_init(L);
 
 	mod_lua_init(L);
 
diff --git a/src/tarantool_lua_slab.m b/src/lua/slab.m
similarity index 98%
rename from src/tarantool_lua_slab.m
rename to src/lua/slab.m
index 8f234873ceb88962b33920bfe88281dcd0a7234a..e8d600b953a80008df97c364575157ee02951ea0 100644
--- a/src/tarantool_lua_slab.m
+++ b/src/lua/slab.m
@@ -26,8 +26,8 @@
  * THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
  */
-#include "tarantool_lua_slab.h"
-#include "tarantool_lua.h"
+#include "lua/slab.h"
+#include "lua/init.h"
 #include "lua.h"
 #include "lauxlib.h"
 #include "lualib.h"
diff --git a/src/tarantool_lua_stat.m b/src/lua/stat.m
similarity index 98%
rename from src/tarantool_lua_stat.m
rename to src/lua/stat.m
index 45f1efa1db1672cb0a23faba27ab1125dd8a9cbc..f0652327905d1221bf1479da51d22e1c55f712e0 100644
--- a/src/tarantool_lua_stat.m
+++ b/src/lua/stat.m
@@ -26,7 +26,7 @@
  * THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
  */
-#include "tarantool_lua_stat.h"
+#include "lua/stat.h"
 #include "lua.h"
 #include "lauxlib.h"
 #include "lualib.h"
diff --git a/src/box/box_lua_uuid.m b/src/lua/uuid.m
similarity index 92%
rename from src/box/box_lua_uuid.m
rename to src/lua/uuid.m
index 8ba6621cd6816886f721c978366130f4994ab7f3..3b495e8c2e7720cd1e9d79cc2f47a0c1f305eaf7 100644
--- a/src/box/box_lua_uuid.m
+++ b/src/lua/uuid.m
@@ -26,7 +26,7 @@
  * THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
  */
-#include "box_lua_uuid.h"
+#include "lua/uuid.h"
 
 #include <stdio.h>
 #include <string.h>
@@ -133,3 +133,18 @@ int lbox_uuid_hex(struct lua_State *L)
 {
 	return _lbox_uuid_hex(L);
 }
+
+static const struct luaL_reg lbox_uuid_meta[] = {
+	{"uuid", lbox_uuid},
+	{"uuid_hex",  lbox_uuid_hex},
+	{NULL, NULL}
+};
+
+/** Initialize box.uuid and box.uuid_hex. */
+void
+tarantool_lua_uuid_init(struct lua_State *L)
+{
+	luaL_register(L, "box", lbox_uuid_meta);
+	lua_pop(L, 1);
+}
+
diff --git a/src/tarantool.m b/src/tarantool.m
index 662f5c724dfa501900c0df651e004374bdcd9b30..2645af068f5b041b0ddaec933987eff41ad9ed8f 100644
--- a/src/tarantool.m
+++ b/src/tarantool.m
@@ -62,7 +62,7 @@
 #include <third_party/gopt/gopt.h>
 #include <cfg/warning.h>
 #include "tarantool_pthread.h"
-#include "tarantool_lua.h"
+#include "lua/init.h"
 
 
 static pid_t master_pid;