diff --git a/io_scene_gltf2/__init__.py b/io_scene_gltf2/__init__.py
index c2704ffd0cb654afecf2bba443c46c965ba4745c..11dbdce6445a9b7624c7c440b255657028614ac6 100755
--- a/io_scene_gltf2/__init__.py
+++ b/io_scene_gltf2/__init__.py
@@ -4,7 +4,7 @@
 bl_info = {
     'name': 'glTF 2.0 format',
     'author': 'Julien Duroure, Scurest, Norbert Nopper, Urs Hanselmann, Moritz Becher, Benjamin Schmithüsen, Jim Eckerlein, and many external contributors',
-    "version": (3, 2, 15),
+    "version": (3, 2, 16),
     'blender': (3, 1, 0),
     'location': 'File > Import-Export',
     'description': 'Import-Export as glTF 2.0',
diff --git a/io_scene_gltf2/blender/exp/gltf2_blender_gather_mesh.py b/io_scene_gltf2/blender/exp/gltf2_blender_gather_mesh.py
index c898712748cc6e67dd41bd0f3a957c51b2467f80..fd334cb3ebcbf18506417ab2640687d4018665ca 100755
--- a/io_scene_gltf2/blender/exp/gltf2_blender_gather_mesh.py
+++ b/io_scene_gltf2/blender/exp/gltf2_blender_gather_mesh.py
@@ -12,7 +12,6 @@ from io_scene_gltf2.io.com.gltf2_io_debug import print_console
 from io_scene_gltf2.io.exp.gltf2_io_user_extensions import export_user_extensions
 
 
-@cached
 def get_mesh_cache_key(blender_mesh,
                 blender_object,
                 vertex_groups,
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 2578496062789c1b15f44fa559cfd3c70b61ff82..b0b2d4b8e693fcbc068062323e9ff6a681274f41 100755
--- a/io_scene_gltf2/blender/exp/gltf2_blender_gather_nodes.py
+++ b/io_scene_gltf2/blender/exp/gltf2_blender_gather_nodes.py
@@ -194,28 +194,31 @@ def __gather_mesh(vnode, blender_object, export_settings):
     if len(modifiers) == 0:
         modifiers = None
 
-    # TODO for objects without any modifiers, we can keep original mesh_data
-    # It will instance mesh in glTF
-    if export_settings[gltf2_blender_export_keys.APPLY]:
-        armature_modifiers = {}
-        if export_settings[gltf2_blender_export_keys.SKINS]:
-            # temporarily disable Armature modifiers if exporting skins
-            for idx, modifier in enumerate(blender_object.modifiers):
-                if modifier.type == 'ARMATURE':
-                    armature_modifiers[idx] = modifier.show_viewport
-                    modifier.show_viewport = False
-
-        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)
-        for prop in blender_object.data.keys():
-            blender_mesh[prop] = blender_object.data[prop]
-        skip_filter = True
 
-        if export_settings[gltf2_blender_export_keys.SKINS]:
-            # restore Armature modifiers
-            for idx, show_viewport in armature_modifiers.items():
-                blender_object.modifiers[idx].show_viewport = show_viewport
+    if export_settings[gltf2_blender_export_keys.APPLY]:
+        if modifiers is None: # If no modifier, use original mesh, it will instance all shared mesh in a single glTF mesh
+            blender_mesh = blender_object.data
+            skip_filter = False
+        else:
+            armature_modifiers = {}
+            if export_settings[gltf2_blender_export_keys.SKINS]:
+                # temporarily disable Armature modifiers if exporting skins
+                for idx, modifier in enumerate(blender_object.modifiers):
+                    if modifier.type == 'ARMATURE':
+                        armature_modifiers[idx] = modifier.show_viewport
+                        modifier.show_viewport = False
+
+            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)
+            for prop in blender_object.data.keys():
+                blender_mesh[prop] = blender_object.data[prop]
+            skip_filter = True
+
+            if export_settings[gltf2_blender_export_keys.SKINS]:
+                # restore Armature modifiers
+                for idx, show_viewport in armature_modifiers.items():
+                    blender_object.modifiers[idx].show_viewport = show_viewport
     else:
         blender_mesh = blender_object.data
         skip_filter = False
@@ -249,7 +252,7 @@ def __gather_mesh(vnode, blender_object, export_settings):
                                                    None,
                                                    export_settings)
 
-    if export_settings[gltf2_blender_export_keys.APPLY]:
+    if export_settings[gltf2_blender_export_keys.APPLY] and modifiers is not None:
         blender_mesh_owner.to_mesh_clear()
 
     return result