Yes, build an array:
Type SharedVert field x:float,y:float,z:float field nx:float,ny:float,nz:float EndType local sharedverts:TList = New TList local VertReference:SharedVert[VertexCount] For Every Vertex local found = false for sv:SharedVert = EachIn SharedVerts if vertex position = sv position found = true exit endif next if found = false sv:SharedVert = new SharedVert sv position = vertex position sharedverts.addlast sv endif VertReference[vertexnumber] = sv Next ClearList SharedVertsAnd then use the VertReference[] instead of searching through all the vertices for each triangle.