diff --git a/src/field.c b/src/field.c
index 2a757d825a49aec90c8fed4c2318c9fcce8b3325..1e0d717b5f6b77288ccca0286eba3045049990e1 100644
--- a/src/field.c
+++ b/src/field.c
@@ -80,33 +80,26 @@ bool line_reach_charge(vec2 pos, charge_t * charges, double num_charges, double
 // Returns false if pos0 is not a valid position
 // (for example if pos0 is too close to a charge).
 static bool draw_field_line(struct gfx_context_t *ctxt, charge_t *charges, int num_charges, double dx, vec2 pos0, double x0, double x1, double y0, double y1) {
-	vec2 pos = vec2_create(pos0.x, pos0.y);
-	vec2 pos_next;
+	vec2 pos_positive = vec2_create(pos0.x, pos0.y);
+	vec2 pos_negative = vec2_create(pos0.x, pos0.y);
+	vec2 pos_next_positive;
+	vec2 pos_next_negative;
 	bool stop = false;
+	// * 5 à supprimer lorsque le code est optimisé
 	double delta = compute_delta_x() * 5;
 	int max_for = 50; 
 	for (int i = 0; i < max_for && !stop; i++)
 	{
-		stop = line_reach_charge(pos, charges, num_charges, dx);
-
-		if(!stop){
-			stop = draw_field_line_point(ctxt, charges, num_charges, x0, x1, y0, y1, pos, &pos_next, -delta);
-			pos = pos_next;
-		}
-	}
-	pos = vec2_create(pos0.x, pos0.y);
-	stop = false;
-	for (int i = 0; i < max_for && !stop; i++)
-	{
-		stop = line_reach_charge(pos, charges, num_charges, dx);
-
+		stop = line_reach_charge(pos_positive, charges, num_charges, dx) || line_reach_charge(pos_negative, charges, num_charges, dx);
 		if(!stop){
-			stop = draw_field_line_point(ctxt, charges, num_charges, x0, x1, y0, y1, pos, &pos_next, delta);
-			pos = pos_next;
+			stop = draw_field_line_point(ctxt, charges, num_charges, x0, x1, y0, y1, pos_positive, &pos_next_positive, delta) ||
+					draw_field_line_point(ctxt, charges, num_charges, x0, x1, y0, y1, pos_negative, &pos_next_negative, -delta);
+			pos_positive = pos_next_positive;
+			pos_negative = pos_next_negative;
 		}
 	}
 
-	return EXIT_SUCCESS;
+	return !stop;
 }
 
 // Draw all the charges