Here's what I mean:
ObjectStorage = {}
function getObjects()
for i,v in pairs(workspace.Objects:GetChildren()) do
if v:IsA('Part') then
return v
end
end
return nil
end
function getStoredObjects()
for i,v in pairs(workspace.ObjectNames:GetChildren()) do
if v:IsA('StringValue') then
return v
end
end
return nil
end
workspace.Store.Touched:Connect(function()
local object = getObjects()
ObjectStorage[object.Name] = object:clone()
object:destroy()
end)
workspace.Grab.Touched:Connect(function()
local object = getStoredObjects()
ObjectStorage[object.Name].Parent = workspace.Objects
end)
If that works then please comment 'it works'.

2 comments
tbl[#tbl+1] = x <-- this method is faster than using table.Insert
But table.insert is easier.