diff --git a/Common/ListUtils.cpp b/Common/ListUtils.cpp
index 6eb8551647b4dfd699945bf6ae5ac1eaf4252725..c273fa3940b78027f0bc2edd32b1a95a499c98e2 100644
--- a/Common/ListUtils.cpp
+++ b/Common/ListUtils.cpp
@@ -286,7 +286,7 @@ void List_Insert_In_List(List_T *a, int i, List_T *b)
     memcpy(List_Pointer_Fast(b, b->n - j - 1), List_Pointer_Fast(b, oldn - j - 1),
            b->size);
   for(int j = 0;j < a->n; j++)
-    memcpy(List_Pointer_Fast(b, oldn + j), List_Pointer_Fast(a, j), b->size);
+    memcpy(List_Pointer_Fast(b, i + j), List_Pointer_Fast(a, j), b->size);
 }
 
 void swap_bytes(char *array, int size, int n)
diff --git a/Geo/Geo.cpp b/Geo/Geo.cpp
index 2294f85ed7805e31d914053e72ce0bc515efd7a4..5832b233e4447715757e79a106de84d08d63391d 100644
--- a/Geo/Geo.cpp
+++ b/Geo/Geo.cpp
@@ -3057,9 +3057,11 @@ bool SplitCurve(int line_id, List_T *vertices_id, List_T *shapes)
       if(surface_curve->Num == c->Num){
         List_Remove(s->Generatrices, j);
         List_Insert_In_List(shapes, j, s->Generatrices);
+        j+=List_Nbr(shapes)-1;
       }else if(surface_curve->Num == -c->Num){
         List_Remove(s->Generatrices, j);
         List_Insert_In_List(rshapes, j, s->Generatrices);
+        j+=List_Nbr(shapes)-1;
       }
     }
   }
@@ -3067,6 +3069,7 @@ bool SplitCurve(int line_id, List_T *vertices_id, List_T *shapes)
   DeleteShape(c->Typ, c->Num);
   List_Delete(new_list);
   List_Delete(rshapes);
+
   return true;
 }