diff --git a/app/src/main/java/be/lepl1509group13/workoutwarrior/MainActivity.java b/app/src/main/java/be/lepl1509group13/workoutwarrior/MainActivity.java
index bb87d1d28ca021af26672c2de68fce07d3522dd9..5a9b91ebcfbae207760db68b04823b128af89575 100644
--- a/app/src/main/java/be/lepl1509group13/workoutwarrior/MainActivity.java
+++ b/app/src/main/java/be/lepl1509group13/workoutwarrior/MainActivity.java
@@ -5,11 +5,13 @@ import android.content.Context;
 import android.content.DialogInterface;
 import android.content.Intent;
 import android.os.Bundle;
+import android.text.Editable;
 import android.util.Log;
 import android.view.LayoutInflater;
 import android.view.View;
 import android.widget.Button;
 import android.widget.ImageButton;
+import android.widget.RelativeLayout;
 import android.widget.TextView;
 import android.widget.Toast;
 
@@ -24,6 +26,7 @@ import androidx.recyclerview.widget.LinearLayoutManager;
 import androidx.recyclerview.widget.RecyclerView;
 
 import com.google.android.material.navigation.NavigationView;
+import com.google.android.material.textfield.TextInputEditText;
 import com.google.firebase.auth.FirebaseAuth;
 import com.google.firebase.auth.FirebaseUser;
 import com.google.firebase.database.DataSnapshot;
@@ -53,8 +56,10 @@ public class MainActivity extends AppCompatActivity implements MainAdapter.OnIte
     private final FirebaseDatabase firebaseDb = FirebaseDatabase.getInstance();
     private DatabaseReference db;
     private FirebaseAuth mAuth;
-    private Integer numberOfProgramsToDisplay = 0, totalNumberOfCustomPrograms = 0;
+    private Integer numberOfProgramsToDisplay = 0, totalNumberOfCustomPrograms = 0, customProgramInDB = 0;
+    private ArrayList<Integer> listIdCustomProgram = new ArrayList<Integer>();
     private boolean needsRefresh = false;
+    private String userPseudo;
 
     @SuppressLint({"SetTextI18n"})
     @Override
@@ -66,8 +71,9 @@ public class MainActivity extends AppCompatActivity implements MainAdapter.OnIte
         mAuth = FirebaseAuth.getInstance();
         FirebaseUser currentUser = mAuth.getCurrentUser();
 
-        db = firebaseDb.getReference("Programs");
-        getProgramData();
+        getUserPseudo(currentUser);
+
+        getCustomLink();
 
         TextView open_program_creation_btn = findViewById(R.id.program_creation_button);
         open_program_creation_btn.setOnClickListener(this::open_program_creation);
@@ -91,7 +97,10 @@ public class MainActivity extends AppCompatActivity implements MainAdapter.OnIte
         });
 
         //check if any programs were shared by friends
-        getUserPseudo(currentUser);
+        if(userPseudo != null){
+            db = firebaseDb.getReference("Friends");
+            getSharedPrograms();
+        }
     }
 
     @Override
@@ -143,7 +152,56 @@ public class MainActivity extends AppCompatActivity implements MainAdapter.OnIte
         secondActivityLauncher.launch(intent);
     }
 
