Hello! Thanks for your answer. However I don’t really understand some parts in the first code 
Could you please explain this part
Is the variable timeSpent used for checking how much time is spent on moving the part?
local MOVE_30_STUDS_TIME = 120 * 1 / 60 -- couldn't you just assign 30 to this variable?
if timeSpent >= 2 * MOVE_30_STUDS_TIME then -- what is this checking for?
part.CFrame = originalCf
conn:Disconnect()
end