diff --git a/src/command.c b/src/command.c
index 3aa22b62f62f9103ba6c744926648b90349acf81..861a1f82829f6ef757c87ea27ba439f4f169d7b3 100644
--- a/src/command.c
+++ b/src/command.c
@@ -2064,6 +2064,9 @@ static boolean CV_Command(void)
 	if (!v)
 		return false;
 
+	if (( com_flags & COM_SAFE ) && ( v->flags & CV_NOLUA ))
+		return false;
+
 	// perform a variable print or set
 	if (COM_Argc() == 1)
 	{
diff --git a/src/command.h b/src/command.h
index af9d08ae165edcfc738f450ff865fde80478a15f..b1026437f131e75cc4b1fb84d12458f02d1f5d22 100644
--- a/src/command.h
+++ b/src/command.h
@@ -20,6 +20,11 @@
 // Command buffer & command execution
 //===================================
 
+enum
+{
+	COM_SAFE = 1,
+};
+
 typedef void (*com_func_t)(void);
 
 void COM_AddCommand(const char *name, com_func_t func);
@@ -103,7 +108,8 @@ typedef enum
 	CV_HIDEN = 1024, // variable is not part of the cvar list so cannot be accessed by the console
 	                 // can only be set when we have the pointer to it
                    // used on menus
-	CV_CHEAT = 2048 // Don't let this be used in multiplayer unless cheats are on.
+	CV_CHEAT = 2048, // Don't let this be used in multiplayer unless cheats are on.
+	CV_NOLUA = 4096,/* don't let this be called from Lua */
 } cvflags_t;
 
 typedef struct CV_PossibleValue_s
diff --git a/src/dehacked.c b/src/dehacked.c
index 9abb708a9495b10075b4c7a239afd934508aa707..c9e10c06495b41f9c11a682623f47d91fe58ec69 100644
--- a/src/dehacked.c
+++ b/src/dehacked.c
@@ -9462,6 +9462,7 @@ struct {
 	{"CV_HIDEN",CV_HIDEN},
 	{"CV_HIDDEN",CV_HIDEN},
 	{"CV_CHEAT",CV_CHEAT},
+	{"CV_NOLUA",CV_NOLUA},
 
 	// v_video flags
 	{"V_NOSCALEPATCH",V_NOSCALEPATCH},
diff --git a/src/lua_consolelib.c b/src/lua_consolelib.c
index 58e720c85a35f6cf14dbb6547619f86a50267c75..837612e521f77854a72fb4cd3346fe6a1c2a1bd5 100644
--- a/src/lua_consolelib.c
+++ b/src/lua_consolelib.c
@@ -245,7 +245,7 @@ static int lib_comBufAddText(lua_State *L)
 		return LUA_ErrInvalid(L, "player_t");
 	if (plr != &players[consoleplayer])
 		return 0;
-	COM_BufAddText(va("%s\n", luaL_checkstring(L, 2)));
+	COM_BufAddTextEx(va("%s\n", luaL_checkstring(L, 2)), COM_SAFE);
 	return 0;
 }
 
@@ -262,7 +262,7 @@ static int lib_comBufInsertText(lua_State *L)
 		return LUA_ErrInvalid(L, "player_t");
 	if (plr != &players[consoleplayer])
 		return 0;
-	COM_BufInsertText(va("%s\n", luaL_checkstring(L, 2)));
+	COM_BufInsertTextEx(va("%s\n", luaL_checkstring(L, 2)), COM_SAFE);
 	return 0;
 }