+    private void getCustomLink(){
+        db = firebaseDb.getReference("Custom_workouts_link");
+        db.addValueEventListener(new ValueEventListener() {
+            @Override
+            public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
+                for(DataSnapshot child : dataSnapshot.getChildren()){
+                    for(DataSnapshot subChild : child.getChildren()){
+                        if(Objects.equals(subChild.getKey(), userPseudo)){
+                            String test = subChild.getValue(String.class);
+                            int idOfTheCustomProgram = Integer.parseInt(test);
+                            listIdCustomProgram.add(idOfTheCustomProgram);
+                            customProgramInDB ++;
+                        }
+                    }
+                }
+                getProgramData();
+            }
+
+            @Override
+            public void onCancelled(@NonNull DatabaseError error) {
+                Toast.makeText(MainActivity.this, "Erreur lors du chargement.", Toast.LENGTH_SHORT).show();
+            }
+        });
+    }
+
     private void getProgramData(){
+        ArrayList<String> listNameCustomProgram = new ArrayList<>();
+        db = firebaseDb.getReference("Custom_workouts");
+        db.addValueEventListener(new ValueEventListener() {
+            @Override
+            public void onDataChange(@NonNull DataSnapshot snapshot) {
+                for(DataSnapshot child : snapshot.getChildren()){
+                    int id = Integer.parseInt(child.getKey());
+                    if(listIdCustomProgram.contains(id)){
+                        for(DataSnapshot subChild : child.getChildren()){
+                            if("name".equals(subChild.getKey())){
+                                listNameCustomProgram.add(subChild.getValue(String.class));
+                            }
+                        }
+                    }
+                }
+            }
+
+            @Override
+            public void onCancelled(@NonNull DatabaseError error) {
+                Toast.makeText(MainActivity.this, "Erreur lors du chargement.", Toast.LENGTH_SHORT).show();
+            }
+        });
+
+        db = firebaseDb.getReference("Programs");
         db.addValueEventListener(new ValueEventListener() {
             @Override
             public void onDataChange(@NonNull DataSnapshot snapshot) {
@@ -179,9 +237,23 @@ public class MainActivity extends AppCompatActivity implements MainAdapter.OnIte
                 }
 
                 //Set the size of the list to put every program into
-                Integer totalOfPrograms = totalNumberOfCustomPrograms + (int)snapshot.getChildrenCount();
+                Integer totalOfPrograms = totalNumberOfCustomPrograms + (int)snapshot.getChildrenCount() + totalNumberOfCustomPrograms;
 
                 String[][] programData = new String[totalOfPrograms][];
+                //numberOfProgramsToDisplay += totalNumberOfCustomPrograms;
+
+                int idInList = 0;
+                for(Integer customProgramID : listIdCustomProgram){
+                    String isCustom = "true";
+                    int id = customProgramID;
+                    String name = listNameCustomProgram.get(idInList);
+                    idInList ++;
+                    String estimatedTime = "Votre programme personnalisé";
+                    String image_url = "workoutimg1";
+                    int resource_id_image = getResources().getIdentifier(image_url, "drawable", getPackageName());
+                    programData[numberOfProgramsToDisplay] = new String[]{isCustom, String.valueOf(id), name, estimatedTime, String.valueOf(resource_id_image)};
+                    numberOfProgramsToDisplay ++;
+                }
 
                 try {
                     // recup files saved (garde que ".ser")
@@ -215,7 +287,7 @@ public class MainActivity extends AppCompatActivity implements MainAdapter.OnIte
                                     int resource_id_image = getResources().getIdentifier(image_url, "drawable", getPackageName());
 
 
-                                    programData[numberOfProgramsToDisplay] = new String[]{id, name, estimatedTime, String.valueOf(resource_id_image)};
+                                    programData[numberOfProgramsToDisplay] = new String[]{"false", id, name, estimatedTime, String.valueOf(resource_id_image)};
                                     numberOfProgramsToDisplay ++;
                                 }
                             }
@@ -242,7 +314,7 @@ public class MainActivity extends AppCompatActivity implements MainAdapter.OnIte
 
 
                     //System.out.println("numberOfProgramsToDisplay " + numberOfProgramsToDisplay + " & i = " + i);
-                    programData[numberOfProgramsToDisplay + i - 1] = new String[]{id, name, estimatedTime, String.valueOf(resource_id_image)};
+                    programData[numberOfProgramsToDisplay + i - 1] = new String[]{"false", id, name, estimatedTime, String.valueOf(resource_id_image)};
                 }
 
                 RecyclerView recyclerView = findViewById(R.id.homepage_recycler);
@@ -259,13 +331,13 @@ public class MainActivity extends AppCompatActivity implements MainAdapter.OnIte
         });
     }
 
