diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index 4e6a4c6a8bced7b21eb3f5dd8b984d5d5141d510..d7533069dc7ab8104db1660ec540fa5d7f9a8498 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -24,7 +24,6 @@ lua_source(lua_sources lua/console.lua)
 lua_source(lua_sources lua/bsdsocket.lua)
 lua_source(lua_sources lua/errno.lua)
 lua_source(lua_sources lua/log.lua)
-lua_source(lua_sources lua/net_box.lua)
 lua_source(lua_sources lua/help.lua)
 lua_source(lua_sources lua/help_en_US.lua)
 lua_source(lua_sources lua/tap.lua)
@@ -106,7 +105,6 @@ set (server_sources
      lua/trigger.cc
      lua/ipc.cc
      lua/msgpack.cc
-     lua/net_box.cc
      lua/utils.cc
      lua/errno.c
      lua/bsdsocket.cc
diff --git a/src/box/CMakeLists.txt b/src/box/CMakeLists.txt
index b46f631a7d5e21d6388040ba72e3c0e64c339211..732a5102cdd5fa223f45ae46520abd1823871e42 100644
--- a/src/box/CMakeLists.txt
+++ b/src/box/CMakeLists.txt
@@ -8,6 +8,7 @@ lua_source(lua_sources lua/schema.lua)
 lua_source(lua_sources lua/tuple.lua)
 lua_source(lua_sources lua/session.lua)
 lua_source(lua_sources lua/snapshot_daemon.lua)
+lua_source(lua_sources lua/net_box.lua)
 set(bin_sources)
 bin_source(bin_sources bootstrap.snap bootstrap.h)
 
@@ -67,6 +68,7 @@ add_library(box
     lua/stat.cc
     lua/error.cc
     lua/session.cc
+    lua/net_box.cc
     ${bin_sources})
 
 target_link_libraries(box ${sophia_lib})
diff --git a/src/box/lua/call.cc b/src/box/lua/call.cc
index 5c56e67ddde0a7aa53154378dfabc54554cb48b5..816cfc0577334932000a39352fedf40ec9e82b13 100644
--- a/src/box/lua/call.cc
+++ b/src/box/lua/call.cc
@@ -38,6 +38,7 @@
 #include "box/lua/stat.h"
 #include "box/lua/info.h"
 #include "box/lua/session.h"
+#include "box/lua/net_box.h"
 #include "box/tuple.h"
 
 #include "lua/utils.h"
@@ -62,13 +63,15 @@
 extern char session_lua[],
 	schema_lua[],
 	load_cfg_lua[],
-	snapshot_daemon_lua[];
+	snapshot_daemon_lua[],
+	net_box_lua[];
 
 static const char *lua_sources[] = {
 	session_lua,
 	schema_lua,
 	snapshot_daemon_lua,
 	load_cfg_lua,
+	net_box_lua,
 	NULL
 };
 
@@ -746,6 +749,8 @@ box_lua_init(struct lua_State *L)
 	lua_pop(L, 1);
 	luaL_register(L, "box.internal", boxlib_internal);
 	lua_pop(L, 1);
+	luaopen_net_box(L);
+	lua_pop(L, 1);
 
 #if 0
 	/* Get CTypeID for `struct port *' */
diff --git a/src/lua/net_box.cc b/src/box/lua/net_box.cc
similarity index 99%
rename from src/lua/net_box.cc
rename to src/box/lua/net_box.cc
index 0a1303106f87ebc68a812c6db1253896f7ef4476..db0ef3e376ef85509a22fae0fb1f07652163adca 100644
--- a/src/lua/net_box.cc
+++ b/src/box/lua/net_box.cc
@@ -29,16 +29,15 @@
  * SUCH DAMAGE.
  */
 
-#include "lua/net_box.h"
-#include "lua/msgpack.h"
+#include "net_box.h"
 
 #include <lib/small/ibuf.h>
 #include "scramble.h"
 
-/* TODO: net.box depends on src/box/ */
 #include "box/iproto_constants.h"
 #include "box/lua/tuple.h" /* luamp_convert_tuple() / luamp_convert_key() */
 
+#include "lua/msgpack.h"
 #include <msgpuck/msgpuck.h> /* mp_store_u32() */
 #include "third_party/base64.h"
 
diff --git a/src/lua/net_box.h b/src/box/lua/net_box.h
similarity index 100%
rename from src/lua/net_box.h
rename to src/box/lua/net_box.h
diff --git a/src/lua/net_box.lua b/src/box/lua/net_box.lua
similarity index 99%
rename from src/lua/net_box.lua
rename to src/box/lua/net_box.lua
index f6b09505c15232bfe2ef88a35601d69d4177d885..ca38ec33166026d0f19fcf48df1b9b71a988302b 100644
--- a/src/lua/net_box.lua
+++ b/src/box/lua/net_box.lua
@@ -1076,4 +1076,4 @@ setmetatable(remote.self, {
     end
 })
 
-return remote
+package.loaded['net.box'] = remote
diff --git a/src/lua/init.cc b/src/lua/init.cc
index 31c7f3a6c19094d50cafb9566060f2ed6f225161..666667555eab860f641002989f9ae3114801f8d1 100644
--- a/src/lua/init.cc
+++ b/src/lua/init.cc
@@ -56,7 +56,6 @@ extern "C" {
 #include "third_party/lua-cjson/lua_cjson.h"
 #include "third_party/lua-yaml/lyaml.h"
 #include "lua/msgpack.h"
-#include "lua/net_box.h"
 #include "lua/pickle.h"
 #include "lua/fio.h"
 
@@ -86,7 +85,6 @@ extern char strict_lua[],
 	uri_lua[],
 	bsdsocket_lua[],
 	console_lua[],
-	net_box_lua[],
 	help_lua[],
 	help_en_US_lua[],
 	tap_lua[],
@@ -120,7 +118,6 @@ static const char *lua_modules[] = {
 	"fio", fio_lua,
 	"csv", csv_lua,
 	"socket", bsdsocket_lua,
-	"net.box", net_box_lua,
 	"console", console_lua,
 	"tap", tap_lua,
 	"help.en_US", help_en_US_lua,
@@ -371,8 +368,6 @@ tarantool_lua_init(const char *tarantool_bin, int argc, char **argv)
 	lua_pop(L, 1);
 	luaopen_msgpack(L);
 	lua_pop(L, 1);
-	luaopen_net_box(L);
-	lua_pop(L, 1);
 
 #if defined(HAVE_GNU_READLINE)
 	/*
diff --git a/test/box/net.box.result b/test/box/net.box.result
index 94ed39a94b689f769b744115a55cab4679c7c4e7..7f0da9fe206261d2c832c9d4f401df1dc68993de 100644
--- a/test/box/net.box.result
+++ b/test/box/net.box.result
@@ -288,7 +288,8 @@ cn.space.net_box_test_space:insert{234, 1,2,3}
 ...
 cn.space.net_box_test_space.insert{234, 1,2,3}
 ---
-- error: 'builtin/net.box.lua:133: Use space:method(...) instead space.method(...)'
+- error: '[string "-- net_box.lua (internal file)..."]:133: Use space:method(...)
+    instead space.method(...)'
 ...
 cn.space.net_box_test_space:replace{354, 1,2,3}
 ---