diff --git a/lapi.c b/lapi.c
index 91a6e38..da866a6 100644
--- a/lapi.c
+++ b/lapi.c
@@ -1207,12 +1207,19 @@
 }
 
 
-LUA_API void lua_toclose (lua_State *L) {
-  int nresults = L->ci->nresults;
-  luaF_newtbcupval(L, L->top - 1);  /* create new to-be-closed upvalue */
+LUA_API void lua_toclose (lua_State *L, int idx) {
+  int nresults;
+  StkId o;
+  lua_lock(L);
+  o = index2stack(L, idx);
+  nresults = L->ci->nresults;
+  api_check(L, L->openupval == NULL || uplevel(L->openupval) < o,
+               "there is an already marked index below");
+  luaF_newtbcupval(L, o);  /* create new to-be-closed upvalue */
   if (!hastocloseCfunc(nresults))  /* function not marked yet? */
     L->ci->nresults = codeNresults(nresults);  /* mark it */
   lua_assert(hastocloseCfunc(L->ci->nresults));
+  lua_unlock(L);
 }
 
 
diff --git a/ltests.c b/ltests.c
index 192ae86..c5c1040 100644
--- a/ltests.c
+++ b/ltests.c
@@ -1551,7 +1551,7 @@
       return lua_yieldk(L1, nres, i, Cfunck);
     }
     else if EQ("toclose") {
-      lua_toclose(L);
+      lua_toclose(L, getnum);
     }
     else luaL_error(L, "unknown instruction %s", buff);
   }
diff --git a/lua.h b/lua.h
index fe468c8..6aa184d 100644
--- a/lua.h
+++ b/lua.h
@@ -333,7 +333,7 @@
 LUA_API lua_Alloc (lua_getallocf) (lua_State *L, void **ud);
 LUA_API void      (lua_setallocf) (lua_State *L, lua_Alloc f, void *ud);
 
-LUA_API void  (lua_toclose) (lua_State *L);
+LUA_API void  (lua_toclose) (lua_State *L, int idx);
 
 
 /*
diff --git a/testes/api.lua b/testes/api.lua
index a6ddca8..ed857fd 100644
--- a/testes/api.lua
+++ b/testes/api.lua
@@ -985,18 +985,20 @@
     return x
   end
 
-  local a = T.testC([[
+  local a, b = T.testC([[
     call 0 1   # create resource
-    toclose    # mark it to be closed
-    return 1
+    pushint 34
+    toclose -2  # mark call result to be closed
+    toclose -1  # mark number to be closed (will be ignored)
+    return 2
   ]], newresource)
-  assert(a[1] == 11)
+  assert(a[1] == 11 and b == 34) 
   assert(#openresource == 0)    -- was closed
 
   -- repeat the test, but calling function in a 'multret' context
   local a = {T.testC([[
     call 0 1   # create resource
-    toclose    # mark it to be closed
+    toclose 2 # mark it to be closed
     return 2
   ]], newresource)}
   assert(type(a[1]) == "string" and a[2][1] == 11)
@@ -1005,7 +1007,7 @@
   -- error
   local a, b = pcall(T.testC, [[
     call 0 1   # create resource
-    toclose    # mark it to be closed
+    toclose -1 # mark it to be closed
     error       # resource is the error object
   ]], newresource)
   assert(a == false and b[1] == 11)
@@ -1019,10 +1021,10 @@
   local a = T.testC([[
     pushvalue 2
     call 0 1   # create resource
-    toclose    # mark it to be closed
+    toclose -1 # mark it to be closed
     pushvalue 2
     call 0 1   # create another resource
-    toclose    # mark it to be closed
+    toclose -1 # mark it to be closed
     pushvalue 3
     pushint 2   # there should be two open resources
     call 1 0
