So if I declare a matrix like so...

[pascal]var mat: Tmatrix2_single;[/pascal]

...then I would access elements like so...

[pascal]x := mat.data[1, 1];[/pascal]

Is that right? It would be nice if you could do mat[1, 1], but I understand why you decided to go with objects. Also, being able to typecast with similar types is a nifty feature. And I like the cross product operator:

[pascal]A := B >< C[/pascal]