diff --git a/src/lua_consolelib.c b/src/lua_consolelib.c
index 28cc917628cad6e94c4da1cb92d676f9cf26868e..566e73748e1baf088aa212e6ae7ebefc423500de 100644
--- a/src/lua_consolelib.c
+++ b/src/lua_consolelib.c
@@ -391,12 +391,21 @@ static int lib_cvRegisterVar(lua_State *L)
 	// stack: cvar table, cvar userdata
 	lua_getfield(L, LUA_REGISTRYINDEX, "CV_Vars");
 	I_Assert(lua_istable(L, 3));
+
+	lua_getfield(L, 3, cvar->name);
+	if (lua_type(L, -1) != LUA_TNIL)
+		return luaL_error(L, M_GetText("Variable %s is already defined\n"), cvar->name);
+	lua_pop(L, 1);
+
 	lua_pushvalue(L, 2);
 	lua_setfield(L, 3, cvar->name);
 	lua_pop(L, 1);
 
 	// actually time to register it to the console now! Finally!
+	cvar->flags |= CV_MODIFIED;
 	CV_RegisterVar(cvar);
+	if (cvar->flags & CV_MODIFIED)
+		return luaL_error(L, "failed to register cvar (probable conflict with internal variable/command names)");
 
 	// return cvar userdata
 	return 1;