diff --git a/src/checks.c b/src/checks.c
index 7269ac9..cfbb8a3 100644
--- a/src/checks.c
+++ b/src/checks.c
@@ -481,18 +481,10 @@
 
 		if (s->slowstart > 0) {
 			s->state |= SRV_WARMINGUP;
-			if (s->proxy->lbprm.algo & BE_LB_PROP_DYN) {
-				/* For dynamic algorithms, start at the first step of the weight,
-				 * without multiplying by BE_WEIGHT_SCALE.
-				 */
-				s->eweight = s->uweight;
-				if (s->proxy->lbprm.update_server_eweight)
-					s->proxy->lbprm.update_server_eweight(s);
-			}
 			task_schedule(s->warmup, tick_add(now_ms, MS_TO_TICKS(MAX(1000, s->slowstart / 20))));
 		}
-		if (s->proxy->lbprm.set_server_status_up)
-			s->proxy->lbprm.set_server_status_up(s);
+
+		server_recalc_eweight(s);
 
 		/* If the server is set with "on-marked-up shutdown-backup-sessions",
 		 * and it's not a backup server and its effective weight is > 0,
@@ -1273,23 +1265,7 @@
 	if ((s->state & (SRV_RUNNING|SRV_WARMINGUP|SRV_MAINTAIN)) != (SRV_RUNNING|SRV_WARMINGUP))
 		return t;
 
-	if (now.tv_sec < s->last_change || now.tv_sec >= s->last_change + s->slowstart) {
-		/* go to full throttle if the slowstart interval is reached */
-		s->state &= ~SRV_WARMINGUP;
-		if (s->proxy->lbprm.algo & BE_LB_PROP_DYN)
-			s->eweight = s->uweight * BE_WEIGHT_SCALE;
-		if (s->proxy->lbprm.update_server_eweight)
-			s->proxy->lbprm.update_server_eweight(s);
-	}
-	else if (s->proxy->lbprm.algo & BE_LB_PROP_DYN) {
-		/* for dynamic algorithms, let's slowly update the weight */
-		s->eweight = (BE_WEIGHT_SCALE * (now.tv_sec - s->last_change) +
-			      s->slowstart - 1) / s->slowstart;
-		s->eweight *= s->uweight;
-		if (s->proxy->lbprm.update_server_eweight)
-			s->proxy->lbprm.update_server_eweight(s);
-	}
-	/* Note that static algorithms are already running at full throttle */
+	server_recalc_eweight(s);
 
 	/* probably that we can refill this server with a bit more connections */
 	check_for_pending(s);
diff --git a/src/lb_chash.c b/src/lb_chash.c
index d65de74..41e06c7 100644
--- a/src/lb_chash.c
+++ b/src/lb_chash.c
@@ -382,7 +382,8 @@
 
 	p->lbprm.wdiv = BE_WEIGHT_SCALE;
 	for (srv = p->srv; srv; srv = srv->next) {
-		srv->prev_eweight = srv->eweight = srv->uweight * BE_WEIGHT_SCALE;
+		srv->eweight = (srv->uweight * p->lbprm.wdiv + p->lbprm.wmult - 1) / p->lbprm.wmult;
+		srv->prev_eweight = srv->eweight;
 		srv->prev_state = srv->state;
 	}
 
diff --git a/src/lb_fas.c b/src/lb_fas.c
index daff666..b4cfc79 100644
--- a/src/lb_fas.c
+++ b/src/lb_fas.c
@@ -252,7 +252,8 @@
 
 	p->lbprm.wdiv = BE_WEIGHT_SCALE;
 	for (srv = p->srv; srv; srv = srv->next) {
-		srv->prev_eweight = srv->eweight = srv->uweight * BE_WEIGHT_SCALE;
+		srv->eweight = (srv->uweight * p->lbprm.wdiv + p->lbprm.wmult - 1) / p->lbprm.wmult;
+		srv->prev_eweight = srv->eweight;
 		srv->prev_state = srv->state;
 	}
 
diff --git a/src/lb_fwlc.c b/src/lb_fwlc.c
index c2fcb4e..de1896e 100644
--- a/src/lb_fwlc.c
+++ b/src/lb_fwlc.c
@@ -244,7 +244,8 @@
 
 	p->lbprm.wdiv = BE_WEIGHT_SCALE;
 	for (srv = p->srv; srv; srv = srv->next) {
-		srv->prev_eweight = srv->eweight = srv->uweight * BE_WEIGHT_SCALE;
+		srv->eweight = (srv->uweight * p->lbprm.wdiv + p->lbprm.wmult - 1) / p->lbprm.wmult;
+		srv->prev_eweight = srv->eweight;
 		srv->prev_state = srv->state;
 	}
 
diff --git a/src/lb_fwrr.c b/src/lb_fwrr.c
index 7f5c8a9..7cf0cc7 100644
--- a/src/lb_fwrr.c
+++ b/src/lb_fwrr.c
@@ -272,7 +272,8 @@
 
 	p->lbprm.wdiv = BE_WEIGHT_SCALE;
 	for (srv = p->srv; srv; srv = srv->next) {
-		srv->prev_eweight = srv->eweight = srv->uweight * BE_WEIGHT_SCALE;
+		srv->eweight = (srv->uweight * p->lbprm.wdiv + p->lbprm.wmult - 1) / p->lbprm.wmult;
+		srv->prev_eweight = srv->eweight;
 		srv->prev_state = srv->state;
 	}
 
