diff --git a/src/box/lua/console.c b/src/box/lua/console.c
index 0facfb09ced99602a54b8ba96b06f5da7b3f6d83..f32149562ef1e33d332d7385ea8ac1617377d66c 100644
--- a/src/box/lua/console.c
+++ b/src/box/lua/console.c
@@ -886,7 +886,7 @@ tarantool_lua_console_init(struct lua_State *L)
 		{"run_on_eval",		lbox_console_run_on_eval},
 		{NULL, NULL}
 	};
-	luaT_newmodule(L, "console", consolelib);
+	luaT_newmodule(L, "console.lib", consolelib);
 
 	/* readline() func needs a ref to completion_handler (in upvalue) */
 	lua_getfield(L, -1, "completion_handler");
diff --git a/src/box/lua/console.lua b/src/box/lua/console.lua
index 403ceaea85ef798d37f264ac7a75e967a57c0d28..60defbe6c5a03b7817a0bde308d1c1a920ed5905 100644
--- a/src/box/lua/console.lua
+++ b/src/box/lua/console.lua
@@ -17,7 +17,7 @@ ffi.cdef[[
     console_set_output_format(enum output_format output_format);
 ]]
 
-local internal = require('console')
+local internal = require('console.lib')
 local session_internal = box.internal.session
 local fiber = require('fiber')
 local socket = require('socket')
diff --git a/src/box/lua/init.c b/src/box/lua/init.c
index 98960f219512afa610d0a00d2bb9c78079dac1d7..b5f2013092b64643a839342753f0af7dead94682 100644
--- a/src/box/lua/init.c
+++ b/src/box/lua/init.c
@@ -159,11 +159,11 @@ static const char *lua_sources[] = {
 #if ENABLE_SECURITY
 	"box/security", security_lua,
 #endif
+	"box/xlog", xlog_lua,
 	"box/upgrade", upgrade_lua,
 	"box/net_box", net_box_lua,
 	"box/console", console_lua,
 	"box/load_cfg", load_cfg_lua,
-	"box/xlog", xlog_lua,
 	"box/key_def", key_def_lua,
 	"box/merger", merger_lua,
 	NULL
diff --git a/src/box/lua/xlog.c b/src/box/lua/xlog.c
index 698e72fecd57487d2463dfd7ed2b0eab5744ec01..ed8a8ecea2a965c9b806f6975484b10646aa5074 100644
--- a/src/box/lua/xlog.c
+++ b/src/box/lua/xlog.c
@@ -47,7 +47,6 @@
 /* {{{ Helpers */
 
 static uint32_t CTID_STRUCT_XLOG_CURSOR_REF = 0;
-static const char *xloglib_name = "xlog";
 
 static int
 lbox_pushcursor(struct lua_State *L, struct xlog_cursor *cur)
@@ -328,7 +327,7 @@ box_lua_xlog_init(struct lua_State *L)
 	CTID_STRUCT_XLOG_CURSOR_REF = luaL_ctypeid(L, "struct xlog_cursor&");
 	assert(CTID_STRUCT_XLOG_CURSOR_REF != 0);
 
-	luaT_newmodule(L, xloglib_name, lbox_xlog_parser_lib);
+	luaT_newmodule(L, "xlog.lib", lbox_xlog_parser_lib);
 
 	lua_newtable(L);
 	lua_setmetatable(L, -2);
diff --git a/src/box/lua/xlog.lua b/src/box/lua/xlog.lua
index 0145092715602b71361c732fc21f98e0275004e1..9e78c0cc0df7af69ef52c74bac5ff21eb1175b45 100644
--- a/src/box/lua/xlog.lua
+++ b/src/box/lua/xlog.lua
@@ -1,4 +1,4 @@
-local internal = require('xlog')
+local internal = require('xlog.lib')
 local fun = require('fun')
 local function xlog_pairs(...)
     return fun.wrap(internal.pairs(...))
diff --git a/src/lua/digest.c b/src/lua/digest.c
index ac532ff639cb071ee3daef69e8144d0c92c0d2f3..b8aa3fb350a3de1bf3ade2976d8c0ce7eb3bd042 100644
--- a/src/lua/digest.c
+++ b/src/lua/digest.c
@@ -163,6 +163,6 @@ tarantool_lua_digest_init(struct lua_State *L)
 	lua_pushcfunction(L, luaopen_crc32_internal);
 	lua_setfield(L, -2, "crc32.internal");
 	lua_pop(L, 1);
-	luaT_newmodule(L, "digest", lua_digest_methods);
+	luaT_newmodule(L, "digest.lib", lua_digest_methods);
 	lua_pop(L, 1);
 };
