diff --git a/io_scene_obj/import_obj.py b/io_scene_obj/import_obj.py
index b60cb907fd36c03bf2ed288f06877d0c3e100697..23e28913a29bd72dcd18035a7d18a575e82e69da 100644
--- a/io_scene_obj/import_obj.py
+++ b/io_scene_obj/import_obj.py
@@ -644,6 +644,27 @@ def create_mesh(new_objects,
     def edges_match(e1, e2):
         return (e1[0] == e2[0] and e1[1] == e2[1]) or (e1[0] == e2[1] and e1[1] == e2[0])
 
+    me.validate()
+    me.update(calc_edges=use_edges)
+
+    if unique_smooth_groups and sharp_edges:
+        import bmesh
+        bm = bmesh.new()
+        bm.from_mesh(me)
+        # to avoid slow iterator lookups later / indexing verts is slow in bmesh
+        bm_verts = bm.verts[:]
+        
+        for sharp_edge in sharp_edges.keys():
+            vert1 = bm_verts[sharp_edge[0]]
+            vert2 = bm_verts[sharp_edge[1]]
+            if vert1 != vert2:
+                edge = bm.edges.get((vert1, vert2))
+                if edge is not None:
+                    me.edges[edge.index].use_edge_sharp = True
+
+        bm.free()
+        del bm
+
     # XXX slow
 #     if use_ngons and fgon_edges:
 #         for fgon_edge in fgon_edges.keys():
@@ -672,9 +693,6 @@ def create_mesh(new_objects,
 #                 me_edges[ed].flag |= SHARP
 #         del SHARP
 
-    me.validate()
-    me.update(calc_edges=use_edges)
-
     ob = bpy.data.objects.new(me.name, me)
     new_objects.append(ob)