diff --git a/src/lb_map.c b/src/lb_map.c
index 9858249..7ecd003 100644
--- a/src/lb_map.c
+++ b/src/lb_map.c
@@ -180,7 +180,7 @@
 
 	act = bck = 0;
 	for (srv = p->srv; srv; srv = srv->next) {
-		srv->eweight = srv->uweight / pgcd;
+		srv->eweight = (srv->uweight * p->lbprm.wdiv + p->lbprm.wmult - 1) / p->lbprm.wmult;
 		srv->prev_eweight = srv->eweight;
 		srv->prev_state = srv->state;
 		if (srv->state & SRV_BACKUP)
diff --git a/src/proto_http.c b/src/proto_http.c
index b5e912e..5ad865b 100644
--- a/src/proto_http.c
+++ b/src/proto_http.c
@@ -2932,28 +2932,8 @@
 						else
 							sv->uweight = 0;
 
-						if (px->lbprm.algo & BE_LB_PROP_DYN) {
-							/* we must take care of not pushing the server to full throttle during slow starts */
-							if ((sv->state & SRV_WARMINGUP) && (px->lbprm.algo & BE_LB_PROP_DYN))
-								sv->eweight = (BE_WEIGHT_SCALE * (now.tv_sec - sv->last_change) + sv->slowstart - 1) / sv->slowstart;
-							else
-								sv->eweight = BE_WEIGHT_SCALE;
-							sv->eweight *= sv->uweight;
-						} else {
-							sv->eweight = sv->uweight;
-						}
+						server_recalc_eweight(sv);
 
-						/* static LB algorithms are a bit harder to update */
-						if (px->lbprm.update_server_eweight)
-							px->lbprm.update_server_eweight(sv);
-						else if (sv->eweight) {
-							if (px->lbprm.set_server_status_up)
-								px->lbprm.set_server_status_up(sv);
-						}
-						else {
-							if (px->lbprm.set_server_status_down)
-								px->lbprm.set_server_status_down(sv);
-						}
 						altered_servers++;
 						total_servers++;
 						break;
diff --git a/src/server.c b/src/server.c
index dd6e9e6..efba257 100644
--- a/src/server.c
+++ b/src/server.c
@@ -158,6 +158,43 @@
 	srv_register_keywords(&srv_kws);
 }
 
+/* Recomputes the server's eweight based on its state, uweight, the current time,
+ * and the proxy's algorihtm. To be used after updating sv->uweight. The warmup
+ * state is automatically disabled if the time is elapsed.
+ */
+void server_recalc_eweight(struct server *sv)
+{
+	struct proxy *px = sv->proxy;
+	unsigned w;
+
+	if (now.tv_sec < sv->last_change || now.tv_sec >= sv->last_change + sv->slowstart) {
+		/* go to full throttle if the slowstart interval is reached */
+		sv->state &= ~SRV_WARMINGUP;
+	}
+
+	/* We must take care of not pushing the server to full throttle during slow starts.
+	 * It must also start immediately, at least at the minimal step when leaving maintenance.
+	 */
+	if ((sv->state & SRV_WARMINGUP) && (px->lbprm.algo & BE_LB_PROP_DYN))
+		w = (px->lbprm.wdiv * (now.tv_sec - sv->last_change) + sv->slowstart) / sv->slowstart;
+	else
+		w = px->lbprm.wdiv;
+
+	sv->eweight = (sv->uweight * w + px->lbprm.wmult - 1) / px->lbprm.wmult;
+
+	/* now propagate the status change to any LB algorithms */
+	if (px->lbprm.update_server_eweight)
+		px->lbprm.update_server_eweight(sv);
+	else if (sv->eweight) {
+		if (px->lbprm.set_server_status_up)
+			px->lbprm.set_server_status_up(sv);
+	}
+	else {
+		if (px->lbprm.set_server_status_down)
+			px->lbprm.set_server_status_down(sv);
+	}
+}
+
 /*
  * Parses weight_str and configures sv accordingly.
  * Returns NULL on success, error message string otherwise.
@@ -199,29 +236,7 @@
 		return "Backend is using a static LB algorithm and only accepts weights '0%' and '100%'.\n";
 
 	sv->uweight = w;
-
-	if (px->lbprm.algo & BE_LB_PROP_DYN) {
-	/* we must take care of not pushing the server to full throttle during slow starts */
-		if ((sv->state & SRV_WARMINGUP))
-			sv->eweight = (BE_WEIGHT_SCALE * (now.tv_sec - sv->last_change) + sv->slowstart - 1) / sv->slowstart;
-		else
-			sv->eweight = BE_WEIGHT_SCALE;
-		sv->eweight *= sv->uweight;
-	} else {
-		sv->eweight = sv->uweight;
-	}
-
-	/* static LB algorithms are a bit harder to update */
-	if (px->lbprm.update_server_eweight)
-		px->lbprm.update_server_eweight(sv);
-	else if (sv->eweight) {
-		if (px->lbprm.set_server_status_up)
-			px->lbprm.set_server_status_up(sv);
-	}
-	else {
-		if (px->lbprm.set_server_status_down)
-			px->lbprm.set_server_status_down(sv);
-	}
+	server_recalc_eweight(sv);
 
 	return NULL;
 }
