Hi Sly,
The decision to go with classes was a conscious one. I am aware that records are more compact and quicker using traditional methods, but I wanted to use classes for clarity and not speed. The idea being that once their game/engine is up and running they can look into where the bottlenecks are then remove them, ie rewrite their Vector handling for example.

Just on the class size/speed issue, would it be better to use Object Pascal's "object" keyword instead for these kind of objects. Does anyone have any info on how much better this performs over classes?

Thanks again for all the comments on the code, they have proved invaluable as always. Nice work spotting that UnitVector bug, I completely overlooked it and was wondering why one of my demos was misbehaving.

In the case of returning a new instance of a class, what would be a better way of implementing this? Should it just change the current vector, thus leaving it up to the developer using the class to handle storing/restoring the vector as needed?

Is anything missing, anything else that is needed when working with vectors?