diff --git a/io_mesh_stl/blender_utils.py b/io_mesh_stl/blender_utils.py
index 8d19e30ce369104fbfdba3ea0b8e1916afa9d076..2e8c8d6d010a2f6c06000a0470cb1218f6041ee0 100644
--- a/io_mesh_stl/blender_utils.py
+++ b/io_mesh_stl/blender_utils.py
@@ -59,7 +59,9 @@ def faces_from_mesh(ob, apply_modifier=False, triangulate=True):
     try:
         mesh = ob.to_mesh(bpy.context.scene, apply_modifier, "PREVIEW")
     except RuntimeError:
-        return ()
+        raise StopIteration
+
+    mesh.transform(ob.matrix_world)
 
     if triangulate:
         # From a list of faces, return the face triangulated if needed.
@@ -76,5 +78,9 @@ def faces_from_mesh(ob, apply_modifier=False, triangulate=True):
             for face in mesh.faces:
                 yield face.vertices[:]
 
-    return ([(mesh.vertices[index].co * ob.matrix_world)[:]
-             for index in indexes] for indexes in iter_face_index())
+    vertices = mesh.vertices
+
+    for indexes in iter_face_index():
+        yield [vertices[index].co.copy() for index in indexes]
+
+    bpy.data.meshes.remove(mesh)