diff --git a/tfields/mesh_3d.py b/tfields/mesh_3d.py
index 4aad9571197f65ea770136a13bde7867516a034a..a37cd51a5e336445a068a62312223d6494206db6 100644
--- a/tfields/mesh_3d.py
+++ b/tfields/mesh_3d.py
@@ -374,13 +374,7 @@ class Mesh3D(tfields.TensorMaps):
         """
         Saves the mesh in stl format
         """
-        import stl
-
-        shape = stl.Mesh(np.zeros(self.faces.shape[0], dtype=stl.Mesh.dtype))
-        for i, f in enumerate(self.faces):
-            for j in range(3):
-                shape.vectors[i][j] = self[f[j], :]
-        shape.save(path, **kwargs)
+        self.triangles()._save_stl(path, **kwargs)
 
     @classmethod
     def _load_stl(cls, path):
diff --git a/tfields/triangles_3d.py b/tfields/triangles_3d.py
index f1f28d1f66ee8eb3aad074dcc13d0a050e75162e..1b7e7f64a6b93b8b5958a405350c37bd909c6e4b 100644
--- a/tfields/triangles_3d.py
+++ b/tfields/triangles_3d.py
@@ -123,7 +123,11 @@ class Triangles3D(tfields.TensorFields):
         """
         Save the object to a stl file
         """
-        self.mesh().save_stl(path, **kwargs)
+        import stl
+
+        shape = stl.Mesh(np.zeros(self.ntriangles(), dtype=stl.Mesh.dtype))
+        shape.vectors = self.bulk.reshape((self.ntriangles(), 3, 3))
+        shape.save(path, **kwargs)
 
     @classmethod
     def _load_stl(cls, path):