diff --git a/src/lua/digest.lua b/src/lua/digest.lua
index c58e2f5cde6a8267799e4156f881c37aef5ec394..4e04ce60b672faa552506f2d89c4a0b947fcfc0b 100644
--- a/src/lua/digest.lua
+++ b/src/lua/digest.lua
@@ -90,7 +90,7 @@ local digest_shortcuts = {
     md5     = 'MD5',
     md4     = 'MD4',
 }
-local internal = require("digest")
+local internal = require("digest.lib")
 
 local PMurHash
 local PMurHash_methods = {
diff --git a/src/lua/errno.c b/src/lua/errno.c
index 843672c2afff9a0a5d7699876865e83281c9c0f2..a4e2de064323371c8b1541605bcdb3253cd917b1 100644
--- a/src/lua/errno.c
+++ b/src/lua/errno.c
@@ -286,7 +286,7 @@ tarantool_lua_errno_init(struct lua_State *L)
 	static const luaL_Reg errnolib[] = {
 		{ NULL, NULL}
 	};
-	luaT_newmodule(L, "errno", errnolib);
+	luaT_newmodule(L, "errno.lib", errnolib);
 	for (int i = 0; i < (int)lengthof(elist); i++) {
 		lua_pushstring(L, elist[i].name);
 		lua_pushinteger(L, elist[i].value);
diff --git a/src/lua/errno.lua b/src/lua/errno.lua
index ebc41a6aa02a1ff27f13d59fc7d5f045a78d0837..48733e14dda90f0ef345a54be52a47a6721d1312 100644
--- a/src/lua/errno.lua
+++ b/src/lua/errno.lua
@@ -1,5 +1,5 @@
 local ffi = require('ffi')
-local errno_list = require('errno')
+local errno_list = require('errno.lib')
 
 ffi.cdef[[
     const char *tt_strerror(int errnum);
diff --git a/src/lua/httpc.c b/src/lua/httpc.c
index 22e017d3a9452936c69898cbe9696eab2321f871..90ce110df92b7e3992f867e2ff47e09daa210cf4 100644
--- a/src/lua/httpc.c
+++ b/src/lua/httpc.c
@@ -452,6 +452,6 @@ LUA_API int
 luaopen_http_client_driver(lua_State *L)
 {
 	luaL_register_type(L, DRIVER_LUA_UDATA_NAME, Client);
-	luaT_newmodule(L, "http.client", Module);
+	luaT_newmodule(L, "http.client.lib", Module);
 	return 1;
 }
diff --git a/src/lua/httpc.lua b/src/lua/httpc.lua
index 1aea6cfe768eafc3cd4f37ef132334d7cbb9d64f..6f5a2f5101ad34f4b5c9a44bfc272cc7978c1bc3 100644
--- a/src/lua/httpc.lua
+++ b/src/lua/httpc.lua
@@ -29,7 +29,7 @@
 --  SUCH DAMAGE.
 --
 
-local driver = require('http.client')
+local driver = require('http.client.lib')
 
 local json = require('json')
 local yaml = require('yaml')
diff --git a/src/lua/socket.c b/src/lua/socket.c
index 78ea4059cd3075cb2b9d6e472529942592f3dc34..f8256db49abc1b454304500d4c54948082b02b5b 100644
--- a/src/lua/socket.c
+++ b/src/lua/socket.c
@@ -1035,7 +1035,7 @@ tarantool_lua_socket_init(struct lua_State *L)
 		{ NULL,			NULL			}
 	};
 
-	luaT_newmodule(L, "socket", internal_methods);
+	luaT_newmodule(L, "socket.lib", internal_methods);
 
 	/* domains table */
 	lua_pushliteral(L, "DOMAIN");
diff --git a/src/lua/socket.lua b/src/lua/socket.lua
index 43c37a84be9a9a8c125dc3f8f140ce5722c12269..56671728a4732492a4ce36dccdfff6b25256130b 100644
--- a/src/lua/socket.lua
+++ b/src/lua/socket.lua
@@ -5,7 +5,7 @@ local LIMIT_INFINITY = 2147483647
 
 local ffi = require('ffi')
 local boxerrno = require('errno')
-local internal = require('socket')
+local internal = require('socket.lib')
 local fiber = require('fiber')
 local fio = require('fio')
 local log = require('log')
diff --git a/src/lua/swim.c b/src/lua/swim.c
index c1e3eaf2eca534dec5a7a40da54070cdf59af22a..836fd95ff8e6b08943a1b54286dfa5a6fbd05fc1 100644
--- a/src/lua/swim.c
+++ b/src/lua/swim.c
@@ -117,6 +117,6 @@ tarantool_lua_swim_init(struct lua_State *L)
 		{"swim_on_member_event", lua_swim_on_member_event},
 		{NULL, NULL}
 	};
-	luaT_newmodule(L, "swim", lua_swim_internal_methods);
+	luaT_newmodule(L, "swim.lib", lua_swim_internal_methods);
 	lua_pop(L, 1);
 }
diff --git a/src/lua/swim.lua b/src/lua/swim.lua
index 027f07038c12ebb08a26209aad02146e592cbfa6..e39f877d60b141401a987738d105c18052028c8c 100644
--- a/src/lua/swim.lua
+++ b/src/lua/swim.lua
@@ -4,7 +4,7 @@ local buffer = require('buffer')
 local msgpack = require('msgpack')
 local crypto = require('crypto')
 local fiber = require('fiber')
-local internal = require('swim')
+local internal = require('swim.lib')
 local schedule_task = fiber._internal.schedule_task
 local cord_ibuf_take = buffer.internal.cord_ibuf_take
 local cord_ibuf_put = buffer.internal.cord_ibuf_put
diff --git a/src/lua/uri.c b/src/lua/uri.c
index 9ad6ce5a3edbc2444e63fe1a0a91d2f5cf8b4f39..eb24194b730fd02847d3af91aa6cfa33e0e83da1 100644
--- a/src/lua/uri.c
+++ b/src/lua/uri.c
@@ -301,7 +301,7 @@ luaT_uri_create_internal(lua_State *L)
 {
 	struct uri *uri = (struct uri *)lua_topointer(L, 1);
 	if (uri == NULL)
-		luaL_error(L, "Usage: uri.internal.uri_create(string|table)");
+		luaL_error(L, "Usage: uri_lib.uri_create(string|table)");
 	if (luaT_uri_create(L, 2, uri) != 0)
 		luaT_error(L);
 	return 0;
@@ -312,7 +312,7 @@ luaT_uri_set_create_internal(lua_State *L)
 {
 	struct uri_set *uri_set = (struct uri_set *)lua_topointer(L, 1);
 	if (uri_set == NULL)
-		luaL_error(L, "Usage: uri.internal.uri_set_create(string|table)");
+		luaL_error(L, "Usage: uri_lib.uri_set_create(string|table)");
 	if (luaT_uri_set_create(L, 2, uri_set) != 0)
 		luaT_error(L);
 	return 0;
@@ -321,21 +321,12 @@ luaT_uri_set_create_internal(lua_State *L)
 void
 tarantool_lua_uri_init(struct lua_State *L)
 {
-	static const struct luaL_Reg uri_methods[] = {
-		{NULL, NULL}
-	};
-	luaT_newmodule(L, "uri", uri_methods);
-
 	/* internal table */
-	lua_pushliteral(L, "internal");
-	lua_newtable(L);
-	static const struct luaL_Reg uri_internal_methods[] = {
+	static const struct luaL_Reg uri_methods[] = {
 		{"uri_create", luaT_uri_create_internal},
 		{"uri_set_create", luaT_uri_set_create_internal},
 		{NULL, NULL}
 	};
-	luaL_setfuncs(L, uri_internal_methods, 0);
-	lua_settable(L, -3);
-
+	luaT_newmodule(L, "uri.lib", uri_methods);
 	lua_pop(L, 1);
 };
diff --git a/src/lua/uri.lua b/src/lua/uri.lua
index 1a9c449906ea1e761bf8a15ea0ac95701994d9a9..709a92b7822b5eb102706abc7c34f72312fb73e6 100644
--- a/src/lua/uri.lua
+++ b/src/lua/uri.lua
@@ -2,7 +2,7 @@
 
 local ffi = require('ffi')
 local buffer = require('buffer')
-local uri = require('uri')
+local internal = require('uri.lib')
 
 local uri_cdef = [[
 struct uri_param {
@@ -165,7 +165,7 @@ local function parse(str)
         error("Usage: uri.parse(string|table)")
     end
     local uribuf = uri_stash_take()
-    local status, errmsg = pcall(uri.internal.uri_create, uribuf, str)
+    local status, errmsg = pcall(internal.uri_create, uribuf, str)
     if not status then
         uri_stash_put(uribuf)
         return nil, errmsg
@@ -181,7 +181,7 @@ local function parse_many(str)
         error("Usage: uri.parse_many(string|table)")
     end
     local uri_set_buf = uri_set_stash_take()
-    local status, errmsg = pcall(uri.internal.uri_set_create, uri_set_buf, str)
+    local status, errmsg = pcall(internal.uri_set_create, uri_set_buf, str)
     if not status then
         uri_set_stash_put(uri_set_buf)
         return nil, errmsg