diff --git a/src/algo.c b/src/algo.c
index b58f39fb6766ca096a7aae0b34c022ebaa6bb68e..82efb264b35f9fe6cf65bec81229bbc786933da1 100644
--- a/src/algo.c
+++ b/src/algo.c
@@ -161,7 +161,7 @@ int event_preceed(const void * a, const void * b) {
 		{
 			//typej = typek = arrivee et pj = pk et j < k
 			if(get_event_processing_time(Akey) == get_event_processing_time(Bkey) 
-			&& get_event_task_id(Akey) < get_event_task_id(Bkey)){
+			&& strcmp(get_event_task_id(Akey), get_event_task_id(Bkey)) < 0){
 				return 1;
 			}
 			//typej = typek = arrivee et pj < pk
@@ -266,7 +266,7 @@ int ready_task_preceed(const void * a, const void * b) {
 	struct ready_task_key_t* tb = b;
 	int res = get_ready_task_remaining_processing_time(b) - get_ready_task_remaining_processing_time(a);
 	if (res == 0)
-		return get_ready_task_id(a) < get_ready_task_id(b);
+		return strcmp(get_ready_task_id(ta), get_ready_task_id(tb)) < 0;
 	else
 		return res > 0;
 }
@@ -298,11 +298,10 @@ struct schedule_t * create_schedule(Instance I, int num_m, int preemption, int b
 
 	while(get_tree_size(event_tree) != 0){
 		//Extraire de E l’ ́evenement e correspondant a l’instant t le plus petit
-		//Partie fausse, a faire
-		struct tree_node_t* event_node = get_node(event_tree); // ?
-		struct event_key_t* event_key = (struct event_key_t *) get_tree_node_key(event_node);
-		struct task_t* task = tree_remove(event_tree, event_key); //recuperer la data et la cast en tache
-		//fin partie fausse
+		//a verfieier ?
+		struct tree_node_t* event_node = tree_min(get_root(event_tree));  // recuperation du node a l instant t le plus petit
+		struct event_key_t* event_key = (struct event_key_t*) get_tree_node_key(event_node);
+		struct task_t* task = (struct task_t*) get_tree_node_data(event_node); //recuperer la data et la cast en tache
 		
 		// Si e concerne la libération d'une tache Tj
 		if (get_event_type(event_key) == EVT_LIBERATION) {
@@ -326,8 +325,9 @@ struct schedule_t * create_schedule(Instance I, int num_m, int preemption, int b
 
 			if(get_tree_size(ready_tasks) != 0){ ////si la file d’attente Q n’est pas vide
 				//Extraire de Q la tache Tk avec la duree la plus courte (regle SPT)
-				struct event_key_t* shortest_task_key = NULL;
-                struct task_t* shortest_task = NULL;
+				struct tree_node_t* shortest_node = tree_min(get_root(ready_tasks)); //pareil qu'en haut, a verifier
+				struct ready_task_key_t* shortest_task_key = (struct ready_task_key_t*) get_tree_node_key(shortest_node);
+                struct task_t* shortest_task = (struct task_t*) get_tree_node_data(shortest_node);
 
 				//Affecter Tk a Mi en t dans S
 				int machine = find_empty_machine(ordonnancement, get_event_time(event_key));
@@ -337,15 +337,19 @@ struct schedule_t * create_schedule(Instance I, int num_m, int preemption, int b
 				struct event_key_t* end_key = new_event_key(EVT_FIN_EXEC, get_event_time(event_key) + get_event_processing_time(event_key), get_event_processing_time(event_key), get_task_id(task), machine);
 				tree_insert(event_tree, end_key, shortest_task);
 
-			}
+				if(get_tree_size(ready_tasks) != 0){
+                	tree_remove(ready_tasks, shortest_task_key);
+				}
+            }
+
 
 		}
-		//delete_event_key(event_key); //pas sur de ça
+		tree_remove(event_tree, event_key);
 		
-
 	}
 
-	//delete_tree(event_tree, );
-	//delete_tree(ready_tasks, );
+	//fin de la fonction, libreation mem des arbres
+	delete_tree(event_tree, delete_event_key, NULL);
+	delete_tree(ready_tasks, delete_ready_task_key, NULL);
 	return ordonnancement;
 }
diff --git a/src/instance.c b/src/instance.c
index 24d71ca377eb3df9da2276728d8ae8271c1b8947..1d9126be5d01bd94e72bc0cb91ee4f5ee4307cda 100644
--- a/src/instance.c
+++ b/src/instance.c
@@ -53,7 +53,6 @@ void delete_task(void * task) {
  ********************************************************************/
 
 Instance read_instance(const char * filename) {
-	// A FAIRE
 	FILE *fp = fopen(filename, "r");
 	if(fp == NULL){
 		printf("Erreur lors de la lecture du fichier %s\n", filename);
@@ -62,10 +61,9 @@ Instance read_instance(const char * filename) {
 
 	Instance I = new_list(view_task, delete_task);
 
-	// fscanf("%s %d %d ", &id, &proctime, &reltime);
 	char tempId[256] = {0}; 
 	unsigned long tempProc, tempRel;
-	while(fscanf(fp, "%255s %d %d ", &tempId, &tempProc, &tempRel) == 3)
+	while(fscanf(fp, "%255s %lu %lu ", &tempId, &tempProc, &tempRel) == 3)
 	{
 		char* str = malloc(strlen(tempId) + sizeof(char));
 		strcpy(str, tempId);