--- bin/varnishd/cache_backend_poll.c.O	2009-06-18 20:24:45.000000000 -0700
+++ bin/varnishd/cache_backend_poll.c	2009-06-18 21:17:48.000000000 -0700
@@ -272,10 +272,18 @@
 	if (vt->probe.threshold == 0)
 		vt->probe.threshold = 3;
 
-	printf("Probe(\"%s\", %g, %g)\n",
+	/* Initial health makes us happy.
+	 * But only tolerate one probe failure.
+	 */
+	if ( vt->backend->healthy )
+	    vt->happy = ( (uint64_t)pow(2, vt->probe.threshold) - 1 )
+	                << ( vt->probe.window - vt->probe.threshold );
+
+	printf("Probe(\"%s\", %g, %g%s)\n",
 	    vt->req,
 	    vt->probe.timeout,
-	    vt->probe.interval);
+	    vt->probe.interval,
+	    vt->backend->healthy ? ", initially healthy" : "");
 
 	/*lint -e{525} indent */
 	while (!vt->stop) {
--- bin/varnishd/heritage.h.O	2009-04-01 06:35:15.000000000 -0700
+++ bin/varnishd/heritage.h	2009-06-18 19:30:34.000000000 -0700
@@ -163,6 +163,9 @@
 	double			first_byte_timeout;
 	double	 		between_bytes_timeout;
 
+	/* Initial health state */
+	unsigned 		initial_health;
+
 	/* How long to linger on sessions */
 	unsigned		session_linger;
 
--- bin/varnishd/cache_backend_cfg.c.O	2009-04-01 06:35:15.000000000 -0700
+++ bin/varnishd/cache_backend_cfg.c	2009-06-18 20:28:52.000000000 -0700
@@ -224,6 +224,7 @@
 	b->connect_timeout = vb->connect_timeout;
 	b->first_byte_timeout = vb->first_byte_timeout;
 	b->between_bytes_timeout = vb->between_bytes_timeout;
+	b->healthy = vb->initial_health;
 	b->max_conn = vb->max_connections;
 
 	/*
--- lib/libvcl/vcc_backend.c.O	2009-04-01 06:35:14.000000000 -0700
+++ lib/libvcl/vcc_backend.c	2009-06-18 19:47:31.000000000 -0700
@@ -475,6 +475,7 @@
 	    "?connect_timeout",
 	    "?first_byte_timeout",
 	    "?between_bytes_timeout",
+	    "?initial_health",
 	    "?probe",
 	    "?max_connections",
 	    NULL);
@@ -553,6 +554,13 @@
 			Fb(tl, 0, ",\n");
 			ExpectErr(tl, ';');
 			vcc_NextToken(tl);
+		} else if (vcc_IdIs(t_field, "initial_health")) {
+			u = vcc_UintVal(tl);
+			vcc_NextToken(tl);
+			ERRCHK(tl);
+			ExpectErr(tl, ';');
+			vcc_NextToken(tl);
+			Fb(tl, 0, "\t.initial_health = %u,\n", u);
 		} else if (vcc_IdIs(t_field, "max_connections")) {
 			u = vcc_UintVal(tl);
 			vcc_NextToken(tl);
--- include/vrt.h.O	2009-04-01 06:35:14.000000000 -0700
+++ include/vrt.h	2009-06-18 19:30:32.000000000 -0700
@@ -71,6 +71,7 @@
 	double				connect_timeout;
 	double				first_byte_timeout;
 	double				between_bytes_timeout;
+	unsigned			initial_health;
 	unsigned			max_connections;
 	struct vrt_backend_probe	probe;
 };
