diff --git a/io_scene_gltf2/__init__.py b/io_scene_gltf2/__init__.py
index 02fc114f4455730ad31215038098aa19f402bdf0..92d828bb9cc91f7e5b8a90013535e973b91ae485 100755
--- a/io_scene_gltf2/__init__.py
+++ b/io_scene_gltf2/__init__.py
@@ -15,7 +15,7 @@
 bl_info = {
     'name': 'glTF 2.0 format',
     'author': 'Julien Duroure, Norbert Nopper, Urs Hanselmann, Moritz Becher, Benjamin Schmithüsen, Jim Eckerlein, and many external contributors',
-    "version": (1, 3, 37),
+    "version": (1, 3, 38),
     'blender': (2, 90, 0),
     'location': 'File > Import-Export',
     'description': 'Import-Export as glTF 2.0',
diff --git a/io_scene_gltf2/blender/exp/gltf2_blender_gather_nodes.py b/io_scene_gltf2/blender/exp/gltf2_blender_gather_nodes.py
index 83984c2b4a9e533262e0869d8e097d5c749b377d..b2ca5be5b1a26b15a5618ff2efcc8c71a8c50dab 100755
--- a/io_scene_gltf2/blender/exp/gltf2_blender_gather_nodes.py
+++ b/io_scene_gltf2/blender/exp/gltf2_blender_gather_nodes.py
@@ -248,6 +248,9 @@ def __gather_matrix(blender_object, export_settings):
 
 
 def __gather_mesh(blender_object, library, export_settings):
+    if blender_object.type in ['CURVE', 'SURFACE', 'FONT']:
+        return __gather_mesh_from_nonmesh(blender_object, library, export_settings)
+
     if blender_object.type != "MESH":
         return None
 
@@ -338,6 +341,49 @@ def __gather_mesh(blender_object, library, export_settings):
     return result
 
 
+def __gather_mesh_from_nonmesh(blender_object, library, export_settings):
+    """Handles curves, surfaces, text, etc."""
+    needs_to_mesh_clear = False
+    try:
+        # Convert to a mesh
+        try:
+            if export_settings[gltf2_blender_export_keys.APPLY]:
+                depsgraph = bpy.context.evaluated_depsgraph_get()
+                blender_mesh_owner = blender_object.evaluated_get(depsgraph)
+                blender_mesh = blender_mesh_owner.to_mesh(preserve_all_data_layers=True, depsgraph=depsgraph)
+                # TODO: do we need preserve_all_data_layers?
+
+            else:
+                blender_mesh_owner = blender_object
+                blender_mesh = blender_mesh_owner.to_mesh()
+
+        except Exception:
+            return None
+
+        needs_to_mesh_clear = True
+
+        skip_filter = True
+        material_names = tuple([ms.material.name for ms in blender_object.material_slots if ms.material is not None])
+        vertex_groups = None
+        modifiers = None
+        blender_object_for_skined_data = None
+
+        result = gltf2_blender_gather_mesh.gather_mesh(blender_mesh,
+                                                       library,
+                                                       blender_object_for_skined_data,
+                                                       vertex_groups,
+                                                       modifiers,
+                                                       skip_filter,
+                                                       material_names,
+                                                       export_settings)
+
+    finally:
+        if needs_to_mesh_clear:
+            blender_mesh_owner.to_mesh_clear()
+
+    return result
+
+
 def __gather_name(blender_object, export_settings):
     return blender_object.name