Update: This is going to take longer than anticipated... looking deeper into the code (and knocking the rust off my brain...) and the linear way that they exported the dotXSI templates and nested children templates complicates matters. It's compounded by the fact that the dotXSI format breaks a mesh's data like so: SI_Mesh { SI_Shape { … } SI_TriangleList { … } } And there is a separate class export method (::ExportMesh, ::ExportShape, ::ExportTraingleList, etc.) for exporting each template (SI_Mesh, SI_Shape, SI_TriangleList, etc.). And they all take a pointer to the original Node container. So each time they re-get the mesh object contained within the Node container and they process the mesh again to only write out the data required by each dotXSI template. The SI_Shape template lists out the actual vertex positions (Point3 values), vertex normals (Normalized Point3 values), and vertex UV coordinates in UV space (Point2 values). It is in the SI_Shape template that I need to do the Max-to-XSI coordinate transformation on the vertex normals... and that should fix the bad normals that @@DT85 posted about. But it's going to be more complicated to do SmoothGroup/Explicit normals because I'll either have to redo all calculations for each child template to extract the specific data each template requires... or do the calculations once and come up with a clever way to re-access the already computed results in the children templates. My opinion, is to attempt the latter so as to save processing time. Stay tuned...