diff --git a/data/2223_S2/version.txt b/data/2223_S2/version.txt
index e0c414faacdad4931c2e3f6f19d051e401cab4a3..d4517629743afc47a2004d0fbb34a0a5f299ef23 100644
--- a/data/2223_S2/version.txt
+++ b/data/2223_S2/version.txt
@@ -1,2 +1,2 @@
-23
-230527
+24
+230530
diff --git a/out/production/sae2.01-developpement-application/data/2223_S2/version.txt b/out/production/sae2.01-developpement-application/data/2223_S2/version.txt
index e0c414faacdad4931c2e3f6f19d051e401cab4a3..d4517629743afc47a2004d0fbb34a0a5f299ef23 100644
--- a/out/production/sae2.01-developpement-application/data/2223_S2/version.txt
+++ b/out/production/sae2.01-developpement-application/data/2223_S2/version.txt
@@ -1,2 +1,2 @@
-23
-230527
+24
+230530
diff --git a/shukan/ShukanData.java b/shukan/ShukanData.java
index 58d2dcbe1c1013ed2fe6b3cb79e90707357deeee..73719d947884d14f11849bf8352a4dfbb8e4d813 100644
--- a/shukan/ShukanData.java
+++ b/shukan/ShukanData.java
@@ -101,6 +101,12 @@ public class ShukanData
     return (mod[cursNum][modNum].addActivity (actNum, type));
   }
 
+  /** Adds a new activity to a module */
+  public boolean addNewActivity (int cursNum, int modNum, int actNum, String type)
+  {
+    return (mod[cursNum][modNum].addNewActivity (actNum, type));
+  }
+
   /** Closes the activities of a module */
   public void closeActivities (int cursNum, int modNum, int size)
   {
@@ -114,7 +120,7 @@ public class ShukanData
       mod[cursNum][modNum].autoPlan ();
   }
 
-  /** Schedules the activities of a module */
+  /** ScheduleSchedules the activities of a module */
   public void setSchedule (int cursNum, int modNum, int[] weeks)
   {
     mod[cursNum][modNum].schedule (weeks);
@@ -439,9 +445,9 @@ public class ShukanData
     this.mod[curs][mod].setOnLeft (act);
   }
   /** Sets an activity to be displayed on right */
-  public void setOnMiddle (int curs, int mod, int act, int index)
+  public void setOnMiddle (int curs, int mod, int act, boolean ajout)
   {
-    this.mod[curs][mod].setOnMiddle (act, index);
+    this.mod[curs][mod].setOnMiddle (act, ajout);
   }
 
   /** Sets an activity to be displayed on right */
diff --git a/shukan/ShukanModule.java b/shukan/ShukanModule.java
index d7869b7600a41839b1534129d914c3886465f567..34f03430769be5fc60215cd151566c8733bfaecf 100644
--- a/shukan/ShukanModule.java
+++ b/shukan/ShukanModule.java
@@ -106,6 +106,34 @@ public class ShukanModule
     return (true);
   }
 
+  /** Adds a new activity */
+  public boolean addNewActivity (int num, String type)
+  {
+    int numT = -1;
+    int j;
+    for (int i = 0; i < TYPES.length && numT == -1; i++)
+      if (type.equals (TYPES[i])) numT = i;
+    if (numT == -1) return (false);
+
+    int[] tmp = new int[activ.length + 1];
+    int[][] tmpaff = new int[activ.length + 1][];
+    for (int i = 0; i < activ.length+1; i++)
+    {
+      if (i!=num){
+        j = i;
+        if (i>num) j--;
+        tmp[i] = activ[j];
+        tmpaff[i] = affect[j];
+      }
+    }
+
+    activ = tmp;
+    affect = tmpaff;
+    activ[num] = numT;
+    affect[num] = new int[0];
+    return (true);
+  }
+
   /** Adjusts the activity array.
    * @param size Number of activities to be planned.
    */
@@ -312,17 +340,17 @@ public class ShukanModule
     onLeft[act] = true;
   }
   /** Sets an activity to be displayed on middle */
-  public void setOnMiddle (int act, int index) {
-    if (act >= onLeft.length) {
+  public void setOnMiddle (int act, boolean ajout) {
+    if (ajout) {
       boolean[] tmpRight = new boolean[onLeft.length + 1];
       boolean[] tmpLeft = new boolean[onLeft.length + 1];
-      for (int i = 0; i < index; i++) {
+      for (int i = 0; i < act; i++) {
         tmpLeft[i] = onLeft[i];
         tmpRight[i] = onRight[i];
       }
-      tmpRight[index] = false;
-      tmpLeft[index] = false;
-      for (int i = index+1; i < onLeft.length+1; i++) {
+      tmpRight[act] = false;
+      tmpLeft[act] = false;
+      for (int i = act+1; i < onLeft.length+1; i++) {
         tmpLeft[i] = onLeft[i-1];
         tmpRight[i] = onRight[i-1];
       }
diff --git a/shukan/ShukanView.java b/shukan/ShukanView.java
index 4ce43d3c808b98242c40fe71c24eef2dc939334a..1b730305ef68264733ec0907def82db75e2f87a5 100644
--- a/shukan/ShukanView.java
+++ b/shukan/ShukanView.java
@@ -483,9 +483,15 @@ public class ShukanView extends JPanel
         if (mod_start!=0) mod_start-=data.startWeekNumber();
         int nb_act = data.scheduleInWeek(num_mod, mod_start).length;
 
-        data.addActivity(cursus, num_mod, data.activityCount(cursus, num_mod), ShukanModule.TYPES[num_act]);
-        data.scheduleActivity(cursus, num_mod, data.activityCount(cursus, num_mod)-1, mod_start);
-        data.setOnMiddle(cursus, num_mod, data.activityCount(cursus, num_mod)-1, nb_act);
+
+        data.addNewActivity(cursus, num_mod, nb_act, ShukanModule.TYPES[num_act]);
+        data.scheduleActivity(cursus, num_mod, nb_act, mod_start);
+        data.setOnMiddle(cursus, num_mod, nb_act, true);
+        int[] weeks = data.schedule(num_mod);
+        data.unscheduleActivities(cursus, num_mod);
+        data.setSchedule(cursus, num_mod, weeks);
+
+
         repaint();
         f.dispose();
       }