diff --git a/source/blender/editors/uvedit/uvedit_unwrap_ops.c b/source/blender/editors/uvedit/uvedit_unwrap_ops.c
index 81e1d673d08..15c58235bba 100644
--- a/source/blender/editors/uvedit/uvedit_unwrap_ops.c
+++ b/source/blender/editors/uvedit/uvedit_unwrap_ops.c
@@ -2257,6 +2257,8 @@ static int smart_project_exec(bContext *C, wmOperator *op)
     only_selected_uvs = true;
   }
 
+
+  const bool pack_result = RNA_boolean_get(op->ptr, "pack_result");
   const float project_angle_limit = RNA_float_get(op->ptr, "angle_limit");
   const float island_margin = RNA_float_get(op->ptr, "island_margin");
   const float area_weight = RNA_float_get(op->ptr, "area_weight");
@@ -2404,7 +2406,7 @@ static int smart_project_exec(bContext *C, wmOperator *op)
   MEM_freeN(objects);
 
   /* Pack islands & Stretch to UV bounds */
-  if (object_changed_len > 0) {
+  if (object_changed_len > 0 && pack_result) {
 
     scene->toolsettings->uvcalc_margin = island_margin;
 
@@ -2427,6 +2429,13 @@ static int smart_project_exec(bContext *C, wmOperator *op)
     uv_map_clip_correct(
         scene, objects_changed, object_changed_len, op, per_face_aspect, only_selected_uvs);
   }
+  else {
+    for (uint ob_index = 0; ob_index < object_changed_len; ob_index++) {
+      Object *obedit = objects_changed[ob_index];
+      DEG_id_tag_update(obedit->data, ID_RECALC_GEOMETRY);
+      WM_main_add_notifier(NC_GEOM | ND_DATA, obedit->data);
+    }
+  }
 
   MEM_freeN(objects_changed);
 
@@ -2462,6 +2471,13 @@ void UV_OT_smart_project(wmOperatorType *ot)
                                 DEG2RADF(89.0f));
   RNA_def_property_float_default(prop, DEG2RADF(66.0f));
 
+  RNA_def_boolean(
+                ot->srna,
+                "pack_result",
+                true,
+                "Pack Result",
+                "Pack the islands generated by the operator into non overlapping layout");
+
   RNA_def_enum(
       ot->srna, "margin_method", pack_margin_method, ED_UVPACK_MARGIN_SCALED, "Margin Method", "");
   RNA_def_float(ot->srna,