-    private void getSharedPrograms(String currentUser) {
+    private void getSharedPrograms() {
         db = firebaseDb.getReference("Shared_program");
         db.addValueEventListener(new ValueEventListener() {
             @SuppressLint("SetTextI18n")
             @Override
             public void onDataChange(DataSnapshot dataSnapshot) {
-                DataSnapshot firstChild = dataSnapshot.child(currentUser);
+                DataSnapshot firstChild = dataSnapshot.child(userPseudo);
                 for (DataSnapshot childData: firstChild.getChildren()) {
 
                     for(DataSnapshot realData : firstChild.child(childData.getKey()).getChildren()){
@@ -315,14 +387,12 @@ public class MainActivity extends AppCompatActivity implements MainAdapter.OnIte
             db.addValueEventListener(new ValueEventListener() {
                 @Override
                 public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
-                    for (DataSnapshot childSnapshot: dataSnapshot.getChildren()) {
-                        String userKey = childSnapshot.getKey();
-                        String pseudo = childSnapshot.getValue(String.class);
-                        if(Objects.equals(userKey, currentUser.getUid())){
-                            db = firebaseDb.getReference("Friends");
-                            getSharedPrograms(pseudo);
-                            return;
-                        }
+                    try {
+                        DataSnapshot data = dataSnapshot.child(currentUser.getUid());
+                        userPseudo = data.getValue().toString();
+                        Log.d("LOGIN", "onDataChange: " + userPseudo);
+                    } catch (Exception e){
+                        Log.d("LOGIN", "NOT LOGED");
                     }
                 }
 
diff --git a/app/src/main/java/be/lepl1509group13/workoutwarrior/MainAdapter.java b/app/src/main/java/be/lepl1509group13/workoutwarrior/MainAdapter.java
index bfefd28d93def34794d9e14924c827a46025cb2a..e1ae3488b812db6e3904cfe9b0909e5f10807450 100644
--- a/app/src/main/java/be/lepl1509group13/workoutwarrior/MainAdapter.java
+++ b/app/src/main/java/be/lepl1509group13/workoutwarrior/MainAdapter.java
@@ -28,13 +28,13 @@ public class MainAdapter extends RecyclerView.Adapter<MainAdapter.MyViewHolder>{
         // Parcourir la liste et afficher le contenu de chaque tableau
         String[] program = mData[position];
 
-        holder.title.setText(program[1]);
-        holder.description.setText(program[2]);
-        holder.image.setImageResource(Integer.parseInt(program[3]));
+        holder.title.setText(program[2]);
+        holder.description.setText(program[3]);
+        holder.image.setImageResource(Integer.parseInt(program[4]));
 
         holder.image.setOnClickListener(view -> {
             if (mListener != null) {
-                mListener.onItemClick(Integer.parseInt(program[0]), program[1]);
+                mListener.onItemClick(Integer.parseInt(program[1]), program[2]);
             }
         });
     }
diff --git a/app/src/main/java/be/lepl1509group13/workoutwarrior/ProgramCreationActivity.java b/app/src/main/java/be/lepl1509group13/workoutwarrior/ProgramCreationActivity.java
index 1eb5109e95698991dd33124c985c4ffdb62a713c..442b6a9fc8fe2fd4a875d58acc4e8442b7283a5c 100644
--- a/app/src/main/java/be/lepl1509group13/workoutwarrior/ProgramCreationActivity.java
+++ b/app/src/main/java/be/lepl1509group13/workoutwarrior/ProgramCreationActivity.java
@@ -194,7 +194,7 @@ public class ProgramCreationActivity extends AppCompatActivity {
                             Toast.LENGTH_SHORT).show();
                 }else{
                     //add the custom program in the db
-                    createCustomProgramInDatabase(programByDay);
+                    createCustomProgramInDatabase(programByDay, program_name_str);
                     try {
                         // recup le nom de programme comme nom de fichier -> nomdeprogramme.ser
                         EditText programNameEditText = findViewById(R.id.program_name);
@@ -223,7 +223,7 @@ public class ProgramCreationActivity extends AppCompatActivity {
 
     }
 
-    private void createCustomProgramInDatabase(HashMap<String, ArrayList<Exercise>> programByDays) {
+    private void createCustomProgramInDatabase(HashMap<String, ArrayList<Exercise>> programByDays, String program_name_str) {
         db = firebaseDb.getReference("Custom_workouts");
 
         db.addValueEventListener(new ValueEventListener() {
@@ -239,6 +239,19 @@ public class ProgramCreationActivity extends AppCompatActivity {
             }
         });
 
+        Map<String, String> customWorkoutName = new HashMap<>();
+        customWorkoutName.put("name",  program_name_str);
+        db.child(String.valueOf(customWorkoutsCount + 1)).setValue(customWorkoutName)
+                .addOnSuccessListener(new OnSuccessListener<Void>() {
+                    @Override
+                    public void onSuccess(Void aVoid) {
+                        Log.d("DB", "onSuccess: OK set name");
+                    }
+                })
+                .addOnFailureListener(e -> {
+                    //error
+                });
+
         for (String dayInQuestion : programByDays.keySet()) {
             Map<String, Object> customWorkout = new HashMap<>();
 
@@ -252,11 +265,11 @@ public class ProgramCreationActivity extends AppCompatActivity {
                             customWorkout.put("timer", ex.timer);
                             customWorkout.put("breakVal", ex.breakVal);
 
-                            db.child(String.valueOf(customWorkoutsCount)).child(dayInQuestion).child(ex.name).setValue(customWorkout)
+                            db.child(String.valueOf(customWorkoutsCount + 1)).child(dayInQuestion).child(ex.name).setValue(customWorkout)
                                     .addOnSuccessListener(new OnSuccessListener<Void>() {
                                         @Override
                                         public void onSuccess(Void aVoid) {
-                                            //nice
+                                            Log.d("DB", "onSuccess: OK1");
                                         }
                                     })
                                     .addOnFailureListener(e -> {
@@ -282,9 +295,9 @@ public class ProgramCreationActivity extends AppCompatActivity {
             }
         });
         Map<String, String> customLink = new HashMap<>();
-        customLink.put(userPseudo, String.valueOf(customWorkoutsCount));
+        customLink.put(userPseudo, String.valueOf(customWorkoutsCount + 1));
 
-        db.child(String.valueOf(customWorkoutsLinkCount)).setValue(customLink)
+        db.child(String.valueOf(customWorkoutsLinkCount + 1)).setValue(customLink)
                 .addOnSuccessListener(new OnSuccessListener<Void>() {
                     @Override
                     public void onSuccess(Void aVoid) {