diff --git a/io_mesh_ply/import_ply.py b/io_mesh_ply/import_ply.py
index 1dac3a8d1479d0d2af31b2b53814555fd6993b00..8e5db68ec75cdfbb5f0a85f4fc889c3f756f94f8 100644
--- a/io_mesh_ply/import_ply.py
+++ b/io_mesh_ply/import_ply.py
@@ -307,6 +307,7 @@ def load_ply(filepath):
                     for j, col in enumerate(f_col):
                         col.r, col.g, col.b = ply_col[j]
 
+    mesh.validate()
     mesh.update()
 
     scn = bpy.context.scene
diff --git a/io_mesh_raw/import_raw.py b/io_mesh_raw/import_raw.py
index b8e96209cfda8919ec654e6e7bf969664bfc3db4..4b5b7304c525a5ee26605b7a5f5a97ea6e547f1b 100644
--- a/io_mesh_raw/import_raw.py
+++ b/io_mesh_raw/import_raw.py
@@ -107,6 +107,8 @@ def addMeshObj(mesh, objName):
         o.select = False
 
     mesh.update()
+    mesh.validate()
+
     nobj = bpy.data.objects.new(objName, mesh)
     scn.objects.link(nobj)
     nobj.select = True
diff --git a/io_mesh_stl/blender_utils.py b/io_mesh_stl/blender_utils.py
index 3d0ef076b7e908bfa5f74acd9f58069635b17f32..f763929a32078c59ee7378fe0855cd2306219b45 100644
--- a/io_mesh_stl/blender_utils.py
+++ b/io_mesh_stl/blender_utils.py
@@ -34,6 +34,7 @@ def create_and_link_mesh(name, faces, points):
     bpy.context.scene.objects.link(ob)
 
     # update mesh to allow proper display
+    mesh.validate()
     mesh.update()
 
 
diff --git a/io_scene_3ds/import_3ds.py b/io_scene_3ds/import_3ds.py
index e53222bd55d82a5fda2c3e25447b146c4a38afd7..0a86cdc106a51fa94cd9d99d626558953f1fd578 100644
--- a/io_scene_3ds/import_3ds.py
+++ b/io_scene_3ds/import_3ds.py
@@ -324,6 +324,9 @@ def process_next_chunk(file, previous_chunk, importedObjects, IMAGE_SEARCH):
                     uf.uv3 = contextMeshUV[v3 * 2:(v3 * 2) + 2]
                     # always a tri
 
+        bmesh.validate()
+        bmesh.update()
+
         ob = bpy.data.objects.new(contextObName, bmesh)
         object_dictionary[contextObName] = ob
         SCN.objects.link(ob)
@@ -338,7 +341,6 @@ def process_next_chunk(file, previous_chunk, importedObjects, IMAGE_SEARCH):
             object_matrix[ob] = contextMatrix_rot.copy()
 
         importedObjects.append(ob)
-        bmesh.update()
 
     #a spare chunk
     new_chunk = chunk()
diff --git a/io_scene_obj/import_obj.py b/io_scene_obj/import_obj.py
index 37c8df3d80ffa9975e7507ee69c8bebcf0aa4b4c..1056fde00988e2e87bdf16aad125581cc31550e0 100644
--- a/io_scene_obj/import_obj.py
+++ b/io_scene_obj/import_obj.py
@@ -842,8 +842,8 @@ def create_mesh(new_objects, has_ngons, CREATE_FGONS, CREATE_EDGES, verts_loc, v
 #                 me_edges[ed].flag |= SHARP
 #         del SHARP
 
+    me.validate()
     me.update(calc_edges=CREATE_EDGES)
-#     me.calcNormals()
 
     ob = bpy.data.objects.new("Mesh", me)
     new_objects.append(ob)
diff --git a/io_scene_x3d/import_x3d.py b/io_scene_x3d/import_x3d.py
index b4b9fe09f7f45066bfe67d45b4c7b9964e0b31c0..e9393234edb55ce25d7e924eb69d6e97e8b001a9 100644
--- a/io_scene_x3d/import_x3d.py
+++ b/io_scene_x3d/import_x3d.py
@@ -1699,7 +1699,7 @@ def importMesh_IndexedFaceSet(geom, bpyima, ancestry):
         #for f in faces:
         #   bpymesh.faces.extend(faces, smooth=True)
 
-    # bpymesh.calcNormals()
+    bpymesh.validate()
     bpymesh.update()
 
     if len(bpymesh.faces) != len(faces):
@@ -1916,7 +1916,7 @@ def importMesh_PointSet(geom, ancestry):
     bpymesh.vertices.add(len(points))
     bpymesh.vertices.foreach_set("co", [a for v in points for a in v])
 
-    # bpymesh.calcNormals()  # will just be dummy normals
+    # No need to validate
     bpymesh.update()
     return bpymesh