diff --git a/io_scene_fbx/__init__.py b/io_scene_fbx/__init__.py
index d415305dc4666d02398e58e7404e846010990261..86749770f5d86bd1c4b97f9f9277bd5f5b8a06f8 100644
--- a/io_scene_fbx/__init__.py
+++ b/io_scene_fbx/__init__.py
@@ -21,7 +21,7 @@
 bl_info = {
     "name": "FBX format",
     "author": "Campbell Barton, Bastien Montagne, Jens Restemeier",
-    "version": (4, 13, 1),
+    "version": (4, 14, 0),
     "blender": (2, 80, 0),
     "location": "File > Import-Export",
     "description": "FBX IO meshes, UV's, vertex colors, materials, textures, cameras, lamps and actions",
diff --git a/io_scene_fbx/export_fbx_bin.py b/io_scene_fbx/export_fbx_bin.py
index 6f6005cbe7e62fc0e3829430b3102b6f2f838f1c..77ee0e6f706b434332aa35e6b6663574fa1873b1 100644
--- a/io_scene_fbx/export_fbx_bin.py
+++ b/io_scene_fbx/export_fbx_bin.py
@@ -1100,10 +1100,14 @@ def fbx_data_mesh_elements(root, me_obj, scene_data, done_meshes):
     #       Textures are now only related to materials, in FBX!
     uvnumber = len(me.uv_layers)
     if uvnumber:
-        def _uvtuples_gen(raw_uvs):
-            return zip(*(iter(raw_uvs),) * 2)
+        # Looks like this mapping is also expected to convey UV islands (arg..... :((((( ).
+        # So we need to generate unique triplets (uv, vertex_idx) here, not only just based on UV values.
+        def _uvtuples_gen(raw_uvs, raw_lvidxs):
+            return zip(zip(*(iter(raw_uvs),) * 2), raw_lvidxs)
 
         t_luv = array.array(data_types.ARRAY_FLOAT64, (0.0,)) * len(me.loops) * 2
+        t_lvidx = array.array(data_types.ARRAY_INT32, (0,)) * len(me.loops)
+        me.loops.foreach_get("vertex_index", t_lvidx)
         for uvindex, uvlayer in enumerate(me.uv_layers):
             uvlayer.data.foreach_get("uv", t_luv)
             lay_uv = elem_data_single_int32(geom, b"LayerElementUV", uvindex)
@@ -1112,13 +1116,15 @@ def fbx_data_mesh_elements(root, me_obj, scene_data, done_meshes):
             elem_data_single_string(lay_uv, b"MappingInformationType", b"ByPolygonVertex")
             elem_data_single_string(lay_uv, b"ReferenceInformationType", b"IndexToDirect")
 
-            uv2idx = tuple(set(_uvtuples_gen(t_luv)))
-            elem_data_single_float64_array(lay_uv, b"UV", chain(*uv2idx))  # Flatten again...
+            uv_ids = tuple(set(_uvtuples_gen(t_luv, t_lvidx)))
+            elem_data_single_float64_array(lay_uv, b"UV", chain(*(uv for uv, vidx in uv_ids)))  # Flatten again...
 
-            uv2idx = {uv: idx for idx, uv in enumerate(uv2idx)}
-            elem_data_single_int32_array(lay_uv, b"UVIndex", (uv2idx[uv] for uv in _uvtuples_gen(t_luv)))
+            uv2idx = {uv_id: idx for idx, uv_id in enumerate(uv_ids)}
+            elem_data_single_int32_array(lay_uv, b"UVIndex", (uv2idx[uv_id] for uv_id in _uvtuples_gen(t_luv, t_lvidx)))
             del uv2idx
+            del uv_ids
         del t_luv
+        del t_lvidx
         del _uvtuples_gen
 
     # Face's materials.