diff --git a/app/src/main/java/be/lepl1509group13/workoutwarrior/WorkoutActivity.java b/app/src/main/java/be/lepl1509group13/workoutwarrior/WorkoutActivity.java
index 58141cfc1e2a8c8acb55d3b84b863ae901c9a552..63beeb088192ef4ad9ea3015d9c57f1a10879b23 100644
--- a/app/src/main/java/be/lepl1509group13/workoutwarrior/WorkoutActivity.java
+++ b/app/src/main/java/be/lepl1509group13/workoutwarrior/WorkoutActivity.java
@@ -22,6 +22,7 @@ import com.google.firebase.database.DatabaseReference;
 import com.google.firebase.database.FirebaseDatabase;
 import com.google.firebase.database.ValueEventListener;
 
+import java.util.Arrays;
 import java.util.Objects;
 
 public class WorkoutActivity extends AppCompatActivity {
@@ -45,7 +46,7 @@ public class WorkoutActivity extends AppCompatActivity {
     private boolean workout_timer_started = false; // vrai si le timer de l'exo a déjà été démarré (qu'il soit sur pause ou non)
     private long timeLeftInMillis; // temps restant sur le timer du workout
     Button next_btn;
-
+    int exerciseIndexToDisplay = 0;
 
 
     @Override
@@ -64,6 +65,10 @@ public class WorkoutActivity extends AppCompatActivity {
         if (id == 0){
             String[][] exercisesData = (String[][]) intent.getSerializableExtra("exercisesData");
             //todo pour Killian
+            System.out.println("custom : " + Arrays.deepToString(exercisesData));
+
+            next_btn.setOnClickListener(v -> onNextClickCustomProgram(exercisesData));
+            displayCustomExercise(exercisesData);
         }else{
             //it's a program from the database
             db = firebaseDb.getReference("Programs");
@@ -93,6 +98,89 @@ public class WorkoutActivity extends AppCompatActivity {
         timeLeftInMillis = timer;
     }
 
+    // Lauch custom program
+    void onNextClickCustomProgram(String[][] exercises) {
+        exerciseIndexToDisplay++;
+        System.out.println("index : " + exerciseIndexToDisplay);
+        System.out.println("len : " + exercises.length);
+        if (exerciseIndexToDisplay >= exercises.length) {
+            System.out.println("on finish");
+            finish();
+        } else {
+            TextView name = findViewById(R.id.workout_todo);
+            TextView description = findViewById(R.id.workout_detail);
+            ImageView image = findViewById(R.id.workout_image);
+
+
+            Button launch_timer = findViewById(R.id.launch_timer);
+            launch_timer.setVisibility(View.INVISIBLE);
+
+            name.setText(exercises[exerciseIndexToDisplay][0]);
+            name.setVisibility(View.INVISIBLE);
+
+            description.setText(exercises[exerciseIndexToDisplay][1]);
+            description.setVisibility(View.INVISIBLE);
+
+            int resourceId = getResources().getIdentifier(exercises[exerciseIndexToDisplay][2], "drawable", getPackageName());
+            image.setImageResource(resourceId);
+            image.setVisibility(View.INVISIBLE);
+            TextView timer_break = findViewById(R.id.timer_break);
+            CountDownTimer countDownBreak = new CountDownTimer(3000, 1000) {
+                @Override
+                public void onTick(long l) {
+                    timer_break.setText("");
+                    name.setText("");
+                    description.setText("");
+                    image.setVisibility(View.INVISIBLE);
+                    timer_break.setText("" + l / 1000);
+                    //btn_next.setVisibility(View.INVISIBLE);
+                    set_break_timer_text.setText("Il est temps de prendre une pause...");
+                    set_break_btn.setVisibility(View.INVISIBLE);
+                }
+
+                @Override
+                public void onFinish() {
+                    set_break_timer_text.setText("");
+                    timer_break.setText("");
+                    next_btn.setVisibility(View.VISIBLE);
+                    set_break_btn.setVisibility(View.VISIBLE);
+                    displayCustomExercise(exercises);
+                }
+            };
+            countDownBreak.start();
+            next_btn.setText("Passer");
+            next_btn.setOnClickListener(v -> {
+                countDownBreak.cancel();
+                countDownBreak.onFinish();
+                next_btn.setText("Suivant");
+                //next_btn.setOnClickListener(v1 -> displayCustomExercise(exercises));
+            });
+        }
+
+    }
+
+    void displayCustomExercise(String[][] exercises) {
+        if (exerciseIndexToDisplay >= exercises.length) finish();
+        next_btn.setOnClickListener(v1 -> onNextClickCustomProgram(exercises));
+        TextView name = findViewById(R.id.workout_todo);
+        name.setText(exercises[exerciseIndexToDisplay][0]);
+        name.setVisibility(View.VISIBLE);
+
+        TextView description = findViewById(R.id.workout_detail);
+        description.setText(exercises[exerciseIndexToDisplay][1]);
+        description.setVisibility(View.VISIBLE);
+
+        ImageView image = findViewById(R.id.workout_image);
+        int resourceId = getResources().getIdentifier(exercises[exerciseIndexToDisplay][2], "drawable", getPackageName());
+        image.setImageResource(resourceId);
+        image.setVisibility(View.VISIBLE);
+    }
+
+
+
+
+
+
     // Timer entre les séries
     CountDownTimer workout_break_timer() {
         CountDownTimer timer = new CountDownTimer(set_break_timer, 1000) {
@@ -258,7 +346,7 @@ public class WorkoutActivity extends AppCompatActivity {
         else if(!Objects.equals(numberOfWorkouts, step)){
             TextView timer_break = findViewById(R.id.timer_break);
 
-            CountDownTimer countDownBreak = new CountDownTimer(10000, 1000) {
+            CountDownTimer countDownBreak = new CountDownTimer(3000, 1000) {
                 @Override
                 public void onTick(long l) {
                     timer_break.setText("");