diff --git a/io_scene_fbx/import_fbx.py b/io_scene_fbx/import_fbx.py
index 76363a35df64490ce06470410618a4fddb4a33c2..ade884abdbafddd6e066a5a8ac2b66cd4be9d354 100644
--- a/io_scene_fbx/import_fbx.py
+++ b/io_scene_fbx/import_fbx.py
@@ -377,7 +377,7 @@ def blen_read_geom_array_mapped_polygon(
     ):
 
     if fbx_layer_mapping == b'ByPolygon':
-        if fbx_layer_ref in {b'IndexToDirect', b'Direct'}:
+        if fbx_layer_ref == b'IndexToDirect':
             if stride == 1:
                 for i, blen_data_item in enumerate(blen_data):
                     setattr(blen_data_item, blend_attr, fbx_layer_data[i])
@@ -385,6 +385,12 @@ def blen_read_geom_array_mapped_polygon(
                 for i, blen_data_item in enumerate(blen_data):
                     setattr(blen_data_item, blend_attr, fbx_layer_data[(i * stride): (i * stride) + stride])
             return True
+        elif fbx_layer_ref == b'Direct':
+            # looks like direct may have different meanings!
+            assert(stride == 1)
+            for i in fbx_layer_data:
+                setattr(blen_data[i - 1], blend_attr, True)
+            return True
         else:
             print("warning layer %r ref type unsupported: %r" % (descr, fbx_layer_ref))
     else:
@@ -492,6 +498,10 @@ def blen_read_geom_layer_smooth(fbx_obj, mesh):
         return False
 
     if fbx_layer_mapping == b'ByEdge':
+        # some models have bad edge data, we cant use this info...
+        if not mesh.edges:
+            return False
+
         blen_data = mesh.edges
         ok_smooth = blen_read_geom_array_mapped_edge(
             mesh, blen_data, "use_edge_sharp",
@@ -582,8 +592,15 @@ def blen_read_geom(fbx_tmpl, fbx_obj):
         blen_read_geom_layer_uv(fbx_obj, mesh)
 
     if fbx_edges:
-        mesh.edges.add(len(fbx_edges) // 2)
-        mesh.edges.foreach_set("vertices", fbx_edges)
+        # workaround for odd number of edge vertices
+        tot_edges = len(fbx_edges) // 2
+
+        if len(fbx_edges) % 2:
+            print("Corrupt edges found in: %s" % elem_name_utf8)
+        else:
+            mesh.edges.add(tot_edges)
+            mesh.edges.foreach_set("vertices", fbx_edges)
+
 
     # must be after edge, face loading.
     ok_smooth = blen_read_geom_layer_smooth(fbx_obj, mesh)