Some criticism for ya
1. the function ulx.freeze I do not believe you need?
2. You better check to make sure the player hasn't disconnected. (ply and ply:IsValid() in timer)
3. Possibly make the position save? Might just make the addon overly complicated.
4. A max timeout of 100 seconds is kind of small, increase it or have no limit?
5. Is calling ulx unfreeze necessary?